Upgrade to Pro — share decks privately, control downloads, hide ads and more …

深層学習をつかった画像スタイル変換の話と今までの歴史

Ringa_hyj
November 21, 2020

 深層学習をつかった画像スタイル変換の話と今までの歴史

深層学習をつかった画像スタイル変換の話と今までの歴史
VGG,生成モデル

Ringa_hyj

November 21, 2020
Tweet

More Decks by Ringa_hyj

Other Decks in Science

Transcript

  1. 深層学習でスタイル転移

    View Slide

  2. 古い時代のスタイル変換の話
    テクスチャを張り合わせ、滑らかに縫い合わせる
    image quilting (命名) 滑らかに繋げない部分には適合できない??

    View Slide

  3. これからの話よりも分かりやすいです
    https://www.youtube.com/watch?v=VQEMptfWpLk

    View Slide

  4. 概要
    物体認識の畳み込みネットワークから得られる特徴空間から、テクスチャを取り出すことができたよ
    精度の良い識別器は画像に写っている構造物や背景の線を分離して捉えたりしているんだよ
    (フィルタの可視化参照)
    自然画像の特徴を捉えることができた
    人間がテクスチャか自然画像か見分けられなかったら勝ちでしょ
    今までのテクスチャ抽出とはランダムな箇所をサンプリングしてつなぎ合わせていた
    対照的にこのアプローチは元画像のテクスチャ構造に近づける方法でアプローチしたんだよ

    View Slide

  5. テクスチャはガボールフィルタにとても似ているよ
    ガボールフィルタは哺乳類の視覚野を模しているようなものだからね。
    ヒトが視覚している活動に近いんだよ
    でもフィルタ(線形フィルタ)を使ったアプローチでは自然画像の特徴をとらえきれなかったんだよ
    畳み込みネットワークはフィルタも学習していくよ
    その処理の中で自然画像のテクスチャ構造が捉えられそうなことに気づいたよ
    今回はVGG19を例にとって話すよ

    View Slide

  6. VGGの詳しい話は無しだよ
    3*3*k のサイズのフィルタを使うよ
    kは入力特徴量マップの数だよ
    ストライドとパディングを入力次元と一致するように行うよ
    2*2の領域でmax poolするよ(averageの方が明快な画像に改善するよ)
    特徴マップを2倍ダウンサンプリングしているんだよ
    今回は畳み込み層だけ使っているから入力画像の大きさは任意にできるよ
    最初の畳み込み層は入力画像と同じサイズを持つよ

    View Slide

  7. 左がCNNに通していったときの出力
    テクスチャと、
    ノイズから出力した層の値のグラム行列を元に
    その差分である二乗損失を偏微分して誤差逆伝播で
    ノイズ画像を最適化していく
    ノイズをCNNに通した時のグラム行列が徐々に元
    テクスチャと似ていく

    View Slide

  8. 今回はネットワークの重みが1になるようスケールしているよ
    ちなみにここからのテクスチャ抽出の話は
    が根底にいるよ
    簡単に言うと
    テクスチャ生成のために異なるサイズの特徴量を抽出しておく
    あとは差分を近づける
    この文献では抽出に線形フィルタを用いているが、
    本論文ではdeep NNと、ネットワーク各層の相関関係を使っているのが新しいポイントだよ

    View Slide

  9. CNNを通過させ、ネットワークのレイヤーの活性化を計算する
    ネットワークのレイヤたちは非線形のフィルタにかけられた、と考えられるので、
    画像に対する活性化は特徴マップである(いわゆる出力)
    レイヤLがN個の異なるフィルタを持つなら、特徴マップを N個持つ
    これら特徴マップはFとして呼ぶ
    Fの中にはレイヤLの位置Kにおけるj番目のフィルタの活性化が入力されている
    要約統計量は特徴マップ内の空間情報を破棄する
    相関関係はグラム行列として表現することができ、特徴マップと層lの内積である
    元画像も、入力画像もどちらもグラム行列を求め、これを二乗誤差最小化で近づける
    (画像というものを高次元の特徴量空間上での点だと考えるならば内積は相関を表す分散共分散行列である)
    その相関行列が近くになれば、似た画像特徴量を得る

    View Slide

  10. グラム行列の二乗誤差を計算するときは、次のような損失だよ(4層つかうから)
    そして全体の損失は各層に重みをかけて考えるよ。加重和だよ。
    結果の更新にどの層の寄与度を強くするかだね
    そして全体の損失は各層に重みをかけて考えるよ。加重和だよ。
    結果の更新にどの層の寄与度を強くするかだね

    View Slide

  11. 各層のグラム行列の二乗誤差は偏微分可能だよ。
    解析的に求まるから安心だね。
    よって誤差逆伝播で近づけていけるよ。
    L-BFGSを最適化手法として採用しているけど、これは高次元の最適化問題に適していると考えたからだよ
    この手法は基本的には重みを固定した複雑なネットワークの順伝播と、
    その中間層の出力の最適化だけだよ
    従って一般的なCNNの訓練環境であるGPUとかがあれば問題なく動作できるよ。

    View Slide

  12. 4種類の画像セットからテクスチャを取り出した話
    一行目のconv1は一層目の表現から生成されたものです
    二行目はconv1と2とpool1のテクスチャ表現を組み合わせている
    このようにテクスチャモデルが段階的に深層になっていくと、
    どんなフィルタになるのかを理解してもらえたでしょうか
    pool4の行は 1~4のすべてを組み合わせている
    ここまで組み合わせると元画像を同じような画像になる
    深い層の重みを無視しようとするとconv1のように構造は消える
    レイヤ数が増えるほどテクスチャは一致しやすくなる
    ただし、元のテクスチャの影響が強く出すぎるためにpool4まで
    の出力に抑えている
    グラム行列を使わなかったportillaたちのコードでは一番下のよう
    になる
    imagenetのネットワークをつかい、
    テクスチャだけでない画像からテクスチャを取り出す方法も紹介します
    一番右、4列目

    View Slide

  13. 局所的な情報(テクスチャとして抽出したい対象)
    を保持しながら、
    全体の構造を無視する(構造を気にせずテクスチャ化する)
    という方法ができました
    Nlの特徴マップとはNl * (Nl + 1)/2 のパラメタになります
    pool4まで利用すると約852000のパラメタです
    しかし、パラメタが増えてもそんなに大きく改善はしていないのです
    そこで各層の特徴マップを主成分分析して減らしてからグラム行列にしてもいいでしょう
    64の特徴量まで主成分分析をすることで二列目10Kのように現象させることができました
    平均値だけ使用してグラム行列にすると一列目のようになります
    パラメタ削減は可能です
    どの程度まで削減可能かは研究対象であり次回以降のテーマです
    ただし、規則的な画像に対して(レンガの壁)パラメタを減らすと失敗します

    View Slide

  14. 小さなフィルタを持つVGGはテクスチャを補足するのに適しているようです
    alexnetではテクスチャの抽出があまり上手ではなかった
    その問題点とは
    ・構造が一致しない(二行目右、conv_5画像)
    ・テクスチャ上に網目構造が表示されてしまう(二列目全体)
    使用するCNNネットワークの構造にも依存することが分かった
    VGGの構造でも重みをランダムにするネットワークでは失敗する(三行目)

    View Slide

  15. imagenetの入力画像をgrammatrixにしました
    VGGの各層の出力を線形判別機にかけた結果と
    層の出力をグラム行列にして判別機にかけた結果です
    精度向上はこの場合無視しています
    gramでも、元のVGG表現でも、
    特徴マップは層を深くするほどに分類精度に影響
    を与えることがわかる
    フィルターとは等間隔でずらしていった結果であり、
    特徴マップには空間情報が含まれていないはず
    そのため、空間情報は別の何かで伝わっているのだろう
    似た画像を同じ結果として物体認識する理由は未だに理解できない

    View Slide

  16. 特徴マップのグラム行列を計算し、
    DNNの出力を使うことで、
    CNNからの一様なパターンを抽出できた
    フィッシャーベクトルを使い物体認識や場面判別が可能となっている
    我々の結果でも深い層の畳み込み層をフィッシャーベクトルとして入力するこ
    とで、自然な質感が得られている
    テクスチャを抽出することが目的であるので、グラム行列を物体認識では評価
    していないが、良い特徴量空間の表現であると考える

    View Slide

  17. https://towardsdatascience.com/neural-networks-intuitions-2-dot-product-gram-matrix-and-neural-
    style-transfer-5d39653e7916
    グラム行列の話
    内積ってベクトルの向きの近さの話なんです
    同じ方向向いていれば何となく似た画像になりそうですよね
    高次元の特徴量ですしおすし
    余談
    ・グラム行列(分散共分散)がスタイルとしての性質を持つな
    ら、出力平均はコンテンツを持つのでは?
    ・そしてもっとスタイルに向いた特徴もあるはず。しかし効
    率がいいしうまくスタイルを取り出してくれるのでコレ

    View Slide

  18. 本題
    もとい

    View Slide

  19. テクスチャの目標や、構造の目標に対して最適化していく方法
    目標はVGGの中間の層
    簡単に

    View Slide

  20. 畳み込みは深い層ほど細かいピクセルを見ないが
    何を見ているかという構造を示す
    (オブジェクトと配置 = content)
    浅い層はピクセル値は詳細な出力が得られるが
    フィルタは細かい線や曲線しか抽出しない
    (style)
    スタイル(テクスチャ抽出)は前回紹介した
    グラム行列を近づけるのであった

    View Slide

  21. 全体の構造を簡単に説明
    ノイズ画像からテクスチャを生成する
    左側の構造は既に紹介済
    スタイル画像aのVGG中間層の出力
    のグラム行列A

    ノイズを通した出力
    のグラム行列G
    を近づける(相関を高める)

    View Slide

  22. 全体の構造を簡単に説明
    コンテンツ画像の
    深い層の出力は構造を学習しているので、この構造以外にスタイル
    を適応させたらいい
    ノイズの中に構造を作り出す(二乗損失)
    (CNN可視化参照)

    View Slide

  23. 復習になるが
    グラム行列を
    各層の二乗損失に使い
    その加重和を
    スタイルの損失とする
    これは解析的に求まるので
    誤差逆伝播で最適化できる

    View Slide

  24. 構造は
    CNNの深い層の捉えてている構造を差分とする
    スタイルのように曖昧なものを学習させるのでなく
    明確に映っているものを模写する必要があるので
    グラム行列でなく二乗損失
    これは解析的に求まるので
    誤差逆伝播で最適化できる
    https://www.youtube.com/watch?v=AgkfIQ4IGaM
    http://yosinski.com/deepvis

    View Slide

  25. あらふしぎ
    構造物が残り、テクスチャが反映された

    View Slide

  26. 構造とスタイルをどれだけ調和させるかは
    重みを使って調整する
    スタイルの方を重視すると左上
    構造が消える
    構造を重視すると右下
    空や川が残る

    View Slide

  27. コンテンツの一致させる対象を浅い層にすると
    構造は明確に残り幻想的なぼやけはなくなる
    色が上からスタイルによって塗られたような画像になる

    View Slide

  28. スタートの入力はノイズという話だったが
    スタイル画像やコンテンツ画像から
    最適化して合わせていった場合どうなるか
    A コンテンツ
    B スタイル
    C以降 異なるホワイトノイズ
    入力による違いはあまり見えない
    ノイズを変えるだけで画像の出来が全く変わる
    逆に
    入力が固定画像であれば決定論的に一定の画像へと収束する

    View Slide

  29. 一枚一枚最適化していくの遅くね?
    テクスチャをノイズの一貫として乗っけてくれる生成モデル作ろうや
    って話
    ピクセル(画素)に関する損失の最適化でなく、別の損失を考えることで視覚的にもよくなった

    View Slide

  30. 画像変換ネットワーク
    入力画像x を 画像y hat へと変換
    学習時にはy hatとyの損失を元に学習を行う
    (スタイル変換の教師 yは難しい)
    損失ネットワーク
    重み固定

    View Slide

  31. Gatyらはこれをgram 行列で定義していた。C*Cの行列である
    ちなみにグラム行列はCj * HjWhjで計算するのが計算が効率的
    グラム行列のノルムを最小化
    (二乗フロベニウスノルム , ヒルベルト空間上でユークリッド距離のようなもの。内積。)
    損失ネットワークのfeature (content)
    gatyらはL2ノルムの最小化によって、
    深い層から得られる画素の一致を目指した
    特徴マップのサイズはCHWである
    再構成損失は二乗損失である

    View Slide

  32. MS COCO datasets target

    View Slide

  33. 実行時間の差
    事前にネットワークをつくるので圧倒的に実行速度がはやい

    View Slide

  34. 性能比較のためにgatyらの使っている手法の出力と比べることにする
    訓練ネットワークから出力される y hat は以下の式から得られる
    空間平滑性を高めるために特徴反転や超解像技術を参考に全変動正則化器 TV を導入する
    (TVについては超解像技術の分野で有名なので調べるならその文脈で)
    あとは 入力xからの出力であるホワイトノイズyをVGGによりスタイル画像へ変換して
    スタイル画像とXとの差をもとに、L-BFGSで生成ネットワークを最適化する

    View Slide

  35. 500回の最適化くらいから収束することがわかる
    gaty ではVGGの損失を前方にも後方にも伝播するので時間がかかる

    View Slide

  36. 画像自体も似た結果を示している
    実行時間の差からもこの手法の有益性がわかる

    View Slide

  37. 超解像についても適応できるらしいが興味がないのでpass

    View Slide

  38. View Slide

  39. 生成ネットワークを改善したら大変に良くなったぜ
    ・バッチ正規化をインスタンス正規化にする
    ・juleszアンサンブルの考えにより偏りのない生成器をつくること
    https://www.youtube.com/watch?v=Br9rySL7GbE

    View Slide

  40. https://docs.google.com/presentation/d/0B_-
    hq6gL70bUdDBCUHVJWVlWWjQ/edit#slide=id.p6
    論文読むための前提知識をまず説明
    生成モデルとはノイズから画像をつくる
    GANやVAE
    そもそも画像とは、神のみぞしる分布からゆらぎを持って
    サンプリングされた数値たちの集合である
    という考え。
    手元の画像Xも背景にはp(X)があり
    このp(X)はわからないので
    g(z)でxのサンプリング経路を近似する
    ※GANのgeneratorには学習対象画像が複数必要であり、今回
    のように対象が1つくらいしかないものには使えない

    View Slide

  41. 論文読むための前提知識をまず説明
    GANを代表に話すが、生成モデルの学習とは大変に難しい
    最少化をしようにも目的関数が非凸であって最適化できなかったり、
    収束の約束ができない目的関数であったりする
    最適化するというよりも一様にサンプリングして小さい所さがそう
    (正規分布のホワイトノイズでなく一様分布によるノイズ)
    非凸であり大域的最小が見つけられないだろうという仮定から一様でサンプリングしていると思われる
    さらにジェネレータに見られるモード崩壊も防げる?

    View Slide

  42. 論文読むための前提知識をまず説明
    訓練によって得られたジェネレータは伝播するだけで出力が得られるので処理が速い
    ここで重要なのが訓練サンプルだけを出力するような生成器だと使えないということ
    正則化で一般化性能を高めたい
    この生成器ではテクスチャだけを生成するモデルができる

    View Slide

  43. テクスチャだけ作ってもスタイル変換はできない
    元画像も同時に入れ込むことで、元画像との損失とテクスチャ生成のどちらも考慮した
    生成器が出来上がる(VGGからは変わらずテクスチャを返してもらう)
    生成器はコンテンツとの差分を最小化するのでなく、自然画像そのものとのトレードオフを
    気にするようになる

    View Slide

  44. ネットワーク中にインスタンス正規化を加え、実行時にも保持する。特徴マップに対して。
    (バッチ毎に規格化を行うの処理でなく、正規化のパラメタも含めて固定)

    View Slide

  45. 標準正規分布から得られたε
    εをジェネレータに入れてzをつくる
    zはq(z)から得られると考える Z~q(z)
    q(z)は手元の画像の出てきたp(x)の近似である
    p(x)の推定をしたいなら、損失関数に対する負の対数尤度を最尤推定したらええ これをp(x) hat
    そして、z全体ははp(x)hatの積分によって得られる Z~p(x) hat
    真のp(x)は p(x) hat をZで周辺化した値である(Zが積分なら周辺化したらp(x)hatだけになるのは当然)
    変分ベイズの考え
    どうやって近似していくかといえばKLダイバージェンスの最小化
    VAEと目指すところは同じ
    https://bayesgroup.github.io/bmml_sem/2016/style.pdf

    View Slide

  46. モンテカルロ法によってノイズから生成器を通って産み出された画像が、
    目的の画像に近くなるような場合を採択していく
    一様分布の近い値を取っていくようになるのかな

    View Slide

  47. View Slide

  48. 入力画像xに対して、別の画像x0のスタイルを移したい。そしてコンテンツxtの構造物も移したい
    そんなジェネレータgを学習することで高速化が可能
    zはノイズ N(0,1)である。
    しかし、問題は事前にネットワークを学習することで、学習内容を過学習してスタイル変換がうまくいか
    なくなることがわかっている。
    取れる最善手は少数画像による学習と早期停止である
    問題の一端として、コンテンツ画像からスタイルを抽出してしまえるのが問題

    View Slide

  49. テクスチャはジェネレータにより生成される
    iidなホワイトノイズからテクスチャ画像xを作る x = g(z)
    生成画像xの分布はq(X)から取り出されるもの (GANやVAEとおなじ考え)
    標的とするテクスチャの分布がp(x)である
    生成器の目標はq(x)をp(x)に近づけること
    p(x)とは人間が知りえないものであり、最適化もできない
    juleszアンサンブル を 一様サンプリングを行う
    複数フィルタの平均的な応答反応を比べ、テクスチャが異なっているかを発見する
    juleszアンサンブルとは?
    画像x F フィルタ
    x : Ω→R3 Ωは1~H ×1~H
    F:χxΩ→R,l
    画像のFl応答
    損失はL(x) = 平均の差 μl(x) – μl

    View Slide

  50. コントラストの正規化
    バッチ正規化
    バッチをインスタンス正規化
    インスタンスで平均や分散を固定することで
    バッチごとに変化することを防ぐ
    (学習時に統計量の計算の必要もなくなる)
    ここで作られたインスタンス正規化は画像生成時にもそのまま使われる

    View Slide

  51. Julesz ensemble
    ジュールズアンサンブルの分布
    画像を入れた時のフィルタの出力平均の変化
    この式からのサンプリングは困難
    よって最適化問題を解く
    xはテクスチャ画像
    画像の分布

    View Slide

  52. VGGフィルタからスタイルが抽出されることは知られており、
    Gatyらのスタイルロス L(X) を採用する
    グラム行列を近づける
    テクスチャ μ がコンテンツ画像 x0 の上に描かれる
    深いフィルタの応答を近づけることによる
    L cont()
    ノイズzから画像が生まれると考えg(z)を学習する
    g(z)は、テクスチャとコンテンツを最小にすることで
    学習

    View Slide

  53. View Slide

  54. https://www.youtube.com/watch?v=mRIRK8daOl8

    View Slide

  55. View Slide