番外編!! 顔で分類するAI(論文調)
私が開発した人工知能の紹介です
ちょっと難しいかも知れません。
タイトル
ディープニューラルネットワークによる老け顔分類
背景
人は老け顔だね、とか、老けてるよねとか言うが、それは主観的なものであり絶対的なものではない。先行研究(知りませんが)において、シワの数やホウレイ線の深さなどで検証されてきたが、その線引きは不明瞭である。本研究では、老け顔とそうでない顔の分類をディープニューラルネットワークを用いて行うことを目的とする。
方法と対象
画像投稿サイトFlickerに投稿されたフリー画像を対象とし,投稿された画像のうちタイトルに老人、elderlyと記載があるものを老人群、そうでない画像を若者郡とした。画像をダウンロードする際には、自動で各群に当てられたフォルダに保存される様にプログラムした。
分析方法
本研究における機械学習にはDeep learningのなかでもConvolutional Neural Networks(CNN)を実施する.CNNのモデルは, 4層構造のCNNとし,最終層を老人または非老人を検出できるように2種類に分類した.機械学習させる際には,Deep learningの高速計算ライブラリであるGraphics Processing Unitに対応したTensorFlowを使用した.また,画像の種類は,JPEG,GIF,PNG,HEIFに対応するようにプログラムした.
TensorFlowが読み込みやすいように画像を50×50ピクセルのRGB形式に変換した250次元空間のものを使用した.画像の前額面上の手ぶれによる補正を行うために,ダウンロードした画像をマイナス20度からプラス20度まで5度刻みに回転させた画像を原本の画像と異なるものとして学習させた.さらに画像を反転させた後に,マイナス20度からプラス20度まで5度刻みに回転させた画像も学習させ,機械学習の画像は各群3200枚の合計6400枚とし,プログラム実装時に自動で行うようにプログラムした.
機械学習実施時は,各群の画像を訓練データとテストデータにランダムに分割するようにプログラムし,訓練データから学習パラメータの更新には確率的勾配降下法を適応させた.確率的勾配降下法のミニバッチサイズは32に設定し,訓練データを繰り返し学習させる回数は100 epochとした.
また,学習させた後に,Over fittingが見られた場合は,バッチサイズやepoch数を調整することでOver fittingが起こらないようにする.本研究のプログラムにはプログラミング言語であるPython3を使用する.
結果
epoch数100でAccuracy = 99.99%、Loss = 0.00001%であった.
結論
本研究で開発された人工知能は、老け顔がそうでないかを自動で判別することができる。その精度は99%であり、謝って分類される確率は0.00001%である。
老け顔かそうでないか議論になった場合にこの人工知能を使用することで第3者による評価ができる。