ソフトウェアエンジニアの勉強ログ

興味があるのは、computer vision, three.js, python, 深層学習, emacs

ビジョン勉強会に行ったけど正直ついていけなかった、けどログを残す

ちゃんとバックボーンを勉強する必要性を痛感して帰ってきた。 日常的に勉強をすることは、本当に大事だと思う。 さらに、正直3本目以降くらいから頭が回らなくなってしまった。。。 普段から頭を使う&食事をとって体調を用意することの必要性も痛感した。

Discriminant Optimization: Theory and Application to Point Cloud Registration

資料

メモ

  • コスト関数を最小化するように座標変換を求めるのでなくて、特徴量から直接座標変換を求める
    • その際に学習を行う(リッジ回帰)
  • ICPよりロバスト
  • DO(discriminant Optimization)の方が初期値によらず寄っている
  • 学習だから仕方ないが、トレーニングのシーン次第に強く依存する気がする
  • 処理速度はICPと同等かちょっと遅い
  • 精度は圧倒的に良い
    • ICPで特徴量を使って、外れ値や欠損点に対するロバスト性の工夫をしたときとの比較はわからない?
  • 確かに、トラッキング(途中で見えなくなるときなど)に強そうだ
  • (関連アルゴリズムで)SDMという方法もある

Learning Cross-modal Embeddings for Cooking Recipes and Food Images

資料

メモ

  • 画像をみて、レシピを決める(Pic2Recipe)
    • レシピをいれると、画像が出てくることも可能
  • よくわかっていない
  • joint embedding spaceで両方からアクセス可?
    • このjpoint embedding spaceから、レシピや画像を決定するステップがわかっていない
  • LSTM
  • (VGG-16) and ResNet-50
    • ResNetは最近本当によく聞く
  • similarity lossで学習
    • レシピと画像が同じが違うかで学習
    • 2:8の、マッチデータ、ミスマッチデータ
  • semantic regularization loss
    • semantic regularization loss
      • 同じカテゴリだったらロスを小さくする?
        • 例えば、チーズバーガーとハンバーガーはロスが小さい?
      • タイトルからカテゴリを推定
  • http;//wednesday.????
  • word2vec math
    • king - man + woman = queenみたいな(適当)

CNN-SLAM: Real-time dense monocular SLAM with learned depth prediction

資料

メモ

  • CNNを使ったSLAM
  • LSD-SLAM ?
    • 昔あったmono-slamのやつだろうか?
    • 輝度勾配が大きいところを特徴としてもってくる
    • キーフレームで准距離推定?
  • CNNデプス推定
    • MITの研究室で元からあった手法
    • 絶対スケールがわかる
    • こっちの方がコア技術の印象を受けた
  • 概略
    • depth推定(CNNを利用)
      • Depper Depth Prediction with Fully Convolutional Residual Networks
      • またResNet-50
    • LSD-SLMAPのフレームワーク
      • depthの信用度情報を使って、うまくヒュージョン
  • End-to-Endではない
  • orb-slam, lsd-slamについて

Universal adversarial perturbations

資料

メモ

  • 今日のベストプレゼンはこれだと思う
  • Deep Learningモデルをご認識させるような普遍的な摂動ノイズを発見
  • 汎用的なノイズ(Universal)
  • 識別境界への法線ベクトルが結構共通方向を向いている→もっと低次元化できるという見解は超面白い
  • 聞いているのがやっとでメモしている時間がなかった
  • 法線方向(境界への最短方向)を決めてくるところが肝
    • SVMとかと関連があるのだろうか?

Realtime Multi-Person 2D Pose Estimation using Part Affinity Field

資料

メモ

  • CPM (Convorutional Pose Machine)の他の信用できる情報を組み合わせ得る発想はちゃんと勉強する
  • kinectのpose estimatinでも似た感じだったのだろうか?
    • あれはrandom forestだっけ

A Point Set Generation Network for 3D Object Reconstruction from a Single Image

資料

メモ

  • 1枚の画像から、Point Cloudの推定
  • chamfer distanceとearth mover’s distance
  • VAE(Variational Auto-Encoder)?
  • Deconvとは…
  • 非常に面白いけど、厳密なデータとして扱うには限界があるきがする。個人的には将来への発展性を感じた。 こういった漠然とした3D形状を認識するモデルを中間層にもって、分類に活かすのはもちろん類似度?まで考慮するみたいな。。。これはコップじゃないけどコップとして使用できるみたいな物体の本質を理解した上での応用みたいなことをしたくなるとこういった暗黙の推定がいる気がする。何言っているのが良くわからない。

Image Super-Resolution via Deep Recursive Residual Network

資料

メモ

  • DRRN(Deep Recursive Residual Network)
  • global residual learning
  • resursive learnig
    • ウェイトを共有
    • 汎化能力が高くなる(使われるシーンが一つでないので発散しにくくなる)
  • multi-path local residual learning
  • パラメータは少ないけど結構複雑
  • 工夫の一覧
    • Data Augmentation
      • データの水増し
      • 1/3, 1/4をひとつのpathで渡している
    • batch normalization
    • pre-activation
    • gradient clipping
    • Local Residual Learning
    • バッチイメージのストライドサイズが半分でなく、2/3
      • 境界を敢えてまたぐようにする
  • GAN (Generative Adversarial Networks)を使うというのもあるらしい

Person Re-Identification in the wild Joint Detection and Identification Feature Learning for Person Search

資料

メモ

  • Person Re-Identification(人物再同定)という問題
    • 複数のカメラにまたがった人物推定
  • 1本目は、datasetと性能のベースとなるデータを用意した、という話か

  • Joint Detection and Identification Feature Learning for Person Search

    • End-to-Endのアルゴリズムも提唱している
    • 「Faster R-CNN」という単語が今日何回か出てきている
    • クラス分類ではなく類似度問題にすることで、mini batchに含まれる画像の人物だけで、lossが計算できる
      • online instance matchingの方がsoftmaxよりも高精度

Scalable Surface Reconstruction from Point Clouds with Extreme Scale and Density Diversity

資料

メモ

  • 従来法
    • Octreeアプローチ
    • ドロネー網(Graph cut)アプローチ
  • 密度の違うPoint Cloudの統合、表面生成にチャレンジ
  • TX2では、OpenCV3.3が動く
  • メッシュをきるときも視点情報を使うというのはしっくりくる
    • その最たる例が、距離画像
  • 今更だけど、Graph-Cutはいい加減勉強しないといけないな

NVIDIAのGPU付のubuntuにログインしようとしてもできなくなってしまったときの対処メモ

初期症状

  • (明らかに解像度が間違っている)ログイン画面にはなる
  • パスワードをいれると、一瞬エラーが発生しましたみたいな画面になるが、直ぐにログイン画面に戻ってしまう
    • 後からわかったことだが、これらは別の問題で、前者は未解決のまま
  • ubuntu16.04で、GeForce1080を使っている

NVIDIAGPUを使っているときの注意点

ライブCDをいれたときに以下のような確認画面になる(厳密ではない) - run ubuntu without installing - install ubuntu - OEM的な何か - check disk for defect

この画面において以下の操作が必須!

  1. 選択メニューで「e」を押す
  2. quiet splashという単語を探して、nomodesetに置き換える
  3. 起動(私の環境では、F10)

上記の操作を忘れていると色々面倒。

GUIが立ち上がらないときなどの基本事項

  • Alt + Shift + F1でコンソールモードになるのでそこで頑張る
  • さらにGUIをストップする必要があるとき(以下のどれかが、数打てばあたる)

    • sudo sudo service lightdm stop
    • $ sudo service gdm stop
  • GUIのスタート

    • Alt + F7
    • 正し、リブートした方が無難

ディスクチェックをしよう

今回はこれでは直らなかったが、覚えておいた方が良い。 ここで注意点はこの操作の際も、CDのubuntuを、nomodesetで立ち上げる必要があることだ。

ubuntuが動かなくなりました。昨日までは普通に動いたのに急に添付ファイルの画... - Yahoo!知恵袋

まとめると、一度なんとかubuntuを立ち上げて、gpartedを実行して、ディスクをチェックすれば良い。

Ubuntu16.04にNVIDIAのドライバをいれたときのおさらい

結局、ドライバを入れ直す作業が有効だった。 以下のサイトを見て、その操作を行った。

askubuntu.com

操作の具体例は、以下のサイトがわかりやすい。

qiita.com

なお、現時点での最新のドライバは、別のPCで調べるべき。 2017年8月5日時点では、384だったので、

sudo apt-get install nvidia-384

そして、リブートしたら直った。

自分用メモ:「初めてのThree.js」を読む&手を動かす

  • 「初めてのThree.js」を読んだ際のメモ記事
    • 逐次更新

一章

  • ローカルウェブサーバは以下のコマンドだけで立ち上がる
    • cloneしたレポジトリのディレクトリで実行する必要があるらしい
python -m SimpleHTTPServer
  • requestAnimationFrameとはモダンブラウザでサポートされていて、ブラウザによって定義された感覚で呼び出す関数を設定できる
    • setIntervalでは、focusのチェックもしないから裏でも走ってCPU利用率が高くなるとき、setIntervalは画面の再描画と同期されないなどの問題があるらしい。
  • 一章で書かれている内容は、必ず必要になる手順なので、htmlに書いても良いけど、jsでラッピングしても良いよね

二章

  • sceneオブジェクトの重要なプロパティや関数
     説明
add(obejct) シーンに足す
children 追加されたオブジェクトの一覧(配列?)
getObjectByName(name) オブジェクト名からオブジェクトを取得するのだろうが、どうやってオブジェクト名を指定するの?
remove(object)
tranerse(function) すべてのchildrenに関数を適用する

自分用メモ:Emacsの設定

逐次更新します

C-hの挙動をバックスペースに変更

akisute3.hatenablog.com

jsの編集モードをインストール

daifuku-p.org

  • 何も考えず以下の手順でいけた
    1. M-x package-list-packagesでpackageの一覧を取得
    2. js2-modeを選んでiで選択
    3. xでインストールを実行
    4. ~/.emacs.d/init.elを編集(自分はこれを使っているので)

Ctrl-Spaceで選択できるようにする

markdownEmacsで書いて、気軽に確認する

pythonのタブ幅を指定

  • 以下をinit.elに追加
;;python-mode
(add-hook 'python-mode-hook
      '(lambda()
         (setq indent-tabs-mode t)
         (setq indent-level 2)
         (setq python-indent 2)
         (setq tab-width 2)))

自分用メモ:three.jsで遊ぶ環境つくり&Git Hubにレポジトリを作ってみる

  • 目標としては、物理演算を試すところまでやりたい

gitをインストール

$ sudo apt-get install git

GitHubのアカウント作成と、レポジトリの作成

  • ハマりポイントは特にないと思う。

sshの設定

qiita.com

three.jsのマスタディレクトリを開発ディレクトリにもってきてignoreにする

qiita.com

以下の感じで無視されるようになる。

xxxx@xxxx:~/prog/threejs_handson$ git add *
The following paths are ignored by one of your .gitignore files:
three.js
Use -f if you really want to add them.

自分用メモ:動的計画法の章を読んでみた

  • 「これなら分かる最適化数学」の「動的計画法」の章を読んだ
  • 動的計画法は実装したことがあるので、簡単に読み飛ばした
  • 以下は、その際のメモ(整理していない)
  • 基本的には以下の問題
    •  J = f(x_1,\cdots,x_n) -> max
  • 今までは、経路最適問題で考えていたけど数式的に追えたのが良かった
  • 連続的な変数でも、離散値で近似してしまうという発想があるのか
    • 十分に実際的な最適解が得られるそう
  • 問題を上手に、動的計画法におとしこめるか?というのが重要になる気がした

    •  J = g_1(x_1)g_2(x_2)\cdots g_n(x_n)のときに、logを取ればよいというのは面白い
    • 逆に、制約条件が x_1 x_2 \cdots x_n = Mのときに、logをとって x'=log xとするのも面白い
  • なお、はてなで数式を書く時は以下を参照すると良い

Ubuntu16.04とWindows10のデュアルブート環境を整えた

まずは以下のページが最も詳しいと思うので、それにそって準備をする。 www.iandprogram.net

実際の手順

  1. Windowsで高速スタートアップの無効化

    • 不要な場合もあるようですが、必要でした
  2. Windowsのドライブを縮小

    • SSDubuntuを入れたいので、SSD(500G)のwindows領域を半分に縮小
    • 同時に、Dドライブ(2T)のデータ領域も半分に縮小(不要なそうなの可能性あり)
  3. Ubuntu16.04のディスクを作成

    • DVDに焼いた
  4. Ubuntuのインストール

  5. NVIDIAのドライバのインストール

  6. emacsのインストール

    • $ sudo apt-get install emacs
      • 細かい設定は今度にする
  7. ubuntuchromeをインストール

  8. CapsLockキーをCtrlにする

  9. grubの設定を変えて、windowsがメインで立ち上がるようにする

ubuntuからwindowsディレクトリが見えてしまっている。 なんとなく、windowsubuntu側からはアクセス不許可にしたいがどうしたら良いだろうか?

以下のリンクが非常にわかりやすい。 結論から言うと、homeではセキュアな状態にするのは無理そうだ。。。ぐぬぬぬ。

www.abten.net