(うまくいったか微妙).md(本ページはTensorFlowを理解していない、pythonも使ったことない、OpenCVも先日使い始めたばかりな者が書いていますので誤りを含むかもしれません)2016/08/23追記tensorflowとOpenCVはdocker上にセットアップした方が楽そうです。https://qiita.com/summer4an/items/5a10fe8cc13476f099632016/02/10追記サーバ上で試しに判別してみていただける環境を用意しました。よければアクセスしてみてください。https://www.nakajimadevnakajima.info/va/kyohin/form.html2016/03/14追記コードを以下に置きました。→ディープラーニングで顔写真から巨乳かどうかを判別してみよう!一応まじめに考えて、顔がふっくらしていれば胸も大きい可能性が高いだろうから、顔のつくりと胸の大きさには相関があるだろう。顔の丸さやまぶたの肉の付き方等の顔の特徴を数値化してディープラーニングさせれば良さそう。いうことでやってみた。巨乳の方と貧乳の方をリストアップ巨乳な方はこの辺りから。http://matome.naver.jp/topic/1Luy1http://matome.naver.jp/odai/2138314089511622601http://matome.naver.jp/odai/2144212944181454201?&page=1http://blog.ikebukuroh.com/?eid=688貧乳な方はこの辺りから。http://blog.livedoor.jp/aoba_f/archives/28219941.htmlhttp://matome.naver.jp/odai/2144290113141288701http://matome.naver.jp/odai/2140352985012641801http://matome.naver.jp/odai/2134329973691150901ただし外国の方は顔のつくりが異なりすぎて学習がうまくいく気がしないので日本の方に限定。AV女優の方は整形や豊胸の可能性が高そうなので除いた(と思う)。巨乳の方は全250名程度、貧乳の方は全160名程度。欲しければご連絡ください。写真を片っ端から集める適当な画像検索サイトからスクレイピング。今回はbing画像検索を使った。#!/bin/bash#画像ゲッター#引数で人名を与えると、temp_ほげほげ_gazou/gazou_00001.jpg等という連番で画像を保存してくれる。#連続でwgetするのを防ぐため。./jpggetter.sh巨乳の方は全250名5600枚程度、貧乳の方は全160名3500枚程度集まった。写真から顔部分だけを切り抜きこの辺を参考に。http://reiji1020.hatenablog.com/entry/2014/10/28/225829ただし複数人の顔が検出された場合はそれぞれの名前が分からないので捨てるようにしている。都合により、1ファイルに対する顔の切り抜きはwindows上のOpenCVを使ったexeで、それを各顔画像ファイルに対して実行するのはcygwin上でシェルスクリプトで行った。windows上でOpenCVするためのメモはここ。faces[i].height);//切り抜くサイズを少し大きくした時に画像をはみ出るかどうか確認。//左右で拡大するので2で割っている。0;}#!/bin/bash#顔部分だけ切り抜く。#「./faces/temp_*_gazou/」以下の各gazou_*.jpgに対して処理を実行。#「./faces/temp_*_gazou/face_gazou_00001.jpg」等のファイルができる。#もし判別に失敗してface_*.jpgのファイルができなかった場合、空のファイルを作る。popddone以下で実行。./face_kirinuki.sh終わったら目で見て誤検知しているもの、顔の一部しか写っていないもの、正面向きでないもの、そもそも全然違う人の写真は除去しておく。巨乳の方は全250名2500枚程度、貧乳の方は全160名1700枚程度になった。顔から特徴抽出し学習ローカルで動く顔の丸さ等の特徴抽出用ライブラリがないか探してみたが見つけられず。自前で特徴量を抽出するのは諦め。webサービスならこの辺りがある模様。https://www.rekognition.com/特徴量を求めてからディープラーニングのフレームワークのChainerやTensorFlowに食わせようと考えていたが、そもそも何も考えずにぶっこむだけで画像分類してくれるっぽいのでやってみる。http://d.hatena.ne.jp/shi3z/20150709/1436397615Chainerはなぜかうまく動かなかったのでTensorFlowで。Installation」を参照。pythonのライブラリはpipというものを使って入れるらしい。ろくなGPUが載っていないのでCPU版をセットアップした。Line」の箇所を参照し動作確認しておく。集めた顔写真ファイル群から、学習用の方と、テスト用の方と、最後に巨乳か判別するお試し用の方を分けておく。学習用はface_filelist_train.txt、テスト用はface_filelist_test.txtに、以下のような形式でリストアップ。・・・もしかしたらリストはシャッフルしておいた方が良いかも。前半が巨乳、後半が貧乳等並んでいると学習が進まないかも(試行錯誤していた時だったので他の原因かもしれない)。sortの-Rオプションを使えばOK。以下によると学習用には60~80%割り当てると良いとのこと。https://www.researchgate.net/post/What_is_the_best_way_to_divide_our_dataset_into_training_and_test_sets学習用に3000枚、テスト用に1200枚を割り当てた。コードは以下の「コード全体」から拝借。values」というエラーで異常終了することがあったので、以下参考に異常処理を追加。"model.ckpt")以下で実行。4GBメモリ割り当てて動かした上で実行。100回の学習で30分程度で終わる。」にアクセスすれば見れる。0.980135」になった。0.534127」とのこと。判別できていない...学習したモデルを使って判定とりあえず学習用にもテスト用にも使っていない方の顔写真で判定してみる。コードは以下の「画像に対して予想ラベルを表示する」の下から拝借。http://kivantium.hateblo.jp/entry/2015/11/18/233834メインはpythonコードで、シェルスクリプトではログを記録しているだけ。+%Y%m%d_%H%M%S`.txt以下で実行。複数)log_hanbetu_XXX.txtに結果が書き込まれ、巨乳と判別したものには1が、貧乳と判別したものには0がつく。巨乳の可能性と貧乳の可能性も数値で表示される。巨乳の方全8名84枚、貧乳の方全8名81枚に対して実行。巨乳の方で高い確率で当てている方もいるので、当てやすい顔の方なのかも。まとめいまいちうまくいったか微妙。敗因として思いつくのは以下。TensorFlowの使い方を間違っている?うまく学習できていない?巨乳顔にも種類がありそうだし、巨乳な方の中にも巨乳顔の人と普通顔の人がいそうなので、学習時に1つのCLASSにまとめてしまうのがまずい?巨乳や貧乳を判断する時の基準が人それぞれで曖昧。本当にそうかどうかは自分では未確認。整形や豊胸や偽乳やパッド等だと困るが、判別できない。写真から偽乳判定イラストにも適用できるなら、妥当な乳の大きさを決められる気づいたこと。判別結果が自分の思っているものと異なると、言われてみるとそうかも、という気になる。Effectとやらが起きて怖い。夜にやってはいけない。画像を集めた方々の中に、左向きばっかりの人、右向きばっかりの人がいる。そちらがその人の一押しの向きなのかも。