CNNを用いた表情認識技術とそれを用いた映像コンテンツ推薦アルゴリズムの開発
研究内容紹介
僕は高専に6年間通っています。
…6年間とか小学生かよ!とツッコまれるかもしれませんが、中学を卒業した瞬間から工学のことが学べて、大学生が卒業するころには3年間の一貫した研究を修了しているというアドバンテージが高専生(専攻科生)にはある!…と思っています。
僕はその一貫した研究の2年目です。
研究テーマは「CNNを用いた表情認識技術とそれを用いた映像コンテンツ推薦アルゴリズムの開発」です。
このテーマは与えられたものではなく自ら考えだしたテーマなので、研究の意義があるのかという部分がいささか不安ではありますが、簡単に説明すると、動画を見ている被験者の表情をディープラーニングを使って認識して、その表情データを利用して被験者が好みそうな動画を推薦するアルゴリズムを開発する研究です。
簡単に説明するって言ったけどちょっと日本語的にややこしくなってしまった(;'∀')
先述したように高専(専攻科)では3年間の一貫した研究が行えますが、僕の場合は、
1年目は表情認識モデルの開発と検証
2年目は表情認識率の向上(教師データの拡張、転移学習等)・被験者の表情認識
3年目は推薦アルゴリズムの開発と検証
というスケジュールで研究を行っており、週に1回指導教員への報告会とミーティングがあるという状況です。
成果物とその解説
まずは今までの成果物(スクリプト群)を公開します。
(今日段階での成果を残しておきたいからbranchで分けてみたんだけどこういう使い方で良いだろうか…笑)
training_model.py⇒realtime_recognition.pyの順に実行すればとりあえずは動くと思います。
ただ、Githubの仕様上(?)dataの一部は省かれてしまったので、後述する方法でdataを別途用意してください。
ここで、それぞれのモジュールについても簡単に説明しておきます。
training_model.py
実行すると学習モデルを構築して、データセットから学習を行うスクリプト。学習したなかで最もAccuracyが高かった時の重みデータと、学習のログを吐き出す。モデルは下図のような構成になっている。
DatasetクラスとModelクラスが格納されており、モデル構築や学習にはKerasを使っている。
realtime_recognition.py
OpenCV3でハードウェアカメラにアクセスして、ループで画像をプレビューしながらそこにフレームごとの表情認識結果をオーバーレイするスクリプト。直感的に認識精度を感じられるように作った。主にModelクラスのpredictメソッドを動かしている。
このデモではPC画面で流している動画の登場人物をWebカメラで撮影して表情認識しています。
evaluation.py
新しい入力をラベルとセットで与えてテストする(=認識率を計算する)。複数の入力を与えて全体の認識率を計算することができるため、モデルの有用性がわかる。
主にModelクラスのevaluateメソッドを動かしている。
ちなみに、先日実験的にお笑い芸人のコントを視聴する自分の顔をrealtime_recognition.pyで保存し、evaluation.pyで表情認識率を計算したら、84.55%だった。
なお、学習に用いているデータは、以下のような特徴のもので、convert_fer2013.pyで画像として書き出した後に、基準(複数の顔が写っている、横を向いている等)に則っていくつかの画像を省いた上でその9割を学習モデルにぶち込んでいます。残りの1割はテスト用です。
fer-2013データセット
Challenges in Representation Learning: Facial Expression Recognition Challenge | Kaggle
表情の発現した画像データのピクセル値をcsv形式でまとめたデータセット。元画像はGoogle画像検索からスクレイピングしたもので、それぞれの画像に(0=Angry, 1=Disgust, 2=Fear, 3=Happy, 4=Sad, 5=Surprise, 6=Neutral)でラベル付けされている(っぽい)。枚数は36000枚弱で、すべてグレースケールかつ48x48の大きさにリサイズされている。
convertor_fer2013.py
データセットをpandasで読み込んでnumpyでreshape、その後PIL(Python Image Library)で画像として書き出すスクリプト。書き出す際にラベルごとにディレクトリを分ける
課題点と今後の展望
・顔領域認識の精度の低さ
映像コンテンツを視聴する人の顔が認識できれば良いので正面顔を認識できれば良いのですが、OpenCV3標準の顔領域認識では顔周りの装備品(メガネやマスク)、光の当たり方によって認識できない場合が多く難航しています。
・コンフュージョンマトリクスの表示
何をどれだけ誤認識したか知るために、evaluation.pyでコンフュージョンマトリクスが生成されるようにしたい。
・多様な動画を視聴して表情認識を行う
推薦アルゴリズムを開発するための知見の入手が目的です。
・撮影した顔画像群を効率的に分類するGUIアプリを作成する
現在は大量の顔画像を撮影⇒手作業でラベル付け(フォルダ分け)⇒テストという手順でテストを行っているのでこれを効率化するためのGUIアプリを作ろうかと考えています。
来夏の学会発表があるからちょっと焦ってる←
つづきます⇒
Pyhtonのスクリプトをコマンド1つで実行ファイル(.exe)化する
はじめに
こういうこと、ありませんか?
僕は、他言語を勉強するのが億劫でついついなんでもPythonで作ってしまいます。
わりとなんでも作れてしまうのがPythonのいいところではあるのですが、さすがにスクリプト言語だし実行ファイル化するのは無理だよな~。
そう思っていた時期もありました。
「起動が遅い」「ファイルサイズが大きくなる」といったデメリットはあるものの、Pythonのスクリプトを実行ファイル化することはできます。
しかもコマンド1つで!
今回使うのはPyinstallerです。
PyInstallerはPythonプログラムをWindows、Linux、Mac OS X、FreeBSD、Solaris、AIXのスタンドアロンの実行可能ファイルにフリーズ(パッケージ化)するプログラムです。
公式サイトより引用
ステップ1 Pyinstallerをインストール
今回はAnaconda3の仮想環境上でPyinstallerを使います。
Anacondaを導入していない方は、以下の記事で最も簡単な環境構築方法を解説しているので、参考にしてください。
仮想環境をactivate
にした後、以下のコマンドでAnaconda上のPyinstallerパッケージを探してください。自分のOSに適合したパッケージが見つかるはずです。
anaconda search -t conda pyinstaller
良さげなパッケージを見つけたら、以下のコマンドでパッケージのインストール方法を閲覧してください。僕は「conda-forge/pyinstaller」という名前のパッケージを選択しました。
anaconda show conda-forge/pyinstaller
一番下のほうにインストールのコマンドが表示されているので、それを実行することでPyinstallerと共に、依存関係のあるライブラリも同時にインストールされます。
conda install --channel https://conda.anaconda.org/conda-forge pyinstaller
ステップ2 Pyinstallerを使ってスクリプトを実行ファイル化
スクリプトを実行ファイル化するのはコマンド1つで出来てしまいます。
pyinstaller yourprogram.py
コンソールを起動してほしくない場合や、ファイルを一つにまとめたい場合、古い実行ファイルを削除したい場合は以下のようにオプションを付けましょう。
pyinstaller yourprogram.py --noconsole --onefile --clean
肝心の実行ファイルは、カレントディレクトリ配下のdistディレクトリの中に生成されていますので、煮るなり焼くなり好きにすると良いでしょう。
おまけ トラブルシューティング
導入時に実際に起こった問題と、その対策をメモします。
トラブル1 実行ファイル起動時にエラーが出る
実行ファイルを起動するとこんなエラーが…
なんかQtのプラグインが見つからなかったとかなんとか言ってます…
ggったら解決方法が見つかりました。
https://plus.google.com/+rikitoy/posts/1bVKdQy33dz
どうやら、以下のディレクトリの配下のplatforms
ディレクトリを、実行ファイルのあるディレクトリにコピーすればエラーが解消されるようです。
[Anaconda3インストールディレクトリ]\envs\[仮想環境名]\Library\plugins\
Raspberry pi 3 + 3.5インチタッチディスプレイの最も簡単なセットアップ方法
はじめに
「ラズパイでIoTゲームを作りたい」
そんな思いを胸に、今回はRaspberry pi 3 Model Bと3.5インチHDMI-LCDタッチディスプレイを購入しました!(他人の金で)
しかし、セットアップ完了までに紆余曲折あったので、最も簡単だった方法をまとめておきます。
購入した3.5インチタッチディスプレイ↓
レビューを見て分かったんですが、どうやらこの商品はWaveshareというメーカーの3.5インチタッチディスプレイをパクリスペクトしたもののようです^^;
しかし、そのおかげで、同メーカーのディスプレイのセットアップ方法をそのまま使用することができました。
参考にしたページはこちら↓
3.5inch HDMI LCD - Waveshare Wiki
ところで、Raspberry pi のOSをセットアップする際はNOOBSを使用するのが一般的だと思いますが、このタッチディスプレイはなぜかNOOBSを使って導入したOSには対応していない模様…
そのため、タッチディスプレイのドライバがインストールされた状態のOSイメージを直接、microSDカードに書き込んでいきます。
なお、ここからはWindows10での作業になります。他OSの方は以下リンクが参考になるかと思います。
Linux(ステップ2以降)
Raspberry Pi Image Installation Guides - Waveshare Wiki
ステップ1 microSDをフォーマットする
何らかの方法でmicroSDをFAT32形式でフォーマットしてください。
ここでは、SDメモリカードフォーマッター - SD Associationというソフトを使います。
インストール後は、指示に従ってmicroSDをフォーマットします。
ステップ2 OSイメージを用意する
以下のリンクから、タッチディスプレイのドライバがインストールされた状態のOSイメージをダウンロードして解凍します。
https://drive.google.com/uc?id=0BwbgcecjOmBqdk5qOVJCMlJKcVk&export=download
ステップ3 OSイメージをmicroSDに書き込む
以下のリンクから、イメージ(.imgファイル)をメディアに書き込むことができるソフトのインストーラーをダウンロードし、指示に従ってインストールします。
Win32 Disk Imager download | SourceForge.net
ステップ2でダウンロードしたOSイメージと、microSDが入っているディスクを選択し、microSDに書き込みます。
少し時間がかかるので、この間に一服しましょう。
・・・
数分後、書き込みが完了したので、 早速、microSDとディスプレイを装着して電源投入!
おお!タッチができる!!
おまけ トラブルシューティング
導入時に実際に起こった問題と、その対策をメモします。
トラブル1 OSが起動しない
問題:
OSイメージをmicroSDに書き込み、電源投入したが、起動途中でOSがフリーズする
対策:
ディスプレイに適合したOSイメージをダウンロードする
ダウンロードしたOSイメージが、間違ったものだったためにこの問題が起きたようです。
以下のページのDisplaysの項で、自分のディスプレイに適合したページに飛び、そこからOSイメージをダウンロードしましょう。
トラブル2 タッチの反応が異常
問題:
タッチができるようになったが、タッチとその反応に位置的なズレが生じる
対策:
TouchscreenのCalibrationを行う
以下を参考に、「Calibrate Touchscreen」をRaspberry PI 3にインストールし、それを使ってキャリブレーションしましょう。
3.5inch HDMI LCD #Touch_screen_calibration - Waveshare Wiki
「Calibrate Touchscreen」でキャリブレーションを行う際は、シャーペンなどの先がとがったもので行うと、正確にキャリブレーションできると思います。
【Python】たったの3ステップで今話題の機械学習に入門【Keras】
はじめに
Pyhtonで書ける機械学習ライブラリKerasの開発環境作りの解説です。
Kerasは、Pythonで書かれたTensorFlowまたはTheano上で実行可能な高水準のニューラルネットワークライブラリです
KerasはPython 2.7-3.5に対応しています
筆者のPC環境
ステップ1 Anacondaをインストールする
Anacondaは、いくつかあるPythonのインストール方法のうちの1つです。
僕が知る中で最も簡単で、最も使いやすい方法なのでお勧めします。
導入方法を説明します。
そう、これだけです。
面倒な設定は一切なく、Pythonとメジャーなライブラリが使えるようになります。
ステップ2 仮想環境を作成する
仮想環境を作ることで、ライブラリのバージョンや互換性で発生する問題への対処が楽になります。
Python本体のバージョン切り替えもできます。
ターミナルを開いて以下のコマンドを実行してください。
conda create --name test python=3.5
「test」という名前のPython3.5の仮想環境を作ることができました。
以下のコマンドで仮想環境に入ることができます。
activate test
以下のコマンドで仮想環境から抜けることができます。
deactivate
ステップ3 Kerasをインストールする
仮想環境上にはライブラリをインストールすることができます。
Kerasとその使用に必要なtensorflowを以下のコマンドでインストールしましょう。
TensorFlow CPU版
pip install tensorflow
TensorFlowGPU版
pip install tensorflow-gpu
Keras
pip install keras
うまく動かない場合はバージョンの互換性を確認してみましょう。
使い方
Pythonでのプログラミングは、
①ソースコード(スクリプト)を記述して
②ターミナル等で実行する
というサイクルで行われます。
Kerasを使ったスクリプトの記述方法はここが参考になるでしょう。
なんと公式ドキュメントに日本語版があるのです。
そこがKerasのいいところですよね。
公式ドキュメントで、ある程度書き方に慣れたら、公式のサンプル集で何かを実装してみましょう。
今回はこれでおしまいです。
もっと簡単な方法があったらぜひ、コメント欄で教えてください。
【レビュー】ドスパラのBTOパソコンはコスパが良い⁉【1年間使用】
はじめに
1年前にドスパラでBTOしたデスクトップパソコンの紹介です。
BTOとはBuild To Orderの略で、「受注生産」を意味します。 既製パソコンより詳細にパーツ構成(メモリ・ハードディスクなど)をカスタマイズすることが可能です。予算や用途などのご希望に応じて自由に選べるのが魅力です。
構成
- CPU:Intel Core i7-6700K @4.00GHz
- GPU:NVIDIA GeForce GTX 960
- RAM:16GB
- SSD:480GB
- HDD:2TB
- OS :Windows10 Home
値段
120,000円ちょい
レビュー
1年間使ってみて、なかなかコスパが良いなと感じました。
CPUを高性能にして、RAMも大きく確保したので…
①Chromeで動画流しつつ
②Atomでコードを書き
③コマンドプロンプトでプログラムを実行
みたいな使い方をしていても、一度もフリーズはしませんでした。
あと、SSDにしたおかげで起動がめちゃくちゃ速いです!
しかもキャンペーンでSSD240GB→480GBが無料だった。ドスパラすごい。
ゲームや機械学習でGPUを酷使することもありますが、GTX960でそれほどストレスを感じず使えています。
例えば…
①SteamのDead by Daylight(ホラーアクションゲーム)が最高画質でカクツキなく動作する
②17層のCNNで48×48の画像約30000枚の学習が30分で終わる
でも、黒い砂漠(MMORPG)で多人数が画面上にいるとさすがにカクカクします。
妥協したくない人はGTX1080等もっと良いものを買ったほうがいいかも。
でも、お金、大事ですからね。笑
とりあえずそこそこのPCが欲しい!
って考えの人は、PCケースだけは大きめにしておいて、中身は必要になったら拡張!
って買い方がいいんじゃないかなあ。