ターゲット検出アルゴリズムにおける正長方形と不規則四辺形 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 ブラウザを使用して再度ダウンロードしてみてください。

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

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

ブログ    
ブログ    
ブログ    

推薦する

百度と東軟教育が共同で「東軟百度人工知能アカデミー」を設立し、AIの「人材不足」を打破

インテリジェント時代が加速しており、人工知能の人材はAIの発展を支える第一のリソースとして特に重要で...

GPT-4 パラメータは 10 兆に達します!この表は、新しい言語モデルのパラメータが GPT-3 の 57 倍になると予測しています。

機械学習の場合、パラメータはアルゴリズムの鍵となります。パラメータは、履歴入力データであり、モデルト...

Google、ファイルサイズを35%削減できる新しいJPEGアルゴリズムをオープンソース化

海外メディアの報道によると、Googleはファイルサイズを約35%削減、あるいはファイルサイズを変え...

人工知能が将来経験する7つの段階

2030年までに、人工知能のおかげで世界のGDPは15.7兆ドル増加するでしょう。企業の 84% は...

...

...

...

肖像ラベルシステムの構築と運用実践

1. ポートレートラベルシステムQunarは、事業開発プロセスごとに独立したポートレートラベリングシ...

プログラマーという職業は10年以内にAIによって消滅するのでしょうか?

これは非常に興味深い質問です。プログラマーという職業はAIによって消滅することはないと思いますが、プ...

ディープラーニングの19の格闘技を見てください。絶滅危惧動物の保護にも役立ちます

絶滅危惧動物を研究する上で最大の課題の一つは、その数を正確に推定することであり、各個体を追跡して詳細...

GoogleはAIを活用して古い地図情報を更新

Google はブログ投稿で、同社の AI がさまざまな要素を分析して、こうした更新を行うべきかどう...

...

AI時代のネイティブ:3歳でパズルを作り、5歳でプログラミングを学ぶ

[[241540]] 2018年世界ロボットコンテストで、子どもたちがロボットのプログラミングと制御...

AIが顧客体験を変革する10の方法

今日、消費者はオンライン小売業者に対して非常に高い期待を抱いています。多くの場合、顧客のショッピング...

グラフィカルな説明 | Linux メモリリサイクル LRU アルゴリズム

[[421791]]メモリは、オペレーティング システムにとって非常に重要なリソースです。オペレーテ...