おっす、おっす。
現役エンジニアのてぃーぽです。
さて、今回は巷を騒がしている機会学習を試してみました!
いぇーーーい!
ぱふぱふー!
今回のお題はタイトル通り…
「しずかちゃんのお風呂画像はエロいのか機械学習で検証する!」
です。
こちらが今回の被験者になります。
それでは検証していきましょう!!
開発環境
- windows 10
- Docker Quickstart Terminal
- python:3.6
- TensorFlow
事前知識
TensorFlow(テンソルフロー)とは、さまざまな機械学習の分野で使用するためのOSS(オープンソフトウェアライブラリ)です。
OSS(オープンソフトウェアライブラリ)とは、著作権を保持している作者のソースコードを学習や変更、配布することが可能なライブラリ(汎用性の高いプログラムをひとまとめにしたもの)となります。TensorFlowは公式サイトによると、
データフローグラフを使用した数値計算用のオープンソフトウェアライブラリです。グラフのノードは数学的演算を表し、グラフのエッジはそれらの間で伝達される多次元データ配列(テンソル)を表す。 柔軟なアーキテクチャにより、1つのAPIを使用してデスクトップ、サーバー、またはモバイルデバイスの1つ以上のCPUまたはGPUに計算を展開できます。
と、説明されています。機械学習について理解していないと、いまいちピンと来ないかもしれません。
そもそもTensor(テンソル)とは線形的な量を表す概念を一般化したもので、多次元の配列として表現できるものとなります。
そのため、”テンソル=多次元配列”と考えて良いでしょう。
より具体的に言えばTensorFlowは多次元のデータ構造を、流れるように処理することができる深層学習(ディープラーニング)を行えるライブラリとなります。
TensorFlowを始めるにあたり、機械学習や深層学習といった基礎知識は必要となります。
検証!
dokcerで環境を構築していきます。
// pythonの環境を作っちゃう! $ docker pull python:3.6 // コンテナを作って中に入っちゃう! $ docker run -it --name pytest python:3.6 /bin/bash // tensorflowをインストールしちゃう!(homeに移動するのはお好みで) $ cd /home $ git clone https://github.com/tensorflow/tensorflow.git $ wget https://github.com/tensorflow/hub/tree/master/examples/image_retraining // vimをインストールしちゃう!(お好みで) $ apt-get update $ apt-get install vim // Googleの画像収集ツールをインストールしちゃう! $ pip install google_images_download // エロ画像を収集する(小声) $ googleimagesdownload -k エロ画像 // ero画像を移動 $ mv downloads
結果
Unfortunately all 100 could not be downloaded because some images were not downloadable. 98 is all we got for this search filter! Errors: 2 Everything downloaded! Total time taken: 31.08081817626953 Seconds
2件の失敗。
…Googleフィルターがあるだとっ!?
まぁ仕方ない。
コンテナ上でダウンロードしたのでどんな画像か確認するため、コンテナからローカルに画像をコピーします。(他意はありません)
もう1つDocker Quickstart Terminal を開いてそこで下記コマンドをたたく。
// 日本語フォルダ名を英語に変換する $ mv エロ画像 ero // 動いているコンテナを調べる $ docker ps // コンテナの画像をローカルに保存 $ docker cp 6fb3c08fb77d:/home/downloads python/
チェックして….
うむ! 問題なし!!
それでは機会学習を実行していきましょう!!
// retrain.pyが移動していてgit cloneできてなかったのでファイル単体でダウンロード $ cd /home/tensorflow/tensorflow/examples/image_retraining $ wget https://raw.githubusercontent.com/tensorflow/hub/1fa48fe991f22bebf4c8d4cd375eaf0daf5fa937/examples/image_retraining/retrain.py // label_image.py を移動 $ mv home/tensorflow/tensorflow/examples/label_image/label_image.py home/tensorflow/tensorflow/examples/image_retraining // label_image.pyの一部を書き換え $ vim label_image.py
// label_image.py input_layer = "Placeholder" output_layer = "final_result"
// 学習!! $ python retrain.py --bottleneck_dir=bottlenecks --how_many_training_steps=98 --model_dir=inception --summaries_dir=training_summaries/basic --output_graph=retrained_graph.pb --output_labels=retrained_labels.txt --image_dir=downloads // こちらに書き換える例を出しておきます $ python retrain.py --bottleneck_dir=bottlenecks --how_many_training_steps=学習データ数 --model_dir=inception --summaries_dir=training_summaries/basic --output_graph=retrained_graph.pb --output_labels=retrained_labels.txt --image_dir=画像ディレクトリ
結果
File "retrain.py", line 133, in <module> import tensorflow_hub as hub ModuleNotFoundError: No module named 'tensorflow_hub'
// モジュールがないと怒られたのでインストール $ pip install tensorflow-hub
再度実行するも、振り分ける対象が一つだけだと検証できないらしい。
結果
tensorflow:Only one valid folder of images found at downloads - multiple classes are needed for classification
// 適当に画像をダウンロード $ googleimagesdownload -k news
再度実行するも、ファイル名が長すぎて怒られる
結果
OSError: [Errno 36] File name too long: 'bottlenecks/ero/51. %e7%a7%81%e7%ab%8b%e3%83%91%e3%82%b3%e3%83%91%e3%82%b3%e5%a5%b3%e5%ad%90%e5%a4%a7%e5%ad%a6_%e9%95%b7%e8%b0%b7%e5%b7%9d%e7%94%b1%e9%a6%99_h%e3%82%ab%e3%83%83%e3%83%97_%e3%82%a8%e3%83%ad%e7%94%bb%e5%83%8f-300x225.jpg_https~tfhub.dev~google~imagenet~inception_v3~feature_vector~1.txt'
怒られたファイルの名前を変えて再実行!!
結果
--------------------------- news 0.67742705 ero 0.32257298 ---------------------------
ニュースの要素:67.7%
エロい要素:32.2%
今回の実験でわかった結果…
「しずかちゃんのお風呂画像はエロくない!!!!」
ということがわかりました。
さすが、国民的な子供向けのアニメですね。
(今回はデータが少ないので結果としては微妙ですが、データ量があればもっと面白くできそうです。)
補足
これを作っていて思ったのはアプリで「この画像はエロいか判断器」とかでまぁまぁプチヒットできるんじゃね?
ってことです。
さぁ、みんなで機械学習やりましょう!
参考サイト
https://qiita.com/po3rin/items/45ba92e482efcf883325
https://qiita.com/karaimonoOitii/items/333098a74627e95c5350
公式: https://www.tensorflow.org/install/
画像収集:https://co.bsnws.net/article/295