ターゲット検出アルゴリズムにおける正長方形と不規則四辺形 IOU の Python 実装

ターゲット検出アルゴリズムにおける正長方形と不規則四辺形 IOU の Python 実装

交差対結合 (IoU) は、ターゲット検出で使用される概念です。ターゲット検出アルゴリズムをテストする場合、生成された予測ボックス (候補境界) とマークされたボックス (グラウンド トゥルース境界) の重複率、つまり交差と結合の比率が重要な指標となります。理想的な状況は完全な重なり、つまり比率が 1 です。

通常、ターゲット検出と呼ぶボックスは、通常の長方形のボックスであり、IOU の計算も非常に簡単です。一般的に、次の 2 つの方法があります。

  • 重なり合う長方形の幅は、2 つの長方形の幅の合計から結合された長方形の幅を引いた値で、重なり合う長方形の高さに等しくなります。
  • 右下隅の最小値から左上隅の最大値を引くと、重なり合う四角形の幅となり、高さと同じになります。

上記の正四角形(長方形)のIOU計算方法1のPython実装

  1. def calculate_regular_iou(rec1, rec2):
  2. 「」 「
  3. コンピューティングIoU
  4. :param rec1: (y0, x0, y1, x1)は、
  5. (、下、)
  6. :パラメータrec2: (y0, x0, y1, x1)
  7. :戻り値: IoUScala 値
  8. 「」 「
  9.  
  10. S_rec1 = (rec1[2] - rec1[0]) * (rec1[3] - rec1[1])
  11. S_rec2 = (rec2[2] - rec2[0]) * (rec2[3] - rec2[1])
  12.  
  13. 合計面積 = S_rec1 + S_rec2
  14. 左の行 =最大(rec1[1], rec2[1])
  15. 右の行 =最小(rec1[3], rec2[3])
  16. トップライン =最大(rec1[0], rec2[0])
  17. ボトムライン =最小(rec1[2], rec2[2])
  18. left_line >= right_lineまたはtop_line >= bottom_line の場合:
  19. 0を返す
  20. それ以外
  21. 交差= (右線 - 左線) * (下線 - 上線)
  22. 戻り値(交差/ (sum_area -交差)) * 1.0
  23.      
  24. __name__ == '__main__'の場合:
  25. # (、下、)
  26. 矩形1 = [551, 26, 657, 45]
  27. 矩形2 = [552, 27, 672, 46]
  28. iou = calculate_regular_iou(rect1, rect2)

上記の正四角形(長方形)のIOU計算方法2のPython実装

  1. def compute_regular_iou_other(rec1, rec2):
  2. 「」 「
  3. コンピューティングIoU
  4. :param rec1: (y0, x0, y1, x1)は、
  5. (、下、)
  6. :パラメータrec2: (y0, x0, y1, x1)
  7. :戻り値: IoUScala 値
  8. 「」 「
  9. エリア1 = (rec1[3] - rec1[1]) * (rec1[2] - rec1[0])
  10. エリア2 = (rec2[3] - rec2[1]) * (rec2[2] - rec2[0])
  11. =最大(rec1[1],rec2[1])
  12. =最小(rec1[3],rec2[3])
  13. =最大(rec1[0], rec2[0])
  14. 底 =最小(rec1[2], rec2[2])
  15. w =最大(0,-)
  16. h =最大(0, 下 -)
  17. w*h / (エリア2 + エリア1 - w*h)を返します
  18. __name__ == '__main__'の場合:
  19. # (、下、)
  20. 矩形1 = [551, 26, 657, 45]
  21. 矩形2 = [552, 27, 672, 46]
  22. iou = compute_regular_iou_other(rect1, rect2)

ただし、上記の 2 つの方法では、不規則な四辺形を計算することはできません。ここでは、Python の Shapely ライブラリを使用して実装します。Python 実装は次のとおりです。

  1. numpyをnpとしてインポートする
  2. インポート形状
  3. shapely.errorsからTopologicalError をインポートします
  4. shapely.geometryからPolygon、MultiPoint をインポートします
  5. def to_polygon(四辺形):
  6. 「」 「
  7. :param quadrilateral: 四辺形の 4 つの点の座標の 1 次元配列表現、[x,y,x,y....]
  8. :戻り値: 四辺形の 2D 配列、ポリゴン四辺形オブジェクト
  9. 「」 「
  10. # 四辺形の2次元配列表現
  11. 四辺形配列 = np.array(四辺形).reshape(4, 2)
  12. # ポリゴンオブジェクトは自動的に4つの点を計算します。最後の4つの点の順序は、左上、左下、右下、右上、左上です。
  13. quadrilateral_polygon = ポリゴン(quadrilateral_array).convex_hull
  14. quadrilateral_array、quadrilateral_polygonを返す
  15. def calculate_iou(実際の四辺形、予測四辺形):
  16. 「」 「
  17. :param actual_quadrilateral: 予測される四辺形の 4 つの点の座標の 1 次元配列表現、[x,y,x,y....]
  18. :param predict_quadrilateral: 四辺形の 4 つの点の座標の 1 次元配列表現 ([x,y,x,y....]) が必要です。
  19. 戻る
  20. 「」 「
  21. # 四辺形の 2D 配列を予測し、四辺形の Polygon オブジェクトを予測します
  22. 実際の四辺形配列、実際の四辺形ポリゴン = to_polygon(実際の四辺形)
  23. # 四辺形の 2D 配列、四辺形の Polygon オブジェクトが期待されます
  24. 予測四辺形配列、予測四辺形ポリゴン = to_polygon(予測四辺形)
  25. # 後で結合領域の計算を容易にするために、2つのボックス座標を8*2に結合します。
  26. union_poly = np.concatenate((実際の四辺形配列、予測四辺形配列))
  27. # 2 つの四辺形は交差しますか?
  28. inter_status = 実際の四辺形ポリゴン。交差します(予測四辺形ポリゴン)
  29. # 2つの四辺形が交差する場合は、iou計算を実行します
  30. インターステータスの場合:
  31. 試す:
  32. # 交差点エリア
  33. インターエリア = 実際の四辺形ポリゴン.インターセクション(予測四辺形ポリゴン).エリア
  34. # 和面積の計算方法1
  35. #union_area = poly1.area + poly2.area - inter_area
  36. # 和面積の計算方法2
  37. ユニオン領域 = MultiPoint(union_poly).凸包領域
  38. # 結合面積が 0 の場合、iou = 0
  39. union_area == 0 の場合:
  40. 借用書 = 0
  41. それ以外
  42. # 最初の計算は、2つの四角形を含む最小の多角形の交差部分/面積です
  43. iou = float (inter_area) / union_area
  44. # 2番目の方法: 交差/結合 (一般的な長方形のIOU計算方法)
  45. # iou = float (inter_area) /(poly1.area+poly2.area-inter_area)
  46. shapely.errors.TopologicalErrorを除く:
  47. print( 'shapely.errors.TopologicalError が発生しました。0 に設定されました' )
  48. 借用書 = 0
  49. それ以外
  50. 借用書 = 0
  51. 戻る
  52. __name__ == '__main__'の場合:
  53. 実際の四辺形 = [908, 215, 934, 312, 752, 355, 728, 252]
  54. 予測四辺形 = [923, 308, 758, 342, 741, 262, 907, 228]
  55. iou = calculate_iou(実際の四辺形、予測四辺形)
  56. 印刷(iou)

落とし穴

コードを実行するとWinError 126エラーが発生します

Python で import shapely を使用する場合はエラーは発生しませんが、from shapely.geometry import Polygon,MultiPoint を使用するとエラーが報告されます。エラーの詳細情報は次のとおりです。

エラーの主な原因は geos_c.dll にあります。オンラインで多くの記事を読んだところ、そのほとんどが、geos_c.dll ファイルが見つからないことがエラーの原因であると述べていました。オンラインでいくつかの geos_c.dll ファイルを見つけて、C:\Windows\System32 に配置しましたが、問題は解決されませんでした。

最終的な解決策: pip uninstall Shapely を使用して元の Shapely をアンインストールし、対応するバージョンの whl ファイルをダウンロードして、上記のように https://www.lfd.uci.edu/~gohlke/pythonlibs/#shapely からインストールします。この whl をインストールすると、問題を解決できます。

whl ファイル ダウンロード 404 エラー

https://www.lfd.uci.edu/~gohlke/pythonlibs/#shapely から指定されたバージョンの whl をダウンロードするときに、404 エラーが発生しました。次のように。

この時点で、問題を解決するには、Chrome ブラウザを使用して再度ダウンロードしてみてください。

<<:  機械学習と古典的なアルゴリズムの概念をわかりやすい言葉で説明しました。初心者必読

>>:  指紋、顔、虹彩: 適切な生体認証技術を選択するには?

ブログ    
ブログ    
ブログ    

推薦する

1日で13.5%も急落!オラクル株は2002年以来最大の下落

オラクルの株価は現地時間9月12日に13.5%急落し、20年以上で最大の下落を記録した。その理由は、...

...

ファーウェイの孫茂陸氏:今後5年間で10億ドルを投資し、スマートエンタープライズサービスを構築する

上海で開催されたHUAWEI CONNECT 2019で、ファーウェイはエンタープライズサービス開発...

ビッグデータと人工知能がオンラインゲームをどう変えるのか

2017 年に成熟したと言われる 2 つの技術的進歩があるとすれば、それは間違いなく仮想現実と人工知...

...

...

ガートナー、2022年の銀行・投資サービスにおける3つの注目のテクノロジートレンドを発表

ガートナーは、2022年の銀行および投資サービス業界における3つの注目の技術トレンドとして、生成型人...

人工知能企業が大規模なデータ漏洩事件に見舞われ、250万人以上のデータが流出

[[258473]]最近、セキュリティ分野に注力する国内の人工知能企業で大規模なデータ漏洩事件が発生...

データサイエンティストと開発者向けの新しいツールであるAmazon SageMakerが中国で利用可能になりました

【51CTO.comオリジナル記事】機械学習は誕生以来、多くの分野で応用されてきましたが、現時点では...

天才少年が自動運転の「自転車」を製作、ネットユーザー「テスラも見たら泣くだろう」

自転車が「自力で歩ける」ようになるのはいつでしょうか? [[404743]]自転車は劣駆動システムで...

新型コロナウイルスによりスマートシティがさらにスマート化

[[373550]]人工知能は、都市をよりスマートで効率的な仕事と生活の場へと変革する道を開きます。...

開発者向け機械学習プラットフォーム 18 選

[[255723]]機械学習プラットフォームは未来の波ではなく、今起こっていることです。開発者は、自...

機械学習エンジニアが知っておくべきアルゴリズムトップ10

機械学習/人工知能のサブフィールドがここ数年で人気が高まってきたことは間違いありません。ビッグデータ...

...

IDC: 高速サーバー市場は2023年上半期に31億ドルに達し、GPUサーバーが依然として主流となる

10月9日、IDCコンサルティングの公式WeChatアカウントによると、IDCは本日「中国半期加速コ...