こんにちは、えんせきです。
今日は、僕がディスプレイのどこを見つめているかを調べるためのデータセットを作っていこうと思います!
つまりなにしたの?
ひたすらディスプレイの各点を見つめる苦行に耐えた。耐えるための工夫をまとめる。
目標枚数はとりあえず21000枚。足りなきゃ足す。
まだ目線検出はできていません。今回作る21000枚でできるかが勝負です。
どんな手順でやるの?(前回から再掲)
- 1, データセット作成アプリを作る
一旦作ったけど今回大量に取るための工夫を追加しました。
- 2, 自分の顔でデータセットを作る
苦行すぎるので一旦すくなめで実行した記事がこちら。この時は20枚ずつ。
ensekitt.hatenablog.com
今日のメインはここ。現在進行中
- 3, 性能の良い画像解析系のCNNを流用(転移学習)して構築する
転移学習してない版かつ20枚学習した版がこちら
ensekitt.hatenablog.com
(転移学習が必要かはわからなくなった)
- 4, 色んな所を見ている顔のデータを学習する
- 5, 実際に稼働させて目線の座標がざっくり分かったら嬉しい
何を見つめていたか
- グレーの画面に浮かぶ黒い点→ディスプレイ内(35箇所)
ディスプレイは横長なので横に7点、縦に5点とした。正直、多すぎたと後悔している。
これ以外を向いている時とか不在も本当はデータが有ると良いかもしれないけど、とりあえずやってみるには十分だと思うので今のところは取っていない。
MacBookProについているカメラで、画面も同じくMacBookProに表示してやっている。
見つめているときのパソコン側の処理
見つめているものと仮定して、各座標を表すディレクトリにWebカメラで撮影した顔を1秒間に10枚程度で保存していく。
瞬きの検出とかはやっていないので、人間が頑張るしかない。
60枚(約6秒)撮影したら次のポイントの指示を出してインターバル(約3秒)を置いてまた撮影を開始する。
これはまばたきを我慢できる時間を考慮して決定した。もしかして、ドライアイなのでは???って感じがする。
データセット作成アプリの工夫したところ
- Pauseできるようにした
(6+3)*35箇所の5分半くらいとはいえ、やっている途中どうしても中断しなければいけない、たとえば話しかけられたりした時のためにPauseできるようにした。
Pかpを押すとPauseモードに遷移してくれる。PauseモードではSかsを押すと再開できる。
一人暮らしの自分は、トイレに行きたくなった時にすごくこの機能に感謝した。特に話しかけてくれる人はいなかった。
- インターバル中に撮影画角を中央に表示するようにした
基本的に正面に座っていれば大丈夫だが、だんだん姿勢が悪くなる自分のために毎回顔が表示されて写ってないという心配がないようにした。
これはかなり精神衛生上良くて、ないときよりもだいぶ気が楽だったし、撮影のミスも減った。
- ファイル名の重複を防ぎつつ、撮影に失敗した範囲がわかるようにした
具体的にはファイル名は0から始まる連番になっている。最初はディレクトリ内のファイル名を読み込んでその番号から始めると言った形にしたのだが、失敗した撮影の時に間引いたりするのがけっこう大変だった。
そこで、施行の切れ目がわかるように実行時の時刻からハッシュをつけて「ハッシュ_n.jpg」というファイル形式にしてみた。今更だけど「時刻_n.jpg」にすればよかった。つら。*2
コードはこちら
Processing 3.3.6でうごかしてます
github.com
データセットを作成する上でリアル側で工夫したところ
- 首を振りながらも目線を維持する
静止しているなら適当にノイズを重畳するだけなので、なるべく首を動かしたり、顎や頬に手をやったり、近づいたり遠ざかったりしながら実施した。
- いろんな顔にした
目を見開いてみたり、口を開いたり閉じたり、髪を上げてみたり、メガネをかけてみたり。
- 色んな場所でやった
背景が変わるようにMacBookProで部屋の色んな場所を背景にするように動き回りながらやった。
- 目薬を買ってきた
非常に目がつかれるので目薬を買ってきた。ロートデジアイにしました。
jp.rohto.com
- 音楽を聞きながらやった
リズムがあると首を動かしたりするのはとてもやりやすかった。
- あまり深く考えないことにした
これは本当に役に立つのだろうか。取ったデータでうまくいくだろうか。僕は虚しいことをしているんじゃないだろうか。アラサーを控えた自分がこんな事をしていて良いのだろうか。趣味にしたって趣味が悪すぎないだろうか。等様々なことが脳裏をよぎる。だがこれをすべて無視する。
あれだ。瞑想とかマインドフルネス的なやつ。
まあ、お外でやったら通報ですよね。
とったデータを使う上で工夫しようと思っているところ
このブログはデータ取得の合間に書いているので、まだとり終わっていないけど、データを使う前のAugmentationとしては以下を考えている。
普通の物体認識だったら、左右反転とかトリミングとかができるところだけど、位置と向きが大事なのでここはやらなかった。
- 明るさの調整
- ノイズの追加
- 軽いボカし
- エッジの強弱調整
引き続きデータセット作成やっていきたいと思います
折り返し地点を過ぎたのであと半分頑張ります。
*2:blogを書いていると自分で自分のコードを見て反省できるのは結構良い気がする