- keras 2.0.3
- tensorflow 1.12.0
- opencv2
ー main.py
実行用コード。DEEPEC、TempEC、TempEC-HPの3種類のネットワークの学習・テストができます。
ー data_utils.py
データセットの画像を読み込むためのクラスを記述。
ー NETWORK.py
それぞれのネットワーク構造を記述。
---以下はデータ収集用のコードなのでシステムを動かすのには無関係。
ー labelling.py
動画にアイコンタクトのGround Truthをつける。
ー detect_face.py
動画から顔画像、目画像を切り出す。
基本的にはターミナルで
「python main.py (エポック数) (テストデータの名前) (実行タイプ)」
を実行すれば動きます。
例:python main.py 20 Avec test_cnn ※CNNを動画Avec.mp4の画像で20エポック学習する場合
テストデータの名前は、学習時にはそれを除いたデータで学習、テスト時はそのデータで学習、という意味で指定します。
検出対象の画像はdataset/imagesに動画ごとで別々に入っています。
学習結果の重みファイルはcacheディレクトリに.h5で保存されます。場所は「ネットワークのタイプ/テストデータの名前/(lstmではタイプステップ数)」。重みファイルは実行のたびに上書きされるので必要に応じて別所に移してください。
テスト時の結果はresultディレクトリに保存されます。cacheと同じディレクトリ構造です。
結果として保存されるのは以下の内容です。
ー ROC.png : ROC曲線
ー result.csv : ネットワークの出力尤度を並べたもの(出力結果を可視化するときはこれを使う。)
ー result.txt : 出力結果を分析したもの。具体的には識別ミスの数や、正解率・再現率・F値などがテキストでまとめられる。
ー imgディレクトリ: 識別ミスした画像が保存される。False-NegativeがFNディレクトリに、False-PositiveがFPディレクトリに保存される。(ただし左目のみ)
##実行タイプ
ー train_cnn : CNN(DEEPEC)の学習
ー test_cnn : CNN(DEEPEC)のテスト
ー train_lstm : LSTM(TempEC)の学習
ー test_lstm : LSTM(TempEC)のテスト
ー train_lstm_face : LSTM+face(TempEC-HP)の学習
ー test_lstm_face : LSTM+face(TempEC-HP)のテスト
DEEPECはシングルフレームからのアイコンタクト検出、TempEC・TempEC-HPは連続した複数フレームからのアイコンタクト検出を行い、TempEC-HPでは目画像に加えて顔方向も利用します。
各パラメータは以下のように設定してあります。必要に応じて修正してください。
LSTMのタイムステップ = 10
識別の閾値 = 0.5
LSTM学習のバッチサイズ = 128
画像サイズ = 36 × 60