茨城エンジニアのPython開発日記

茨城のITベンチャー企業ではたらく2年目エンジニア。Pythonで色々なものを作成中。

ドローン開発日記~第7回勉強会開催~

ブログから記事を見つけたい場合はこちら

ブログ地図(大) - 茨城エンジニアのPython開発日記

 

こんにちは、開発メンバーのKです。

 

私は最近、個人的なお勉強としてSemantic Segmentation系の論文を読むようにしています。しかし、画像認識自体が初心者なので、わからない言葉はひたすらググりながらです。さらに、英語はまだ得意ではないので、論文1本読むのに映画数本分の時間を要しています。。。

 

さて、今回は勉強会として、SSDの学習をさせるための画像を準備しました。

以下、目次です。

 

1 用意した画像

学習画像は学習において、とっても大切です。様々なパターンの画像を用意しないと、過学習の要因となってしまうでしょう。そのため、なるべく似たような画像にならないようにしました。

 

今回やりたいことは、「人の顔を検知する」です。そのため、人の顔写真を用意しました。具体的には3人いる開発メンバーの顔写真です。各々が慣れない自撮りをして、色々な角度で、色々な表情で、背景もなるべく異なるように撮りました。

(このままでは自撮りが特技になるかも...)

 

とりあえず、画像の枚数は一人当たり20~30枚ほど、合計で60枚だけ用意しました。後で、この画像を加工したものも使って、学習画像を増やそうと考えています。

 

用意した画像をまとめると以下の通りです。

  • 3人分の顔写真を用意(なるべく、角度、表情、背景が異なるように)
  • 画像数: 64枚(学習用59枚、評価用5枚)
  • 画像解像度: (2448x3264)、(1920x1080)、(1280x720)の3パターン
  • カラー: すべてRGB

 

2 アノテーション

使用したアノテーションツールはVoTTです。

github.com

 

このツールで人の顔に検知枠を作りました。開発メンバー3人のうち、1人の顔をpositiveとしてlabelをつけ、その他2人の顔はnegativeとしてなにもつけないようにしました。

 

また、データセットPascal VOCの形式で出力しました。

 

以下、簡易的ですが、アノテーション手順です。

※なお、以下では説明のために、いらすとやさんのお顔を使っています。

f:id:tottorisnow33:20200926163951p:plain

1.「接続」から新しい接続先を作る

f:id:tottorisnow33:20200926164112p:plain

2. 接続先の設定(ソースと出力先で2つ作る)

f:id:tottorisnow33:20200926164259p:plain

3. 新しいプロジェクトの作成

f:id:tottorisnow33:20200926164426p:plain

4. 新しいタグの追加

f:id:tottorisnow33:20200926164512p:plain

5. 顔を四角で囲み、タグ付け

f:id:tottorisnow33:20200926164601p:plain

6. エクスポートの設定

f:id:tottorisnow33:20200926164646p:plain

7. プロジェクトをエクスポート

f:id:tottorisnow33:20200926164723p:plain

8. 出力先にファイルが出力されればOK!

 

3 学習結果

学習の方法については、以下を参照してください

tottorisnow33.hatenablog.com

 

 

主な学習環境やパラメータは以下の通りです。

  • GPU: Nvidia Quadro P2000
  • モデル: SSD
  • Epoch: 500
  • Batch Size: 2
  • Optimizer: MomentumSGD
  • learning rate: 0.0001
  • learning rate decay: 0.1
  • learning rate decayのタイミング: 200、300、400

 

そして、学習の結果は、、、うまくいきませんでした。。。

四角の枠がまったくついてくれませんでした。。あらら。

うまくいかない原因は、おそらく用意した画像がすくなかったこと、positiveの数が少なかったことなどが考えられます。

また、パラメータもろくに考えていないのもいけないでしょう。

 

次回からは、ちゃんと検知できるように問題解決をしたいと思います!