スポンサーリンク

物体検出の学習でLossが下がらないときは

物体検出のLoss

SSDライクな物体検出のニューラルネットワークを独自に組んで、学習させたときにLossが下がらないという現象に遭遇したので、そのときの原因と解決方法を書いておきます。

SSDライクな物体検出で、人物検出を行おうとしていました。学習用データセットは、COCOとPASCAL VOCの2通りを試していました。しかし、学習させても一向にLossが下がらず、当然、推論させても、全く人を検出しませんでした。

Lossが下がらなかった原因

結局、原因は、COCOやPASCAL VOCには、すごく小さな人のアノテーションが入っていたことが原因だったようです。非常に遠い場所にいる人だったり、写真の中の人だったり、車の運転手だったり、ものすごく細かい人までアノテーションがされていました。しかし、画像の特徴を学習するには、そのようなアノテーション情報は、むしろ邪魔になるということがわかりました。

とりあえずの対策としては、小さなサイズのアノテーション情報は、学習に採用しないという方法を取りました。結果、ある程度Lossが下がるようになり、推論でも人物をある程度捉えられるようになりました。

そして、試しに、独自のアノテーションデータセット(数万枚くらい)を用意し、学習させたところ、きれいにLossが下がることを確認しました。やはり、データセットのアノテーションの質が影響していたようです。

結局データセットの質の問題

学習用データセットの質によって、学習がまともにできないことがあることがわかりました。ですが、世の中に公開されている物体検出はCOCOやPASCAL VOCで学習されたものが多いようです。そして、その公開されている物体検出は、まともに物体を検出します。なので、何か特別なやり方があるのかもしれませんが、少なくとも私は人物の物体検出でCOCOやPASCAL VOCを有効に活用できませんでした。(やり方知っている方いましたら、ぜひ教えてください。)

まとめ

今回の私の場合の物体検出でLossが下がらなかった原因は、データセットの質の問題でした。(その他にも、まだ問題はあるのかもしれませんが、とりあえず第一原因はデータセットのようです。)COCOやPASCAL VOCは、物体検出の学習に使われているデータセットだからと、安心して使っていたのですが、信用していた分、原因究明が遅れてしましました。やはり、学習の元になるデータセットは重要なんだと、あらためて認識することになりました。

タイトルとURLをコピーしました