EnsekiTT Blog

EnsekiTTが書くブログです。

転ばぬ先のChainerでモデルを保存する話

こんにちは、えんせきです。
先日、モデルのパラメータを自分でも好き放題変えられるようになった。(転移学習的な意味で)
ensekitt.hatenablog.com

今まではExtensionsで自動的に保存されるやつを使っていたけど、他のタイミングでも保存するのでモデルの保存の仕方をまとめておく。

つまりなにしたの?

Chainer(3.2.0時点)で学習済のモデルを保存して、保存したモデルを読み込む。
f:id:ensekitt:20171214005317j:plain

続きを読む

目線検出用の顔画像の平均画像を作ることにした話

こんにちは、えんせきです。
今日は、急な出張から帰ってきた僕がディスプレイのどこを見つめているかを調べるためのデータセットを作ったので平均画像を作ってみた。

つまりなにしたの?

21350枚作った目線検出用画像から平均成分を抜くために平均画像を作った。
f:id:ensekitt:20171211023656j:plain

続きを読む

急な出張でも安全に荷物を保管できるBOBBYを導入してみた話。

こんにちは、えんせきです。
急な出張アピールを2回連続でやってますが、かなり急すぎたので根に持っているだけです。
年末年始に海外旅行にいくのですが、それにも向けてちょっとセキュリティを意識したカバンを導入してみました。

つまりなにしたの?

XD DESIGNのBOBBY(Anti-theft Backpack)というカバンを買った。
f:id:ensekitt:20171210034512j:plain

続きを読む

急な出張でホームネットワークシックになっても大丈夫なようにOpenVPNを導入している話

こんにちは、えんせきです。
実はぼく、こう見えて定職についているのです。仕事をしているので出張することもあります。
そんな時、自宅の環境がとても恋しくなるホームネットワークシックがあるのでOpenVPNで心と端末は自宅のLANにいたいと思うのです。

つまりなにしたの?

Archer C1200を使って出張先のホテルのWiFiからでも自宅の作業環境を得られるようにしている。
f:id:ensekitt:20171207021947j:plain

続きを読む

今日は目線検出AIのためにデータセットを作ろうと思いますって話

こんにちは、えんせきです。
今日は、僕がディスプレイのどこを見つめているかを調べるためのデータセットを作っていこうと思います!

つまりなにしたの?

ひたすらディスプレイの各点を見つめる苦行に耐えた。耐えるための工夫をまとめる。
目標枚数はとりあえず21000枚。足りなきゃ足す。
f:id:ensekitt:20171205205554j:plain
まだ目線検出はできていません。今回作る21000枚でできるかが勝負です。

*1

どんな手順でやるの?(前回から再掲)

一旦作ったけど今回大量に取るための工夫を追加しました。

苦行すぎるので一旦すくなめで実行した記事がこちら。この時は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としては以下を考えている。
普通の物体認識だったら、左右反転とかトリミングとかができるところだけど、位置と向きが大事なのでここはやらなかった。

  • 明るさの調整
  • ノイズの追加
  • 軽いボカし
  • エッジの強弱調整

引き続きデータセット作成やっていきたいと思います

折り返し地点を過ぎたのであと半分頑張ります。

*1:unsplash.com

*2:blogを書いていると自分で自分のコードを見て反省できるのは結構良い気がする

とりあえず取得したオタクの顔700枚で転移学習せずにGoogLeNetを目線検出に使ってみた話

つまりなにしたの?

前回画面上に5*7点の注視点を用意してそれぞれをガン見しているオタクこと私のキャプチャをノートPC据え付けのWebカメラで撮影した。
今回はこれを使ってGoogLeNetにどこを見ている画像なのかを判別してもらおうと思う。
ただ、今回は動作確認用に各ポイント20枚ずつというかなり少ないデータセットで動かしてみたのが今日のはなし。

f:id:ensekitt:20171203221715j:plain

続きを読む

Processingで内蔵Webカメラを使った顔データセット作成アプリを作った話

つまりなにしたの?

Processingで表示した画像の指示に従って動くことで手軽にデータセットを作れないかと思ってまずは目線トラッキング向けのアプリを作ってみた。

なにするの?

ノートパソコン(MacBook Pro)についているWebカメラ(FaceTime HD カメラ)を使って
自分がディスプレイのどこを見ているのか、つまり視線を推定する仕組みを作りたい。
f:id:ensekitt:20171202020314j:plain

続きを読む