『ネコ』と誤判定されたホワイトペキニーズの写真を『イヌ』と判定させるため、『YOLO』で簡易アノテーションしてみる①
2024.03.02追記
※何か思い違いをして、全体的に間違ったことを書いているので、またやり直します。
※スクレイピングで集めたよそのワンコを勝手に載せて良いのか分からないため、いったん画像なしで記事を書いてみます。
カバー画像は、本文中でも触れられている親戚宅の白ペキ・ラブちゃんです。
『YOLO』に『ネコ』と誤判定されたホワイトペキニーズ
ターム2・第1回の講義で、Pythonのライブラリ『icrawler』をGoogleColab上で動かし、『犬 フリー』という検索ワードで写真をネット上から集めた。
もう少し厳密な言葉を選ぶとどうなるのかと、私は犬種を指定して、『ホワイトペキニーズ かわいい』というワードでスクレイピングしてみた。
白ペキではない子もだいぶ混ざっていたが、どの子もたしかに可愛かった。
その次の回では、第1回で集めた画像を『YOLO』に認識させた。
すると、私が集めた白ペキちゃんたちのうち、一匹が『ネコ』と判定された。
ホワイトペキニーズの写真を『イヌ』だと学習させ、この子を『イヌ』にしたい
親戚が長年飼っていたので、私は白ペキを高い精度で見分けることができる。
『ネコ』と判定されたその子は、むしろ非常に白ペキらしい美形だったので、なんとか『イヌ』と認識させることはできないかと考えた。
そこで、『YOLO』がホワイトペキニーズを『イヌ』と判定する精度を上げるためのアノテーションの手順について、チャットGPTに聞いてみた。
素材
・Google Colaboratory
・YOLO ライブラリ
・icrawler ライブラリで集めたホワイトペキニーズの写真のうち、『Cat』と判定された1枚+ペキニーズらしい顔立ちだと私が思う個性豊かな6枚
工程
(1)私がホワイトペキニーズらしいと思う子の写真を、なるべく個性豊かな感じになるよう心がけながら、独断と偏見で6枚選ぶ。
(2)(1)を『イヌ』の教師データとするため、ラベルを作成する。
すべてのホワイトペキニーズはイヌであり、私がホワイトペキニーズを見分ける目利きも100%の精度だということにする。
(3)YOLOを学習させる。
(4)『ネコ』と誤判定された美形白ペキがどう判定されるか、検証する。
参考サイト
【YOLO】簡易アノテーションについて【物体検知】
(1)写真の選別
※詳細は割愛。
(2)教師データ作成
『ペキニーズの中心座標』『ペキニーズの幅と高さ』
なんだかカオスなワードが出てきたが、教師データの画像内でどの部分を『ペキニーズ』として認識すべきか、ペキニーズが居る位置を0~1の相対的
な数字で書くということのようだ。
001.jpg~006.jpgの6枚の画像に対応させ、001.txt~006.txtのラベルを作った。
画像6枚をペキニーズをど真ん中に置いた正方形にトリミングして、中心座標はすべて『0.5 0.5』、幅と高さを表す数値は目測でざっくり決めた。
とりあえず、同じフォルダに格納してある。
本物のペキニーズが映った画像の『信頼度』とは
教師データとして選んだ画像に本物が映っていることがあらかじめ分かっている場合、信頼度は1でよいのかと、ChatGPTに聞いた。
基本的にはそれでOKとのことだったので、信頼度はすべて『1.0』にすることにした。
(3)『YOLO』をトレーニングする…!?
素材の準備ができた。
ついに一番ワクワクするトレーニングだが、なんか嫌な予感がする。
また、GPUが飛ぶのではないか。
ノートパソコンも壊したら、スクーリングが今度こそ続行不能になるので、きちんと調べてからにする。
# YOLOv3のコードをクローンする
!git clone https://github.com/AlexeyAB/darknet.git
# darknetディレクトリに移動する
%cd darknet
# メイクファイルを編集し、GPUとOpenCVを有効にする
!sed -i 's/OPENCV=0/OPENCV=1/' Makefile
!sed -i 's/GPU=0/GPU=1/' Makefile
# メイクを実行する
!make
# ラベルファイルとデータセットをアップロードする
# ラベルファイルはYOLOの形式に従っている必要があります
# トレーニングを実行する
!./darknet detector train data/obj.data cfg/yolov3.cfg darknet53.conv.74
今回は、いったんここまでにする。
追って、続編を書く。