カテゴリー
未分類

12/15(木) 進捗報告

今週やったこと

今週は評価実験用に、硬貨の画像の撮影を行い、総数200枚→400枚になりました。
他は、α版の作成に時間を取られていたので、大きな進捗はありません。

来週やること

  • α版の修正
  • 評価実験用の画像撮影
  • 進捗発表の資料作成
カテゴリー
未分類

11/24(木) 進捗報告

今週やったこと

  • 評価実験計画
  1. 実験内容
    1. 現金・硬貨の各データセットをYOLOv7で再学習、テスト画像を入力し、推論させる
    2. 紙幣は変形に3つのレベル(1:折れなし, 2:二つ折り, 3:三つ折り)を設定し、各レベルごとにテスト画像を分けて推論を行う
  2. 分量・人数
    1. 分量
    2. 画像数 … 紙幣800枚(学習700枚,テスト100枚), 硬貨900(学習800枚,テスト100枚)
    3. クラス数
      1. 紙幣データセット3クラス(1000円,5000円,10000円)
      1. 硬貨データセット6クラス(1円,5円,10円,50円,100円,500円)
  3. 人数 … 1人
  4. 実験スケジュール
    1. 11月下旬〜12月下旬(限界は12月いっぱいまで)
  5. 評価項目・評価指標
    1. 混同行列
    2. 正解率
    3. 再現率
    4. 適合率
    5. IoU(領域が正しく検出されているか)
  6. 比較対象
    1. データセットの構成(例えば切り抜き画像を使用するなど)を少しずつ変更して精度を比較する。
      1. 元の画像のみ
      2. 元画像+切り抜き画像
    2. 単一モデルで全て検出する場合と二つのモデルで検出する場合の精度・速度を比較する。

  • 先週の硬貨の検出精度低下原因の調査

先週の結果から、硬貨のデータセットで一部アノテーションの座標が本来の場合とズレている画像や、領域が正しく囲えていない画像があったため、これらを修正しました。

  • 丸い模様への対策

先週の進捗にあった丸い模様の誤検出への対策は、丸い模様を背景にした画像をデータセットに入れて再学習を行なってみようと考えています。

来週やること

  • 学習画像の追加
  • 丸い模様を背景にした硬貨の画像の撮影
  • データセット構成の考案
カテゴリー
未分類

11/17(木) 進捗報告

今週やったこと

  • 学習用画像の撮影(紙幣)

 紙幣と似ている色の文字入りの紙袋を背景とし、平面や折った状態で撮影を行い、各画像に寒色・暖色のフィルタをかけて画像数を3倍にしました。(合計700枚程度)

  • YOLOv7再学習

 YOLOv7で硬貨と紙幣の各モデルをGoogle Colab ProのGPU環境で学習しました。

  • 学習回数 … 200
  • バッチサイズ … 16
  • 学習データセット … 硬貨:500枚, 紙幣:700枚
橙:硬貨, 青:紙幣

 硬貨のobj_lossが途中から大きくなっているので、過学習の可能性があり、再度条件を変更しつつ撮影を行う必要がありそうです。
紙幣はいい感じに収束していると思われます。

  • 紙幣と硬貨のモデル別物体検出の検証

 まず紙幣のモデルで物体検出を行った後、硬貨のモデルで検出を行ないました。

  • 紙幣のみ

 中間発表の課題であった、縦・斜めの紙幣の検出ができるようになりました。背景や折りに関係なく正解率もかなり高いので、精度は充分だと思います。

  • 紙幣と硬貨

現在までの課題であった、紙幣と硬貨の同時検出ができました。

 問題点として、紙幣などの円の形を硬貨として検出をしてしまう場合があり、これの対策として、学習データに紙幣を背景とした画像を用いることが有効だと考えました。

  • おまけ

Google Colab Proにアップグレードしたので、学習時間が30時間から7時間に短縮された。また、Drive内から実行すると一回の学習で10GBほど持っていかれる。
物体検出にかかる時間は平均25ms。

来週やること

  • 評価実験の計画を立てる
  • 学習画像の追加
カテゴリー
未分類

11/10(木) 進捗報告

今週やったこと

照明条件を変更して硬貨の撮影を行いました。

  • 背景色 : 黒(布)
  • 照明 : 通常,寒色,暖色
  • (5円玉, 10円玉など、酸化によって色の違いが大きいものは2倍の撮影数とする)
  • 合計192枚

 また、これまでに使用していた(上で撮影した画像は含まない)データセットでYOLOv7の再学習を行いました。

  • モデル : yolov7x.pt(2番目に軽量なモデル)
  • 学習回数 : 200回
  • バッチサイズ : 16

5円玉と10円玉以外の正解率がかなり高いので、今後はYOLOv7を採用しようと考えています。

今後はAlbumentationなどでのデータ拡張も考えていますが、YOLOv7で実装できない場合は、引き続きYOLOv5を使用します。

来週やること

  • 学習画像の追加
  • YOLOv7で再学習
  • 紙幣と硬貨の平行検出を試す
カテゴリー
未分類

10/20(木) 進捗報告

今週やったこと

https://kikaben.com/object-detection-non-maximum-suppression/

上記サイトを参考にNMSのを確認していました。

IoUについては理解できましたが、「multi_label」という変数についてはYOLOv5でのオリジナルの仕様っぽく、まだイマイチ理解できていないので、もう少し調べる必要がありそうです。

また、IoUの閾値や「multi-label」をTrueにしての学習に関しては、既存研究の資料作成で時間をかけてしまったため、まだできていません。

来週までにやること

  • 中間発表の資料作成
カテゴリー
未分類

10/13(木) 進捗報告

やったこと

 中間発表での課題となっていた、大きい物体に小さい物体が完全に重なっている場合の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の物体検出の手順
    1. S×Sのgrid cellに分割
    2. Bounding Boxの推定
    3. 物体の種類の推定
    4. 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を変更した場合に結果がどう変わるのかを検証します。

次回までにやること

  • IoUを調整して硬貨の物体検出検証
カテゴリー
未分類

7/20(水) 進捗報告

今週やったこと

YOLOの精度向上について調べていて出てきた、以下の記事を読んでいました。

【albumentations】データ拡張による精度向上を検証する – Qiita

記事内では、すでに用意されているデータセットの画像に
・左右反転
・回転
・切り抜き
・モザイク
の処理を施した画像を追加し、そのデータセットを学習させて精度がどのように変化するかという検証を行なっていました。

結果から言えば、反転・回転を施した画像のみを追加したデータセットが一番精度が高かったようです。

この記事では単体クラス(小麦のデータセット)に対してデータ拡張を行なっているため、多クラスの場合どうなるかは不明です。

各データセットの画像枚数
学習結果

自分の研究ではなるべく多くの画像を用意するようにはしていますが、画像数が足りない場合は、こういったデータの増やし方も検討しようと考えています。

来週やること

  • 学習画像の撮影
  • アノテーションデータの作成
カテゴリー
未分類

7/13(水) 進捗報告

今週やったこと

 YOLOv5を使用している研究として、以下の論文を読んでどのような研究がされているのかを確認していました。


YOLO5Face: Why Reinventing a Face Detector(2022.1.27)
Evaluation of YOLO Models with Sliced Inference for Small Object Detection(2022.3.9)

後者の研究では、YOLOv5とSlicing Aided Hyper Inference (SAHI)を組み合わせて推論を行なっていました。(SAHIは小さい物体を検出するのに強いらしい)
学習時には元の画像を分割し、分割した画像をそれぞれ学習させる手法を取っていました。

やはり精度を高めるために複数の物体検出手法を組み合わせている研究が多いようなので、自分の研究でも精度を確認しつつ、場合によっては検討すべきと考えています。

来週やること

  • 学習画像の撮影
  • YOLO研究の論文を読む
カテゴリー
未分類

7/6(水) 進捗報告

今週やったこと

前回のエラーがどうしても直らず、アノテーションデータを再作成しても画像を変えても解決できなかったので、YOLOv5側でdogの画像を学習させて、とりあえず精度と速度を比較することにしました。

<YOLOv5>

  • 画像数: train: 95枚, val: 28枚, test: 13枚
  • 学習クラス: ‘dog’
  • 学習回数: 200回
  • モデル: yolov5s.pt(最軽量モデル)
  • 学習環境: Google Colaboratory(GPU)
  • 学習時間: 約17分39秒
  • 推論時間(テスト用画像5枚): 約12秒

<SSD>

  • 画像数: 136枚
  • 学習クラス: ‘dog’
  • 学習回数: 200回
  • モデル: vgg16_reducedfc.pth
  • 学習環境: Google Colaboratory(GPU)
  • 学習時間: 約32分39秒
  • 推論時間(テスト用画像5枚): 約14秒
YOLOv5(yolov5s)
SSD
YOLOv5(yolov5s)
SSD
YOLOv5(yolov5s)
SSD
YOLOv5(yolov5s)
SSD
YOLOv5(yolov5s)
SSD

精度自体はSSDの方が良い数値を出しており、単体の検出精度は良いですが、複数検出はできていませんでした。
YOLOv5(yolov5s)はあまり良い数値は出ていませんが、複数検出がしっかりできていて、推論速度もSSDより高速でした。

また、YOLOv5の精度に関して、学習過程をグラフで確認すると60回前後で収束していると思われるので、過学習により精度が悪くなっているのではないかと考えています。

YOLOv5の学習過程

今回の結果から、これからYOLOv5(最軽量のyolov5sモデル)を使って物体検出をやっていくことに決定しました。

来週やること

  • YOLO関連の論文を読む
  • 精度向上方法を探す
カテゴリー
未分類

6/29(水) 進捗報告

今週やったこと

下記サイトを参考にPytorchでSSDの転移学習を試みていましたが、途中でエラーが出てうまく学習まで出来ませんでした。

https://hituji-ws.com/code/python/python-od2/

エラーの原因はimgにうまく画像を取得できていないことだと思われるのですが、早急にエラーを解決してYOLOv5と精度や速度の比較し、来週までにどちらの物体検出技術を使うのかを決定したいです。

来週までにやること

  • エラー解決
  • SSDとYOLOv5との精度、速度比較