ならば

音とかで遊んでいたログ

マジンラーニング

タイトルオチ。
前回使ったSSDで今度は学習させた。漫画ドラゴンボール魔人ブウの検出。

データ

ブウにはいくつかの形態がある。次の分類でやった。

  • 無邪気:太ってるやつ
  • 純粋悪:がりがりのやつ
  • 悪、純粋:マッチョのやつ

悪と純粋は形態が違うのだが、画像のアノテーションデータを作っているうちに後半面倒くさくなった画像数も少ないし、頭身はともかく体格は似通っているので一緒にした。
学習データ、テストデータともにLabelImgアノテーションデータを作成。LabelImgはPascalVOCかYOLOのフォーマットで出力できる。今回は前者を選択。

すべての画像についてアノテーションが終わったらssd_kerasリポジトリにあるget_data_from_XML.pyを参考にして、pklファイルを作る。これで準備完了。

学習

同じくssd_kearsにあるSSD_training.ipynbを参考にして実装。コードはこちら
画像の数が絶対的に足りていないので、前回使ったネットワークの重みをベースにfine tuningした。実写画像の学習済みデータに対してイラストのfine tuningがどこまで有用なのか知らないが他に選択肢がない。細かいチューニングも未実施。どういうハイパーパラメータが何に効くのか知らない。職人芸の世界という印象。

ノートPCのCPU Corei7-4800MQだけで60epoch、全部で約280枚の画像ファイル(8割を学習データ、残りをテストデータに利用)の学習に八時間くらいかかった。
損失関数のグラフ。過学習ですね。

結果

訓練/テストデータにない画像で検出させてみる。コード
ラベルはMujaki、JunsuiAku、Akuの三つ。


やはり無邪気以外は学習データの数が圧倒的に足りていないので検出精度が悪い。他の画像でも、特に純粋悪はほとんど検出できなかった。

何もわかっていない中で適当に動かしてみるのはやめて、以下の本で少しお勉強することにした。

PythonとKerasによるディープラーニング

PythonとKerasによるディープラーニング