やったこと
中間発表での課題となっていた、大きい物体に小さい物体が完全に重なっている場合のYOLOv5の調査をしていました。
今回の研究では下の画像のように紙幣の上に硬貨が重なる状況が課題になると考えられています。
1万円札は検出されているが、5円玉が検出されていない
「ディープラーニングによる物体検知技術 YOLOv5を用いた図面要素抽出の研究」(2022.3, 神戸大学都市安全研究センター)
http://www.rcuss.kobe-u.ac.jp/publication/Year2022/pdfEach26/26_03.pdf
https://deepsquare.jp/2020/09/yolo/#outline__3_1_1
YOLO (You Only Look Once):ディープラーニングによる一般物体検出手法
https://blog.negativemind.com/2019/02/21/general-object-recognition-yolo/
- YOLOの物体検出の手順
- S×Sのgrid cellに分割
- Bounding Boxの推定
- 物体の種類の推定
- Bounding Boxとclass probability mapの結合
YOLOの構造や他の物体検出の構造を調査した結果、Bounding Box(矩形領域)の推定の際に、Non-Maximum Suppression(NMS)というアルゴリズムを適用しているため、重なっている硬貨が検出されないのではないかと推測しました。
- Non-Maximum Suppression(NMS)
物体検出モデルはたくさんの重なりあったBounding Boxを予測するが、これにNMSと呼ばれる後処理を加えることで確実性の高いBounding Boxのみを残すことができる。
後処理のイメージ
- IoU(Intersection over Union)
IoUとは、画像の重なりの割合を表す値である。
IoU値が大きいほど、画像が重なっており、IoU値が小さいほど、画像が重なっていない状態となる。
実際にNMSの閾値を調整すれば、完全な重なりも検出できるようになるかもしれないと考え、今回はNMS関数内の閾値を0.25から0.50に変更してもう一度硬貨のみを再学習させてみました。
- モデル : yolov5s.pt
- 学習用画像 : 210枚
- バッチサイズ : 16
- エポック : 100
結果として調整前と調整後では、想定とは逆に、完全な重なりだけでなく一部の重なりに対しても弱くなってしまいました。
後でコードを見返した結果、どうやら調整したのはスコアの閾値だったようで、そのため、逆に精度が悪くなってしまったと考えられます。
ここでiou_thresではなくconf_thresを変更してしまった。
次回までに上記のNMS関数の仕様を理解して、IoUを変更した場合に結果がどう変わるのかを検証します。
次回までにやること