「任意の入力映像に対して俺がどこを注視するかの視線推測システム、の開発」の雑ログ

概要

背景

  • ディープラーニングを利用したプロダクトを考案した
    • 任意の入力映像に対して、自分がどこに視線を向けるかの推論システム
  • とりかかりますか

目的

  • 視線推論システムを開発する
    • 俺をダビングできた! 人間ぽい!という感想が得られるぐらいまで

方法

  • 要求
  • 要件
  • 外部設計
  • 内部設計
  • 実装
  • テスト

実行

  • 要求
    • 任意の入力映像に対して、自分がどこに視線を向けるかの推論システム
  • 調査
    • (既存の同様な取り組み
    • そもそも人間の視線操作はどのようなものか
      • 河合 清三,"いくつもの目―動物の光センサー 単行本",講談社サイエンスフィク,1984
        • ワシやタカの類の網膜には、二つの中心窩が存在する
        • ヒトの眼底
        • 眼底検査は臨床医学上重要な検査の一つ
        • 生物学的には目は脳の分身
        • 眼底の血管は、人体のなかで直接目で見ることのできる数少ない血管の一つ
        • この血管の状態から脳の血管の状態を推定できる
        • それだけでなく、眼底検査から全身の病気を探知することも可能
        • 色覚の三色説は正しいか
        • 三色説
          • 19世紀のはじめ ヤング提唱
          • ヤング・ヘルムホルツの三色説
          • 赤 緑 青 視細胞 仮定
          • 1960年代に視細胞の実在が明らかに
          • 三種の錐体細胞
          • 仮説から実証まで100年以上
        • 反対色説
          • 1874年 へーリング
          • 心理学的立場から
          • 網膜に
            • 赤緑物質
            • 黄青物質
            • 白黒物質
          • の存在を仮定
          • ある波長の光によって赤緑物質が分解されると赤、逆に合成されると緑の感覚が生ずる
          • 分解と合成という反対現象によって色覚が起こると説明
          • 三色説の実証で消滅するかに見えたが、電気生理学の発達 反対色説を説明できる過程があることがわかり、反対色説が生き残る
        • 近代哲学の父 デカルト
        • 視覚研究のパイオニア
      • 仲 真紀子,"認知心理学―心のメカニズムを解き明かす",ミネルヴァ書房,2010.
        • 1章 私たちは世界をどのように見ているのか? 視覚と視環境
          • 1 見ることと描くこと
            • 美術教育 描画技法
              • 子供や初心者に絵を教えるテクニック
                • 通常のデッサン方法
                  • 情景をよく観察することで全体の構図を決めてレイアウトを描き、部分を配置していく
                • 松本ら
                  • 描こうとするものの外側の輪郭にはこだわらず、中から描き始めて、少しずつその周辺部を描き足してゆく
                  • 描いている対象が画用紙の大きさを超えてしまうことがあるが、紙を継ぎ足していく
                  • どこからでもデッサンできる
                  • 描きたいものを紙面のスペースに合わせるなど、全体を相対化してとらえるといった過程もない
                  • 高性能な見えを実現している視野中心部をフルに利用
                  • 全体の構図を意識する必要なし
              • 絵を描くのになれた人
                • 外界を限られた紙面に描くという作業を通じてシーン(視覚的情景)を相対化すること、つまりいま見ている場面の全体スケールを紙面のスケールに合わせるといった操作、がある程度容易にできるようだ
                • 現実のシーンはふつうひとつの視点から見た視野範囲を超えた広がりを持っているので、それを心内に表現するには複数の視点の見えを再構成しなければならない
                • 全体の構図をこの再構成した心内の表現を使って大まかに記述した後、あらためてよく観察することで詳細部を描いていくのだろう
                • この使い分けは初心者にはむずいかも
                • 外界の視環境は時々刻々と変化しているが、私たちの視覚は、ある時点の限られた空間範囲を詳細に見きわめることができるのと同時に、もう少し広い範囲の時空間を簡潔だが適切に表現して見せることができる
                • この2つの能力のうち、前者は誰もが同じようにほぼ自動的に行ってるっぽい
                • 後者は経験や学習をふまえ、個人差が大きそうだ
          • 2 視覚のメカニズム
            • (1) 視神経としての視覚システム
              • 霊長類の大脳の6-7割が何らかの形で視覚に関わっている おそらく人間も5割弱は
              • ただ多くは他の仕事も行う連合野 視覚以外の活動にも関与
              • 視覚処理のために特殊化された機構だけを挙げるとすると
                • 光という物理的エネルギーの受容器である目(眼球)
                • 基本的な情報処理の多くを担当する大脳視覚野がある後頭部位
                • それらをつなぐ中継組織の神経系
              • 目の機能
                • 光画像を結像させる
                • 光エネルギーを電気信号に変換
              • 結像系
                • 水晶体
                  • 毛様体という筋繊維で厚みを変えて 焦点を合わせる
                • 瞳孔
                  • カメラの絞りに対応
                  • 入射光の量を同じレベルに保つ
              • 光受容器
                • 桿体 高感度 おもに暗いとき 高感度・白黒ビジョン・低解像度
                • 錐体 普通感度 昼間などの明るいとき 低感度・カラービジョン・高解像度
              • 受容器で得た電気信号は、神経節細胞と呼ばれる長い軸索を持つニューロンによって眼球の外に出てゆく
              • 視交叉 外側膝状核 神経ネットワークで情報処理
              • 後頭部にある大脳視覚野
              • 左視野は右脳へ 右は左へ
            • (2) ゆっくりだが大きな光量の変化に対応したシステム
              • 地球 自転 光量変化
              • 光量は昼夜で10^8倍程度変化
              • 全値を同時にひろえるセンサーを設計しようとすると膨大なコスト
              • 明るさ感覚:グレーレベルの違い
              • その時点のシーンにおける平均の明るさをグレースケールの中間点につねにあわせるよう調節して、どんな照明レベルでも安定した見えを実現
                • 三つの自動化された環境適応・順応システムによるところがおおきい
                  • 眼球の瞳孔と中枢神経制御系によるフィードバックシステムの入射光量の調節
                  • 錐体と桿体の2系統の光受容器
                  • 末梢から中枢までのあらゆる神経ネットワークレベルにおける電気信号量の調節
              • 明るい部屋の照明を急に消すと見えなくなるがだんだん見えるようになる 暗順応
              • 逆 明順応
              • 錐体系と桿体系とで、順応の特性が異なる
                • 暗順応曲線
                  • 桿体系
                    • 絶対閾が低く高感度だが、順応に時間かかる(最高感度発揮までに30分要する)
                    • 光の絶対閾(光量子数) 1000 - 1 (たぶんlog10
                    • 順応時間 (分) 10-40
                  • 錐体系
                    • 光の絶対閾(光量子数) 100000 - 100
                    • 順応時間 (分) 0-10
            • (3) 昼間を重視した設計:高い解像度と彩色で詳細に表現する
              • 錐体:神経節細胞(光受容器の情報を大脳に伝える神経細胞)と1対1で接続。促進的結合
              • 桿体:隣接する複数の神経節細胞と結合。解像度は落ちるが感度は上がる
              • カラー、白黒
              • 3色性
                • 錐体 波長ごとに感受性が異なるタイプ 網膜上に比較的均一に分布
                  • S
                  • M
                  • L
            • 明るい燈下と暗闇を同時に描いたゴッホ
              • 夜のカフェテラス
              • 星月夜
              • 同時に描くことなどで生まれる幻想的表現
                • 人間の内的情感を表す描画法のひとつとして考えられる場合もあるが
                • そもそも人間の目にはそのように見えていて、そしてそれが魅惑的に見えるだけではなかろうか
          • 3 視覚イメージの形成
            • (1) 特徴の変化点である境界から対象を表現する
              • 人間の視覚 他生物より優れてるとこ 視環境の特徴をとらえるための多彩なしくみ
              • ある特徴が時空間的に変化するとき、その地点を境界(エッジ)として正確に記述できる
                • 色彩
                • 明るさ
                • 面についた模様(肌理)
                • 対象物の動き
                • 左右の目の画像差(両眼視差
                • すき間を補う主観的輪郭
              • 各視覚特徴は、視覚皮質内の異なる部位で処理されており、機能的に独立した構成部品(モジュール)と呼べるような単位で特徴の処理が実現されているようだ
            • (2) 対象を背景や他の対象から切り分ける
              • 境界によって分けられた領域 たいてい
                • 対象物と背景
                • 対象物と別の対象物および背景
              • として見ることになるが、この過程は、理論的には対象認識をへた後でも可能だが、見ている映像の幾何学的特性にもとづいてある程度自動化された処理として準備されており、
                • 知覚的体制化
              • と呼ばれる, つまり 対象が何であるかという意味的処理を必要としない
              • 図と地の分離や、ゲシュタルトの対象の群化規則として知られる
              • 図(対象)、地(背景)
                  • 注目しているもの
                  • 境界を含んでいて形がわかる
                  • 境界が属さず
                  • 形があいまい
                  • 図の背後に広がっている
                • 図と地は一義的に決まることが多いが、あいまいな場合もある
                  • 見つめあっている横顔の絵か、白い壺か
                  • どちらも図になりうる 顔と壺が交互に見えることはあるが、けっして同時に見えることはない
                  • 図になりやすさ
                    • 映像の幾何学的特性
                    • たとえば面積が小さいほど図になりやすい
              • 知覚的にほぼ自動化された体制化は、対象と背景の切り分けだけでなく、
              • 複数の対象をまとまりとして見る過程(群化)も含む
                • ゲシュタルト心理学 まとまりとして見るための要因を提案
                  • 近接
                  • 類同
                  • よい連続
                  • 閉合
                  • 共通運命
                • ゲシュタルトの群化規則
                  • 強い拘束力
                  • 組み合わせも可
                • 重要なのは、これらの規則がいま見えている映像内の切り分けやまとまりとして可能性のある多くの候補の中から、矛盾が少なくてもっとも安定した見えを、答えとしてひとつだけ迅速に提案してくれることにある
              • 図地の分離や群化規則は誤った解釈を導くこともあるが、視覚システムに実装することで知覚情報がすばやく体制化するための強力なツールとして働いている
              • 群化によるまとまりは、聴覚などでは空間よりも時間として現れるかもしれないが、他の感覚においても大きな役割
            • (3) 視野中心部における良好な見えと視線の移動
              • 両眼は額に並んで配置
              • 限られた方位を精度よく処理 適す
              • 精度は粗いが聴覚は全方位を包括的に処理 遮蔽物の影響も少ない
              • 視野はふつう、左右200° 上下150°
              • その範囲内ですべてが均質に見えるわけではない。
              • ある物体を詳細に見たいとき、だれでも頭や目を動かして視線を物体に合わせる
              • 目線の先にある対象の像は網膜の中心部に位置する中心窩と呼ばれる領域に投影される
              • 中心窩に投影される視野の中心部分は直径5°程度 視野(網膜)全体の面積の0.1%にもみたない
              • なぜ 視認力の高さ
              • 視力  視野の中心から10°離れると1/5, 20°で1/10
              • 周辺視野に比べ中心窩に光受容器(おもに錐体)が密集していることや、この部位の受容野の直径が小さいことなどによる
              • なぜ狭い中心窩だけで、広いシーン全体の詳細な処理が可能なのか
              • この限界を解消するのが 眼球運動
              • 眼球運動
                • 連続的に一定速度で動くのではない
                • 数ミリ秒の素早い移動であるサッケード(飛越)と、数百ミリ秒の停留である固視という2つの繰り返し
              • カメラのシャッターを切るときに動かすと手振れになるが、サッケードと個視を繰り返す視覚にぶれは見られない
                • 目蓋を開いてもサッケード時の映像は神経系で遮断され大脳には伝わらず、個視時の映像のみが使われるから
              • 私たちが周囲の視環境を知覚できたと感じるには、多くの眼球運動や首振りによる視線移動を繰り返すために、数秒程度の時間が必要
              • こうして構成される外界の表象は、視野の解像度分布とは異なり、ほぼすべての領域の映像が鮮明であるように感じられる
              • 複数の個視で得られた詳細な中心部画像をつむいで、脳内に視覚イメージを描くのかもしれない
              • 視覚は継時サンプリングなビデオカメラに近いが、表現はビデオデータのように未整理で扱いづらいものではない
              • 視覚は効率的に継時サンプリングされたデータを記憶システムの助けを借りて適切に空間配置された表現に再構成しているようだ
              • これには高次な処理が必要 大脳皮質の処理資源を多く使っているだろうが、まだよくわかってない
              • 最近の視覚短期記憶(visual short term memory : VSTM)に関する研究
                • 容量の限界から5つ程度の中心視画像の組み合わせで視覚イメージが構成されると仮定(Irwin & Zelinsky, 2002; Brockmole&Irwin, 2005)
                • サッケードと固視を複数回くり返して対象を見る場合、前半よりも後半に中心視領域で見た要素、とくに最後3~4回での映像は正確に記憶される
            • (4) 視覚認知における2つの目標
              • 目から入力された情報は、網膜や中継組織の処理をへて、後頭葉の第一視覚皮質(V1)に入る
              • v1とつづく皮質領域は、
                • 色彩
                • 動き
                • 形状
                • 奥行き感
              • などの視覚的特徴のモジュール処理を行っており、心の絵とでも言うべき外界の表現が、この領域に構成されていることは、臨床報告例によって古くから指摘
              • 脳イメージング研究でも確認
              • 視覚皮質は互いに双方向的に情報を共有 処理進行 高次の処理過程からのフィードバック情報なども受けて、いま見ているものを心に表現するときに中心的役割を果たしている
              • この心に描かれたイメージを使って視覚系はさらに、日常生活において重要な2つの認知処理を進める
                • 認識
                  • いま見ている対象物を、映像として記憶している表象、たとえば顔やよく使う道具、あるいは母国語の文字、などと対応させて認識する(それが何かわかる)
                  • 今見ているシーン全体を、学校、職場、駅、店、自宅のリビングといった日常の一場面として認識
                • 多くの対象物を視空間に配置して自身がその空間内を歩き回るときに必要な情報を与えてくれる、いわゆる空間定位のためのシステム。たとえば車載ナビゲーション
            • (5) 対象や場面の自然な認知
              • 認識のためには、心に絵を描くだけではだめ
              • あらかじめ対象物についての情報が、映像ライブラリのような形で保持され、かつ照合できる状態が必要
              • 視覚システムが作り出す詳細な映像情報を未加工の画像としてライブラリ化するのは 容量の面で現実的でない
              • 情報を圧縮するための記述法が重要
              • ジオン
                • 円柱
                • 四角柱
                • 円錐
                • 四角錐
                • その変形
              • 構成部品 2~3の組み合わせと空間的関係 で記述 (Biederman, 1987
              • シーンの認知
              • ジスト
              • 知覚の恒常性
          • 4 環境と色彩
            • (1) 抽象化と精緻な情報保持のはざまで:色による多彩な表現
              • 基本戦略 画像の圧縮と抽象化の方向へ向かうけど、形状や質感は残であろうし
              • フラッシュバルブ記憶
                • 網膜 3色性
                • 私たちの有彩色の見えは、赤 緑 黄 青の4原色のうち1つか2つで成立
                • 3色性は網膜レベルで
                • 反対色性の基盤 視床
                • +白 黒
            • (2) 色によるシーンの認知とその心理的効果
              • 赤の警告効果など
          • もっと詳しく知りたい人向けの文献
            • 松田隆夫 2000 知覚心理学の基礎 培風館
            • ハーヴィッチ, L.M. 2002 カラー・ヴィジョン
      • サイモン・イングス(著), 吉田 利子(翻訳),"見る―眼の誕生はわたしたちをどう変えたか",早川書房,2009.
        • 著者の娘 ナタリーは、生を受けてまもないころ、額に眼窩が一つあった
        • キュクロプス
        • 人間は塵から生まれるわけではないにしても、塵と大して違いののなさそうなゲル状の唾のようなものから発生する
        • 大きな謎だ
        • どのように成長するかの説明は、時々の流行に左右される部分が多い
        • 現代の流行は、全細胞にコードのようにルールが埋め込まれているというもの
        • 誤解のもとになる
        • ナタリーはルールどおりにできたのではない。彼女の成長を律する監視役はいなかった。ゲームの条件は遺伝子が設定するが、しかし彼女を作り上げたのはゲームそのものである。表面が接触・移動し、化学物質どうしがキスし、分割や融合があり、組織の各部分が隣接部分と化学的なコミュニケーションをとりあって、彼女という存在ができあがってきた。このダンスは生物学的には「誘導」と呼ばれるが、これによって脳は二つに分割され、一つだった眼窩が絞り切られて二つになり、その頭蓋の窓に脳からそれぞれ小さな繊維が引き込まれて、眼が作られる
        • どの遺伝子も事実上無限の事柄の「ため」にあり、全体にとって不可欠なのであって(それ自身だけでは無意味)
        • 重要なのはその働き方
        • ある女性の胎内で胎児の眼が二つにならないのが遺伝的欠陥のせいであるケースはごく少ない
        • それよりも、遺伝子の働きが途中で妨げられた可能性のほうが大きい
        • たとえば妊娠初期にバイケイソウ(ヒツジや牛にとって毒草として有名)を食べたというように
        • 発達途中の神経細胞は無差別に握手しあう
        • 神経細胞のつながりは刺激されたときにのみ、かたちを成して構造を作り上げる
        • 忙しい部分が残り、通行量が少ない部分は廃止される
        • ナタリーの網膜細胞はどうつながりあうのがベストかを二度にわたって教えられる 最初は夢によって、次に光によって。
        • ヘレン・アダムズ・ケラー   失明 聴覚も喪失
        • 「ときどき、手は眼以上に美しい彫刻に敏感だと言えないだろうかと思います」
        • ラインやカーブのリズミカルな流れのすばらしさは、見るよりも触れたほうが繊細に。その意味で、古代ギリシャ人の彫像に作者の鼓動を感じられる
        • スズメバチ
        • 飛びながら食べ物の位置を見分ける粒子の粗い視覚を発達
        • 欠点:相対運動を見分けられない
        • スズメバチにとってすべては停止している
        • あなたが動くとハチは混乱する
        • 感覚の共同体
          • 眼はそれだけで独立した単一の奇跡ではない 視覚は感覚というファミリーの一つ
          • 眼そのものが共同体。見るというのは一つの事柄ではなく、サポートしあうさまざまな視覚の寄せ集め
        • わたしたちは広い範囲の視覚能力があることを当然だと考えているが、多くの動物はそのうちの一つあるいは二つだけで幸せにうまく生きている
        • すべての眼は光を扱わなければならない。だからどれほど変わった眼であっても共通点がある
        • 目立たないが極めて重要な共通点として、眼が動くということがある
        • 触覚と視覚の相違はわずかなものだ
        • わたしがヘレンの手をとって彫像から引き離すのは、ヘレンが明かりを消すのと同じだといえる
        • 動く眼
          • 視覚システムはもっぱら変化と動きを感知するために組み立てられている
          • 眼は世界の姿を見せてくれる これは魔法のように奇妙 どんな映画やビデオより優れたイメージ
          • カメラは厳しい規則に従わなければならない。早く動かせば世界はぶれる。やたらに移動させれば画面は大混乱
          • しかし眼はまわりのスペースを自由に探索できる。あちこちに視線を動かし 一瞥し 大きく移動させ、視線を揺らす。瞬きのあいまに。にもかかわらず対象の空間的な関係は常に維持されている。静止したものは静止、動いてるものは動いて。
          • すべての眼は動く それ自身の筋肉で、あるいは動く頭や身体で。眼の動きの重要性は、いまでは知覚と関心に関する最新研究の中心テーマになっている
          • プルキンエ
            • 自作の回転椅子でめまいを引き起こし、眼をへとへとにさせ、視覚を安定させている反射活動を調べようとした
          • 眼は動き続けることで世界を安定させる
          • それは反射という手段を通じて
          • プルキンエ反射。身体が動いて、液体で満たされた内耳の筒のなかの感覚毛が乱れたときに起こる。乱れで自分が空間をどう動いているのかがわかるのだが、この情報は身体のバランスをとる助けとなると同時に、眼の不随意運動を引き起こす。このおかげで、我々は動いても静止した物体は静止したままに見える。何かを見ながら頭を動かすと、反射によって眼が逆の方向に動き、頭の動きを相殺する
          • プルキンエが職を奪われずにすんだのは、友人であるヨハン・ウォルフガング・フォン・ゲーテのおかげ
          • ほとんどの動物は、ものの実体をあまり意に介していない
          • それがどこへ向かっているかのほうが関心大 動いてるならほっておけない
          • 動くターゲットは脅威か 食物か つがい相手だ。
          • 初期の進化。ものを見分けるためではなく、動きを見分けるため。ヒキガエルは飛んでいるものを舌で捕らえる。ゴミだったら吐き出す
          • ほとんどの動物はあきれるほど決まりきった暮らし。眼はイレギュラーに目ざとくなるよう進化
          • 人間は貪欲で、ものごとにふつう以上の関心
          • それでもやはり、何より動きを察知するよう
          • 二つの静止した光が近くで点滅すると、一つの点が動くように見える
          • この習性 木々や草むらの合間を動く獲物 それを見る捕食者 理にかなっている
          • ファイ現象
          • 周囲を見渡してみよう。頭をゆっくりと左右に動かす。どんなに頭を滑らかに動かしても、眼のほうはある場所からある場所へと「飛び飛びに」動くことがわかるはずだ
          • 眼は見ようとする対象をいつも確実に捉えようとする
          • 文章の文字の上で視線を動かしてみる。眼は断続的にしか動かない。ページを見ようとしなければ滑らかに動くがこれでは意味がない
          • ペンをあちこち動かして、それを眼で追ってみる。すると眼は滑らかに動く。視機性反射。網膜に移るイメージ安定のために視覚情報そのものを使っている。手振れ防止機能の生物版
          • 視線を定めていると、動くターゲットのイメージは1/1000秒単位で個々の光受容器を点滅させていく もし動きがそれよりずっと早ければ受容器が反応できず、ターゲットはぼやける。ゆっくりと動いていても、ターゲットはぼやけるかもしれない。だから眼は視界のなかを動くものをじっと見つめようとする さもないと見逃すかもしれない
          • 眼は関心対象を掴まえておこうと追うが、限度がある。対象がとてもはやく移動するとぼやける。そのとき眼は「移動撮影」を諦めて「アングル・ショット」に切り替える。これがサッカードである。対象から対象へと断続的に移動して、選択した一連の「静止画像」を見るのである
          • 眼球の断続的な不随意運動
          • フランス語でル・サッカードとは、帆が風でぱたぱたするさまを指す
          • サッカードは微妙でも繊細でもない
          • 眼がターゲットを通り過ぎてしまうのが珍しくないほど強力な動き。眼が大きく動くときには、常に小さなサッカードで修正が行われている
          • 何かをじっと見つめているときでさえ、眼は一秒に三、四回の割合でふらふらと動いている。この小さな動き(マイクロサッカード)を止めるには、眼を麻痺させねばならない
          • エルンスト・マッハは、下まぶたにパテを塗って止めようと試みた
          • もっとエレガントな方法
          • 小さいスポットライトつきのコンタクトレンズを装着
          • 被験者がどんなに眼を動かしても、常に網膜の同じ場所を照らす
          • 結果。驚愕。装着時に見えた光は、一秒後にはその光が見えなくなった
          • 眼は動きを感知する。どんなイメージでも網膜で完璧に静止していると消えてしまう
          • 眼は静止したものを見られず、対象を常に見ているためには、こまかく動いていなければならないのだ
          • 三対の筋肉が眼球を動かしている
            • 上下
            • 左右
            • 残り一対:理論的には軸を中心に眼球を回転
          • 動かす仕組みの真の機能をつきとめるためのモデルを作るのは容易でない
          • 眼球を完璧な球体、筋肉を紐と考えて作られた初期のモデルでは、結果は芳しくなかった
          • まずすべての筋は調和して動く。そこで球体と紐に簡略化したとしても、そのメカニズムはとんでもなく複雑 しかも筋は伸びるとそのふるまいも変化する 眼が違う方向を向くたびに違う作用をするということ
          • コンピュータシミュレーション 忍耐強く研究 得られたモデルは全世界で眼科の手術計画をたてるときに活用されてる
          • 眼がまったく動かせない人間
          • 筋がすっかり退化
          • にもかかわらず、大学生として手紙を書き、本を読み。視覚のハンディキャップはなさそう
          • 彼女の眼はサッカードしないが、正常に読むことができた
          • 不思議なこと。小鳥のような動き方。ぴくぴく動く。首を傾げ、頭を振る
          • 小鳥は主に頭を動かすことでサッカードする
          • 自然界のすべての眼が動くわけではない。むしろほとんどは、動物の眼は固定されている
          • 脊椎動物 骨格にしっかりはまっている
          • 長い柄の先に眼がついてるもの
          • ハエトリグモ。網膜のほうを動かす。パイロットがコックピットの中でガラスの円蓋を通してみるように
          • ほとんどの昆虫にとって、眼が固定されていても問題ない。身体が小さいから、身体全体の向きを変えればよい
          • 身体が大きい動物は、眼を動かす
          • 小さい動物、小鳥などは頭を動かす
          • さらに不思議なのは、小鳥の頭の動きが -昆虫の身体の動きさえもー わたしたちの眼の動きとそっくりだということだ
          • 小鳥もハエもわたしたちと同じように滑らかに対象を追跡するやり方と、断続的な動きおよび視線の固定という基本戦略を用いている。この戦略は動物界全体を通じて共通であることがわかっている
          • 動くターゲットを追うときに滑らかな動きが理にかなっているのは、昆虫でも小鳥でも人間でも同じだ
          • また眼の(あるいは頭や身体全体の)サッカードで連続的な視覚を一連の静止画に細かく切り分けると、動きのブレが最小限に抑えられて方向の狂いが少なくなり、しかも背景が静止しているところで動く対象を安定して補足することができる
          • 一見風変わりな人間の眼の動きは、じつはほとんど普遍的な視覚戦略だったのだ
      • "感覚―驚異のしくみ (ニュートン別冊)",2016.
        • ニューロン
          • 角膜
          • 虹彩
          • 水晶体
          • 毛様体
          • 強膜
          • 脈絡膜
          • 網膜
          • 硝子体
          • 眼筋
          • 視神経
        • 目玉を動かすしくみ
          • どこか一点をみつめていても、眼球はつねに小きざみにふるえている
          • ふるえ 意識できない 見た目にも分からない
          • ふるえが無いと、ものが見えなくなってしまう
          • 目の奥で光が当たる場所を細かく変え続けるはたらき
        • 光量の調節
          • 瞳孔括約筋
          • 瞳孔散大筋
        • 解像度
          • 中心窩
            • 窩 とは穴やくぼみのこと
          • 瞳孔側 | 神経節細胞 双極細胞 視細胞 | 脳側
          • 鳥類の視力は何故よい
            • 中心窩 二つ
            • 中心窩のへこみが深い 硝子体と網膜の境で光が大きく屈折 映像拡大
            • 面積あたりの神経節細胞の数が人の数倍
        • 光を受け取るしくみ
          • 視細胞
            • 桿体細胞 円柱 円板は膜でできた袋
            • 錐体細胞 円錐 円板は細胞の膜そのもの
        • 光刺激から電気信号へ
          • 視物質
            • 膜を7回貫通する構造をもつオプシン
              • 分子の構造が異なる3種類がある
              • 異なれば吸収しやすい波長もかわる
            • レチナール
          • 信号伝達役のタンパク質分子
          • イオン関門
          • においや甘味、苦味などを検知するタンパク質分子も、同様の7回貫通構造をもつ
        • 色覚の統合
          • 網膜は、色の情報を計算してから脳へ伝える
            • L M S
            • 複雑な配線
            • 心理学
            • 赤み 緑み
            • 青み 黄み
        • 色覚の進化
          • オプシン 4タイプ
            • 紫外/青型
            • 赤/緑
          • 5億年前 4タイプが出揃う
          • 緑 ロスト
          • 青 ロスト
          • 紫外が青寄りへ
          • 赤型が増える
      • 視線から何がわかるか-視線測定に基づく高次認知処理の解明
        • @article{2002,
          • title={視線から何がわかるか},
          • author={大野 健彦},
          • journal={認知科学},
          • volume={9},
          • number={4},
          • pages={565-579},
          • year={2002},
          • doi={10.11225/jcss.9.565}
        • }
        • https://www.jstage.jst.go.jp/article/jcss/9/4/9_4_565/_article/cited-by/-char/ja/
        • 瞳孔中心線 != 視線
        • 眼球運動の種類
          • 衝動性眼球運動 ものを見ようとして注視点を変える サッケード
          • 滑動性 ゆっくりと移動する物体を追尾する
          • 代償性 頭部を回転したときに逆方向へ発生する
          • 輻輳性 両眼で物体を注視するとき、物体が前後に動くと発生する
          • 個視微動 一点を注視中に発生
        • 視線データの種類
          • 停留点
            • 停留点座標
            • 停留時間
          • 瞬きの頻度
          • 瞬きの間隔
          • サッケード距離
          • サッケード頻度
          • 停留頻度
          • 瞳孔径
        • 分析手法
          • 統計的分析
          • 時系列的分析
          • 認知プロセスの推定
          • 認知プロセスの自動解釈
        • 視線の機能
          • 監視 対象の知覚情報を取得する
          • 表現 意図や感情を相手に伝達する
          • 調整 会話における発言権の授受を調整する
      • パーティクルフィルタとニューラルネットワークを用いた視線方向推定に関する一構成法
      • 視線検出装置を用いた研究者の論文の読み方の解析 - 情報学広場 - 国立
      • 視線特徴と画像特徴に基づくマルチ メディアコンテンツの選好推定 尾崎
        • 論文
          • タイトル: 視線特徴と画像特徴に基づくマルチメディアコンテンツの選好推定
          • 著者: 尾崎, 安範
          • 著者(別言語): Ozaki, Yasunori
          • 発行日: 2014年3月24日
          • 内容記述: 報告番号: ; 学位授与日: 2014-03-24 ; 学位の種別: 修士 ; 学位の種類: 修士(情報理工学) ; 学位記番号: ; 研究科・専攻: 情報理工学系研究科・電子情報学専攻
          • URI: http://hdl.handle.net/2261/56448
          • 出現カテゴリ: 025 修士論文
          • 1244025 修士論文(電子情報学専攻)
        • https://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=6&ved=0ahUKEwiL3obslOLTAhVShbwKHcEZDy4QFghFMAU&url=http%3A%2F%2Frepository.dl.itc.u-tokyo.ac.jp%2Fdspace%2Fbitstream%2F2261%2F56448%2F1%2F48126410.pdf&usg=AFQjCNErVeUJ1N_ngxx3F72RpRQ05Gqm-g&cad=rja
        • 視線情報
          • 固視
            • 固視( xation)とは,一点を注視している状態のことである.人は興味がある対象を無意識的に注視する傾向がある.注視している対象に興味がある場合,固視の継続時間(注視時間)がふえるといわれている[10].しかし,静的な対象であれば,注視時間を簡単に取り扱うことができるが,動画のような動的な対象の注視時間を取り扱うことは難しい.
          • 衝動性眼球運動(サッケード)
            • 衝動性眼球運動(saccade)とは,非常に高速度な眼球運動である.衝動性眼球運動は読みづらいため,以下ではサッケードと呼ぶことにする.注視する領域を切り替える際に起きるとされている.そこで逆にサッケードとサッケードの間を固視と通常定義される.固視が興味と関係が有ることから,サッケードは興味の移り変わりを意味している.
          • 固視微動
            • 人間は固視中にも無意識に絶えず眼球を動かしている.これを固視微動という.ある点を固視したまま,周辺のある部分に注意を向けると,固視微動の方向が注意を向けた方向へシフトするという研究[11]があるため,固視微動と内部状態に関係があるとされる.
          • 瞬き
            • 瞬きは眼球が乾燥しないよう眼球を定期的に涙液で被うなどの役割を持つ.瞬きの周期は環境(湿度,明るさ)に依存するが,性別や年齢によっても変わる.その他に瞬きは注視している対象に興味がある場合,興味がない場合に比べ,瞬目の回数が減ると言われている[10].また,覚醒度の周期によっても変動する.
          • 瞳孔の大きさ
            • 瞳孔(pupil)は眼球内に入る光量を調節するための眼球内にある器官である.人は異性のヌード写真を見ると,瞳孔が大きくなることがわかっている[12].また,一般に人は興味のある対象を見ると,瞳孔が大きくなるとされている[9].ただし,瞳孔が小さくなることとユーザの内部状態との関係はまだ特にわかっていない.
          • ピント調節
            • ピント調節(accomodation re ex)は眼球の網膜に結ぶ像のピントを水晶体により調整することである.眼精疲労がたまるとピント調節が遅くなることが知られており,ここから疲労について調べることができる.
          • スキャンパス
            • スキャンパスとは固視の軌跡である.顔が写っているヌード写真に性的魅力度を感じている場合,体と顔の交互に見る傾向があり,脳外科手術における習熟度に応じてスキャンパスの傾向が変わるなど,スキャンパスとユーザの内部状態と関係があると言える.しかし,スキャンパスの類似度などを始めとするスキャンパスの解析は困難である.
          • 人間の眼球の性質上,人間の視線は絶え間なく動いており,視線データから固視微動とサッケードを区分することは難しい.そこで通常,固視とサッケードを区分するために研究ごとで一定の基準を設けて区別することにしている
        • Larsonらは被験者にシーン認識を行わせたところ,中心視野の情報よりも周辺視野の情報よりが認識に役に立つ場合があると結論づけた[17].したがって,視線が関わる画像認識問題は視野を考慮しなければならない.
      • Scanpaths in eye movements during pattern perception.
      • Algorithms for Defining Visual Regions-of-Interest: Comparison with Eye Fixations Claudio M. Privitera and Lawrence W. Stark, Fellow, IEEE
        • @ARTICLE{877520,
        • author={C. M. Privitera and L. W. Stark},
        • journal={IEEE Transactions on Pattern Analysis and Machine Intelligence},
        • title={Algorithms for defining visual regions-of-interest: comparison with eye fixations},
        • year={2000},
        • volume={22},
        • number={9},
        • pages={970-982},
        • keywords={computer vision;grammars;matrix algebra;visual perception;algorithmically detected regions of interest;bottom-up context-free algorithms;clustering procedures;eye fixations;eye movements;human identified regions of interest;human perception;machine vision;top-down context-dependent sequences;visual regions-of-interest;Cameras;Clustering algorithms;Digital images;Humans;Image analysis;Image coding;Image processing;Machine vision;Motion measurement;Optical reflection},
        • doi={10.1109/34.877520},
        • ISSN={0162-8828},
        • month={Sep},}
        • http://staff.pccu.edu.tw/~tdl/DefineROI.pdf
        • 色々書かれてる
      • 地下鉄駅舎における探索歩行時の注視に関する研究
      • Can Computers Learn From Humans toSee Better?Inferring Scene Semantics From Viewers’ Eye Movements
        • @inproceedings{Subramanian:2011:CLH:2072298.2072305,
        • author = {Subramanian, Ramanathan and Yanulevskaya, Victoria and Sebe, Nicu},
        • title = {Can Computers Learn from Humans to See Better?: Inferring Scene Semantics from Viewers' Eye Movements},
        • booktitle = {Proceedings of the 19th ACM International Conference on Multimedia},
        • series = {MM '11},
        • year = {2011},
        • isbn = {978-1-4503-0616-4},
        • location = {Scottsdale, Arizona, USA},
        • pages = {33--42},
        • numpages = {10},
        • url = {http://doi.acm.org/10.1145/2072298.2072305},
        • doi = {10.1145/2072298.2072305},
        • acmid = {2072305},
        • publisher = {ACM},
        • address = {New York, NY, USA},
        • keywords = {eye movements, fixations and saccades, salient entities and interactions, scene semantics},
        • }
        • http://disi.unitn.it/~sebe/publications/RamMM11.pdf
        • 色々書かれてる
    • 既存の同様な取り組み
      • 眼から読み取る心の動き ――Heart-Touching-AIのキー技術 - NTTグル
      • 発話中の眼球運動に現れる個人性
        • @article{110009569666,
        • author="白間, 綾 and 小泉, 愛 and 北川, 智利",
        • title="発話中の眼球運動に現れる個人性",
        • journal="電子情報通信学会技術研究報告. HIP, ヒューマン情報処理",
        • ISSN="0913-5685",
        • publisher="一般社団法人電子情報通信学会",
        • year="2012",
        • month="may",
        • volume="112",
        • number="46",
        • pages="19-24",
        • URL="http://ci.nii.ac.jp/naid/110009569666/",
        • DOI="",
        • }
        • 見れない
        • 参考文献
            • Temporal and spatial factors in gait perception that influence gender recognition
                • BARCLAY C. D.
                • Percept. Psychophys. 23, 145-152, 1978
            • From the perception of action to the understanding of intention
                • BLAKEMORE S. J.
                • Nat. Rev. Neurosci. 2(8), 561-567, 2001
            • Recognizing friends by their walk : gait perception without familiarity cues
                • CUTTING J. E.
                • Bull. Psycho. Soc. 9(5), 353-356, 1977
            • Perception of emotion from dynamic point-light displays represented in dance
                • DITTRICH W. H.
                • Perception 25(6), 1996
                • FINDAY J. M.
                • Active vision : The psychology of looking and seeing, 2003
            • Categorizing sex and identity from the biological motion of faces
                • HILL H.
                • Curr. Biol. 11(11), 880-885, 2001
            • Gender discrimination in biological motion displays based on dynamic cues
                • MATHER G.
                • Proc. R. Soc. Lon. Ser. B 258, 273-279, 1994
            • Scanpaths in eye movemetns during pattern perception
                • NOTON D.
                • Science 171(3968), 308-311, 1971
            • Perceiving affect from arm movement
                • POLLICK F. E.
                • Cognition 82(2), B51-B61, 2001
            • Gaze bias both reflects and influences preference
                • SIMION C.
                • Nat. Neurosci. 6, 1317-1322, 2006
            • Yarbus, eye movements, and vision
                • TATLER B. W.
                • i-Perception 1, 7-27, 2010
            • Current visual scanpath research : a review of investigations into the psychotic, anxiety, and mood disorders
                • TOH W. L.
                • Compr. Psychiat. 52, 567-579, 2011
            • Decomposing biological motion : a framework for analysis and synthesis of human gait patterns
                • TROJE N. F.
                • J. Vis. 2(5), 371-387, 2002
                • TROJE N. F.
                • The Little Difference : Fourier Based Synthesis of Gender-specific Biological Motion, 2002
            • Person identification from biological motion : effects of structural and kinematic cues
                • TROJE N. F.
                • Percept. Psychophys. 67(4), 2005
            • Kinematic cues for person identification from biological motion
                • WESTHOFF C.
                • Percept. Psychphys. 69, 241-253, 2007
                • YARBUS A. L.
                • Eye movements and vision, 1967
      • 眼球のバイオロジカル・モーションに基づく個人識別
        • @article{白間 綾2013KJ00008685402,
          • title={眼球のバイオロジカル・モーションに基づく個人識別(日本基礎心理学会第31回大会,大会発表要旨)},
          • author={白間 綾 and 小泉 愛 and 北川 智利},
          • journal={基礎心理学研究},
          • volume={31},
          • number={2},
          • pages={236},
          • year={2013},
          • doi={10.14947/psychono.KJ00008685402}
        • }
        • 眼の動きは個人を識別するのに十分な物理的な手がかりを含むことが数学的に示された
      • 眼球運動に表れるその人らしさ
        • @article{白間 綾2014KJ00009351554,
          • title={眼球運動に表れるその人らしさ(日本基礎心理学会第32回大会,大会発表要旨)},
          • author={白間 綾 and 小泉 愛 and 北川 智利},
          • journal={基礎心理学研究},
          • volume={32},
          • number={2},
          • pages={251},
          • year={2014},
          • doi={10.14947/psychono.KJ00009351554}
        • }
        • 個人に固有の眼球運動パターンがある
        • 眼球運動は状況や時間を超えて変わらないその人らしさを他者に伝えている
        • 優秀発表賞
      • 眼球運動特性を用いたマインドワンダリングの判別
        • 注意が外部環境(課題)から内的な表象(課題無関連思考)に逸脱する現象をマインドワンダリング(mind wandering)と呼ぶ(Smallwood& Schooler,2006)
      • Look me in the eyes:A survey of eye and gaze animation for virtual agents andartificial systems
        • 詳しい
        • CG
      • Render me real?: investigating the effect of render style on the perception of animated virtual humans
        • 動画を見たいがまだ見つかってない
      • 眼は口ほどにモノを言う: 眼球運動計測の研究事
      • In the Eye of the Beholder: A Survey of Models for Eyes and Gaze
      • Current visual scanpath research: a review of investigations into the psychotic, anxiety, and mood disorders
      • 畳み込みニューラルネットワークを用いた微小眼球運動の検出
        • ほうほう
      • 大脳皮質と deep learning の類似点と相違点
    • 自分の視線を測定してみよう
      • できた
      • いい感じ
      • 遅延が若干気になるか
    • 推論システムのモチベーションは平気?
      • 平気じゃない
      • ディープラーニングで俺すげーがやりたい
      • 推論はできたら すげーになるけど、コスパがが
      • 推論システムが具体的に役立つケースを想像せねば
        • ブラウジングを鑑賞
        • 視線に応じてぼかした映像は面白いかも?
          • 直近 5つの中心視野のみくっきり 時間に応じてぼやける
          • 曇りつづける窓ガラスを、手で拭き取るのを繰り返すがごとく
        • 自身の状態把握
          • 元気なときの動き
          • 疲れてるときの動き
          • 既に世の中にあるけど
        • 新たなビッグデータを生み出すためのツール
          • 視線の傾向に、任意の概念に対する好き嫌いが含まれているとしたら
          • 二つの絵を表示して、より停留が多いほうを好むとか?
      • ケース想像するの飽きた。まぁでも、視線推論はなんだかんだでモチベが上がってきたきがす。俺ダビング
      • 視線の個人差の論文をもう一度チェック
        • フルで読みたいが、まだできず
          • 眼球運動に表れるその人らしさ
        • 別の興味深いのを見つけた
          • 視野特性を考慮した視覚的顕著性モデルの構築
            • 人間がどこをみるかを理解することは,人間の作業支援やデザイン,画像処理など,様々な分野 で重要である.近年,画像(映像)から視覚的注意を予測する手法として,視覚的顕著性モデルが 注目を集めている.これは輝度値や色などの静的特徴,並びに輝度値の変化などの動的特徴が,周 囲と異なる領域を抽出することにより,人間の注意の向けやすさを予測するものである.しかし, 従来モデルにおいては,対象画像(映像)全体の特徴を均一に扱っており,網膜周辺部と中心窩で の視覚特性の違いが考慮されていない.また,顕著性モデルの精度評価に用いる視線計測の被験者 実験の多くが,狭い視野範囲での視覚刺激を対象としており,現実の作業空間に即していない.本 研究では,現在の視線位置を手がかりにした,網膜の視覚特性に適した視覚的顕著性モデルの構築 を目指す.具体的には,網膜上の位置に対する周波数感度特性,サッケード間での視覚刺激の低次 特徴に注目した学習によって,各特徴の最適な統合を行う手法を構築する
          • Incorporating Visual Field Characteristics into a Saliency Map
          • 視覚的顕著度は、対象の領域が、人々の目をどれぐらい強く惹きつけるか、を指す程度のことか。ただし、幾何情報のみを考慮しており、物体の意味などは考慮していない。
          • 俺がやりたいのは、俺の視線移動そのものを再現すること。だからセーフ。
    • 自分の視線を測定してみよう2
      • Specifications for EyeX
        • Size 20 x 15 x 318 mm(0.8 x 0.6 x 12.5 in)
        • Weight 91 grams (0.2 lb)
        • Max Screen Size 27 inches
        • Operating Distance 20 - 35" / 50 - 90 cm
        • Track Box Dimensions 16 x 12" / 40 x 30 cm at 29.5" / 75 cm
        • Tobii EyeChip No
        • Connectivity USB 3.0 (separate cord)
        • USB Cable Length 180 cm
        • Head Tracking No
        • OS Compatibility Windows 7, 8.1 and 10 (64-bit only)
        • CPU Load 10%
        • Power Consumption 4.5 Watt
        • USB Data Transfer Rate 20 MB/s
        • Frequency 70 Hz
        • Illuminators Backlight Assisted Near Infrared(NIR 850nm + red light (650nm))
        • Tracking Population 95%
        • System Performance 2.0 GHz Quad-Core Intel i5 or i7, 8 GB RAM
      • What's the difference between Tobii EyeX and SteelSeries Sentry?
        • EyeX + SteelSeries固有 = Sentry
      • 既存の研究で使われたデータを見てみる
        • Incorporating Visual Field Characteristics into a Saliency Map
          • Figure 2 shows some sample images from our dataset. We collected 400 random images from Flickr Creative Commons. Gaze position data for these images were acquired binocularly at 60 Hz using a Tobii TX300 eye tracker [ 2011 ]. Fifteen test subjects participated in the gaze data collection. They were asked to sit approximately 133 cm away from a 65 -inch ( 143 . 5 × 80 . 2 cm) display in a dark room and look at images displayed on the full screen with a resolution of 1366 × 768 , and a chin rest was used to stabilize the subjects’ heads.
          • http://www.hci.iis.u-tokyo.ac.jp/datasets/
        • なるほど
      • 自分で測定してみようか
        • SDK
          • .NET
            • 注視点の座標をリアルタイムに出力するサンプル、を動かせた。理解できた
            • システムトレイに表示されるアプリが必要 Engineが同時に動作する
            • まばたき とか 瞳孔とかは分からないようだ
            • 何がわかる
              • 注視点
              • 凝視状態 X停留点
              • 眼の座標
    • #推論システムをディープラーニングで実現できそうか?
    • 推論システムを実現できそうか?
      • 眼球運動の仕組み概要
        • レンズ 絞り ピント
        • 網膜 中心/周辺視野
        • 形 色 質感 奥行き 動き
        • 対象と背景の分離 ゲシュタルト群化
        • 短期/長期記憶 物体/シーン認識 心象 ジオン ジスト
        • 他の感覚とか色々
        • 三対の眼筋(上下、左右、滑車付き斜め)に指示
        • いびつな球体である眼球が動かされる
      • アプローチ
      • 実現可不可の判断に、知識が必要
        • そもそも俺の眼球運動は、どのようなものか
          • 人間らしさとは?
          • 俺らしさとは?
        • 既存のルールベースはどこまでいけるのか
        • ディープラーニングで何ができて、何ができないのか
      • 知識を得る
        • そもそも俺の眼球運動は、どのようなものか
          • #猫
          • #昆虫
          • 本によると、捕食系は共通な点が多いんだっけか
          • #他人
            • ライセンスフリー無声映画を見て、視線を記録してみよう
              • ライセンスフリー無声映画
              • 記録方法
                • 何が得られる必要があるか
                  • 映画のある時刻における、視線
                  • 視線
                    • 注視点 or X停留点
                    • パラメータもいくつか
                    • 遅延が気になってたけど、タイムスタンプと照合する限りは遅延は僅少なのか?
                      • タイムスタンプの指す値は、相対的に使う必要があるようだ
                      • あまりあてにならんな。timestampからのapi呼び出しは4ms~40msとか? 遅延の是非は分からん! 測定後に手動で補正する必要がありそうだ
                        • http://developer.tobii.com/community/forums/topic/timestamp-clarification/
                          • Q
                            • In the Gaze SDK, what is the reference point of the timestamp provided via the tobiigaze_gaze_data ?
                            • How can I set it to a custom timestamp? I noticed that there are relevant function prototypes for callbacks to retrieve the timestamp and timesync, but there is no information at all about this.
                          • A
                            • The timestamp reference point can be considered an arbitrary point in time. There is no way to set it to a custom timestamp. What you would need to do is to create some small utility function for handling this yourself.
                            • For example: save the first received timestamp and at the same time save a reference timestamp based on your desired time measuring mechanism. For every new gaze data received, you can then subtract the first gaze data timestamp from the current gaze data timestamp and know how many microseconds has passed from your reference timestamp.
                            • The timestamp and timesync function prototypes are there for some specific experimental purposes and there is no plan to document or examplify the usage.
                          • Q
                            • Thank you for the answer. I have implemented this, but there is unknown latency and it is unclear if the gaze points processing happens in a FIFO manner, or you may be doing parallel processing, samples are dropped to achieve a desired frequency etc.
                            • The timestamp of a gaze point, I understand is obtained at the time the eye image is taken, it is then processed for an undefined amount of time until the point is available for use in the SDK. When the end-user (my) application receives the gaze point via the relevant callback is also undefined in a way, because it is not clear when and under what circumstances the callback event is fired.
                            • I measured the amount of temporal difference consecutive gaze samples have by using two different timestamps:
                            • (a) the one provides by the eye-tracker
                            • (b) the local timestamp of the host when the callback function was executed
                            • The results are inconsistent. For instance the reported time difference based on the eye-tracker timestamps is around 15ms, with a stdev of up to 2ms, while for the same gaze sample the callback is executed arbitrarily. For example sometimes the callback is fired for consecutive sample after 4ms, others can be 10ms, or even 40ms. What’s more, the reported timestamps have a very regular outlier every 10 gaze samples it appears a sample is probably dropped from the pipeline, since the time diff to the next sample is around 30ms (twice as much as the others). Look at my list at the end of the post, on lines: 1, 10, 19, 28, 37, 46. I took these measurements on the EyeX. I can try it on an X120, but not anytime soon unfortunately.
                            • So my intuition is that if I obtain the timestamp of the host at the time I receive the first gaze sample, that will most likely cannot by reliably assumed to also be the actual time that this gaze sample was timestamped.
                            • I still think that the SDK should allow setting a user defined timestamp in a very fast, low latency function before it starts tracking and all timestamps of the gaze samples computed are adjusted to take into account latency. Of course there is time drift over time etc., but at least timestamps will be much more accurate at the beginning.
                          • A
                            • Your observations are correct. But as Jenny said, the Gaze SDK time sync functionality and the EyeX Controller firmware is experimental and not adapted for the kinds of applications that require careful time sync.
                            • If you want to have full control of the clock synchronization, you should take a look at Tobii’s product lines for research and analysis. You already mentioned that you have access to an X120. If you use that together with the Tobii Analytics SDK 3.0, you should have the control you need.
                            • The Tobii EyeX product lines are primarily meant for games and consumer applications. We have not found any use case yet where this kind of careful time sync is required. But if we find that many of these applications require time sync, then we’ll have to add it.
                      • キャプチャ~API呼び出しは、30msぐらいの遅延とみていいのかも?
                        • http://acuity-ets.com/downloads/Tobii%20Eye%20Tracking%20Timing%20whitepaper.pdf
                          • 2.1 Eye tracker latency
                            • The latency of an eye tracker corresponds to the interval measured from the time when an image is captured by the sensor to when valid gaze data is outputted by the the TET Server to the network or an eye tracking application. This delay is the sum of the time taken for camera exposure, transfer, calculation and delays in the system. For the Tobii X50 Series the typical latency is between 25 ‐ 35 ms, when used in normal conditions and limited head ‐ motion on a 2.4 Ghz Pentium 4 Computer. The Tobii TX Series shows a typical latency between 27 ‐ 33 ms.
                      • つまり、タイムスタンプと照合する限りは、結構ばっちりなのかも
                      • 基準タイムスタンプの取得が鍵だな
                    • 簡易実験で何がいいかをチェックしよう。自作ツールでの不具合が気になるが、まず簡易実験を終わらせよう。その後に設計からやり直せばいい
                      • gaze point
                        • lightlyfiltered
                          • 悪くはない
                        • unfiltered
                          • 悪くない
                          • lightlyfilteredと比較すると
                            • がたがた感がでるが
                            • 遅延が少ないように感じる
                      • fixation
                        • sensitive
                          • 当然ながら遅延はより大きい
                          • X個視の点が自動で得られるのは良い
                        • slow
                          • 遅延大 & X個視の判定上 みたいな?
                      • Xどれが個視かを自前で計算するのは大変そうだ。Fixationのほうがいい。
                      • そしてモードはslowでいいだろう。リアルタイム用途では遅いが、測定後に使う分には問題なかろう
                        • Sensitive, will result in many fixations, sometimes very close and in quick succession.
                        • Slow, will result in fairly stable fixations but may leave somewhat late.
                      • begin/end timeがある模様
                        • To get information about the length of each fixation, the Fixation data behavior provides start time and end time for each fixation, in addition to the x and y point of each individual gaze point within the fixations. Each fixation correspond to a series of fixation events: Begin, Data, Data, … , End.
                        • e.EventTypeで、begin/gazePoint/endのいずれなのか識別するようだ
                • 方法を考える
                  • 実行して記録開始
                  • 動画を再生開始
                  • 特定の領域を注視して、動画時間とEyeTrackerタイムスタンプとの同期とす
                  • 動画を視聴終了
                  • トラッカー停止
                • ツールを作る
                  • ok
                • 既存のデータをチェック
                • 簡易実験
                  • 注視点可視化映像を生成
                    • 方法
                      • 映像調達
                      • 映像表示条件
                      • 注視点記録条件
                      • 記録
                      • 可視化
                        • 映像を連番画像に分解
                        • 注視点を円として書き込む
                        • 映像へと統合
                    • 実行
                      • 映像調達
                        • neko
                        • 854x480 29.97fps
                          • Video: MPEG4 Video (H264) 854x480 (16:9) 29.97fps 296kbps [V: h264 high L3.1, yuv420p, 854x480, 296 kb/s]
                          • Audio: AAC 44100Hz stereo 128kbps [A: SoundHandler (aac, 44100 Hz, stereo, 128 kb/s)]
                      • 映像表示条件
                        • カーテン
                        • 視距離:手先から肩
                        • 中央
                          • 映像の左上隅のXY座標:628, 269
                        • 100%
                        • mpc
                      • 注視点記録条件
                        • キャリブレーション
                        • FixationsRecorder.exe
                        • #左上隅を注視してから再生開始
                        • 実行してから5秒後に再生開始にしよう
                        • (時間同定用映像を最初に流すってのは有りだな
                      • 記録
                        • ok
                      • 可視化
                        • 映像を連番画像に分解
                        • 注視点を円として書き込む
                          • #映像時間と、注視点タイムスタンプを手動で同期
                          • 手動で編集
                            • 最初のタイムスタンプ+5秒後を、映像時間のスタートとする
                              • 850671842.534
                            • beginが一つしかない
                              • ふむ。sensitiveのほうがいいのかも?あるいは他?解像度の問題もあるか?
                              • #あれか、遅延が大きくなるのは処理が増えるからか。個視情報を付加するのがFixationsなのかな
                              • #いや、サッカードはたぶん捨ててくれてる. と思われる
                              • 捨ててないっぽいな
                                • To get information about the length of each fixation, the Fixation data behavior provides start time and end time for each fixation, in addition to the x and y point of each individual gaze point within the fixations. Each fixation correspond to a series of fixation events: Begin, Data, Data, ... , End.
                              • とりあえず続行
                          • octave-4.2.1-w64-installer.exe
                          • 1/30秒ごとの注視点座標の平均を算出
                          • 各フレームにそれを描画
                        • 映像へと統合
                          • ffmpeg -r 30 -i image_%03d.png -vcodec libx264 -pix_fmt yuv420p out.mp4
                  • OK. 悪くない. 時間同期はもう少し工夫すべきか。fixationは正解だ。あとsensitiveかslowか
                  • 固視と注視について調べた
                    • 固視と注視はよく混同して用いられている。たとえば、「固視下の眼振」が「注視眼振」と表現されているのをよくみかける。
                    • 両者は厳密に区別して用いられなければならない。「固視する」は英語の「fixate」のことである。一方、「注視する」は「gaze」のことである。ちなみに、Merriam-Webster’s Medical Dictionaryによれば、「fixate」と「gaze」は以下のように説明されている。
                    • Fixate: to focus one’s gaze on
                    • Gaze: to fix the eyes in a steady and intent look
                    • つまり、「gaze」すなわち「注視する」とは、視線方向を示す言葉である。これに対して「fixate」すなわち「固視する」とは、見ようとしている物体の像を中心窩で的確にとらえることを意味する。「的確に」とは「静止像として」という意味である。
                  • # eyexは、サッカード抑制を考慮してないのかも?
                  • gazeは、とにかく視線方向を出力かな
                  • fixationは、gazeをリアルタイムで分類した結果なのか? 要実験
                    • 各gazeと、対応するevent。必ずbegin/endにはさまれる?
                      • なんかイレギュラーを見つけた気もするが、必ずはさまれるっぽい
                      • あと、勘違いしてたな
                        • Fixationは、ほんとに凝視してるときを指すっぽい
                          • 一か所に視点が定まっている状態のことではない
                          • 位置が動いていても、凝視してるならFixationになるっぽい
                          • 英和でもそうだ。凝視のことだ
                        • まばたきすると、Endする
                    • 整理
                      • 眼球運動
                        • 監視
                          • 大雑把に言えば、個視と、サッケード(という素早い動作)の組み合わせ
                          • 対象補足において
                            • 対象が遅ければ滑らかに追従
                            • 対象が速ければサッケードで離散的に追従
                      • EyeX
                        • Gaze :視線の先の点。サッケード抑制は考慮してるかも
                        • Fixation:凝視のこと。まばたき程度でも途切れたと判断する模様。ある程度以上の継続時間がある凝視が大事なのかな
                    • slow と sensitiveの違い
                      • 凝視の判定の敏感さそのものかな~
                      • SDKドキュメントの英語の理解も十分でないな
                      • とりまslowで十分だな
                • 既存のデータをチェック2
              • 記録実行1 月世界旅行
                • 映像調達
                  • 上記参照
                  • Video: MPEG4 Video (H264) 620x480 30fps 820kbps [V: h264 main L3.0, yuv420p, 620x480, 820 kb/s]
                • 映像表示条件
                  • 部屋
                  • カーテン 隙間
                  • 視距離:手先から肩
                  • ディスプレイ:ProLite GB2888UHSU
                  • mpc
                  • 100%
                  • 中央
                    • 映像の左上隅のXY座標:705, 154
                • 注視点記録条件
                • 記録
                  • おk
                  • Apple software managerが途中で表示されてファッキン
                  • 存外 面白い作品だった よくできてる 笑わせてくれる
                • 可視化
                  • 映像を連番画像に分解
                  • 注視点を+として書き込む
                    • 手動で編集
                      • 最初のタイムスタンプ+10s後を、映像時間のスタートとし、それより前を削除
                      • スタートのイベントをData => Begin
                      • 12分52秒後は削除
                      • 最後のイベントをData => End
                      • NaNはとりま そのまま
                    • 各フレームの注視点座標の平均を算出
                    • 各フレームにそれを描画
                  • 映像へと統合
                    • ffmpeg -r 30 -i image_%03d.png -vcodec libx264 -pix_fmt yuv420p out.mp4
              • 評価 俺の視線移動はどんなものか
                • 何を見てるか
                  • 動いてるところ
                  • 話者
                  • 現象
                  • 生足
                  • 種々のオブジェクト
                  • (孤立
                • 目的
                  • 物語の把握
                    • シーン同定
                    • 登場人物把握
                    • 何が起きてるか把握
                    • 5W1H
                      • who
                      • what
                      • why
                      • when
                      • where
                      • how
                  • 映画製作の仕組み推定
                • 何を見てるか 客観データ量を利用
                  • 凝視時間はどんなもんか?
                    • 60区間
                      • 最長: 67 sec
                      • 大部分は 10 sec未満
                      • 50sec以上はどんなシーン
                        • a 32 43秒後 園長みたいな人出現
                        • b 35 165 = 2min 45s 着替え後
                        • c 46 369 6 9 月ズーム
                        • d 57 667 11 7 帰還開始
                    • あまり参考にならないな
                  • 他はすぐには思いつかない
              • (記録実行2 crcnsのやつ
                • 記録はしてない
                • 他の人と俺、大差は無いような気がする
                • あえて挙げるなら、より細かいとこまで見るのが俺らしい?
        • 既存のルールベースはどこまでいけるのか
        • ディープラーニングで何ができて、何ができないのか
          • https://hbr.org/2016/11/what-artificial-intelligence-can-and-cant-do-right-now
            • Having seen AI’s impact, I can say: AI will transform many industries. But it’s not magic.
            • A→B software is supervised learning
            • A→B is far from the sentient robots that science fiction has promised us. Human intelligence also does much more than A→B.
            • These A→B systems have been improving rapidly, and the best ones today are built with a technology called deep learning or deep neural networks, which were loosely inspired by the brain.
            • But these systems still fall far short of science fiction.
            • If a typical person can do a mental task with less than one second of thought, we can probably automate it using AI either now or in the near future.
            • the scarce resources are therefore:
              • Data. Among leading AI teams, many can likely replicate others’ software in, at most, 1–2 years. But it is exceedingly difficult to get access to someone else’s data. Thus data, rather than software, is the defensible barrier for many businesses.
              • Talent. Simply downloading and “applying” open-source software to your data won’t work. AI needs to be customized to your business context and data. This is why there is currently a war for the scarce AI talent that can do this work.
            • 任意の写像を得ることができて、そしてそれだけ
              • フランクニールセンも言ってたしな
      • 実現できそうか?
        • できそうな気がする
          • 俺の脳を再現できるわけじゃない
          • あくまで、視線移動を再現する写像が得られるだけ
  • 要件
    • 命名:視線推測システム
    • 以下の入力を受け取って、以下の出力を返す機能を有する
      • 入力
        • 映像
          • 連番カラー画像
          • 音声
      • 出力
        • 入力映像における俺の視線先を推測して得られる、注視点座標
  • 調査2
    • 実際にディープラーニング用のライブラリを使ってみよう
      • 機械学習ライブラリ
        • TensorFlow
        • Chainer
        • Caffe
        • Theano
        • Torch
        • scikit-learn
        • PyML
        • Pylearn2
        • PyBrain
        • keras
        • open ai baselines
        • PyTorch
      • kerasが良さそうだ
      • Dockerのコンテナ"vigilant_swanson"内でkerasを試す
        • 経歴
          • DockerFileでビルド
          • man, sudoをインストール
        • miniconda3でセットアップ
          • 簡易テスト
          • conda create --name myenv
          • source activate myenv
          • conda install numpy
        • tensorFlowをインストール
        • kerasをインストール
          • https://keras.io/
          • メモ
            • sudo docker start -ai 69fb58cd3505
            • source activate myenv
          • conda install scipy yaml HDF5 h5py cuDNN
          • conda install keras
        • kerasを試す
          • git clone https://github.com/fchollet/keras.git
          • python ../keras/examples/mnist_cnn.py
            • プログレスバーが面白い
            • 約1時間で80%。もっと時間をかければ、精度はさらに上がるのだろう
            • 98%ぐらいまでいかないと、CNNを使う意味ないしな
            • スクリプト内のコメントで12epochで98%とあったが、それが記されたのは1年前。再現できないのも無理はない気がする
              • 乱数の種も指定しなくなってるし etc
    • 勉強
      • 岡谷貴之 深層学習
        • 理解できないとこ
          • p43 最下段 何で転置? ていうかノルムの偏微分ってどうやるの
          • p61 共分散行列の固有値固有ベクトルによって捉え,表現。固有値の大きなものから順に。理解できてない
          • カルバック・ライブラー情報量
          • p69 無相関化する変換行列Pに自由度があることは、理論的には理解できるが、直感的 具象的 物理現象的な理解ができない、イメージできない。そしてZCA、対称行列に制限すると何故あんな不思議になる? あれか、PCAは直流から段々と、ZCAは互いに打ち消すように対称に、的な?
          • p128 CTCの考え方は分かった。それを効率的に計算する方法についても力説されているが、こっちは雰囲気までしか理解できていない
        • 読み終えた。概ね理解はできただろう
          • ニューラルネット
          • 最適化
          • cnn
          • rnn
          • ボルツマンマシン 確率的構造を持つデータ生成モデル
          • nnや自己符号化器を、制約付きボルツマンマシンという観点で解釈
          • dbnやdbmで事前学習してからnnへと転用
    • 勉強は飽きた
    • 近年のディープラーニングの進展をざざっと把握する
      • 方法
        • ググる
        • 本屋で関連する本を立ち読みする
        • 最新の論文のイントロをいくつか読む
        • 先駆者のツイートを辿る
      • 実行
        • ググる
          • びみょい
        • 本屋で関連する本を立ち読みする
          • びみょい
          • イルカ本と学会本が先端か
          • 学会本を購入
        • 最新の論文のイントロをいくつか読む
        • 先駆者のツイートを辿る
        • 記憶
          • GAN
            • データ生成
              • ジェネレータ 入力:乱数 出力:所望のデータ
              • ディスクリミネータ 上記出力が本物かどうか
          • SELU
            • Self-Normalizing Neural Networks
              • むずい
              • 既存のバッチ正規化とかだと、ドロップアウトなどのせいで不安定になる
              • SNNなら大丈夫
          • Adam
          • ResNet
            • 残差
            • ショートカット
          • VGG
          • Batch Normalization
            • 入力だけでなく、ネットワーク内の任意の場所でも正規化
        • Qiita
    • PyTorchも触る?
    • DBMを簡単に実装できるフレームワークはあるかな?
      • kerasは無理っぽい。フォークして実装してる人はいる
      • QuoraでのQ&A
        • あるにはあるっぽい
    • http://deeplearning.net
      • ツール一覧とかデータベース一覧とかある
    • kerasで実験
      • 複雑な関数を用意
        • 関数
          • function y = my_func(x)
            • if ( (-10 <= x && x < 0) ||
                • ( 8 <= x && x < 9) ||
                • ( 20 <= x && x < 40) )
              • y = x
            • else
              • y = 0;
            • endif
          • endfunction
        • 従来からある方法で関数近似してみる
      • データを生成
        • x = -100:0.5:100
        • (myenv) hoge@69fb58cd3505:~/work/0709/hoge.py
      • ネットワークを設計
        • x => FC(100) => ReLU => FC(1) => 恒等写像
      • 実装
        • ok
      • #テスト(実装)
      • 学習
        • ok
      • テスト(学習済みモデル)
        • ok
    • kerasで実験2
      • 同じ関数
        • 0.1でグラフ
      • サンプリング周期=0.5
        • グラフ
      • 従来からある方法で関数近似
        • 0.5から
          • Octave 4.2.1 @Win10
          • [p s mu] = polyfit(x, y, 10); plot(x, s.yf, 'r');
          • [p s mu] = polyfit(x, y, 20); plot(x, s.yf, 'r');
        • グラフ
      • NNで近似
        • 0.5から
          • keras 2.0.2 adam mse 500epochs
          • Input1 FC100ReLU FC1
            • fd26ba0
            • (別試行 loss: 46.2955
          • Input1 FC400ReLU FC1
            • 380873b
            • (別試行 loss: 41.0460
          • Input1 FC100ReLU FC100ReLU FC1
            • 17eedb7
            • loss: 38.8200
          • Input1 FC100ReLU FC100ReLU FC100ReLU FC1
            • bea6579
            • loss: 8.2908
        • グラフ
      • レポート画像としてまとめる
        • ok
    • https://www.tensorflow.org/get_started/get_started
      • なるほど
    • kerasで実験3
      • いかにして近似がなりたっているか明らかにする
        • TensorBoardを使ってみよう
          • TB用のログをはくようにする
            • kerasのバージョンを上げる
              • condaではパッケージがない
              • pipで入れた
            • コールバック生成時に全オプション指定だとエラーが出る
            • 最低限で
          • ポートフォワーディング
            • コンテナを停止
            • Image化
              • sudo docker commit 69fb58 my_python_dev_env
            • Imageから新しくrun、ポートマッピングしつつ
              • sudo docker run -it -p 1234:6006 my_python_dev_env
            • hoge@d8c3d0c813e5
            • source activate myenv
            • 次回用メモ
              • sudo docker start -ai d8c3d0c8
          • TB起動
            • tensorboard --logdir log
          • ブラウザアクセス
          • 見てみる
            • 良い感じ
            • ただ、近似の仕組みはわからんな
        • どうしよう
          • 入力系列に対する以下のユニットでの出力系列を得て考察する
            • 最終層につながる100ユニット
            • 同つながりの重みも要チェック
          • 得る
            • 出力系列x重み も
            • ok
          • 考察
            • 色んなインパルス的なものを合成してるんだな
        • 満足
        • レポート画像としてまとめる
          • ok
  • 外部設計
    • 今は気にしなくていいかな
  • 内部設計
    • 視線推測システムのネットワークを設計する
      • 自分の視線について理解を深める
        • 状況を固定
          • #部屋でアニメを初見で視聴
          • #ニコ動のコメントは無し
        • サンプルをいくつかとる
          • らきすた
            • ニコ動からDLするのが容易でない
          • DVDをレンタルしてこよう
          • シンゴジラでいいや
            • 記録した
              • MPCでの再生画面に記された経過時刻において、01:20:48 頃に記録を中止した
              • 記録された注視点情報によると、1時間22分 経過してるはず
              • mpcでの再生の僅かな遅延が蓄積した結果か?
            • DVDの規格上、720x480でデータが記録されるが、表示時には2.40:1へと引き延ばされるようだ
        • 観察し、視線の目的や方法を把握する
          • 適切に記録できてるか確認
            • mpc再生 の上にオーバーレイ表示
              • ツールを開発
                • 要件
                  • recored_fixations.csv
                  • 記録された注視点の位置にマーカーを表示。リアルタイム。mpcの上に透過でオーバレイ
                  • ランダムアクセスはとりあえず不要
                • 外部設計
                  • C#, Windows Form
                  • 再生ボタンで開始
                  • 時刻表示
                  • サークル
                • 内部設計
                  • 背景透過オーバーレイ
                  • タイマー 単位時間ごとに実行
                    • 経過時刻表示
                    • 記録読み込み, 経過時刻の直前まで読む。マーカーを直前の記録の位置へ
                • 実装
                  • ok
                • テスト
                  • ok
              • 実行 確認
                • 1: 188.007156803543,663.921506803312,85412100.562064,2
                • 2: 2291.77778884863,1461.14403691306,85491567.2197755,1
                • 1=>2で80秒も経過してる
                • イミフ
                • 関係ないが気づいた:視線を捉えてないとログはかないから、基準点となる最初のログのために、測定開始時は必ず画面を注視しとかないとだな
                • 1行目のデータがおかしなことになってる?
                • それを考慮すれば、MPCと同じ時間になるな
                • 1行目のデータを消す
                • 適切に記録できてる
                • 20分あたり以降は、注視点が実際より少し下になってる気がする
                  • 眼鏡とか姿勢とかずらしたから?
          • 参考
            • 月世界旅行
              • 何を見てるか
                • 動いてるところ, 話者, 顔, 現象, 人, 尻, 生足, 種々のオブジェクト, (孤立
              • 目的
                • 物語の把握
                  • シーン同定, 登場人物把握, 何が起きてるか把握
                  • 5W1H, who, what, why, when, where, how
                • 映画製作の仕組み推定
            • @crcnsのやつ
              • 記録はしてない
              • 他の人と俺、大差は無いような気がする
              • あえて挙げるなら、より細かいとこまで見るのが俺らしい?
          • 観察・把握
            • 視線の目的
              • 監視 対象の知覚情報を取得する
              • 月世界旅行と同じ感じ
            • 方法
              • 上記目的を達成するのに必要な領域を瞬時に見極め、そこを注視。余裕があれば他の領域も。すぐに見極められないときは画面内を探索する
                • 入力:画像と音声
                • 次に起こることを予測して先回りみたいなこともしてる
                • 登場人物だとかの物事の記憶も活用
                • ただ基本的には、話者を注目が多い
      • ネットワーク設計
        • 注視点データ生成モデルの確率的構造のグラフを推定して描いてみる
          • ok
        • とりあえず思いつく候補
          • DBM
          • DBN
          • CNN
            • 入力
              • 1枚の画像
              • 連番数枚の画像
              • 直前の注視点
              • 音声の窓スペクトル
            • 出力
              • 注視点
              • 注視点の移動変分
          • 注視点の候補列挙×その中の一つを選ぶ
          • RNN×CNN
          • GAN
          • ResNet
          • 転移学習
        • 設計法を調べる
          • https://stackoverflow.com/questions/37280910/how-to-design-deep-convolutional-neural-networks
            • Short answer: if there are design rules, we haven't discovered them yet.
            • Note that there are comparable questions in computing. For instance, note that there is only a handful of basic electronic logic units, the gates that drive your manufacturing technology. All computing devices use the same Boolean logic; some have specialised additions, such as photoelectric input or mechanical output.
            • How do you decide how to design your computing device?
            • The design depends on the purpose of the CNN. Input characteristics, accuracy, training speed, scoring speed, adaptation, computing resources, ... all of these affect the design. There is no generalized solution, even for a given problem (yet).
            • For instance, consider the ImageNet classification problem. Note the structural differences between the winners and contenders so far: AlexNet, GoogleNet, ResNet, VGG, etc. If you change inputs (say, to MNIST), then these are overkill. If you change the paradigm, they may be useless. GoogleNet may be a prince of image processing, but it's horrid for translating spoken French to written English. If you want to track a hockey puck in real time on your video screen, forget these implementations entirely.
            • So far, we're doing this the empirical way: a lot of people try a lot of different things to see what works. We get feelings for what will improve accuracy, or training time, or whatever factor we want to tune. We find what works well with total CPU time, or what we can do in parallel. We change algorithms to take advantage of vector math in lengths that are powers of 2. We change problems slightly and see how the learning adapts elsewhere. We change domains (say, image processing to written text), and start all over --but with a vague feeling of what might tune a particular bottleneck, once we get down to considering certain types of layers.
            • Remember, CNNs really haven't been popular for that long, barely 6 years. For the most part, we're still trying to learn what the important questions might be. Welcome to the research team.
            • share
            • answered May 17 '16 at 17:44
          • Best Practices for Applying Deep Learning to Novel Applications
            • 5 Apr 2017
            • 付録の、既存アプリ一覧が嬉しい
          • https://medium.com/towards-data-science/neural-network-architectures-156e5bad51ba
            • Mar 23, 2016
            • 既存の〜ネットを概括してくれてる
            • とても参考になる
            • 構造をどのように組むかが大事。ニールセンも言ってたな
            • データから採用すべき構造を決めるという話もあるが、ナウインプログレ
            • もう一度 読んでしっかり理解しよう
              • LeNet5
              • AlexNet
              • VGG
              • Network-in-network
                • NiN, 1x1convがよーわからん
                  • 特徴マップの各画素のチャンネル数を減らす的なことか?
              • GoogLeNet and Inception
              • Bottleneck layer
                • although we are doing less operations, we are not losing generality in this layer. In fact the bottleneck layers have been proven to perform at state-of-art on the ImageNet dataset, for example, and will be also used in later architectures such as ResNet.
                • The reason for the success is that the input features are correlated, and thus redundancy can be removed by combining them appropriately with the 1x1 convolutions
              • Inception V3 (and V2)
              • ResNet
                • they bypass TWO layers and are applied to large scales. Bypassing after 2 layers is a key intuition, as bypassing a single layer did not give much improvements. By 2 layers can be thought as a small classifier, or a Network-In-Network!
                • This is also the very first time that a network of > hundred, even 1000 layers was trained.
              • Inception V4
              • SqueezeNet
              • ENet
              • An analysis of modules
                • use ELU non-linearity without batchnorm or ReLU with it.
                • apply a learned colorspace transformation of RGB.
                • use the linear learning rate decay policy.
                • use a sum of the average and max pooling layers.
                • use mini-batch size around 128 or 256. If this is too big for your GPU, decrease the learning rate proportionally to the batch size.
                • use fully-connected layers as convolutional and average the predictions for the final decision.
                • when investing in increasing training set size, check if a plateau has not been reach.
                • cleanliness of the data is more important then the size.
                • if you cannot increase the input image size, reduce the stride in the con- sequent layers, it has roughly the same effect.
                • if your network has a complex and highly optimized architecture, like e.g. GoogLeNet, be careful with modifications.
              • Xception
              • Other notable architectures
                • FractalNet
              • The future
                • We believe that crafting neural network architectures is of paramount importance for the progress of the Deep Learning field. Our group highly recommends reading carefully and understanding all the papers in this post.
                • But one could now wonder why we have to spend so much time in crafting architectures, and why instead we do not use data to tell us what to use, and how to combine modules. This would be nice, but now it is work in progress. Some initial interesting results are here.
              • Acknowledgments
                • This post was inspired by discussions with Abhishek Chaurasia, Adam Paszke, Sangpil Kim, Alfredo Canziani and others in our e-Lab at Purdue University.
            • より詳細は
              • An Analysis of Deep Neural Network Models for Practical Applications
          • Deep Convolutional Neural Network Design Patterns
            • 2 Nov 2016
            • 出力をどう繋げるかまで言及されてるのは嬉しい
              • 平均
              • 最大値
              • jointly concatenate
        • arXivで類例を探す
          • Learning Gaze Transitions from Depth to Improve Video Saliency Estimation
            • 候補→候補の確率分布とか
          • Cardiologist-Level Arrhythmia Detection with Convolutional Neural Networks
            • 既読
          • Deep Learning for Sensor-based Activity Recognition: A Survey
          • An All-In-One Convolutional Neural Network for Face Analysis
            • 顔の候補は既存法
            • あとはオールインワン
              • 顔かどうか
              • 性別 年齢 向き 名前
            • 名前と顔画像が対になったデータベースがあるようだ
            • 結構深いCNN 部分的に取り出して各タスクへと最適化
            • 1x1convもあった
          • Learning Photography Aesthetics with Deep CNNs
            • 写真の美しさを評価、およびその評価の内部を理解
            • ResNet50
              • 各 残差ブロックの出力を取り出してプールし、全結合レイヤにつなげて、回帰
          • Tracking The Untrackable: Learning To Track Multiple Cues with Long-Term Dependencies
            • cnn lstm
            • よーわからn
          • EnhanceNet: Single Image Super-Resolution through Automated Texture Synthesis
          • Deep Learning for Time-Series Analysis
            • むずかしくて わからん
            • ウェーブレット変換と似ているという記述があった
            • デシメーション無しにすると良い結果が?
          • YOLO9000: Better, Faster, Stronger
            • a state-of-the-art, real-time object detection system that can detect over 9000 object categories
          • #Detecting Unexpected Obstacles for Self-Driving Cars: Fusing Deep Learning and Geometric Modeling
          • SaltiNet: Scan-path Prediction on 360 Degree Images using Saliency Volumes
            • 俺がやりたいこととかなり近い 超参考になる
            • Related Work
              • Saliency prediction
                • Boosting bottom-up and top-down visual features for saliency estimation
                  • 2012
                  • ディープラーニング無し
                  • we combine
                    • low-level features such as orientation, color, intensity, saliency maps of previous best bottom-up models
                    • with top-down cognitive visual features (e.g., faces, humans, cars, etc.)
                  • and learn a direct mapping from those features to eye fixations using
                    • Regression, SVM, and AdaBoost classifiers
                • DeepGaze II: Reading fixations from deep features trained on object recognition
                • A Deep Spatial Contextual Long-term Recurrent Convolutional Network for Saliency Detection
                  • 2016
                  • adopt a pretrained CNN model to extract local convolutional image features
                  • the preatrained Places-CNN [18] model is also used to extract a scene feature vector
                  • Then local image features and the scene vector are both normalized and fed into the DSCLSTM, which propagates the global and scene contextual information to each image location
                  • the saliency map can be obtained by a simple convolutional layer, and the NSS loss between the upsampled saliency map and the human eye fixation locations is used as supervision to train the whole network
                  • 静止画用っぽいな
                • MIT Saliency Benchmark
                  • 2016
                  • The goal of this website is to be the most up-to-date, online source of saliency model performances and datasets. We believe that a continuously updated all-in-one comparison page will serve as an essential resource to document and promote progress in the field of saliency modeling.
              • Scanpath prediction
                • Unlike with the related task of saliency map prediciton, there has not been much progress in the task of scanpath prediciton over the last years. Cerf et al. [4] discovered that observers, even when not instructed to look for anything particular, fixate on a human face with a probability of over 80% within their first two fixations. Furthermore, they exhibit more similar scanpaths when faces are present. Recently, Hu et al. [9] have introduced a model capable of selecting relevant areas of a 360◦ video and deciding in which direction should a human observer look at each frame. An object detector is used to propose candidate objects of interest and a RNN selects the main object at each frame.
            • Architecture
              • Saliency Volumes
                • Saliency mapの積み重ね
              • ConvolutionalNeuralNetwork
                • 10層
              • Scan-path sampling
                • 1) number of fixations of each scanpath
                • 2) the duration in seconds of each fixation; and
                • 3) the location of each fixation point
                • The first two values were sampled from their probability distributions learned from the training data
                • The location of each fixation point was also generated by sampling, this time from the corresponding temporal slice from the predicted saliency volume. Different strategies were explored for this purpose, presented together with their performance in Section 5.
            • Training
              • We trained the CNN in SaltiNet over 36 images of the 40trainingimagesfromtheSalient360dataset[27],leaving aside 4 images for validation
              • Our network took approximately two hours to train on a NVIDIA GTX Titan X GPU running the Keras framework with Theano backend. The learning rate was set to α = 0.001 during all the training
            • Experiments
              • Datasets
                • Due to the small size of the training dataset, we performed transfer learning to initialize the weights of the network using related tasks. First, the network was trained to predict saliency maps using the SALICON dataset [10] usingthesamearchitectureofSalNet[23]. Then,thenetwork was trained to predict saliency volumes generated from the iSUN dataset [29] that contains 6000 training images. The network was fine-tuned using the 60 images provided by the international scientific challenge for scan-path prediction on 360◦ images Salient360! Challenge [27]. Thisdatasetwasacquiredbasedontheimagesdisplayedon the head mounted display (HMD) Oculus-DK2. Eye gaze data was captured from a Sensomotoric Instruments(SMI) sensor into the HMD and transmitted eye-tracking data binocularly at 60Hz. Observers could freely observe the scenewithnotaskinstructed. Each360imageswereshown for 25 seconds and there was a 5 second gray screen between two images
          • #MULTIPLE OBJECT RECOGNITION WITH VISUAL ATTENTION
          • #Supervising Neural Attention Models for Video Captioning by Human Gaze Data
        • #グーグルスカラーで類例を探す
        • 設計する
          • 要件
            • 以下の入力を受け取って、以下の出力を返す機能を有する
              • 入力 映像
              • 出力 入力映像における俺の視線先を推測して得られる、注視点座標
          • ディープなニューラルネット
          • 既存の学習済みモデルを使わねばみたいな気持ちがあったが、それはただの思い込みに近い。種々のオブジェクトを識別できる能力はマストではない希ガス
          • 俺の視線移動の傾向から、モデルに必要な能力を推測する
            • トップダウン
              • 物語の把握
                • シーン同定, 登場人物把握, 何が起きてるか把握
                • 5W1H, who, what, why, when, where, how
              • 映画製作の仕組み推定
              • シーン認識
              • 物体認識
                • 動いてるところ, 話者, 顔, 現象, 人, 尻, 生足, 種々のオブジェクト, (孤立
              • 現象認識
              • 時空間認識
              • 細かいとこまで見る
              • 余裕があれば他の領域も
              • 画面内を探索
              • 次に起こることを予測して先回り
              • 登場人物だとかの物事の記憶も活用
              • 有限時間において、できる限り情報を得る
            • ボトムアップ
              • 明るさ
              • 色味
              • 質感
              • 奥行き
              • 境界
              • 動き
              • 主観的輪郭
              • 視覚短期記憶
              • 境界
              • ゲシュタルト群化
              • 対象と背景の分離
              • 中心/周辺視野
              • 直前の注視点
            • #俺の注視点座標を予測するというよりは、映像から得られる情報の量を最大化するような視線移動=俺の注視点、とした方が良いかもしれん
            • # 人体というハードウェア的制約
            • # 中心視および周辺視 の画像から、得られる情報の量を定義
          • 構造を定義
            • 入力
              • 前処理:色変換 色差間引き 平均値シフト デシメーション DCT?
              • 複数フレーム
                • 100ms 50ms 現在
              • (音声も必要だろうが、そこまで考慮するのはコスパ悪し
            • 出力
              • 注視点の座標
              • #個々の矩形領域に注視点が含まれる確率
            • ResNet + LSTM
            • それまでの映像と注視点という文脈を考慮するにはどうすればいい?
            • あらためて
              • 入力
                • 複数フレーム
                  • 100ms前 50ms前 現在
                    • もうちょっと過去まで遡ったほうがいいかな
                    • 枚数も増やしたほうがいいかも
                • 前処理
                  • 色変換してYのみ抽出
                  • デシメーション
                  • 平均・分散の正規化
                  • 中心/周辺視野を反映
                    • 対象フレームに反映するさい、1フレーム前の注視点座標にもとづく
              • 出力
                • 注視点の座標
              • 構造
                • ResNet, NiN, Bottleneck
                • 参考
                  • Deep Residual Learning for Image Recognition
                    • Formally, denoting the desired underlying mapping as H(x), we let the stacked nonlinear layers fit another mapping of F (x) := H(x) − x. The orig- inal mapping is recast into F(x)+x. We hypothesize that it is easier to optimize the residual mapping than to optimize the original, unreferenced mapping. To the extreme, if an identity mapping were optimal, it would be easier to push the residual to zero than to fit an identity mapping by a stack of nonlinear layers.
                    • In our case, the shortcut connections simply perform identity mapping, and their outputs are added to the outputs of the stacked layers
                    • In image recognition, VLAD [18] is a representation that encodes by the residual vectors with respect to a dictionary,
                    • For vector quantization, encoding residual vectors [17] is shown to be more effec- tive than encoding original vectors.
                    • The operation F + x is performed by a shortcut connection and element-wise addition. We adopt the second nonlinearity after the addition (i.e., σ(y), see Fig. 2).
                    • The form of the residual function F is flexible. Exper-iments in this paper involve a function F that has two or three layers (Fig. 5), while more layers are possible. But if F has only a single layer, Eqn.(1) is similar to a linear layer: y = W1x + x, for which we have not observed advantages.
                    • We also note that although the above notations are about fully-connected layers for simplicity, they are applicable to convolutional layers. The function F(x, {Wi}) can repre-sent multiple convolutional layers. The element-wise addi-tion is performed on two feature maps, channel by channel.
                    • The identity shortcuts (Eqn.(1)) can be directly used when the input and output are of the same dimensions (solid line shortcuts in Fig. 3). When the dimensions increase (dotted line shortcuts in Fig. 3), we consider two options: (A) The shortcut still performs identity mapping, with extra zero entries padded for increasing dimensions. This option introduces no extra parameter; (B) The projection shortcut in Eqn.(2) is used to match dimensions (done by 1×1 convolutions). For both options, when the shortcuts go across feature maps of two sizes, they are performed with a stride of 2.
                    • Our implementation for ImageNet follows the practice in [21, 41]. The image is resized with its shorter side ran-domly sampled in [256, 480] for scale augmentation [41]. A 224×224 crop is randomly sampled from an image or its horizontal flip, with the per-pixel mean subtracted [21]. The standard color augmentation in [21] is used. We adopt batch normalization (BN) [16] right after each convolution and before activation, following [16]. We initialize the weights as in [13] and train all plain/residual nets from scratch. We use SGD with a mini-batch size of 256. The learning rate starts from 0.1 and is divided by 10 when the error plateaus, and the models are trained for up to 60 × 104 iterations. We use a weight decay of 0.0001 and a momentum of 0.9. We do not use dropout [14], following the practice in [16].
                    • We argue that this optimization difficulty is unlikely to be caused by vanishing gradients. These plain networks are trained with BN [16], which ensures forward propagated signals to have non-zero variances. We also verify that the backward propagated gradients exhibit healthy norms with BN. So neither forward nor backward signals vanish. In fact, the 34-layer plain net is still able to achieve compet-itive accuracy (Table 3), suggesting that the solver works to some extent. We conjecture that the deep plain nets may have exponentially low convergence rates, which impact the reducing of the training error. The reason for such opti-mization diffifiulties will be studied in the future.
                    • This comparison verifies the effectiveness of residual learning on extremely deep systems.
                    • Last, we also note that the 18-layer plain/residual nets are comparably accurate (Table 2), but the 18-layer ResNet converges faster (Fig. 4 right vs. left).
                    • the small dif-ferences among A/B/C indicate that projection shortcuts are not essential for addressing the degradation problem.
                    • Deeper non-bottleneck ResNets (e.g., Fig. 5 left) also gain accuracy from increased depth (as shown on CIFAR-10), but are not as economical as the bottleneck ResNets. So the usage of bottleneck designs is mainly due to practical considerations. We further note that the degradation problem of plain nets is also witnessed for the bottleneck designs
                    • 50-layer ResNet: We replace each 2-layer block in the 34-layer net with this 3-layer bottleneck block, resulting in a 50-layer ResNet (Table 1). We use option B for increasing dimensions. This model has 3.8 billion FLOPs.
                    • The 50/101/152-layer ResNets are more accurate than the 34-layer ones by considerable margins (Table 3 and 4). We do not observe the degradation problem and thus en-joy signififiant accuracy gains from considerably increased depth. The benefits of depth are witnessed for all evaluation metrics (Table 3 and 4).
                  • Cardiologist-Level Arrhythmia Detection with Convolutional Neural Networks
                    • The ECG arrhythmia detection task is a sequence-to-sequence task which takes as input an ECG signal X = [x1, ..xk], and outputs a sequence of labels r = [r1, ...rn],such that each ri can take on one of m different rhythm classes. Each output label corresponds to a segment of the input. Together the output labels cover the full sequence.
                    • We use a convolutional neural network for the sequence-to-sequence learning task. The high-level architecture of the network is shown in Figure 2. The network takes as input a time-series of raw ECG signal, and outputs a sequence of label predictions. The 30 second long ECG signal is sampled at 200Hz, and the model outputs a new prediction once every second. We arrive at an architecture which is 33 layers of convolution followed by a fully connected layer and a softmax.
                    • In order to make the optimization of such a network tractable, we employ shortcut connections in a similar man-ner to those found in the Residual Network architecture (He et al., 2015b).
                    • The network consists of 16 residual blocks with 2 convolutional layers per block. The convolutional layers all have a filter length of 16 and have 64k filters, where k starts out as 1 and is incremented every 4-th residual block
                    • When a resid-ual block subsamples the input, the corresponding shortcut connections also subsample their input using a Max Pool-ing operation with the same subsample factor
                    • Before each convolutional layer we apply Batch Normal-ization (Ioffe & Szegedy, 2015) and a rectififid linear acti-vation, adopting the pre-activation block design (He et al., 2016a).
                    • We train the networks from scratch, initializing the weights of the convolutional layers as in (He et al., 2015a). We use the Adam (Kingma & Ba, 2014) optimizer with the default parameters and reduce the learning rate by a factor of 10 when the validation loss stops improving. We save the bestmodel as evaluated on the validation set during the opti-mization process. [ht
                  • Identity Mappings in Deep Residual Networks
                    • Our derivations reveal that if both h(xl) and f(yl) are identity mappings, the signal could be directly propagated from one unit to any other units, in both forward and backward passes. Our experiments empirically show that training in general becomes easier when the architecture is closer to the above two conditions.
                    • keeping a “clean” information path (indicated by the grey arrows in Fig. 1, 2, and 4) is helpful for easing optimization
                    • To construct an identity mapping f(yl) = yl, we view the activation functions (ReLU and BN [8]) as “pre-activation” of the weight layers, in contrast to conventional wisdom of “post-activation”. This point of view leads to a new residual unit design, shown in (Fig. 1(b))
                    • イントロまでしか読んでないが、全部 読んでたら進まん。表層は掴めた
                  • Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift
                    • Training Deep Neural Networks is complicated by the fact that the distribution of each layer’s inputs changes during training, as the parameters of the previous layers change. This slows down the training by requiring lower learning rates and careful parameter initialization, and makes it no-toriously hard to train models with saturating nonlineari-ties. We refer to this phenomenon as internal covariate shift, and address the problem by normalizing layer in-puts.
                  • Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification
                    • A proper initialization method should avoid reducing or magnifying the magnitudes of input signals exponentially. So we ex-pect the above product to take a proper scalar (e.g., 1). A sufficient condition is: 1/2 nl Var[wl] = 1, ∀l. (10)
                    • This leads to a zero-mean Gaussian distribution whose stan-dard deviation (std) is √2/nl. This is our way of initializa-tion. We also initialize b = 0.
                • 詳細な構造まで決める
                  • ResNet50 + Cardiologistな感じで。
                  • Input : 前処理済みの数フレーム分の画像,WxH=538x224(元は1152x480相当),Ch=数フレーム
                  • Conv 7x7, 64, 2
                  • BN
                  • ReLU
                  • |--
                  • | Conv 1x1
                  • | BN
                  • | ReLU
                  • | Dropout
                  • | Conv 3x3
                  • | BN
                  • | ReLU
                  • | Dropout
                  • | Conv 1x1
                  • |--
                  • |--
                  • | BN
                  • | ReLU
                  • | Dropout
                  • xM Conv 1x1
                  • | BN
                  • | ReLU
                  • | Dropout
                  • | Conv 3x3
                  • | BN
                  • | ReLU
                  • | Dropout
                  • | Conv 1x1
                  • |--
                  • |--
                  • | BN
                  • | ReLU
                  • | Dropout
                  • | Conv 1x1
                  • | BN
                  • | ReLU
                  • | Dropout
                  • xN FC
                  • | BN
                  • | ReLU
                  • | Dropout
                  • | Conv 1x1
                  • |--
                  • BN
                  • ReLU
                  • FC
                  • Output:注視点の座標(x, y), 0~W => 0~1
  • 実装
    • まずはローカルの仮想マシンで、簡易実験しよう
      • 実験用のデータを考案
        • 背景:波打つ
        • 対象:矩形がひょいひょい移動 #違う周期で波打ちつつ、ランダムに移動
        • 可視化して確認
          • ok
        • メモ
          • 画像として保存
            • scipy.misc.imreadとか無い
              • You need to install PIL. From the docs on scipy.misc:
              • Note that the Python Imaging Library (PIL) is not a dependency of SciPy and therefore the pilutil module is not available on systems that don’t have PIL installed.
              • After installing PIL, I was able to access imread as follows:
            • pilはpython2
            • opencv
          • sudoできん
            • パスワード求められる
            • rootのパスは削除したはずなのに?
            • 設定ファイルもいじらないとダメだったらしい
              • I totally agree this is a bad thing to do. But it can be done in debian by doing as you have done passwd -d root to clear the password then editing /etc/pam.d/common-auth. Find the pam_unix.so line and add nullok to the end if its not there or change nullok_secure to be just nullok if yours says nullok_secure.
            • #dockerfileを編集するとこから やり直さないとあかんな
            • # rootのパスワードは削除せず、コンテナ化してログインしてrootで色々設定してから非rootのユーザ作って云々とすべきか?
            • というか、docker使わんでええやん という
            • これでrootで入れた
              • sudo docker exec -it -u root gifted_kepler bash
              • rootのパスワードを再設定:desuyone
              • hogeのパスワードを再設定:desuyone
      • kerasで実装
        • https://keras.io/getting-started/functional-api-guide/
          • Embedding layer ってなに
            • one-hot表現をN次元ベクトル表現にしてるだけっぽい。線形変換
              • Keras embedding layers: how do they work?
                • Q
                  • I am starting using Keras to build neural networks models.
                  • I have a classification problem, where the features are discrete. To manage this case, the standard procedure consists in converting the discrete features in binary arrays, with a one-hot encoding.
                  • However it seems that with Keras this step is not necessary, as one can simply use an Embedding layer to create a feature-vector representation of these discrete features.
                  • How these embeddings are performed?
                  • My understanding is that, if the discrete feature f can assume k values, then an embedding layer creates a matrix with k columns. Every time I receive a value for that feature, say i, during the training phase, only the i column of the matrix will be updated.
                  • Is my understanding correct?
                • A
                  • As one may easily notice - multiplication of a one-hot vector with an Embedding matrix could be effectively performed in a constant time as it might be understood as a matrix slicing. And this exactly what an Embedding layer does during computations. It simply selects an appropriate index using a gather backend function. This means that your understanding of an Embedding layer is correct.
        • 色々と変更したけどok
        • メモ
          • sudo docker start -ai gifted_kepler
          • sudo docker exec -it gifted_kepler bash
      • 学習
      • 予測
      • むずい!!
  • 計算資源が必要。環境整備
    • 何がある
    • Windowsネイティブでテンソルフロー
      • だるすぎ
    • Bash on Ubuntu on Windows
      • 期待はできるが、なんとも。βだし。シェルとか変えられるのかな
    • Virtual Boxのままでいこう
      • リソースを変えよう
        • プロセッサ数を増加 1=>4
        • メインメモリ 2GB => 4GB
      • tensorboard用にポートフォワード
        • 1234=>6006
      • Dockerは使わず、VB上にそのままminiconda3をインストールしよう
        • miniconda3
        • TensorFlow
          • #cpu特化
          • pip install tensorflow
        • keras
          • conda install scipy yaml HDF5 h5py cuDNN
          • conda install keras
          • pip install -U keras
        • ok
  • 実装2
    • 簡易実験
      • メモ
        • sudo add-apt-repository ppa:octave/stable
        • sudo apt-get update
        • sudo apt-get install octave
      • イケてるぜおい!
      • 汎用性チェック
        • 別の位置
        • 背景を単色
        • 矩形の明るさ変更
          • 割といけてるっぽい!!!
      • 可視化
        • from generate_formed_data import input_data; import numpy as np; np.savetxt('input_data.txt', np.reshape(input_data, (200, 64*128*1)))
        • 座標を書き込んだ連番画像
        • 思ったより微妙だった
          • 原因候補
            • loss:mseではなく、ユークリッド距離の二乗誤差とすべきだ
            • 現在フレームだけでなく、直近 数フレームを使うほうがいいだろう
            • 学習時間不足?
            • ハイパーパラメータが不適切?
            • サンプル少ない?
            • 入力画像の画面解像度 小さすぎ?
            • ネットワークの構造?
              • 配置
              • カーネルサイズ
              • 特徴数
              • FC不足?
              • ボトルネックで解放したあとに、後続がなく、ダウンサンプリングされてるから、意味なし系?
            • バグ? 俺,keras,tf
      • 内部解析
        • 最初のConv2Dの64種のカーネルだけは見てみよう
          • なんともいえん
        • あとTensorBoardもみておくか
          • なんともいえん
      • レポートとしてまとめて報告
  • さてどうしよう
    • 視線推測しちゃうか
    • イデア
      • 人間の網膜と同様に、diffだけ入力してみようか
      • 網膜に同一パターンを固定して投射すると、何も見えなくなるのを再現できるぐらいに
      • いや、それはあまり有意義でない希ガス
  • #テスト

方法2

  • 計算資源の確保
  • モデル実装
  • データの用意
  • 学習
  • 視線推測してみる

実行2

  • 計算資源の選定
  • モデル
    • 設計
      • 入力
        • 5フレーム
          • 現在 50, 100, 150, 200ms前
        • 前処理
          • 色変換してYのみ抽出
          • デシメーション 538x224
          • 平均・分散の正規化
          • 中心/周辺視野を反映
            • 周辺視野部分はぼかす
            • 対象フレームに反映するさい、1フレーム前の注視点座標にもとづく
      • 出力
        • 注視点の座標
      • 構造
        • Input : HxWxT
        • Conv 2D, 7x7, 256, 2
        • BN
        • ReLU
        • MaxPool
        • |--
        • | Conv 1x1
        • | BN
        • | ReLU
        • | Dropout
        • | Conv 3x3
        • | BN
        • | ReLU
        • | Dropout
        • | Conv 1x1
        • |--
        • |--
        • | BN
        • | ReLU
        • | Dropout
        • xM Conv 1x1
        • | BN
        • | ReLU
        • | Dropout
        • | Conv 3x3
        • | BN
        • | ReLU
        • | Dropout
        • | Conv 1x1
        • |--
        • |--
        • | BN
        • | ReLU
        • | Dropout
        • | Conv 1x1
        • | BN
        • | ReLU
        • | Dropout
        • xN FC
        • | BN
        • | ReLU
        • | Dropout
        • | Conv 1x1
        • |--
        • BN
        • ReLU
        • FC
        • Output:注視点の座標(x, y)
      • 誤差
    • >>>
    • やっぱり、半透明矩形のデータで。データ以外は本番と同じ
    • >>>
  • データの用意
    • #種々の映像、注視点。質のいいものに
    • #シンゴジラ、03:00~15:00
    • #前処理法を確定する
    • #処理済みを伝送するか、圧縮されたものを伝送してから前処理するかは、適宜
    • 半透明矩形を再利用
    • ok
  • モデル2
    • 実装
      • 全サンプルを一度にメモリにロードは無理
      • 適宜ロード
        • どうすっぺか
          • train_on_batch
          • fit_generator
            • あくまで、バッチ単位で投げる
            • バッチの選び方は、自分の実装に依存する
          • keras.utils.Sequence
            • OrderedEnqueuer
            • train_on_batchをよしなに呼び出してるようだ
        • fit_generatorでいこう
      • ok
    • テスト
      • #最小構成で
      • 前回と同様な構成で
        • Epoch 100/100
        • 3/3 [==============================] - 25s - loss: 19.8991 - val_loss: 229.5931
        • 同様な精度が出た
        • ok
      • depth2にしたらどうなる?
        • Epoch 100/100
        • 3/3 [==============================] - 26s - loss: 13.1005 - val_loss: 517.4009
        • lossはより早く小さくなった気がするが、val_lossが下がるのが遅いな。時間かければ十分にいけそうだが
        • DropOutのOn/OFFによるものだろうか
        • BatchNormの挙動
          • 各特徴マップに対して、バッチ内で正規化っぽい? gamma, beta, moving_mean, moving_var
          • ユニット単位なのかと思っていたが。要勉強
        • DropOutとBatchNormを両方外したら、loss と val_lossとで同様になった
          • 公式:学習時とテスト時でモデルの振る舞いが異なる場合(例えば DropoutやBatchNormalization の利用時など)
          • Dropoutは分かるが、なんでBatchNormも影響?
            • バッチ、ミニバッチ(またはエポック、バッチ)
            • ミニバッチ単位で正規化
            • 本番時は、各ミニバッチ単位を無難に考慮した形にする? というか、普遍的な感じで正規化?
            • depthを増やしたから変動が増えた?
            • 論文嫁って話だな
        • まぁおkでしょう
  • gceでの環境構築
    • gce 東京リージョンでもGPUが使える、と思っていたが誤りだった
    • どうしよう
    • ・GCE 海外リージョン GPU
    • ・GCE 国内リージョン CPU
    • ・さくら高火力 TITANも可
    • Amazon EC2 定番
    • Microsoft Azureは無いな
    • http://qiita.com/shouta-dev/items/5aa4a746b31b9be4838d
      • 学習時間
        • おおざっぱで、GPU有はCPUのみの10倍 早くなる
      • 計算グラフの構築時間は?
      • メモリ使用量は?
    • まぁあれだ。GPUはmustで良さそうだ
    • コストだとか課金体系に気軽さが足りない感じなので、さくらは無し
    • すると
    • Amazonはぐちゃってるらしいし、Googleさんに頼ろう
      • GCE 海外リージョン(台湾) GPU
        • ぐぐると、日本からのアクセスにおいて、台湾vsUSでは、台湾に軍配があがってるっぽい
  • ローカルのVMではできないのか?
    • 無慈悲
      • Total params: 11,381,954
      • Trainable params: 11,369,602
      • Non-trainable params: 12,352
      • ____________________________________________________________________________________________________
      • Epoch 1/1
      • 2017-08-01 13:41:30.026768: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE4.1 instructions, but these are available on your machine and could speed up CPU computations.
      • 2017-08-01 13:41:30.026854: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE4.2 instructions, but these are available on your machine and could speed up CPU computations.
      • 2017-08-01 13:41:30.026872: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use AVX instructions, but these are available on your machine and could speed up CPU computations.
      • 強制終了
    • model.compileまでは完了できてるようだ
    • fit_generatorの途中で 強制終了
    • なぜ?
      • topでcpuとメモリを監視しながらやってみた
      • メモリが食いつぶされ、さらにスワップメモリまで食いつぶされると、”強制終了”するようだ
      • メモリ不足だよというメッセージが出ないのが気になるが。。。
      • たぶんそういうことなのだろう
      • tensorflowのメモリ使用量がどれぐらいになるかをググったが、ようわからん
    • flatten => 16FCを取り除いてみた
      • 以下が出た
        • 2017-08-02 11:55:28.331136: W tensorflow/core/framework/op_kernel.cc:1152] Resource exhausted: OOM when allocating tensor with shape[64,112,269,256]
        • Traceback (most recent call last):
        • File "/home/hoge/miniconda3/envs/。。。
      • Linuxは、メモリが不足してシステムが停止する恐れがある際、メモリリソースを多く消費しているプロセスを強制的に殺します。 これをOOM Killerといいます。 重要なプロセスでも問答無用で殺しにきます。
      • やはりメモリ不足が原因なのだろう
    • パラメータをいじって軽くしてから実行. commit 16b20e677
      • Epoch 1/5
      • 18/18 [==============================] - 143s - loss: 31103.8108 - val_loss: 26143.0156
      • Epoch 2/5
      • 18/18 [==============================] - 131s - loss: 12686.6993 - val_loss: 426828.6875
      • Epoch 3/5
      • 18/18 [==============================] - 135s - loss: 8581.8623 - val_loss: 6613873.5000
      • Epoch 4/5
      • 18/18 [==============================] - 134s - loss: 5453.3051 - val_loss: 10043300.0000
      • Epoch 5/5
      • 18/18 [==============================] - 131s - loss: 4033.3740 - val_loss: 5137273.5000
    • ok
  • gceでの環境構築2
    • GCE 海外リージョン(台湾) GPU
    • gcp無料トライアル登録
      • クレカ番号や住所なども登録
      • 300$
      • 個人認証のためのクレカ番号
      • 明示的にアップグレードしない限り、請求されることはない
    • https://medium.com/google-cloud/jupyter-tensorflow-nvidia-gpu-docker-google-compute-engine-4a146f085f17
    • インスタンスをいったん 停止
      • sudo poweroff
    • コンテナ内でtensorflow-gpu/kerasを使えるようにする
      • コンテナ生成
        • tensorflowの要件
          • NVIDIA requirements to run TensorFlow with GPU support
            • If you are installing TensorFlow with GPU support using one of the mechanisms described in this guide, then the following NVIDIA software must be installed on your system:
              • CUDA® Toolkit 8.0. For details, see NVIDIA's documentation. Ensure that you append the relevant Cuda pathnames to the LD_LIBRARY_PATH environment variable as described in the NVIDIA documentation.
              • The NVIDIA drivers associated with CUDA Toolkit 8.0.
              • cuDNN v5.1. For details, see NVIDIA's documentation. Ensure that you create the CUDA_HOME environment variable as described in the NVIDIA documentation.
              • GPU card with CUDA Compute Capability 3.0 or higher. See NVIDIA documentation for a list of supported GPU cards.
              • The libcupti-dev library, which is the NVIDIA CUDA Profile Tools Interface. This library provides advanced profiling support. To install this library, issue the following command:
              • $ sudo apt-get install libcupti-dev
        • ということは
          • nvidia/cuda:8.0-cudnn5-runtime
        • sudo nvidia-docker run -it --rm -p 4321:6006 --name 'uhaok' nvidia/cuda:8.0-cudnn5-runtime
        • 整備
          • apt-get update
          • apt-get install
            • man sudo
          • useradd -G sudo -m -s /bin/bash hoge
          • passwd hoge
            • desuyone
        • #hogeで入る
        • #sudo docker start -ai 69fb58cd3505
        • #sudo nvidia-docker run -it --rm -p 4321:6006 --name 'uhaok' nvidia/cuda:8.0-cudnn5-runtime
        • # sudo apt-get install -y vim git tree wget bzip2 ca-certificates libglib2.0-0 libxext6 libsm6 libxrender1 mercurial subversion
        • 抜けたらコンテナが残ってない
        • ワンタイムな感じなのか? 不明
        • script.git, myDockerfile.git
        • fromで上記のを起点にいこう
          • myDockerfile/miniconda3_on_gpu
        • ./build.bash
        • sudo nvidia-docker run -it -p 4321:6006 --name 'uhaok' miniconda3_on_gpu
        • 今度は抜けても残ってる
        • sudo nvidia-docker start -ai uhaok
          • 5a4de6ed9659
        • nvidia-smi で見えてるのを確認
      • miniconda3 設定
        • conda create --name myenv
        • source activate myenv
        • conda install numpy
      • tensorflow
        • sudo apt-get install libcupti-dev
        • (source activate myenv
        • pip install tensorflow-gpu
        • 確認
          • python
            • import tensorflow as tf
            • hello = tf.constant('Hello, TensorFlow!')
            • sess = tf.Session()
            • print(sess.run(hello))
          • うまくいかん
            • import tensorflow
            • Traceback (most recent call last):
              • File "/home/hoge/miniconda3/envs/myenv/lib/python3.6/site-packages/tensorflow/python/pywrap_tensorflow.py", line 41, in
                • from tensorflow.python.pywrap_tensorflow_internal import *
              • File "/home/hoge/miniconda3/envs/myenv/lib/python3.6/site-packages/tensorflow/python/pywrap_tensorflow_internal.py", line 28, in
                • _pywrap_tensorflow_internal = swig_import_helper()
              • File "/home/hoge/miniconda3/envs/myenv/lib/python3.6/site-packages/tensorflow/python/pywrap_tensorflow_internal.py", line 24, in swig_import_helper
                • _mod = imp.load_module('_pywrap_tensorflow_internal', fp, pathname, description)
              • File "/home/hoge/miniconda3/envs/myenv/lib/python3.6/imp.py", line 242, in load_module
                • return load_dynamic(name, filename, file)
              • File "/home/hoge/miniconda3/envs/myenv/lib/python3.6/imp.py", line 342, in load_dynamic
                • return _load(spec)
            • ImportError: libgomp.so.1: cannot open shared object file: No such file or directory
            • During handling of the above exception, another exception occurred:
            • ...
            • https://stackoverflow.com/questions/43764624/importerror-libgomp-so-1-cannot-open-shared-object-file-no-such-file-or-direc
              • sudo apt-get install libgomp1
            • キタ――(゚∀゚)――!!
              • 2017-08-03 09:22:33.650239: I tensorflow/core/common_runtime/gpu/gpu_device.cc:940] Found device 0 with properties:
              • name: Tesla K80
              • major: 3 minor: 7 memoryClockRate (GHz) 0.8235
              • pciBusID 0000:00:04.0
              • Total memory: 11.17GiB
              • Free memory: 11.09GiB
      • keras
        • conda install scipy yaml HDF5 h5py cuDNN
        • #conda install keras
        • pip install keras
      • ok
  • データ伝送
    • gaze_predictor.git
    • conda install opencv
    • wave_surface_simulation.git
    • python train_my_resnet.py
      • Epoch 1/5
      • 2017-08-03 09:31:27.035992: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE4.1 instructions, but these are available on your machine and could speed up CPU computations.
      • 2017-08-03 09:31:27.036129: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE4.2 instructions, but these are available on your machine and could speed up CPU computations.
      • 2017-08-03 09:31:27.036187: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use AVX instructions, but these are available on your machine and could speed up CPU computations.
      • 2017-08-03 09:31:27.429320: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:893] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
      • 2017-08-03 09:31:27.430653: I tensorflow/core/common_runtime/gpu/gpu_device.cc:940] Found device 0 with properties:
      • name: Tesla K80
      • major: 3 minor: 7 memoryClockRate (GHz) 0.8235
      • pciBusID 0000:00:04.0
      • Total memory: 11.17GiB
      • Free memory: 11.09GiB
      • 2017-08-03 09:31:27.430805: I tensorflow/core/common_runtime/gpu/gpu_device.cc:961] DMA: 0
      • 2017-08-03 09:31:27.430861: I tensorflow/core/common_runtime/gpu/gpu_device.cc:971] 0: Y
      • 2017-08-03 09:31:27.430908: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1030] Creating TensorFlow device (/gpu:0) -> (device: 0, name: Tesla K80, pci bus id: 0000:00:04.0)
      • 3/18 [====>.........................] - ETA: 61s - loss: 52646.72922017-08-03 09:31:39.362720: I tensorflow/core/common_runtime/gpu/pool_allocator.cc:247] PoolAllocator: After 2823 get requests, put_count=2656 evicted_count=1000 eviction_rate=0.376506 and unsatisfied allocation rate=0.448813
      • 2017-08-03 09:31:39.364353: I tensorflow/core/common_runtime/gpu/pool_allocator.cc:259] Raising pool_size_limit_ from 100 to 110
      • 18/18 [==============================] - 21s - loss: 32170.1360 - val_loss: 30591.2480
      • Epoch 2/5
      • 18/18 [==============================] - 11s - loss: 13043.6295 - val_loss: 159833.1562
      • Epoch 3/5
      • 16/18 [=========================>....] - ETA: 1s - loss: 8756.34132017-08-03 09:32:10.383118: I tensorflow/core/common_runtime/gpu/pool_allocator.cc:247] PoolAllocator: After 5690 get requests, put_count=5702 evicted_count=1000 eviction_rate=0.175377 and unsatisfied allocation rate=0.17768
      • 2017-08-03 09:32:10.383242: I tensorflow/core/common_runtime/gpu/pool_allocator.cc:259] Raising pool_size_limit_ from 256 to 281
      • 18/18 [==============================] - 11s - loss: 8553.2174 - val_loss: 1129257.0000
      • Epoch 4/5
      • 18/18 [==============================] - 11s - loss: 5383.6748 - val_loss: 1676245.7500
      • Epoch 5/5
      • 18/18 [==============================] - 11s - loss: 3917.7969 - val_loss: 1342944.0000
    • 比較
      • 131s → 11s
  • 学習
    • ResourceExhaustedError (see above for traceback): OOM when allocating tensor with shape[64,55,134,256]
    • いじった
      • メモリに乗るよう
    • nvidia-smi
      • 10942MiB / 11439MiB
    • いけるな
    • 誤って保存したモデルを消してしまった
    • やりなおした
    • メモ
  • 学習したモデルを保存
    • 180MBのモデル。どう保存しよう
    • #Dropboxでいくか
    • とりあえずSCPで持ってくるか
      • sudo docker cp <コンテナID>:/etc/my.cnf my.cnf
      • sudo docker cp uhaok:/home/hoge/work/gaze_predictor/my_model.h5 ./
      • scp
      • G:\Dropbox\PC\成果物\学習済みモデル\gaze_predictor\51217e371f35\my_model.h5
      • gaze_predictor_51217e37.h5
  • predict
    • ローカルの仮想マシン上でモデルをロードしてpredict
    • plot3 悪くない
    • 可視化しよう
    • 面白い
    • 未知パターンでどうなるか
      • 生成
        • 別の動き
        • 静止
        • 背景白
        • 背景黒
      • 予測
        • ok
      • 可視化
        • ok
      • 汎用性は皆無だな!
      • 画面の中心を原点とするような座標系にしたほうが良いかも?
  • 解析?
    • 過適合してるから興味ないな
  • 報告?
    • 同上
  • リベンジ?
    • だるい
    • 飽きてしまいそうだ
    • 次いっちまうかー

実行3 俺の視線推測

  • 方法
    • 設計
    • データ用意
    • 実装
    • 学習
    • 予測
      • 既知
      • 未知
  • 実行
    • 設計
      • 入力
        • 5フレーム(メモリに乗せるにはせいぜい3フレ
          • 現在 50, 100, 150, 200ms前
        • 前処理
          • 色変換してYのみ抽出
          • デシメーション 538x224
          • 平均・分散の正規化
          • 中心/周辺視野を反映
            • 周辺視野部分はぼかす
      • 出力
        • 次フレームの注視点の座標(画面中央が原点、画面解像度と同程度の精度)
      • 構造
        • これまで同様&GPUに乗る
      • 誤差
    • データ用意
      • ソース
      • 必要なデータ
        • 前処理済みの、12x60x60 = 43200フレーム
        • 各フレームに対応する注視点
      • 用意
        • 各フレームに対応する注視点
          • 平均
          • 穴には、直前ので埋める
          • ok
        • 前処理済みの、12x60x60 = 43200フレーム
          • 動画(03:00~15:00)を連番画像に分解
          • 色変換してYのみ抽出
          • デシメーション 538x224
          • #平均・分散の正規化
          • 中心/周辺視野を反映
            • 周辺視野部分はぼかす
              • 視聴条件(表示領域:1339x563)において、それなりにはっきり見えるのは
                • 半径24ピクセルぐらい?
                • デシメーション後では、
                  • 24/2.5
              • ぼかし画像 と くっきり画像とで、ガウシアンマスクで重ねる
            • ok
    • 実装
      • ok
    • 学習
      • インスタンス
        • 104.199.254.83
        • 35.194.215.119
        • ok
      • docker
      • source activate myenv
      • git pull
      • データ転送
        • tar -cf xxxx.tar directory
        • tar -xf xxxx.tar
        • scp
        • ok
      • スクリプト修正
      • 実行
        • なんか重いぞ
          • epoch云々がはじまらない
          • 入力受け付けなくなった
          • ブラウザから強制停止
          • cpuとメモリ増やすか
            • x1 3.75Gから
            • n1-standard-4(vCPU x 4、メモリ 15 GB)
          • 相変わらずはじまらないな
          • tensorboard用のコールバックをはずしたら、はじまるようになった
            • 履歴を保持するためのメモリが膨大になってたのか?
          • TensorBoardの、勾配保存をOFFにしてコールバック
            • ok
        • 推移
          • ok
        • 定期保存チェック
          • ok
        • TensorBoardチェック
          • tensorboard --logdir log
          • ok
        • 検証データが1バッチ 16サンプルだけってのは、はなはだナンセンスなのでは?
          • 確かに
          • 約40000サンプル
          • 600サンプルぐらいならリーズナブル?に計算可
          • ただ、どう選ぶかはむずいな
          • 網羅的に選んでも、overfitを防げないし
          • かといって特定の時間を切り出しても、それが代表たりうるかの判断も大変
          • とりあえず網羅的に選んで隔離すればいいか
          • 設計
            • batch_indices_for_training
              • b = [a for a in range(30) if a not in vali]
            • batch_indices_for_validation
          • 実装
            • ok
          • テスト
            • ok
          • メモリにのらねぇ! 結局16サンプル
        • TensorBoardを見たらヒストグラムが出てた。コールバックはあれか、オプションのあれは勾配の書き出しのスイッチだけで、いずれにせよ重みや出力の書き出しはするのか
          • だからメモリもたくさん必要? いや、それはまた別問題? コールバックを追加しないようにしたら大きく変化するかも
      • 学習のやめどきが分からんな。lossは下がり続けてるし、val_lossも大まかには下がっている傾向
      • タダじゃないんだし、今のエポックが終わったらやめよう
      • モデルをローカルにもってくる
      • インスタンスを落とす
      • ok
    • 予測
      • 既知
        • 1バッチで簡易的に。plot3
          • 結構いい感じだ!
        • しっかりやってみるか
          • 入力
            • 真の注視点が反映されたフレーム
            • or
            • モデルが予測した注視点が反映されたフレーム
          • どうしよう
            • 前者なら、正解との比較がしやすい。実装も楽
            • 後者なら、まさにモデルそのもの。予測と注視点反映を交互にするのを実装が要る
          • 両方やる。前者から
        • 真の注視点が反映されたフレーム
          • 設計
            • 順に
            • y,x
          • 実装
            • ok
          • 予測
            • 12分の映像
            • 6時間かかるな
          • 可視化
            • 注視点をマークして再生
            • びみょい
            • おぉっていう瞬間があることにはあるが...
            • 人工無能というか、ハイパー不器用というか、劣化俺というか
            • 画面全体がガチャガチャ動いたら、注視点もとりあえずガチャガチャ動かしとけっていう感じ?
            • 丸暗記感があるというか
            • 連続しているのはすごいが
            • if文網羅 感
        • モデルが予測した注視点が反映されたフレーム
          • 設計
            • 入力
              • フレームのファイルパス、初期注視点
            • 出力
              • 予測注視点 系列
            • python
              • 予測
              • シェル呼び出し → octave → 注視点反映
          • 実装
            • ok
          • 予測
            • ok
          • 可視化
            • ヒストグラム
              • yは 少々ぽい
              • xは びみょい. はなはだびみょい
            • 注視点をマークして再生
              • "入力を 真の注視点が反映されたフレーム" のときと同じような感じ
              • おぉっていう瞬間があることにはある
              • 周辺視野をぼかし過ぎたかな?
              • 入力と出力 を定義するだけだと、ちときついかな?
                • モード
                  • 追従対象サーチ
                  • 一つあるいは複数の対象を適宜切り替えつつ追従
                  • 全体把握
                • 出力
                  • 注視点座標
                  • 注視点の移動量
                • しかし、仕組みを考慮しだせばキリがない
      • 未知
      • #未知2
      • 未知3
        • 静止画を見せたらどうなる?
        • 調達
        • アス比が538:224になるよう、両脇に灰
          • 512x512 => 1230x512
        • 予測
          • 50ms, 20fps
          • 初期心象の注視点をランダム
          • 何通りかやってみたが、いずれの場合でも、最終的に(-26, -15)あたりに収束するな
        • #可視化
      • #未知4
      • # ツイート
      • # そういう意味では、マンデルブロ集合の美しさは例外的だ。💡‼️。これのズーム映像を、ワシのかわいいAI君に視てもらおうかな。
      • 未知5
        • 調達
        • 予測
          • ok
        • 可視化
          • どんな感じ?
            • 俺の視線移動をダビング出来たとは、まだまだ言えないね
            • 物体認識は頑張るけど、シーン認識は頑張らないというか
            • 注視点近くのエッジや動きを辿る感じ
            • 大きい変化があったらそっちに向かう
            • Good
              • 淡い輪郭でも辿ってくれる
              • 全体的に、個視とサッケードのバランスが良い感じ
              • CGは意外と良い感じ
            • Bad
              • 画面に動きがないときとかはダメ。さまよってくれない
              • 並木道とか、下で人が歩いているのに、最初は注目しない
              • 水の高速度撮影も、びみょい
              • 色味は無視してるから、運動会の赤い玉も注目しない
              • 炎のところ、なぜか炎じゃなくて噴射している方ばかりを注目
          • 中央付近で注視点をガチャガチャ動かしてるだけで、それっぽく見えてしまうのか? それなりに文脈(映像)に沿ったもののような気はするが.
            • ガチャガチャverを作って見れば分かるが、だりーな
          • 従来法と比べてどう?
            • 静止画の視覚的顕著度に関する研究は多くある
            • 静止画でどのように視線を動かすかもある. scan-path
            • 動画においてはあまりないっぽい
            • 例えば以下は、おおまかな注目領域を推定
              • http://www.kecl.ntt.co.jp/people/kimura.akisato/saliency2-j.html
              • 良い感じではある
              • ただ、実際の注視点は単一の座標であるのに対し、上記のは複数の領域
              • いやまぁ注視点は確率変数みたいなもので定義されるべきという話もあるのだろうが
              • にしても、その確率変数からどのようにサンプリングするかという話もあるわけですよ
              • しかも時間軸でそれっぽく連続的に
            • ふむ。ディープラーニングならではの良さは得られてるかな?
    • 解析
      • 最初の畳み込みのカーネルを可視化した
        • #ガボールウェーブレットがある?
        • いや、無いわ
        • 互いに似たものがいくつかある
        • 垂直エッジ、水平エッジ
        • ガウシアン
        • 時間変化
      • #https://github.com/raghakot/keras-vis
      • 種々の入力に対する、各層の出力を可視化してみよう
        • 方法1
          • モデルの全体像 把握。図にする
        • 実行1
        • 方法2
          • 可視化する出力を選定
          • 選定した出力それぞれにおいて、
            • 映像NHKCCの各ビデオショットにおいて、
              • 応答を得る(応答:3階のテンソル, or 1階)
              • 各チャンネルにおいて
                • 可視化してpngで保存
          • 統合
        • 実行2
          • 可視化する出力を選定
            • activation_1 112 269 64 0~8?
            • max_pooling2d_1 55 134 64
            • activation_4 55 134 256
            • activation_7 55 134 256
            • activation_10 55 134 256
            • #activation_13 28 67 512
            • #activation_16 28 67 512
            • #activation_19 28 67 512
            • activation_22 28 67 512
            • #activation_25 14 34 1024
            • #activation_28 14 34 1024
            • #activation_31 14 34 1024
            • #activation_34 14 34 1024
            • #activation_37 14 34 1024
            • activation_40 14 34 1024
            • activation_41 16
            • activation_44 16
            • activation_47 16
            • activation_50 16
            • #dense_11 2
          • ビデオショット全部は無理。シーンを選定
            • 交差点
              • 06128.jpg
              • 07105.jpg
          • 選定した出力それぞれにおいて、
            • activation_1
              • 映像NHKCCの各ビデオショットにおいて、
                • 応答を得る(応答:3階のテンソル, or 1階)
                • 各チャンネルにおいて
                  • 可視化してpngで保存
              • とりあえずできた
              • ずっと真っ暗になってしまうものもあるな
              • 0~8でまとめて正規化は不適切だな
              • 一度 全部を走査して統計量を得てから、可視化が必要
                • チャンネルごとに
              • 走査処理を分離
              • 統計量取得 & 可視化
              • ok
          • まとめてdo
            • #activation_1 112 269 64
            • max_pooling2d_1 55 134 64
            • #activation_4 55 134 256
            • #activation_7 55 134 256
            • activation_10 55 134 256
            • activation_22 28 67 512
            • activation_40 14 34 1024
            • activation_41 16
            • activation_44 16
            • activation_47 16
            • activation_50 16
            • ok
          • 統合
            • おおざっぱに設計
              • ok
            • テンプレート画像 作成
              • 3840x2160
              • ok
            • 各フレームと対応する出力を描き込み、連番画像へ
              • 何を
                • オリジナル
                • 前処理済み x3
                • max_pool
                • act40
                • act41/44/47/50
                • 出力座標
              • どこへ
                • オリジナル
                  • 3163, 178 - 3803, 536
                  • 640x360
                • 前処理済み x3
                  • 1673, 58 - 2209, 279
                  • 538x224
                  • 1850, 184
                  • 2040, 286
                • max_pool
                  • 1597, 689
                  • 3839, 1039
                  • 267x110
                  • 10px
                • act40
                  • 1597, 1111
                  • 3839, 1473
                  • 267x110
                  • 10px
                • act41/44/47/50
                  • 1597, 1550
                  • 3839, 1840
                  • 60x60
                  • 10px
                • 出力座標
                  • 1771, 1905
              • スクリプト
                • ok
              • 実行
                • ok
            • 動画化
              • ok
        • どんな感じ?
          • 似た出力がある
            • 雷によるフラッシュで、違いが顕著化する
          • 夜空の星々の またたきのような発火があり 興味深い
          • 推論処理時に精神が宿っていたりするかも? と思いたくなる
          • 薄気味悪さ さえ感じる
          • denseはほぼ同じっぽい。交差点シーンしか見れてないが
          • 面白い
  • 考察
    • とりあえず俺の視線推測っぽいことはできた
    • 俺の視線移動をダビング出来たといえるほどの精度ではないが
      • 具体的には?
        • どんなシーンなのかを理解しようとする根気がまるで足りない感じ
      • 原因候補
        • 学習サンプル不足
          • 静止画
          • その他もろもろ。秩序だったカオスが要る
        • 色味を無視
        • 入力するフレームが足りない
          • もっと過去のフレームも欲しい
          • 今回はメモリにのせるために断念したけども
          • 短期記憶の拡大とも言えるか?
        • 周辺視野の反映方法が不適切?
          • 単にボカすだけではナンセンスかも
        • 長期的な記憶の不在
        • 空間領域および時間領域の変化を、一つのカーネルで捉えようとしてること?
          • (separableConv2Dが良いのかも
          • 別々にすべきかも?
      • あるいは、ルールベースで大まかに視線移動モデルを作り、それを実際の視線移動に近づけるような処理をディープラーニングでやるのがいいのか?
    • 改良したい?
      • いや、だりーわ

考察

  • 同上
  • twitter/aidonがモチベ維持にかなり貢献してくれた
  • そういえば、学習途中のモデルとの比較をしてなかった。興味はあるが… だりーな
  • んなー、でもやっておきたいかも。いや、いいや。頭ひねって想像する限りでは、大して面白みがなさそう

さて次は?

  • 応用して世間を驚かせたいな
    • 3Dモデルの顔の眼球を動かして、それっぽく見えるか
    • 新たなビッグデータを生成。注視される物体
    • 画風変換みたいに、ネットワーク道中の値を活用
  • パッとしないな。無理して応用せんでええねんで
  • 人間っぽさなんて、割と簡単に演出できるかもしれないしな。物体検出&サッケードをやるだけで、結構いけそう
  • あぁでも惜しいなー。なんだかんだで結構面白いものになった気がするよーな
  • だるびっしゅ

メモ

  • https://jins-meme.github.io/sdkdoc/
    • JINS MEME
      • 目に関するデータ
          • 視線方向
          • まばたき
          • まばたきのスピード(Millisecond)
          • まばたきの強さ(一般的に、50~200の間におさまります。)
      • 身体に関するデータ
          • 姿勢のズレ・頭の傾き(度)
          • 歩行判定
          • 加速度
      • JINS MEMEに関するデータ
          • ノイズ判定(データ検出エラー判定)
          • 電池残量(5段階)
          • 装着状態
  • bash prompt here
    • 1.Cygwinのsetup.exeを起動し、System/chereを選択する
    • 2.Cygwin Bash Shellを管理者権限で起動し、chere -iを実行する
      • 俺は、chere -i -t mintty
    • 3.任意のディレクトリを右クリックして、Bash Prompt Hereを選択する
  • Docker のリポジトリURLが変わってたので対応
  • https://www.tensorflow.org/get_started/get_started
    • 計算グラフのビルドと実行
    • 誤差を計算グラフで定義し、実行すれば、グラフに従って各種変数による偏微分を自動的に導出し、誤差を最小化するよう、変数の値を少しずつ調整してくれる
  • ディープラーニングは、投網漁に似ている
    • 混沌に近い網を投げて、ずずずと引いていくと、適合する規則のみが浮かび上がってくる
    • マジョリティだけが互いに強めあって残るのか?
    • マイノリティ同士で打ち消しあうのか?
  • ドロップアウトも興味深い
    • 重みを共有しつつ、いくつもの異なる経路で尤度を高める
  • 今さらだが、かなりヒットする論文見つけた
    • John M. Henderson, Human gaze control during real-world scene perception
      • Recent work on gaze control has focused on two potential answers: bottom-up stimulus-based infor-mation generated from the image, and top-down memory-based knowledge generated from internal visual and cognitive systems
    • gazeというキーワードを使えてなかったからだろうか
  • http://www.nii.ac.jp/dsc/idr/index.html

「ディープラーニングを利用したプロダクト考案」の雑ログ

概要

  • とりまディープラーニングの勉強 一段落
  • ディープラーニングを使って何かプロダクトを作りたい
  • イデアすぐに思い浮かばん
  • プロダクトを考案しよう
  • あーだこーだ調べたり考えたり
  • 考案した
    • 任意の入力映像に対して、自分がどこに視線を向けるかの推論システム

背景

  • とりまディープラーニングの勉強 一段落
    • 理論理解はまだ必要だろうけど
    • 最新の論文とかも
  • 使って何かつくりたい
  • イデア浮かばん

目的

方法

  • 既存のアイデアを見る
  • 課題 課題予定を挙げる
    • 社会
    • 周り
  • 俺のデータを利用してできること
  • 既存のビッグデータを利用してできること
  • とりあえずで思いつくのを列挙
  • 挙げたものから選ぶ

実行

  • 既存のアイデアを見る
  • 課題 課題予定と、その解決方法
    • 社会
      • 北朝鮮
        • 相互理解
        • 不一致ならば戦争以外の勝負
      • ポピュリズム
      • 偽情報
        • メディア間の違いの可視化
        • メディアの傾向分析
        • メディアの内情把握
      • 復興
      • 廃炉
      • 少子高齢化
      • 年金
      • 人手不足
      • 不健全財政
      • 首都直下型地震
      • 長時間労働
        • 効率の可視化
        • 改善の怠惰
        • ゴリ押し
        • 囚われ
      • 不合理
      • 過疎化
        • マッチング
        • 周知
      • 無知
      • 善悪正義の相違
        • 可視化
        • ネット上の個々人の意見の傾向の可視化
          • SNSなどで同一発信者からの発信内容を収集
          • ブクマ先の文脈 : ブクマコメント
          • ユーザから権限もらって可視化
        • 自動全力肯定/批判器
      • 生産と分配のアンバランス
        • 消費や投資に関するコスパ認識力の向上
      • 希望
        • 無理しなくていいという価値観の押し付け?
      • ITスキル格差
        • どう役に立つかの伝達
        • 使い方の伝授 補助
        • 有用なインタフェース
      • 初期値の不平等
        • 優れたものはその優れた能力を、優れてないもののためにのみ発揮すべき という価値観の押し付け?
      • 政府と国民との意思疎通の不出来
        • 政府の実情を可視化 平易な表現で概括 国民の心に届くように翻訳
        • 国民の声を可視化
      • 身体能力の虚弱
        • 身体の理解と原因特定 対策 焦らず長期的
        • 生活習慣是正のための自身へのバイアス圧力
      • ストレスへの耐性不足
        • 現状把握 耐性充足定義 理解 原因特定 原因排除
        • ストレッサーとストレス程度の記録
      • 過敏
      • 暑がり
        • 冷却システム構築?
      • 体調コントロール
      • 自己査定 能力の程度
        • ゴーストダビング ネット上に放つ 反響を観測
      • 図書館 騒音
      • 普遍的な被迷惑度 与迷惑度の把握
      • 干渉の費用対効果の把握
      • 干渉の加減
      • 退避行動のコスパ把握
      • 局所的普遍性の把握
    • 周り
      • 主観画質評価
        • データさえあればいけそうだな
      • 近所同士の疎遠
      • 多分平気だろうからの交通事故
        • 過去の事故履歴を、それが起きた場所にARで表示
      • 電車での座席への座り方 心理距離 需要 供給
      • 人混みでの歩行ルート 衝突予測 自動自分運転
      • 第三者による客観的助言 補助 支援
      • 無意識特性の知覚
      • 目的達成の方法を列挙
      • 要件定義
      • 疲労度の把握
      • 自問自答支援
      • 曖昧度の客観指標
  • 俺のデータを利用してできること
    • どんなデータがある?
      • 身体センサー
        • wikipedia 現在までに知られている主な感覚
          • 体性感覚
            • 表在感覚(皮膚感覚)
              • 触覚(触れた感じ)
              • 温覚(暖かさ)
              • 冷覚(冷たさ)
              • 痛覚(痛さ)
              • 食感
              • くすぐったさ
              • など
            • 深部感覚
              • 運動覚(関節の角度など)
              • 圧覚(押さえられた感じ)
              • 深部痛
              • 振動覚
          • 内臓感覚
            • 臓器感覚(吐き気など)
            • 内臓痛
          • 特殊感覚
            • 視覚
            • 聴覚
            • 味覚
            • 嗅覚
            • 前庭感覚・平衡感覚
        • モノ寄り
          • メモ
          • 成績
          • アカウントのID PW
          • 人間関係
          • 価値観
          • 時空間 情報空間をまたいだ視野とその濃度
          • バランス感覚
            • 優先順位のつけ方
            • 取捨選択
          • 記憶
          • 連想
          • 身体情報
            • 体重
            • 体脂肪率
            • 年齢
            • 血液検査
            • 知能検査
            • 健康診断
            • MRI
            • 脳波
            • 聴覚検査
            • 空腹度
            • 満腹度
            • 精神状態
            • 健康度
            • 生活習慣チェックシート
          • 地獄という経験
          • 所有物
          • ツイートライン上の各々のツイートへの興味関心
          • 俺という人間の貸借対照表
          • 好み
            • ゲーム
            • 音楽
            • 食べ物
            • etc
        • コト寄り
          • 履歴
            • ネットの閲覧
            • 発信
            • コミット
            • 学習
            • タスク遂行
            • 購買
            • ニコ動の視聴 NGワード マイリス フォロー
            • 生活
              • 飲食
              • 運動
              • 知的活動
              • 休息
              • 睡眠
              • 移動
              • 労働
              • 交流
            • 記事の閲読
              • 目の走らせ方
              • 感想
              • 想起 照合する記憶
              • シェア欲求の程度
            • 自問自答
            • ポジティブ反応
            • ネガテイブ反応
          • 視線
            • どこに向けるか
            • どんな視線を感じるか
          • 思考
          • 自己査定の過程
          • 世界認識
          • 自己認識
          • 他者の思考の類推
          • 意志 知能 感情
          • 無意識衝動
    • 正確かつ大量に記録できそう/できたもので、有用そうなのはどれ?
      • 視覚
      • 視線の向け方
      • 聴覚
      • 表情
      • 身体のGPS位置
      • 身体の動き
      • 自問自答の過程(大量は無理くね?
        • 世界認識
        • 自己認識
    • 何ができる?
      • 任意の入力映像に対して、自分がどこに視線を向けるかの推論システム
      • 任意の問いに対して、自分がどのように答えるかの推論システム
      • #思ったよりたいしたことはできんな
  • 既存のビッグデータを利用してできること
    • 既存のビッグデータを調査
      • 参考
      • ALAGIN 言語資源・音声資源サイト 資源
        • 文脈類似語データベース
        • 動詞含意関係データベース
        • 負担・トラブル表現リスト
        • 日本語を母国語とする60歳以上の話者の読み上げ音声
        • ATRにて開発された、音素バランス文などの文や定形単語を発話内容とする、プロナレータによる多数話者日本語音声データベース。発話内容により、4つセット(Aセット、Bセット、Cセット、Dセット)から構成されている。
        • プロの観光ガイドと、旅行者を模した被験者の2名による対面対話を収録し、書き起こしたデータ。1対話はおよそ、30分であり、ガイドの音声はヘッドセットマイクにより収録。ユーザ音声は、スタンドマイク、またはヘッドセットマイクを用いて収録した。
        • 声優2名による掛け合い収録を行い、2名のうち、1名分について格納したコーパスである。台本の製作にあたっては、京都観光案内対話コーパスから、対話のやり取りが活発な21対話を抽出して書き起こしを行い、台本を製作した。発話ごとに人手で切り出し,無音部分を除いてある。
        • 楽天データ
        • 英日対訳コーパスデータ合計約3億4795万文対
      • 少納言 KOTONOHA 「現代日本語書き言葉均衡コーパス
      • 音声資源コンソーシアム
        • 筑波大 多言語音声コーパス (UT-ML)
        • 東北大‐松下 単語音声データベース (TMW)
        • 会議音声データベース (RWCP-SP01)
        • マルチモーダル音声認識評価環境 (CENSREC-1-AV)
      • IEMOCAP DATABASE
        • Interactive emotional dyadic motion capture database
      • NII 情報学研究データリポジトリ
      • 言語情報処理ポータル
        • 日英中基本文データ
        • 女性のことば・職場編
      • kaggle
        • Shakespeare plays
          • “8”,“Henry IV”,“1”,“1.1.5”,“KING HENRY IV”,“No more the thirsty entrance of this soil”
          • “9”,“Henry IV”,“1”,“1.1.6”,“KING HENRY IV”,“Shall daub her lips with her own children’s blood,”
          • “10”,“Henry IV”,“1”,“1.1.7”,“KING HENRY IV”,“Nor more shall trenching war channel her fields,”
          • “11”,“Henry IV”,“1”,“1.1.8”,“KING HENRY IV”,“Nor bruise her flowerets with the armed hoofs”
        • StarCraft II Replay Analysis
          • “GameID”,“LeagueIndex”,“Age”,“HoursPerWeek”,“TotalHours”,“APM”,“SelectByHotkeys”,“AssignToHotkeys”,“UniqueHotkeys”,“MinimapAttacks”,“MinimapRightClicks”,“NumberOfPACs”,“GapBetweenPACs”,“ActionLatency”,“ActionsInPAC”,“TotalMapExplored”,“WorkersMade”,“UniqueUnitsMade”,“ComplexUnitsMade”,“ComplexAbilityUsed”,“MaxTimeStamp”
          • 52,5,27,10,3000,143.718,0.003515159,0.000219697,5.49e-05,0.000109849,0.000392317,0.004849036,32.6677,40.8673,4.7508,0.000219697,0.0013966,4.71e-05,0,0,127448
          • 55,5,23,10,5000,129.2322,0.003303812,0.000259462,6.92e-05,0.000294057,0.000432436,0.004307064,32.9194,42.3454,4.8434,0.000380544,0.0011935,8.65e-05,0,0.00020757,57812
          • 56,4,30,10,200,69.9612,0.001101091,0.00033557,4.19e-05,0.000293624,0.000461409,0.002925755,44.6475,75.3548,4.043,0.000230705,0.00074455,6.29e-05,0,0.00018876,95360
        • Mental Health in Tech Survey
          • “Timestamp”,“Age”,“Gender”,“Country”,“state”,“self_employed”,“family_history”,“treatment”,“work_interfere”,“no_employees”,“remote_work”,“tech_company”,“benefits”,“care_options”,“wellness_program”,“seek_help”,“anonymity”,“leave”,“mental_health_consequence”,“phys_health_consequence”,“coworkers”,“supervisor”,“mental_health_interview”,“phys_health_interview”,“mental_vs_physical”,“obs_consequence”,“comments”
          • 2014-08-27 11:29:31,37,“Female”,“United States”,“IL”,NA,“No”,“Yes”,“Often”,“6-25”,“No”,“Yes”,“Yes”,“Not sure”,“No”,“Yes”,“Yes”,“Somewhat easy”,“No”,“No”,“Some of them”,“Yes”,“No”,“Maybe”,“Yes”,“No”,NA
          • 2014-08-27 11:29:37,44,“M”,“United States”,“IN”,NA,“No”,“No”,“Rarely”,“More than 1000”,“No”,“No”,“Don’t know”,“No”,“Don’t know”,“Don’t know”,“Don’t know”,“Don’t know”,“Maybe”,“No”,“No”,“No”,“No”,“No”,“Don’t know”,“No”,NA
          • 2014-08-27 11:29:44,32,“Male”,“Canada”,NA,NA,“No”,“No”,“Rarely”,“6-25”,“No”,“Yes”,“No”,“No”,“No”,“No”,“Don’t know”,“Somewhat difficult”,“No”,“No”,“Yes”,“Yes”,“Yes”,“Yes”,“No”,“No”,NA
      • AWS Public Datasets
        • AWS でのランドサット: ランドサット 8号衛星により作成中の地球全土の衛星画像コレクション (解像度は中程度)
        • AWS での SpaceNet: コンピュータビジョンアルゴリズムの開発における革新を促進するために衛星画像とラベリングされたトレーニングデータを集めたデータベース
        • 地勢タイル: 世界各地の地表の標高などの地勢を示すデータセット。簡単に使用できるようタイル化されており、S3 で提供される
        • GDELT: 世界中のすべての国のほぼすべての地域で放送、印刷、およびウェブ配信されているニュースをモニタリングした 2億 5,000 万件近い記録。毎日更新される
        • NAIP: 米国本土で農作物の成長期に撮影される地上分解能 1メートルの航空画像
        • IRS 990 Filings on AWS: 2011 年から現在まで IRS に提出された、特定の電子的な 990 形式から抽出した機械可読データ
        • AWS での NEXRAD: 次世代気象レーダー (NEXRAD) ネットワークからのリアルタイムデータとアーカイブデータ
        • NASA NEX: NASA が保守管理する地球の科学的データセットのコレクション。気候変化予測や地表の衛星画像などが含まれる
        • 共通クロールコーパス: 50 億を超えるウェブページから構成されるウェブクロールデータのコーパス
        • マルチメディアコモンズ: オーディオビジュアル機能と注釈を備えた 1* 億近い画像と動画のコレクション
        • Google ブックスN-gram: Google ブックスN-gram コーパスを含むデータセット
      • facebook Graph API
      • #わりといろいろあるな 制約つきのもあるが
    • 何ができる?
      • やろうと思えば何でもできる?
      • 何を作りたいかを決めてからデータを探すほうがいいな
  • 既存のディープラーニングの成果を利用してできること
    • 既存の成果
      • 単語を低次元(と言っても200次元程度はある)の実数ベクトルで表現
        • Word2Vec
        • GloVe
        • fastText
      • 線画着色
      • 物体検出
      • 未来映像予測
      • 画像2キャプション
      • キャプション2画像
      • 航空画像→地図画像
      • 灰色画像→カラー画像
      • 日中の画像→夜間の画像
      • 線画→カラー画像
      • 高画質化
      • 自然な音声を生成
      • 音声認識
      • 背景除去
      • 翻訳
      • AlphaGo
      • ポーカー
      • ニューラルネットの生成補助
      • スタイル変換
      • 画像圧縮
      • 読唇術
      • 抽象的な原画(ベタ塗りの絵)から具体的な絵を生成
      • 楽曲生成
      • 太陽フレアの予想
      • セグメンテーション
      • 自動運転
      • ゲームプレイ
      • アイドルの顔画像ジェネレーター
      • ホラー画像を自動生成
      • ロボット操作
      • 認識
      • Unsupervised sentiment neuron
    • 何ができそう?
      • まぁモザイク解除はできるだろうな
      • いまいち思いつかんな
  • 他に思いつくのを列挙
    • ドラえもん
    • 自然な対話
    • はげまし
    • 架空のキャラクターの応答モデル構築 のびた風
    • 画像→その場の匂い、音、まぶしさ、気温などを推測
    • 任意入力に対する無意識的反応モデル
    • 偉人の応答モデル
    • ハゲと非ハゲの境界
  • 挙げたものから選ぶ
    • 候補
      • ネット上の個々人の意見の傾向の可視化
      • 自動全力肯定/批判器
      • 生活習慣是正のための自身へのバイアス圧力
      • ゴーストダビング ネット上に放つ 反響を観測
      • 人混みでの歩行ルート 衝突予測 自動自分運転
      • 任意の入力映像に対して、自分がどこに視線を向けるかの推論システム
      • 任意の問いに対して、自分がどのように答えるかの推論システム
      • はげまし
      • 架空のキャラクターの応答モデル構築 のびた風
      • 画像→その場の匂い、音、まぶしさ、気温などを推測
    • 選択基準
      • 従来のルールベースでは容易でないレベル
      • 社会に貢献し
      • 俺に利益をもたらす
      • 実現の可能性
      • 独創性
    • 選ぶ
      • 自動全力肯定/批判器
      • 人混みでの歩行ルート 衝突予測 自動自分運転
      • 任意の入力映像に対して、自分がどこに視線を向けるかの推論システム
    • 基準を満たしてるか再チェック
      • 自動全力肯定/批判器 サーバル、サーバルオルタ
        • 従来のルールベースでは容易でないレベル
          • 程度によるな 人間味が無くていいならルールベースでもいけるか
        • 社会に貢献し
          • 薬にも毒にもなるな
          • ギャグとか、aiの可能性提示としては価値があるか
        • 俺に利益をもたらす
          • 利益はあるだろう 多かれ少なかれ
        • 実現の可能性
          • 程度による
        • 独創性
          • 皆無
          • けもふれで同じこと考える人はやおよろず
      • 人混みでの歩行ルート 衝突予測 自動自分運転
        • 従来のルールベースでは容易でないレベル
          • 空間把握 ルート選択
          • ルールベースの方が適してる気が
        • 社会に貢献し
          • 混雑時に、全員がこれ使えばスムーズになる?
        • 俺に利益をもたらす
          • 多かれ少なかれ
        • 実現の可能性
          • 可能だろう
        • 独創性
          • 割と独創てきかも
      • 任意の入力映像に対して、自分がどこに視線を向けるかの推論システム
        • 従来のルールベースでは容易でないレベル
          • イエス
        • 社会に貢献し
          • ギャグ路線でいけるかも?
          • 視線推論を活用すれば、画像中のroiが分かり、何かに役立つかも
        • 俺に利益をもたらす
          • イエス
          • 名誉?
          • 実績
          • 技術力
        • 実現の可能性
          • 行ける気がする
        • 独創性
          • 視線に関する研究は古くからあるようだ
          • 一般的な人間が、一般的なケースにおいて視線をどう向けるかは、既に明らかだろう 確認してないけど
          • アイコンタクト
          • 嘘をつく時
          • 容姿の良し悪し 男女
          • 自分の視線の向け方をモデル化しようみたいなのは、少しググッただけでは見つからなかった
          • 独創的と言えそうだ
    • これで決まりだ
      • 任意の入力映像に対して、自分がどこに視線を向けるかの推論システム

考察

  • プロダクトを考案できた
    • 任意の入力映像に対して、自分がどこに視線を向けるかの推論システム
  • 色んなビッグデータが、既に結構たくさんあるんやな

「VirtualBox + Ubuntu 16.04 LTS + DockerでPython3の開発環境構築」の雑録

得られた重要な知見

・DockerでPython3の開発環境を構築することができた

・Dockerfile:myDockerfile/my_python_dev_env at master · hyperSuperHoge/myDockerfile · GitHub

・ただし、わざわざDockerまで導入する必要はなく、Miniconda3がすべて解決してくれる

・でも、Dockerを使えるようになったのは収穫だ

 

背景
    ディープラーニング学習
    Pythonの開発環境が欲しくなった
    2.x系と3.x系とで結構違うらしい 環境変数やパッケージ管理も要注意
        http://qiita.com/y__sama/items/5b62d31cb7e6ed50f02c
    手元にはWindows10 & Cygwin のマシン
    現環境を汚したくない
    VirtualBox + Ubuntu 16.04 LTS + Docker で行く
目的
    Python3の開発環境を用意する
        Python3のコード作成・実行・対話
        環境を汚さずに、使い捨てできる形
方法
    VirtualBox
    Ubuntu
    Docker
実行
    VirtualBox
        ok
    Ubuntu
        iso
        VirtualBoxで64bit OSをインストールするには、BIOS設定画面にてCPUの仮想化機能を有効にする必要があった
        sshサーバ インストール
        ポートフォワーディング
        アップデート
        ok
        エラー対処
            エラー
                hoge@hoge-VirtualBox:~$ apt-get update
                W: chmod 0700 of directory /var/lib/apt/lists/partial failed - SetupAPTPartialDirectory (1: 許可されていない操作です)
                E: ロックファイル /var/lib/apt/lists/lock をオープンできません - open (13: 許可がありません)
                E: ディレクトリ /var/lib/apt/lists/ をロックできません
                E: ロックファイル /var/lib/dpkg/lock をオープンできません - open (13: 許可がありません)
                E: 管理用ディレクトリ (/var/lib/dpkg/) をロックできません。root 権限で実行していますか?
            参考
                http://qiita.com/koara-local/items/e63b7e4ff3cea803bdea
            対処
                ロックファイル削除とか
                うんちゃら--configureとか
                install -fとか
            なんとかなった
    Docker
        インストール
            https://docs.docker.com/engine/installation/linux/ubuntu/
            sudo apt-get install -y --no-install-recommends \
                    apt-transport-https \
                    ca-certificates \
                    curl \
                    software-properties-common
            curl -fsSL https://apt.dockerproject.org/gpg | sudo apt-key add -
            apt-key fingerprint 58118E89F3A912897C070ADBF76221572C52609D
            sudo add-apt-repository \
                 "deb https://apt.dockerproject.org/repo/ \
                 ubuntu-$(lsb_release -cs) \
                 main"
            sudo apt-get update
            sudo apt-get -y install docker-engine
            sudo docker run hello-world
        使い方学習
            docker ps -a
            docker ps
            docker run hello-world
            docker images
            vim Dockerfile
                FROM docker/whalesay:latest
                RUN apt-get -y update && apt-get install -y fortunes
                CMD /usr/games/fortune -a | cowsay
            docker build -t docker-whale .
                各行が各レイヤーに対応
                各レイヤーにID
                公式での出力例にも出てるから、debconf: unable to~は問題ないようだ
            docker images
            docker run docker-whale
            Dockerfileがテンプレート、Imageがインスタンス
        使い方学習2
            http://www.mwsoft.jp/programming/numpy/docker.html
            https://docs.docker.com/engine/reference/run/
            ttyでインタラクティブにImage上で活動するには
                docker run -i -t ubuntu /bin/bash
            ただし、通常は"/bin/bash"に相当するものがDockerfileでデフォルトとして指定される
            Image(インスタンス)でアーダコーダした結果は、その後も残るの?
                普通にログアウトして、またrunしたら、まっさらになってた
                docker ps -a でたどれるっぽい
                デタッチしてからdocker commitとかで記録するっぽい
                http://aics-app.sakura.ne.jp/blog/2015/01/06/docker-%E3%81%A7-%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E3%81%AE%E4%BF%9D%E5%AD%98commit/
    VirtualBoxの仮想HDDの空き容量が足りない。増やす
        http://qiita.com/ryo716/items/3b2298f9016a8a002ecd
        https://www.virtualbox.org/manual/ch08.html#vboxmanage-modifyvdi
        32GBに増やそう
        VirtualBox側の仮想HDDの容量を大きくする
            "C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" modifymedium "G:\VirtualBox VMs\Ubuntu 16.04 LTS 日本語 Remix\Ubuntu 16.04 LTS 日本語 Remix.vdi" --resize 32768
                うまくいかない
                from 0.0MB
                マルチバイトのせい?
            "C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" modifymedium "G:\VirtualBox VMs\Ubuntu 16.04 LTS Japanese Remix\Ubuntu 16.04 LTS Japanese Remix.vdi" --resize 32768
                だめでした
            バグの気配
                https://forums.virtualbox.org/viewtopic.php?f=6&t=81512
                http://blog.goo.ne.jp/ashm314/e/72bde878a8d56d0fc60ab49dcf7f0914
            SSD チェック OK チェック外し OK
            ./VBoxManage.exe modifymedium 'G:\VirtualBox VMs\Ubuntu 16.04 LTS 日本語 Remix\Ubuntu 16.04 LTS 日本語 Remix.vdi' --resize 32768
                だめでした
            バグだな
                https://www.virtualbox.org/ticket/16311
                https://www.virtualbox.org/changeset/65477/vbox
            仮想マシンを実行したりと、ぐちゃぐちゃ繰り返しresizeを試行してたらうまくいった
                0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
                #上記チェンジセットを見ると、状態の更新がされてなかったぽい
                ぐちゃぐちゃ繰り返して状態が更新されたからうまくいった?
                いや、今使っているのは、上記チェンジセットの反映済みかも
                わからn
            ok
        パーティション変更
            gpartedをインストールするスペースもない
                sudo apt-get clean
            sudo apt-get install gparted
            sudo gparted
                スワップ削除
                sda2を右端に移動
                スワップ作成
                sda1拡張
        swapのUUID変化に対応
            sudo blkid
                /dev/sda1: UUID="620458fd-4705-4b74-80a3-cb41886bb8e1" TYPE="ext4" PARTUUID="07cd590d-01"
                /dev/sda5: UUID="ef44aa65-381f-4d13-aa80-cfb78d6bebd2" TYPE="swap" PARTUUID="07cd590d-05"
            /etc/fstab
        ok
    Docker 続
        Dockerの公式ドキュメントは一通り見たほうがいいな
        使い方学習3
            https://docs.docker.com/engine/getstarted/step_five/
            docker tag 1908d5dd54d8 decadenthoge/docker-whale:latest
            docker login
            docker push decadenthoge/docker-whale
            docker image remove -f 1908d5dd54d8
            docker run decadenthoge/docker-whale
        他
            コンテナは、独立したプロセスのように振る舞う感じ
            コンテナIDで識別
            デタッチしたりアタッチしたり
            スナップショットを記録(=コミットしてImage生成)もでき、Docker Hubにあげられる
            workspaceがDocker Container、branchがDocker Image
    Python3の開発環境を用意する
        要求
            Python3のコード作成・実行・対話
            環境を汚さずに、使い捨てできる形
        要件
            下記コマンドを実行すると
                docker run -it decadenthoge/my_python_dev_env
            下記のPython3の開発環境が
                UbuntuとかのOS上
                シェル
                vim
                gitでバージョン管理
                python3インタプリタの実行
                pythonのパッケージ導入
                環境内の変更およびそれを次回のために維持
            手に入り、かつ、Dockerを動かす側の環境は一切汚れない
        方法
            Dockerfile記述 ubuntuをベース bashをエントリーポイント
            build
            docker run -it
            vim,git系を用意
                必要なパッケージをapt-get install
                    vim git
                自分のドットファイルをclone
                rcをリンク
            Python系を用意
                Minicondaについて調べてインストール
            デタッチ
            タグ
            Hubでリポジトリ作成
            プッシュ
                docker push decadenthoge/my_python_dev_env:latest
        実行する前に、minicondaのDockerImageを触ってみよう
            #docker pull continuumio/miniconda
            docker run -t -i continuumio/miniconda /bin/bash
            debianベースだから、ほんとに最小限だ
        実行
            Dockerfile記述
                https://github.com/hyperSuperHoge/myDockerfile
                ubuntuをベース
                vim,git系を用意
                    必要なパッケージをapt-get install
                        vim git
                    自分のドットファイルをclone
                    rcをリンク
                bashをエントリー
                USERコマンド使うと、以後のシェルコマンドはそのユーザでログイン
                Dockerfile内のCOPYなどの命令にて、環境変数を参照するときは注意
                    RUNによる環境変数の書き換えは反映されない
                    build時に確定するっぽい 静的というか
                    http://stackoverflow.com/questions/28966198/dockerfile-home-is-not-working-with-add-copy-instructions
            build
                道中が同じならキャッシュを使ってくれるから 時間短縮でうれしいな
            Python系を用意
                Minicondaについて調べてインストール設定追加
                公式のDockerfileが参考になる
                    https://hub.docker.com/r/continuumio/miniconda3/~/dockerfile/
                Pythonのバージョン云々でビクビクして実験用にDockerまで用意したわけだが、Minicondaで全然問題ないのでは?
                ワロス
                Dockerが使えるようになったのは収穫だからよしとしよう
                あとグラフを可視化するときにGUIが必要だから、Dockerで家クラウド的に使うのであれば、X Windowが必要になるなー
                    http://postd.cc/running-gui-apps-with-docker/
                ファー
                http://qiita.com/yubessy/items/2dd43551aa8308dc7eca
            build
            タグ付け
                docker tag c067abc4d8bd decadenthoge/my_python_dev_env:1.0
                docker tag c067abc4d8bd decadenthoge/my_python_dev_env:latest
            Hubでリポジトリ作成
            プッシュ
                docker push decadenthoge/my_python_dev_env:latest
            ローカルのコンテナ/Image全削除
                docker rm `docker ps -aq`
                docker rmi `docker images -aq`
                --
                Dockerfile:ビルド設定
                Image:ビルド結果
                コンテナ:Imageを起点として動いているもの
            テスト
                docker run -it decadenthoge/my_python_dev_env
                conda create --name myenv python=3.5 numpy=1.11.1
                source activate myenv

f:id:superHoge:20170223192402p:plain

f:id:superHoge:20170223192406p:plain

f:id:superHoge:20170223192410p:plain
            ok
考察
    目的は達成された
    わざわざDockerまで導入する必要はなく、Miniconda3がすべて解決してくれる
    ただ、事前調査でその知見を得られるかというと どうなんだろう
    少なくとも、Dockerを使えるようになったのは収穫だ
    環境を汚しまくっても気軽に使い捨ててクリーンな状態からやり直せる
メモ
    VirtualBoxの仮想イメージをDropbox下に置くのはナンセンスだった