Chapter 04

YOLOv5で転移学習

2lu3
2lu3
2022.03.13に更新

YOLOv5によるアライグマの検出

何ができるようになるか

  • 画像の中で、探したいものがどこにあるかを探せるようになる

YOLOv5とは

YOLOv5は、非常に有名な物体検出モデルの1つ。

詳細なモデルの構造(アーキテクチャ)は、複雑なためここでは説明を省きます。

物体検出とは

画像認識の種類の1つです。
今まで解説してきたのは、画像全体が何を表しているのかを判定する機械学習です。
物体検出とは、画像の中のどの位置に目的の物体が存在するかという座標を調べるというものです。

アライグマを選んだ理由

アライグマ「ラスカル」がかわいいからです。

という冗談はさておき、 roboflowという機械学習のデータセットを公開しているサイトの中から下の条件に当てはまるものがラスカルだったからです。

  • 学習がすぐに終わる程度にデータセットが小さい
    • 画像の枚数が少ない
    • クラスの数が少ない
  • やってて楽しいタスクであること
    • チェスの駒やUnoのカードのデータセットもあったが、興味がない
    • マスクをつけている人のデータセットもあったが、検出が想定どおりでなかった(後述)

転移学習とは

すでに学習させた重みを初期値として、再度学習をさせることです。
ランダムな重みを初期値をするのと比べて、より速く(そして大抵の場合より高い)パフォーマンスを叩き出すことができます。
あらかじめ学習させたときと、転移学習で学習させたとき、対象物が大きく違っていても問題ありません。
なぜなら、りんごを見つける物体検出モデルと、人を見つける物体検出モデルは、見つけたいものに由来する特徴量[1]が少し違うだけで、どちらも物体を探していることには変わりないため、一部の重みは変更する必要がないからです。
つまり、最適な重みと現在の重みの距離は、ランダムな初期値で始めたときは一般的には遠いのに対して、転移学習では近いということです。

マスクをつけている人のデータセットの問題点

roboflowのデータセットの中で、マスクをつけている人のデータセットがあったので、YOLOv5で学習させてみました。
テストデータに対して実行してみると、確かにマスクをしている顔の部分が線で囲われていて、検出が成功していることがわかります。
一見問題なく聞こえますが、実はマスクをしていない人の顔も検出していました。
そうです。このデータセットにはマスクをつけている人のデータしかないので、マスクを検出しているのではなく顔を検出していたのです。

参考記事

YOLOv5を使って物体検出する - Qiita
Google ColabでYOLOv5を使って物体検出してみた - Qiita
【物体検出】YOLOv5のオプションまとめ
物体検出の代表アルゴリズム YOLOシリーズを徹底解説!【AI論文解説】 | DeepSquare

脚注
  1. この用語の使い方は正確ではありません ↩︎