はじめに
夏休みの自由研究でObject Detectionを使用して、Deep写輪眼を作成しました。
と言っても、単純にObjecet Detection APIをファインチューニングしただけですが。
※特別な実装はしていないため、ソースコードは本記事に出てきません。
一つ目の動画で「午」の印忘れてる。。。Deep写輪眼👁
— 高橋かずひと@リベロ拝命🐤 (@KzhtTkhs) August 18, 2019
検出は25秒から👁👁
寅と未の誤認識が多い……🐤 pic.twitter.com/wA2DfFttYg
利用ツール
数か月前までは、Tensorflowの生「Object Detection API」を苦労しながら触っていたのですが、最近はからあげさんの「Object Detection Tools」が楽ちんなので良く利用しています。
karaage0703/object_detection_tools
Object detection useful tools for TensorFlow Object Detection API - karaage0703/object_detection_tools |
詳しい使用方法は以下を参照お願いします。
TensorFlowの「Object Detection API」で物体検出の自前データを学習する方法
データ準備
子・丑・寅・卯・辰・巳・午・未・申・酉・戌・亥の12パターンに対し、200枚(実写180枚、アニメ20枚)ずつぐらいアノテーションして学習データを用意しました。
はじめはアニメ画像だけで頑張ってたのですが、さすがに少なすぎて性能出ず、、、
ちなみに、以下のグー・パー・指さしは1000枚ずつアノテーションしているため(一般的には1000枚くらい必要とか良く言われますし)、単純に200枚はデータが足りない感が強いです(まぎらわしい印もちょいちょいありますし、、、
安定性がアップしたような気もしますが、こーいうのはちゃんとデータ取って比較しないと分からないですね。。。🐤 https://t.co/IvqpJ9Os2M pic.twitter.com/jbWHZwkOoW
— 高橋かずひと@リベロ拝命🐤 (@KzhtTkhs) August 19, 2019
データ拡張
上述の通り、学習データ数は少なかったのですが、ある程度の汎化性能は持って欲しかったので、以下のデータ拡張オプションを使用しました。
random_horizontal_flip:左右反転
※上下反転をすると「巳」と「亥」を混同しそうだったためvertical_flipは未指定
random_adjust_brightness:明度変更
random_adjust_contrast:コントラスト変更
random_adjust_hue:色相変更
random_adjust_saturation:彩度変更
random_distort_color:明度、コントラスト、色相、彩度の変更をランダムに適用
random_black_patches:黒点付与
random_crop_image:画像切り抜き
random_absolute_pad_image:パディング付与
最初は欲張って、以下も適用していたのですが、mAPとLossが上下を繰り返して、全く収束しなかったので外しました(ちなみに、グー・パー・指さしの場合は全適用して学習が出来ていました
random_rotation90:90度回転
random_rgb_to_gray:グレースケール化
random_jitter_boxes:バウンディングボックス座標ズラし
random_self_concat_image:自身の画像を並べる
おわりに
やっていることはObject Detection APIを用いてデータ用意して、ファインチューニングしただけなので、正直exampleに毛が生えた程度ですが、データセットを色々変えてやってみるだけでも気付きが多かったです。
やる前はそもそも印の識別なんて出来るのか半信半疑でしたが、意外と出来ましたし🐤
Twitterに投げたら色々な方からアドバイス貰えましたし🐤🐤