深層学習をつかった画像スタイル変換の話と今までの歴史 VGG,生成モデル
深層学習でスタイル転移
View Slide
古い時代のスタイル変換の話テクスチャを張り合わせ、滑らかに縫い合わせるimage quilting (命名) 滑らかに繋げない部分には適合できない??
これからの話よりも分かりやすいですhttps://www.youtube.com/watch?v=VQEMptfWpLk
概要物体認識の畳み込みネットワークから得られる特徴空間から、テクスチャを取り出すことができたよ精度の良い識別器は画像に写っている構造物や背景の線を分離して捉えたりしているんだよ(フィルタの可視化参照)自然画像の特徴を捉えることができた人間がテクスチャか自然画像か見分けられなかったら勝ちでしょ今までのテクスチャ抽出とはランダムな箇所をサンプリングしてつなぎ合わせていた対照的にこのアプローチは元画像のテクスチャ構造に近づける方法でアプローチしたんだよ
テクスチャはガボールフィルタにとても似ているよガボールフィルタは哺乳類の視覚野を模しているようなものだからね。ヒトが視覚している活動に近いんだよでもフィルタ(線形フィルタ)を使ったアプローチでは自然画像の特徴をとらえきれなかったんだよ畳み込みネットワークはフィルタも学習していくよその処理の中で自然画像のテクスチャ構造が捉えられそうなことに気づいたよ今回はVGG19を例にとって話すよ
VGGの詳しい話は無しだよ3*3*k のサイズのフィルタを使うよkは入力特徴量マップの数だよストライドとパディングを入力次元と一致するように行うよ2*2の領域でmax poolするよ(averageの方が明快な画像に改善するよ)特徴マップを2倍ダウンサンプリングしているんだよ今回は畳み込み層だけ使っているから入力画像の大きさは任意にできるよ最初の畳み込み層は入力画像と同じサイズを持つよ
左がCNNに通していったときの出力テクスチャと、ノイズから出力した層の値のグラム行列を元にその差分である二乗損失を偏微分して誤差逆伝播でノイズ画像を最適化していくノイズをCNNに通した時のグラム行列が徐々に元テクスチャと似ていく
今回はネットワークの重みが1になるようスケールしているよちなみにここからのテクスチャ抽出の話はが根底にいるよ簡単に言うとテクスチャ生成のために異なるサイズの特徴量を抽出しておくあとは差分を近づけるこの文献では抽出に線形フィルタを用いているが、本論文ではdeep NNと、ネットワーク各層の相関関係を使っているのが新しいポイントだよ
CNNを通過させ、ネットワークのレイヤーの活性化を計算するネットワークのレイヤたちは非線形のフィルタにかけられた、と考えられるので、画像に対する活性化は特徴マップである(いわゆる出力)レイヤLがN個の異なるフィルタを持つなら、特徴マップを N個持つこれら特徴マップはFとして呼ぶFの中にはレイヤLの位置Kにおけるj番目のフィルタの活性化が入力されている要約統計量は特徴マップ内の空間情報を破棄する相関関係はグラム行列として表現することができ、特徴マップと層lの内積である元画像も、入力画像もどちらもグラム行列を求め、これを二乗誤差最小化で近づける(画像というものを高次元の特徴量空間上での点だと考えるならば内積は相関を表す分散共分散行列である)その相関行列が近くになれば、似た画像特徴量を得る
グラム行列の二乗誤差を計算するときは、次のような損失だよ(4層つかうから)そして全体の損失は各層に重みをかけて考えるよ。加重和だよ。結果の更新にどの層の寄与度を強くするかだねそして全体の損失は各層に重みをかけて考えるよ。加重和だよ。結果の更新にどの層の寄与度を強くするかだね
各層のグラム行列の二乗誤差は偏微分可能だよ。解析的に求まるから安心だね。よって誤差逆伝播で近づけていけるよ。L-BFGSを最適化手法として採用しているけど、これは高次元の最適化問題に適していると考えたからだよこの手法は基本的には重みを固定した複雑なネットワークの順伝播と、その中間層の出力の最適化だけだよ従って一般的なCNNの訓練環境であるGPUとかがあれば問題なく動作できるよ。
4種類の画像セットからテクスチャを取り出した話一行目のconv1は一層目の表現から生成されたものです二行目はconv1と2とpool1のテクスチャ表現を組み合わせているこのようにテクスチャモデルが段階的に深層になっていくと、どんなフィルタになるのかを理解してもらえたでしょうかpool4の行は 1~4のすべてを組み合わせているここまで組み合わせると元画像を同じような画像になる深い層の重みを無視しようとするとconv1のように構造は消えるレイヤ数が増えるほどテクスチャは一致しやすくなるただし、元のテクスチャの影響が強く出すぎるためにpool4までの出力に抑えているグラム行列を使わなかったportillaたちのコードでは一番下のようになるimagenetのネットワークをつかい、テクスチャだけでない画像からテクスチャを取り出す方法も紹介します一番右、4列目
局所的な情報(テクスチャとして抽出したい対象)を保持しながら、全体の構造を無視する(構造を気にせずテクスチャ化する)という方法ができましたNlの特徴マップとはNl * (Nl + 1)/2 のパラメタになりますpool4まで利用すると約852000のパラメタですしかし、パラメタが増えてもそんなに大きく改善はしていないのですそこで各層の特徴マップを主成分分析して減らしてからグラム行列にしてもいいでしょう64の特徴量まで主成分分析をすることで二列目10Kのように現象させることができました平均値だけ使用してグラム行列にすると一列目のようになりますパラメタ削減は可能ですどの程度まで削減可能かは研究対象であり次回以降のテーマですただし、規則的な画像に対して(レンガの壁)パラメタを減らすと失敗します
小さなフィルタを持つVGGはテクスチャを補足するのに適しているようですalexnetではテクスチャの抽出があまり上手ではなかったその問題点とは・構造が一致しない(二行目右、conv_5画像)・テクスチャ上に網目構造が表示されてしまう(二列目全体)使用するCNNネットワークの構造にも依存することが分かったVGGの構造でも重みをランダムにするネットワークでは失敗する(三行目)
imagenetの入力画像をgrammatrixにしましたVGGの各層の出力を線形判別機にかけた結果と層の出力をグラム行列にして判別機にかけた結果です精度向上はこの場合無視していますgramでも、元のVGG表現でも、特徴マップは層を深くするほどに分類精度に影響を与えることがわかるフィルターとは等間隔でずらしていった結果であり、特徴マップには空間情報が含まれていないはずそのため、空間情報は別の何かで伝わっているのだろう似た画像を同じ結果として物体認識する理由は未だに理解できない
特徴マップのグラム行列を計算し、DNNの出力を使うことで、CNNからの一様なパターンを抽出できたフィッシャーベクトルを使い物体認識や場面判別が可能となっている我々の結果でも深い層の畳み込み層をフィッシャーベクトルとして入力することで、自然な質感が得られているテクスチャを抽出することが目的であるので、グラム行列を物体認識では評価していないが、良い特徴量空間の表現であると考える
https://towardsdatascience.com/neural-networks-intuitions-2-dot-product-gram-matrix-and-neural-style-transfer-5d39653e7916グラム行列の話内積ってベクトルの向きの近さの話なんです同じ方向向いていれば何となく似た画像になりそうですよね高次元の特徴量ですしおすし余談・グラム行列(分散共分散)がスタイルとしての性質を持つなら、出力平均はコンテンツを持つのでは?・そしてもっとスタイルに向いた特徴もあるはず。しかし効率がいいしうまくスタイルを取り出してくれるのでコレ
本題もとい
テクスチャの目標や、構造の目標に対して最適化していく方法目標はVGGの中間の層簡単に
畳み込みは深い層ほど細かいピクセルを見ないが何を見ているかという構造を示す(オブジェクトと配置 = content)浅い層はピクセル値は詳細な出力が得られるがフィルタは細かい線や曲線しか抽出しない(style)スタイル(テクスチャ抽出)は前回紹介したグラム行列を近づけるのであった
全体の構造を簡単に説明ノイズ画像からテクスチャを生成する左側の構造は既に紹介済スタイル画像aのVGG中間層の出力のグラム行列Aとノイズを通した出力のグラム行列Gを近づける(相関を高める)
全体の構造を簡単に説明コンテンツ画像の深い層の出力は構造を学習しているので、この構造以外にスタイルを適応させたらいいノイズの中に構造を作り出す(二乗損失)(CNN可視化参照)
復習になるがグラム行列を各層の二乗損失に使いその加重和をスタイルの損失とするこれは解析的に求まるので誤差逆伝播で最適化できる
構造はCNNの深い層の捉えてている構造を差分とするスタイルのように曖昧なものを学習させるのでなく明確に映っているものを模写する必要があるのでグラム行列でなく二乗損失これは解析的に求まるので誤差逆伝播で最適化できるhttps://www.youtube.com/watch?v=AgkfIQ4IGaMhttp://yosinski.com/deepvis
あらふしぎ構造物が残り、テクスチャが反映された
構造とスタイルをどれだけ調和させるかは重みを使って調整するスタイルの方を重視すると左上構造が消える構造を重視すると右下空や川が残る
コンテンツの一致させる対象を浅い層にすると構造は明確に残り幻想的なぼやけはなくなる色が上からスタイルによって塗られたような画像になる
スタートの入力はノイズという話だったがスタイル画像やコンテンツ画像から最適化して合わせていった場合どうなるかA コンテンツB スタイルC以降 異なるホワイトノイズ入力による違いはあまり見えないノイズを変えるだけで画像の出来が全く変わる逆に入力が固定画像であれば決定論的に一定の画像へと収束する
一枚一枚最適化していくの遅くね?テクスチャをノイズの一貫として乗っけてくれる生成モデル作ろうやって話ピクセル(画素)に関する損失の最適化でなく、別の損失を考えることで視覚的にもよくなった
画像変換ネットワーク入力画像x を 画像y hat へと変換学習時にはy hatとyの損失を元に学習を行う(スタイル変換の教師 yは難しい)損失ネットワーク重み固定
Gatyらはこれをgram 行列で定義していた。C*Cの行列であるちなみにグラム行列はCj * HjWhjで計算するのが計算が効率的グラム行列のノルムを最小化(二乗フロベニウスノルム , ヒルベルト空間上でユークリッド距離のようなもの。内積。)損失ネットワークのfeature (content)gatyらはL2ノルムの最小化によって、深い層から得られる画素の一致を目指した特徴マップのサイズはCHWである再構成損失は二乗損失である
MS COCO datasets target
実行時間の差事前にネットワークをつくるので圧倒的に実行速度がはやい
性能比較のためにgatyらの使っている手法の出力と比べることにする訓練ネットワークから出力される y hat は以下の式から得られる空間平滑性を高めるために特徴反転や超解像技術を参考に全変動正則化器 TV を導入する(TVについては超解像技術の分野で有名なので調べるならその文脈で)あとは 入力xからの出力であるホワイトノイズyをVGGによりスタイル画像へ変換してスタイル画像とXとの差をもとに、L-BFGSで生成ネットワークを最適化する
500回の最適化くらいから収束することがわかるgaty ではVGGの損失を前方にも後方にも伝播するので時間がかかる
画像自体も似た結果を示している実行時間の差からもこの手法の有益性がわかる
超解像についても適応できるらしいが興味がないのでpass
生成ネットワークを改善したら大変に良くなったぜ・バッチ正規化をインスタンス正規化にする・juleszアンサンブルの考えにより偏りのない生成器をつくることhttps://www.youtube.com/watch?v=Br9rySL7GbE
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つくらいしかないものには使えない
論文読むための前提知識をまず説明GANを代表に話すが、生成モデルの学習とは大変に難しい最少化をしようにも目的関数が非凸であって最適化できなかったり、収束の約束ができない目的関数であったりする最適化するというよりも一様にサンプリングして小さい所さがそう(正規分布のホワイトノイズでなく一様分布によるノイズ)非凸であり大域的最小が見つけられないだろうという仮定から一様でサンプリングしていると思われるさらにジェネレータに見られるモード崩壊も防げる?
論文読むための前提知識をまず説明訓練によって得られたジェネレータは伝播するだけで出力が得られるので処理が速いここで重要なのが訓練サンプルだけを出力するような生成器だと使えないということ正則化で一般化性能を高めたいこの生成器ではテクスチャだけを生成するモデルができる
テクスチャだけ作ってもスタイル変換はできない元画像も同時に入れ込むことで、元画像との損失とテクスチャ生成のどちらも考慮した生成器が出来上がる(VGGからは変わらずテクスチャを返してもらう)生成器はコンテンツとの差分を最小化するのでなく、自然画像そのものとのトレードオフを気にするようになる
ネットワーク中にインスタンス正規化を加え、実行時にも保持する。特徴マップに対して。(バッチ毎に規格化を行うの処理でなく、正規化のパラメタも含めて固定)
標準正規分布から得られたεεをジェネレータに入れて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
モンテカルロ法によってノイズから生成器を通って産み出された画像が、目的の画像に近くなるような場合を採択していく一様分布の近い値を取っていくようになるのかな
入力画像xに対して、別の画像x0のスタイルを移したい。そしてコンテンツxtの構造物も移したいそんなジェネレータgを学習することで高速化が可能zはノイズ N(0,1)である。しかし、問題は事前にネットワークを学習することで、学習内容を過学習してスタイル変換がうまくいかなくなることがわかっている。取れる最善手は少数画像による学習と早期停止である問題の一端として、コンテンツ画像からスタイルを抽出してしまえるのが問題
テクスチャはジェネレータにより生成される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~HF:χxΩ→R,l画像のFl応答損失はL(x) = 平均の差 μl(x) – μl
コントラストの正規化バッチ正規化バッチをインスタンス正規化インスタンスで平均や分散を固定することでバッチごとに変化することを防ぐ(学習時に統計量の計算の必要もなくなる)ここで作られたインスタンス正規化は画像生成時にもそのまま使われる
Julesz ensembleジュールズアンサンブルの分布画像を入れた時のフィルタの出力平均の変化この式からのサンプリングは困難よって最適化問題を解くxはテクスチャ画像画像の分布
VGGフィルタからスタイルが抽出されることは知られており、Gatyらのスタイルロス L(X) を採用するグラム行列を近づけるテクスチャ μ がコンテンツ画像 x0 の上に描かれる深いフィルタの応答を近づけることによるL cont()ノイズzから画像が生まれると考えg(z)を学習するg(z)は、テクスチャとコンテンツを最小にすることで学習
https://www.youtube.com/watch?v=mRIRK8daOl8