幼女画像判定システムLolinco 機械学習編

  • 10
    いいね
  • 0
    コメント

はじめに

私もロリコンではありません

この記事は、SLP_KBITその2 Advent Calendar 2016 - Qiitaの7日目の記事です。

この記事は前後編の後編になっているので、この記事を読む前にこちらをご一読ください。

Lolinco 機械学習編

それでは、SLPで行われたハッカソンでgembafと作成したLolincoというアプリの内、私が担当した機械学習の部分について説明します。(理解してなかったりコードすべて説明するとかなり長かったりするので、使い方などのだいぶふわっとした内容になってます)

開発環境

今回はGoogleが公開しているTensorflowという機械学習のライブラリを利用します。

Python 2.7.6
pipのリスト tensorflow (0.5.0)

インストールは以下などを参考に
http://qiita.com/bohemian916/items/4f0736dcea932a162d9e

処理の流れ

この処理の流れのうち、Tensorflowを利用しているのは、最後のロリかどうかを判定する部分になります。
image

画像から顔を抽出はOpenCVを利用している

実装

1. モデルの作成

このフェーズでは、フロント編の方で説明されたロリとその他の画像を教師データとして学習させモデルを構築します。

先に学習させるデータとテストデータの画像のpathと画像の分類(ロリかその他か)が入ったtest.txttrain.txtを作成します。

test.txt,train.txt
train_img/loli/image_2942_0.jpg 1
train_img/others/image_1150_0.jpg 0
train_img/others/image_588_1.jpg 0 
          ・
          ・
          ・

これらの教師データをもとに、以下のコードからモデルを作成します。
https://github.com/SLP-KBIT/Lolinco/blob/master/lib/init_model.py

コードの最後にあるように、学習結果のモデルはmodel.ckptとして保存されます。

2. 画像の判別

それでは、先ほどのmodel.ckptを使い画像の判別を行います。

画像の判別を行うコード
https://github.com/SLP-KBIT/Lolinco/blob/master/lib/judge_loli.py

実行時には判別したい画像を実行時引数として実行
今回の場合はOpenCVで画像から顔画像を抽出し、その顔画像に対し判別を行っています。

顔画像の抽出や画像の判別はSinatraのroutingに記述しています。
https://github.com/SLP-KBIT/Lolinco/blob/master/app.rb

参考文献

TensorFlowでアニメゆるゆりの制作会社を識別する
http://kivantium.hateblo.jp/entry/2015/11/18/233834

所感

普段から機械学習をやっているわけではないので、この企画が始まってからいいサンプル見つけてどうにか動かしたというのが実のところでした。

2日間でできるだけ理解して進めようとはしてみたけどコードの説明ですら専門用語が多く難しかったです… orz
また、Tensorflowに触る機会があったら今度はじっくり基礎からやっていきたいと思う所存。