学習データの集め方

恐ろしいのが目、口、眉の位置を手作業で指定してやらないといけない点。
これは学習が自動化しづらい(ほぼ出来ない)ことを意味します。
・・・まあこれはぼちぼちやることにしましょう。

とにもかくにもまずはデータセットを入手しないといけないのですが、
この段階がいちばん厄介かも知れない・・・

積みゲー完全制圧への道程:アニメ顔部品検出(第0回):実験開始前の準備

俺もこれは大変だと思っていたので、わりと大きな視線から、大体のようにすすめてきました。

  1. 画像掲示板から画像を集めてくるクローラーを作る
  2. 画像からできるだけ高速に部分画像を切り出せるツールを作る
  3. 1で集まった画像から2を使って顔を切り取って集める
  4. 顔を学習させて大量の画像から顔だけを切り取れるツールを作る
  5. 4を使って1で集めた画像から大量の顔だけを切り取る
  6. 5で切り取った顔画像から2をつかって眼だけを切り取る
  7. 眼を学習させて顔と眼を切り出せるツールを作る
  8. 切り出しツールを動画に対応させ、より大量のサンプルを簡単に収集できるようにする ←いまここ

ある程度進むとデータ収集が自動化されてくるので、別のアルゴリズムを試す場合も楽なわけです。面倒なのが1と2でしょう。個人的には両方公開したいところですが、1は対象となるサービスに迷惑がかかると思うので自重します。Perlとかで簡単に作れるし、画像だけならwgetのパラメーターを調節すればできると思います。ちなみにうちでは去年の12月くらいに4chan.net用のものを作っていて、今も1日4回動き続けているので、2次元画像だけで25GB(13万ファイルくらい)たまっています。画像に対するコメント(英語)もとっているので、また別のことにも使えそうです。
ということで、2をそのうち公開します! 僕の健忘具体と考えの不安定さを知っている人は期待しないでしょうが、知っていない人も期待しないでください。たぶん月曜くらいに出せる。今は、起動するのにC#のIDEから起動しているレベル。

SC

こんなの。

基本機能
  • フォルダを作業単位として画像ファイルたちを開ける(1万ファイルくらいまでなら普通に開ける)
  • 画像ごとに範囲を囲える
  • 囲った範囲をドラッグで移動できる
  • 囲いをキャンセルできる
  • 囲う矩形の縦横比を固定できる(これができるのがこいつの一番の売り)
  • 画像サイズをウィンドウサイズに合わせたり元サイズ表示したり
  • Aキーで『前へ』、Dキーで『次へ』(右利き用)、←で『前へ』、→で『次へ』(左利き用)など
  • 左のサムネイルから選んだところへジャンプ
  • 作業状態を保存して、続きから始めれる(XMLファイルで出力するので別ソフトからも選択領域の情報を使える)
  • 囲った範囲だけを指定したフォルダに画像として出力できる(ポジ用)
  • 囲った範囲以外(選択範囲は塗りつぶされる)を指定したフォルダに画像として出力できる(ネガ用)

学習用のソフトによっては、画像ファイル名+範囲座標が必要な場合がありますが、そういう場合は、画像全体を範囲として設定かなにかを出力するスクリプトを書けばいいだけなので対応しています。画像中の3点を指定しろとかは難しいので、作業状態保存用のXMLファイルを読み込んで、別形式で出力するようなスクリプトを書く必要があります。
一人でも1時間で500枚くらいは処理できます。2000枚くらいあれば統計的に足りてくると思うので(それ以上いるならそれらをランダム変形させて作るとか)、4時間あれば終わります。バイトを4人雇えば、1時間あれば完了します。ecchi画像の顔を囲むだけの簡単なお仕事です。

データの権利など

また、ここは結構難しい問題もあると思うんです。判定のアルゴリズムによっては学習データの著作権とか。ただこれに関しては、あやしげなデータをもとに作った分類器で学習データの自動切り出し器を個人的に作っておけば、いざとなったらどうにかして手に入れた合法データをその切り出し器で切り出して、新たに学習しなおせば、自動でクリーンな分類器が作れるというひどい悪巧みをしています。印象をよくするために『ソフトウェアベースクリーンルーム方式』とかかっこよく呼びましょう。