宮塩のお勉強部屋

某大学でARまわりの研究をしている学生です。

【Coursera】Deep Learning Specialization - Course 4: Week4 Face recognition & Neural style transfer

今回はWeek4です.前回の記事はこちらです. smygw.hatenablog.com

Face Recognition

What is face recognition?

  • デモでは顔の判定と生きた人間かどうかの判定を同時に行っていたが、今回は顔の判定に焦点を当てる.
  • 顔の判定には顔検証(Face verification)顔認証(Face recognition)の2種類がある.
    • 前者は画像とラベルを入力し、正解かどうかを出力する.( 1:1の問題)
    • 後者は画像のみを入力し、K人のデータベースに正解があればそのラベルを出力する.( 1:Kの問題)
    • 後者の方が難しく、前者に比べて正確さがより求められる.

One Shot Learning

  • 1枚の顔写真から個人を判断できるように学習することをOne shot learningというが、これまでと同じようにSoftmaxを出力層としたCNNで学習することは出来ない.
    • 1枚のデータだけではロバストなネットワークを学習できないから.
    • 新しい人物をデータベースに加える際に出力層のサイズが変わり、毎回学習し直す必要があるから.
  • 2枚の画像の類似関数(Similarity function)  d(img1, img2)を計算することで、ハイパーパラメータ τ以下であれば「同一」であり、そうでなければ「異なる」と判断できる.
    • Face recognitionへ応用する際も、全ての人物に対して類似度を計算することで判断できる.

Siamese Network

  • Siamese networkでは、Softmax層は組み込まずにFC層の出力を用いて適切な類似関数になるように学習する.
    • FC層の出力を f(x)とすると、 d(x^{(1)}, x^{(2)}) = ||f(x^{(1)}) - f(x^{(2)})||_2^{2} のように定義される.

Triplet Loss

  • ある人物画像(Anchor)に着目したときに、同一人物の画像をPositiveとよび、異なる人物の画像をNegativeとよぶ(この3つの組み合わせがTripletの由来である.)
    • それぞれ省略して A, P, Nと表記する.
  • 満たすべき式は L(A, P, N) = max(||f(A) - f(P)||_{2}^{2} - ||f(A)- f(N)||_{2}^{2} + \alpha,\ 0) \leq 0
    • ハイパーパラメータ \alphaはマージンを表し、 f=0のように常に同じ出力になるのを防ぐために導入している.
    • これをトレーニングデータ全体でとるため、 J = \sum_{i=1}^{m} L(A^{(i)}, P^{(i)}, N^{(i)})と書ける.
  •  A, P, Nのセットをどのように選べばよいか?
    • ランダムに選んでしまうと高い確率で  ||f(A)- f(N)||_{2}^{2}が大きくなってしまい、効率よく学習できない.
    •  d(A, P) \approx d(A, N)となるような学習するのが難しい Nを選ぶ必要がある.
  • 詳しくはFaceNetを読もう(ちなみにこの論文がきっかけでHogeNet, Deep Hogeという命名が流行るようになった.)

Face Verification and Binary Classification

  • Triplet lossを計算する代わりにロジスティック回帰を用いて分類問題として扱う方法もある.
    •  \hat{y} = \sigma( |  \sum_{k=1} w_i ( f(x_i^{(k)}) - f(x_j^{(k)})  ) | + b_i )
  • データベースの各画像について f(x^{(i)})を事前計算しておくことでリアルタイムの計算コストが減る.
    • これはTriplet lossの方法でも同様のことが言える.

Neural Style Transfer

What is neural style transfer?

  • コンテンツ画像とスタイル画像の2つの画像を入力し、コンテンツを維持したままスタイル画像がもつスタイルで描かれた画像を出力(Generate)することをNeural Style Transferとよぶ.
    • それぞれ C, S, Gと表記する.

What are deep ConvNets learning?

  • 層が深くなるにつれてどんなことをしているのかを可視化する.
    • ユニットの出力が最大になる画像について調べる.
  • 浅い層ではエッジや色など比較的シンプルな特徴を計算している.深くなるにつれてテクスチャ、物体の一部など複雑な特徴の計算を行う.

Cost Function

  • コスト関数  J(G) = \alpha J_{Content}(C, G) + \beta J_{Style}(S, G)
    • ハイパーパラメータは \alpha, \betaのどちらかで十分だが、これは論文に従った表記である.
  • 以下の流れで実装する.
    1. ピクセル値をランダムにとってGを初期化する.
    2. 最急降下法などを用いて J(Gを最小化する.

Content Cost Fucntion

  • 中間層 lに焦点を当ててコンテンツのコスト関数を定義すると、 J_{Contet}(C, G) = \frac{1}{2} || a^{[l](C)} - a^{[l](G)}  ||^{2} と書ける.
    •  l が小さいとコンテンツ画像を忠実に再現してしまうし、大きいと物体認識を行うだけになってしまう.そのため、中間層における G Cの出力を比較する.
    • VGGなどの訓練済みモデルを用いる.

Style Cost Function

  • 中間層 lにおけるチャンネル間の相関をスタイルと定義する.
    • 特定のパターン(テクスチャや色など)がある領域が異なるパターンも持つ場合に相関が高いと言える.
    • Gの相関をSが持つ相関に近づける.
  • チャンネル間の相関をスタイル行列 G^{[l]}\in n_c^{[l]} × n_c^{[l]}を使って表す.
    • ある層lの位置(i, j, k)における出力を a_{i, j, k}^{[l ]}とすると、 G_{k, k'}^{[l]} = \sum_{i=1}^{n_H} \sum_{j=1}^{n_W} a_{i, j, k}^{[l ]} a_{i, j, k'}^{[l ]}
    • スタイル行列は代数学的にはGram matrixと呼ばれる
  •  S, Gのスタイル行列を G_{k,k'}^{[l](S)}, G_{k,k'}^{[l](G)}とすると、 J_{Style}^{[l]}(S, G) = (\frac{1}{2n_H^{[l]}n_W^{[l]}n_C^{[l]}})^2 ||  G_{k,k'}^{[l](S)}- G_{k,k'}^{[l](G)}  ||_F^2と書ける(正規化定数はあまり重要じゃない.)
  • 最終的に計算すべきコスト関数は J_{Style}(S, G) = \sum_{l=1}^{}\lambda^{[l]} J_{Style}^{[l]}(S, G)

1D and 3D Generalizations

  • これまで画像のような2Dのデータに対する議論をしてきたが、同様のアルゴリズムを1Dや3Dのデータにも適用することが出来る.
  • 1Dの例:心電図のデータなど.
    • CNN, RNNやLSTMを使った場合のメリットやデメリットは次回から説明します.
  • 3Dの例:CTスキャンデータ、動画(時間方向をdepthとみなす)など.
    • モーション解析やトラッキングなどの目的で行われる.