[論文メモ] Visual Attention Network

arxiv.org
github.com

画像系タスクに合わせたAttentionとしてLarge Kernel Attention(LKA)を提案

f:id:Ninhydrin:20220302091926p:plain

空間的に離れた情報同士を扱う方法として大きく2つの方法がある。
1爪がNLPで使われていたSelf-Attention(SA)を使う方法で、画像をパッチに分割しトークン列として処理するが

  • 画像を1Dとして扱うため元の2D構造が無視される
  • 解像度が大きいと計算量が膨大になる
  • 空間方向を考慮したAttentionなので、画像にとって大切なチャンネル方向が考慮されていない

といった問題がある。
2つ目に画像全体をカバーする大きいカーネルサイズのConvolutionを使う方法がある。これは計算量が大きく、パラメータも多くなってしまう。

手法

提案するLKAは図2のように大きいカーネルサイズのConvolutionをDepth-wise Dilation Conv(DW-D-Conv)とDepth-wise Conv(DW-Conv)と Point-wise Conv(PW-Conv)に分解する。
カーネルサイズ K \times KのConvolutionはカーネルサイズ \frac{K}{d} \times \frac{K}{d}でdilation dのDW-D-Convとカーネルサイズ (2d - 1) \times (2d-1)のDW-Convと 1 \times 1のPW-Convとなる。
これによりSAと同じように離れた点同士の関係を低コストで計算できる。あとはこれをAttention Mapとして計算する(下記の式1, 2)。
f:id:Ninhydrin:20220302092555p:plain

 F \in \mathcal{R}^{C \times H \times W}は入力特徴量。

LKAは表1のようなConvolutionとAttentionの両方のアドバンテージを持つ
f:id:Ninhydrin:20220302093948p:plain

LKAを使ったネットワーク、Visual Attention Network(VAN)について。
VANはピラミッド構造で解像度が異なる4ステージからなる。
各ステージは図3(d)の構造。
f:id:Ninhydrin:20220302094815p:plain

各ステージ毎のチャンネル数や解像度は表2を参照
f:id:Ninhydrin:20220302094919p:plain

パラメータ数とFLOPs
f:id:Ninhydrin:20220302095105p:plain

実験・結果

ImageNet-1Kのクラス分類、COCOのObject Detecf:id:Ninhydrin:20220302100241p:plaintion、ADE20KのSemantic Segmentation。
f:id:Ninhydrin:20220302100014p:plain
f:id:Ninhydrin:20220302100044p:plain
f:id:Ninhydrin:20220302100107p:plain
f:id:Ninhydrin:20220302100130p:plain


Grad-CAMで可視化
f:id:Ninhydrin:20220302100204p:plain

Ablation study
f:id:Ninhydrin:20220302100402p:plain

所感

なんかすでにどこかで見たことあるようなアーキテクチャ。ありそうでなかった?Mobile-Netは近いけど、大域をカバーするわけではなかった。
最近のMLPもそうだしAttentionというか、Localな特徴とGlobalな特徴をどうやって共存させつつも統括するかの問題な気がする(注意とかではなく)。
だから単純にずらすだけのShift Operationも効果があるしで、Softmaxして重み(注意)が〜とかそのあたり意味が無いのでは?
Localな情報のみを扱えるConvolutionとそれらのLocalな情報を相互作用できる何かしらGlobalなオペレーションで十分そう。

[論文メモ] SPEECH DENOISING IN THE WAVEFORM DOMAIN WITH SELF-ATTENTION

arxiv.org
cleanunet.github.io

ICASSP 2022

NVIDIA

波形データを入出力として扱うencoder-decoderのdenoisingモデル、CleanUNetを提案。
masked self-attentionが重要らしい。


手法

入力音声はモノラル。
ノイジーな長さ Tの音声 x_{noisy} \in \mathcal{R}^Tはきれいな音声 xと背景雑音 x_{noise}の合成とする( x_{noisy} =x+_{noise})。
目的はきれいな音声を取り出す関数fを学習すること(\hat x = f(x_{noisy}) \approx x)。
なお時間 tに対応する出力 \hat x_t t以前の音声 x_{1:t}から予測する。

アーキテクチャは図1の通り。
Convolutionを使ったUNetでボトルネック部分をmasked self-attentionにしている。ボトルネック部分だけなら計算コストも抑えられそう。

lossはきれいな音声との L_1 lossと複数解像度のSTFT loss。
スペクトラム s(x;\theta)=|STFT(x)|を考える( \thetaはhop size)。
複数解像度のSTFT lossは下記。

目的関数は \frac{1}{2} M-STFT(x, \hat x) + |x - \hat x|_1となるがまだ問題がある。

full-bandのM-STFT lossは無音領域に低周波ノイズが発生することがある。 l_1 lossだけだと無音部分はきれいだが、高周波帯がM-STFTに比べ良くない。
そこで16kHzなら4~8kHzといった s(x)の半分の部分のみを取り出した s_h(x)を使った M-STFT_h(x, \hat x)に変更する。

最終的な目的関数は \frac{1}{2} M-STFT_h(x, \hat x) + |x - \hat x|_1となる。

実験・結果

encoderとdecoderの深さは D=8カーネルサイズ4、ストライド2。 Nボトルネックの深さ。


Ablation Studies
表4は目的関数による違い。表5はCleanUNetの各コンポーネントの重要性を調べるため、FAIR-denoiserを徐々にCleanUNetに近づけた結果。

所感

loss毎の特性を実験的に見極めは変更していくのは、好き不好きが分かれるところだとは思う。どういう原理か気になる人は気になると思う。
最終的には人間が聞いたときの結果が全てなので、自分はこういう試行錯誤は好き。
UNetアーキテクチャボトルネックをSelf-Attentionにすれば低コストでSAを適用できるので便利そう。

[論文メモ] NOT ALL PATCHES ARE WHAT YOU NEED: EXPEDITING VISION TRANSFORMERS VIA TOKEN REORGANIZATIONS

arxiv.org
github.com

ICLR2022

Vision Transformer(ViT)においてすべてのパッチ(トークン)は必要ないので注意の少ないトークンをマージすることで精度を保ちつつ高速化する。

f:id:Ninhydrin:20220228091813p:plain
図1(a)のようにランダムにパッチをマスクしてもViTの予測に影響しないが、図2(b)のようにメインとなるオブジェクト領域をマスクすると予測が狂う。
またViTは画像を切り出したパッチをSelf-Attention(SA)で処理するので固定長の必要がない、というのがお気持ち

手法

Attentionはいつもの通り
f:id:Ninhydrin:20220228093301p:plain

ViTは画像を切り出したパッチからのトークンと最後にクラス予測に使うCLSトークンからなる。
CLSトークンと他トークンとの相互作用は以下の式。
f:id:Ninhydrin:20220228093634p:plain
 \boldsymbol{q}_{class}はCLSトークンのクエリベクトルで、Softmaxの部分をまとめ \boldsymbol{a}とするとCLSトークンの出力 \boldsymbol{x}_{class} \boldsymbol{a}係数としたバリューベクトルの線形結合と見ることができる。

CLSトークンによるAttentionはクラス予測に影響を与えるトークンほど大きくなるという既存研究の報告がある(自己教師あり学習のDINOの論文の図1を参照)。
arxiv.org

なのでCLSトークンの注意の大きさを元に不要なトークンを削除すればよい、というわけにはいかなくて、削除すると精度が落ちる(表1)
f:id:Ninhydrin:20220228095532p:plain

ということで単純に削除するのではなくマージして、トークンの再構成を行う。
Multi-Head SAの各ヘッド h = [1,...,H]のCLSトークンによるAttentionベクトル \boldsymbol{a}^{(h)}の平均 \bar{a} = \Sigma^{H}_{h=1}\boldsymbol{a}^{(a)}/Hを使ってtop-k個のトークンを決め、それ以外のトークンをマージする(図2参照)。
正確にはマージではなく、Attention Weightを使った加重平均( \boldsymbol{x}_{fused} = \Sigma_{i \in \mathcal{N}}a_i \boldsymbol{x}_i)
f:id:Ninhydrin:20220228095726p:plain

一定の割合のトークンを削除する手法だと、背景に対応するトークンは情報は少ないので削除しても影響は少ないが、画像全体に対してオブジェクトが占める割合が大きいと画像に対してはオブジェクトに関わるトークンを削除することになりパフォーマンスが落ちる。
提案手法のようにマージすれば情報の少ないトークンでも有効活用できる。

本手法を可視化したのが図3。
f:id:Ninhydrin:20220228101123p:plain

実験・結果

ImageNetで学習・検証。
提案手法名はEViT。比較対象はDeiTとLV-ViT。
表2のEViT with inattentive token fusionが提案手法で、EViT without inattentive token fusionは不要なトークンを削除するタイプ。
提案手法の方が精度低下が少ない、と言いたいところだが表2を見ると削除もマージも正直あまり差がない(一応標準偏差は小さい)。
f:id:Ninhydrin:20220301085848p:plain

f:id:Ninhydrin:20220301090040p:plain

学習済みDeiT-S/Bをオラクルにした(CLSトークンが学習済みだと大事なトークンがわかった状態である)。
f:id:Ninhydrin:20220301090807p:plain

f:id:Ninhydrin:20220301091152p:plain

なおmultiply-accumulate computations(MACs)メトリックはtorchprofileを使って測ったらしい(知らなかった)。

所感

CLSトークンがトークンの重要度と関係するという既存研究結果を知らなかった。画像から作ったトークンと違って目的が目的ゆえ、たしかに言われるとそうかという気持ち。
そしてそれを使って加重平均をとってトークンをマージして減らすというのは良い発想だが、削除して減らしてもあまり結果に変化がなさそうなのが少々残念。
削除はnetwork pruningに似ておりViTに限らずMLPでも削除ではなくマージする戦略があったのか気になる。

[デスクフリーなディスプレイ] 奥行きの小さいデスクでディスプレイと目の距離を離すために

ディスプレイと目の距離を離したいがデスクの奥行きは短い。かといってデスクの買い替えはしたくないといった欲求に答える手段としてデスクの上にディスプレイを置くのをやめ、専用台座にモニターアームごと設置し移動できるようにしたデスクフリーなディスプレイを提案する。

個人的に大成功だったので同じ悩みを抱えている人のためにもメモを残す。

導入

ディスプレイを見る時間が長くなり目のためにもなるべくディスプレイと目の距離を離したくなった。
だがデスクの奥行きが制限になりディスプレイを離すのにも限界がある。
モニターアームを使うのは悪くなかったが、モニターアームというのは基本的にディスプレイのx軸とy軸に自由を与えるものでz軸については基本近づける方向にのみ自由を与える。奥に押しやり離すこともできなくは無いが、重心がデスクの端になり不安定になるし、アームポールもそちらの方向には強くないのでおすすめはできない。

また、ディスプレイが増えた分デスクのスペースが減った。
普通にノートとか飲み物を置くにも狭い。

これらを解決する一番最もな手段は奥行きのあるデスクに買い替えかつ、モニターアームを使用することだが、この解決方法に対して自分は積極的ではない。

デスクの変更はコストが高い

個人的にデスクの変更は色々コストが高い。
まず既存のデスクを処分する必要がある。気に入っているデスクは処分したくないし、どうでもいいデスクだとしても処分は面倒だ。
新しいデスクに関しても制約が多い。
まずはサイズ。なかなかちょうどのサイズのデスクはない。高さ調整できるデスクは増えてきたが面積可変はほぼ見たことが無いので購入時に決める必要がある。
小さい場合はまだいい。追加するなり我慢するなりで対応できる。
問題は大きいときだ。デスクを削ったり切ったりするのは見た目やそもそものデスクとしての機能を損なう場合がある。
それに模様替えや引っ越しなどを考えるとその時その時で丁度なサイズのデスクは変わってくる。
デスクはあまり買い替えたくない。

モニターアームは便利だけどそこま便利でもない

モニターアームは便利だがそこまで便利でもないというのが使ってみての本音だ。
「モニターアームにしてデスクが広くなりました」というのを見つけるがモニターの下の空間なんで正直わずかで、ぶっちゃけモニターアームのポールの固定台が占める面積はモニター付属のスタンドの面積とほとんど変わらない(複数ディスプレイなら恩恵はある)。
モニターアームは適切なxyz軸にするためにアームを曲げて調整する。ポールの位置によっては理想のxyz軸にディスプレイを設置できずポールを移動する必要が出てくる。ポール自体の移動は頻度こそ少ないが面倒だ。ディスプレイを破損したりデスクを傷つけたりするリスクもある。

またモニターアームを使う場合、デスクがモニターアームを設置できる必要がある。
アームポールをつける箇所はある程度の強度ときれいに直角である(R加工されていてはだめ)必要がある。グロメットマウントすればいいという意見もあると思うが、グロメットマウントする場合はデスクに穴を開ける必要や、穴が開けられる必要がある(引き出しがあるとだめとか)。またポールの移動時には穴を開け直す必要があり、トライアンドエラーしにくい。

モニターアームはディスプレイを顔に近づけるのは得意だが、逆に遠ざけるのは苦手だ(と思っている)。
アームポールにぶつかったり、そもそもアームの長さが足りなかったり、重心がデスクの足から出てしまったり(不安定になる)と遠ざけるのは難しい。

以上のことから「奥行きのあるデスクに買い替え」and 「モニターアーム」は避けたい。

そもそものメインの目的は「ディスプレイから目を離すこと」だ。よく考えると「デスクを大きくする」のは「ディスプレイから目を離すこと」を達成するための一つの手段であって目的ではない。他の目的(ものを置きたい)とかを同時に解決できるからそれしか考えられなかったが他にも手段があることに気がついた。
自分の欲求を整理しよう

  • 既存のデスクを使いたい(買い替えはコストが高い)
  • ディスプレイから目を離したい。最低でも90cmくらい(一番の目的)
  • ディスプレイはxyz軸全てに常識的な範囲で自由であってほしい(可能であれば)

これらを解決する手段として思いつくのはディスプレイとデスクを独立させることだ。
とりあえずこの方法を「デスクフリーなディスプレイ」と呼ぶことにする。

既存手法

デスクフリーなディスプレイを実現できる既成の製品は存在する。
こういうキャスター付きのテレビスタンドだ。

決してこれも悪くない選択だが、複数ディスプレイを使いたいので選択から外れる。
複数ディスプレイに対応した製品もないわけじゃない。
これとかは複数のディスプレイに対応している。
ただ高い。10万近くは流石に試すにも厳しいし、ディスプレイの位置についても自由度も低そうだ。縦に2枚並べるとかしたいんだ!

そこでこれに近いものを自作することにした。

提案手法(デスクフリーなディスプレイ)

ということで作ったのが結果がこれ
f:id:Ninhydrin:20220227183438j:plain


必要なものはキャスター付きの台座とモニターアーム。
要するにモニターアームを設置できてかつ移動できるものを作れればいい。

まずは台座としてメタルラックを選択。メタルラックである必要はなく、次の条件を満たせばいい。

  • モニターアームのポールがつけられる(安定もする)
  • ディスプレイを複数載せられる耐荷重があること。メタルラックならそれなりに大丈夫
  • キャスターで移動できる。地震対策やレイアウト変更、用途を幅を広げるのに役立つ

今回は小さいやつを買った。

重心バランスは悪くなるが小回りがきくし、床面積も取らない。結論から言うと耐荷重も問題なかった。
より重いものを乗せるなら22mmではなく35mmとかのメタルラックにしたほうがよい。
背が高いのを買ったのは半分にして別々に使うため。


そしてモニターアームとポール。

アームは有名なエルゴトロンのLXデスクマウントモニターアーム。AmazonやHPのOEM製品も同じなので色や値段で決めていい。
今回はこれを2つ購入。
また長いアームポールがほしいのでこちらを購入。径が35mmなのでエルゴトロンも問題なく使用できた。

今更だが、エルゴトロンにはロングポールがあるのでこちらをおすすめする。

ぶっちゃけ70cmのところにアームをつけることはないだろうし(バランスが悪すぎ)、安定感も違うので少々高くてもエルゴトロンのロングボールを購入することをおすすめする。

また、ポールを短くして台座のメタルラックを高くするのもありだったが、モニターの下方向への自由度が減るのでそれは棄却した。

メタルラックを組み立て、アームポールをメタルラックに取り付ける。取り付けるときは木の板やアームポールの補強板を使った方がいい。

なくてもいいかもだが、あったほうが圧倒的に安心だ。事故ってディスプレイを修理するのに比べれば安い。
自分はメタルラック用の板とホームセンターで買った木の板、そして補強板を利用した。
f:id:Ninhydrin:20220227194355j:plain

補強板やアームポール、木の板にはそれぞれ両面テープを貼った。滑り止めのゴムは付いてるが意外と滑る。両面テープのが安心。

メタルラックの重心を安定させるために下を物置にして荷物を置いたほうがいい(なるべく重いもの)。
自分は使わなくなった裁断機を置いてる。デスクトップPCを置いてもいいかもしれない

これで移動式のモニター台が完成した。
f:id:Ninhydrin:20220227182542j:plain

使っているディスプレイはEIZOのEV2736という骨董品(右側)と下記の2つ。

EV2736と上のEV3895をモニターアームにつけ、下のU4919はEV2736のスタンドに取り替えてメタルラックの上に置いた。
U4919の純正スタンドは下までディスプレイを下げられなかったのでEV2736のスタンドに変更した。
なおU4919はエルゴトロンLXでは少々きつかった(締めてもお辞儀しそうだった)のを報告しておく。
EV3895はエルゴトロンLXで安定してる。エルゴトロンLXの対象の大きさではないので自己責任で。

3つとも重量級のディスプレイだが安定している。

結果

このデスクフリーなディスプレイにしたことで様々なメリットがある。

既存のデスクのままディスプレイから目を離せる

モニター台を移動することでディスプレイから目を離すことができるようになったのでデスクの買い替えは必要ない。
なんならテレビの視聴距離まで離すことも可能だ。
お気に入りのデスクとかをそのまま流用できるし、買い替えのリスクから開放された。

デスクを広く使える

モニターアームを使ってもアームポールをつけた部分に面積を取られるし、浮かせたとはいえディスプレイとデスクの間はそこまで大きくないので下におけるものは限られている。
ディスプレイがデスクから独立したのでデスクを完全に自由に使えるようになった。
ディスプレイを置かないならデスクは奥行き60cmもあれば十二分だ。

デスクの制約から開放される

モニターアームをつけることも無いので天板強度やポールをつけるための形、倒れないための重量等必要ない。
言ってしまえば折りたたみの簡易デスクだって問題ない。
デスクは引っ越し・模様替え等色々制約になる。

ディスプレイの用途の幅を広げられる

移動ができるので、例えばランニングマシーンとかの前に持っていくもよし、ベッドの横に持っていくもよし。
必要なときに必要な場所に持っていける。モニターアームなので高さ調整もそれなりに簡単だ

ディスプレイをデスクより下げられる

ディスプレイは並べても縦横2枚が最大だと思っている。つまり最大4枚だ。
一時期横に3台並べたこともあったが、見た目はそれっぽいが端から端までの移動は正直辛く実用的ではなかった。
目線の移動はディスプレイ2枚までが現実的だ。
横は制約もすくなく2枚は難しくない。問題は縦2枚でこれが以外と厳しいと気がついた。
自分が大きめのディスプレイを使っているせいもあってか縦に2枚並べるとどうしても正面にディスプレイを持ってこれないのだ。
個人的に1枚は顔の真正面に、もう一枚は多少傾けてその下に欲しい。しかし、ディスプレイの縦が大きいと下のディスプレイの傾きが顔のに向かず天井を向いてしまいどうにも使い勝手が悪い。
そこでこのデスクから独立したディスプレイが役にたつ。
デスクから少々離れると、ディスプレイがデスクより多少低い位置にあっても見える(角度的に)。

こんな感じ。
f:id:Ninhydrin:20220227203825j:plain
なので大型(ここでは27インチの縦幅を想定)ディスプレイでも縦に並べることができる。

デメリットについても書いておかないとフェアじゃないので書くが、正直ほとんどない。

見た目

メタルラックに棒が生えててそこにディスプレイがうようよしている。決して見た目は良くない。
まあでも基本的にデスクの奥に置くのでメタルラックもポールもそんなには目立たない。なにより仕事部屋におくものなので仕方がないだろう。
自分は見た目を気にしない(デスクの奥で気にもならない)。

地震対策

重量のあるデスクにモニターアームでくっつけてるわけでは無いし、重心がかなり上にあるのでバランスも悪く地震に強いとは言えない。
ただ足がキャスターなので揺れに多少は強いはず。メタルラックを大きくすれば多分地震耐性が上がるだろうが床の専有面積も増える。
このあたりはバランスだろう。

逆にデスクにものが置けないかも(ディスプレイをデスクより低くすると)

デスクより下にディスプレイをおけるようになったのは良かったがあまり背の高いものを置くとディスプレイが見えなくなる。
まあそんなに背の高いものを置かなければいいんだけど。
置くにしても手前にすればよい。

正直デメリットはこれだけで(地震は少々見過ごせないが)メリットのほうが大きく上回る。

おわりに

個人的にこのデスクフリーなディスプレイ環境は非常に気に入っている。
机が広くなったし、机の移動もしやすくなった分、掃除もしやすくなった。
作業用デスクとディスプレイを置く場所は別にすべきだ。

  • ディスプレイを顔から離したい
  • デスクの買い替えはしたくない

といった方は是非とも試してみて欲しい。

f:id:Ninhydrin:20220227204930j:plain
f:id:Ninhydrin:20220227204944j:plain
ケーブル周りはなんとかしたい(やらないだけ)。

[論文メモ] NNSPEECH: SPEAKER-GUIDED CONDITIONAL VARIATIONAL AUTOENCODER FOR ZERO-SHOT MULTI-SPEAKER TEXT-TO-SPEECH

arxiv.org
間違えてるかもしれないので注意。

Conditional VAE(CVAE)を使ったzero-shot text-to-speech(TTS)の提案。
f:id:Ninhydrin:20220224094559p:plain
既存手法だとほかfine-tuningしたりタスクで学習したSpeaker Encoderを使ったりする方法があるが、fine-tuningはデータの保存や学習コストが高い(ユーザーが多いと更に大変)、Encoderを使うのはクオリティが低い(Encoderの解像度だと表現しきれない)。
なので提案するnnSpeech(no new speech)ではSpeakerをガイドとしたCVAEを利用してzero-shot化する。

手法

f:id:Ninhydrin:20220224093009p:plain

CVAEは条件付きのVAEで下記の条件付きの対数尤度で学習する。

f:id:Ninhydrin:20220224093608p:plain

 XをメルスペクトログラムEncoderの出力、 Cを音素Encoderの出力とする。
メルスペクトログラムEncoderはAdaIN-VCのものを、音素EncoderはFastSpeech2のものを利用する。

条件付き分布 p(X, Z|C) = p_{\theta}(X|C, Z)p_{\theta}(Z|C)を考える( p_{\theta}(X|C, Z) p_{\theta}(Z|C)はネットワークでモデリング)。
図1(a)のように真の p_{\theta}(Z|C) p_{\phi}(Z|C,X)モデリングすると、メルスペクトログラム Xを再構成するときに潜在変数 Zが話者情報を持つ必要があるため直感に反する。

そこでspeaker-guided CVAEを提案する。 Zが話者情報 Sに基づいていると仮定する(p_{\theta}(Z|C) = p_{\theta}(Z|C,S))。そしてp_{\theta}(Z|C,S) q_{\theta}(Z|C,X)で予測する。
 Z Cの情報を含んでいるので p_{\theta}(X|C, Z, S) = p_{\theta}(X|Z, S)とできる。

もとの条件付き分布を書き換えて、 p(X, Z|C, S) = p_{\theta}(X|Z,S)p_{\theta}(Z|C,S)になる。

 q_{\phi}(Z|C,X) p_{\theta}(Z|C,S)はガウシアンに従うと仮定して、それらの平均、分散は X, C, SからMLPで予測する。

lossは話者情報で変更したELBOの最大化
f:id:Ninhydrin:20220225091844p:plain


一項目と二項目のは生成したメルスペクトログラムと話者埋め込みに関するものでELBOの最大化のためにはMLEを最小化すれば良い。
f:id:Ninhydrin:20220225091919p:plain

三項目はKLの最小化。
f:id:Ninhydrin:20220225092446p:plain

最終的なlossは下記で \alpha, \beta, \gammaはハイパラ。
f:id:Ninhydrin:20220225092538p:plain

なおボコーダはHifiGANを利用。

実験・結果

f:id:Ninhydrin:20220225092618p:plain
f:id:Ninhydrin:20220225092637p:plain
f:id:Ninhydrin:20220225092652p:plain

所感

paper内でデモや結果のリンクがなかったのは珍しい(VC系は最近デモの公開が多いので)。
それ故に少々結果は懐疑的。ぶっちゃけ数字だけでは何もわからない。

[論文メモ] Multimodal Conditional Image Synthesis with Product-of-Experts GANs

arxiv.org
deepimagination.cc

NVIDIA

スケッチやテキストなどのマルチモーダルを条件としたProduct-of-Experts Generative Adversarial Networks (PoE-GAN) の提案。

f:id:Ninhydrin:20220217090514p:plain



既存のConditional GANは条件としてスケッチやテキストなど1種類の入力を条件としていた。しかし、それだとスケッチのが説明しやすいときや逆にテキストのが説明しやすいときなどの場合に対応ができないよねというお気持ち。

手法

 M個モダリティ (y_1,...y_M)と画像がペアになったデータセット xが与えられたとき、これらのモダリティの部分集合を入力として画像を生成する生成モデルを学習する( p(x|\mathcal{Y}), \forall\mathcal{Y} \subseteq \{y_1,...,y_M\})。
条件が M個あるので2^M通りの条件での生成が可能で、当然モダリティが1つの場合( p(x|y_i), \forall i \in \{1,...,M\})や空の場合( p(x|\varnothing)=p(x))でも生成できる必要がある。
モダリティとしてはテキスト、スケッチ、セグメンテーションマップ、画像(スタイルのリファレンス)を採用するが、フレームワーク的には他のモダリティも簡単に導入できる。

Product-of-experts modeling

条件として入力するモダリティは画像生成時に満たすべき制約であり、与えられた条件を満たす画像集合はそれらの条件を1つずつ満たす画像集合の積集合の部分になる(図2)。
f:id:Ninhydrin:20220217092548p:plain

ということで同時分布 p(x|y_i, y_j)がある1つのモダリティ条件とした分布 p(x|y_i) p(x|y_j)の積として表現できると仮定する。

このように個々モダリティから生成する”エキスパート”を"掛ける"のでproduct-of-experts(PoE)と呼ばれる。

Generatorはlatent code  zを入力して画像 xを生成するが、 x zに対して一意に決定するので p(z|\mathcal{Y})を求めるのは p(x|\mathcal{Y})を求めるのに等しい。
 p'(z)をpriorとして p(z|\mathcal{Y})を構成するのにPoEを下記のようにモデリングする。
f:id:Ninhydrin:20220217093631p:plain

 q(z|y_i)は一つのモダリティを条件としたエンコーダ。

Multiscale and hierarchical latent space

テキストとスケッチなどでモダリティの解像度が異なるのでlatent spaceもそれに合わせて階層化する。
 z = (z^0,...z^N)とし、 z^0 \in \mathbb{R}^{c_0}は特徴ベクトル、 z^k \in \mathbb{R}^{c_k \times r_k \times r_k}, 1 \leq k \leq Nを解像度ごとの特徴マップ( r_{k+1}=2r_k, r_1=4,  r_Nは画像と同じ解像度)とする。
したがって先程の式(1)の各要素が分解でき、下記の式(2)のようにできる。
f:id:Ninhydrin:20220217100011p:plain
より解像度の低い、抽象度の高い z^{\lt k}を条件として、その積の形式になる。

ここで p'(z^k|z^{\lt k})=\mathcal{N}(\mu^k_0, \sigma^k_0) q'(z^k|z^{\lt k}, y_i)=\mathcal{N}(\mu^k_i, \sigma^k_i)は平均と分散をニューラルネットでパラメータ化された独立したガウシアン。
なお p(z^k|z^{\lt k}, \mathcal{Y})はガウシアンの積なのでガウシアンになる(下記の式3)。
f:id:Ninhydrin:20220221091334p:plain

. Generator architecture

アーキテクチャは図3を参照。各モダリティをエンコード後、Global PoE-Netで集約する。
f:id:Ninhydrin:20220217101034p:plain

セグメンテーションマップとスケッチは入力をskip connectしたCNNで、スタイルはResNet、テキストはCLIPを使ってそれぞれエンコードする(図11)。
f:id:Ninhydrin:20220221095748p:plain


Global PoE-Netは図4参照。
MLPでガウシアン q(z^0|y_i) = \mathcal{N}(\mu^0_i, \sigma^-0_i)を予測し、 z^0をサンプリング。これがdecoderのメインの入力になる。
f:id:Ninhydrin:20220221091214p:plain

decoderはResBlockからなる(図5を参照)。
f:id:Ninhydrin:20220221091945p:plain

 z^0を入力としてそれに対してconvolutionをするのがメインだが、途中で解像度毎のセグメンテーションマップとスケッチを式(3)のPoEで処理した z^kを使ったSPADEと z^0MLPに入れて得た特徴ベクトル wを使ったAdaINを行うlocal-global adaptive instance normalization(LG-AdaIN) レイヤーを挟む。
f:id:Ninhydrin:20220221093417p:plain

テキストやスタイル情報は画像全体の大まかな情報を持っているのに対して、セグメンテーションマップやスケッチは画像の詳細も含んでいることを考えると、セグメンテーションマップとスケッチのみ途中で注入するのは理解できる。

Multiscale multimodal projection discriminator

Discriminatorは画像 xと条件 \mathcal{Y}を受け取り本物かどうかのスコア D(x, \mathcal Y) = sigmoid(f(x, \mathcal Y))を出力する。

各モダリティが独立と仮定すると下記の式。
f:id:Ninhydrin:20220221094139p:plain

Projection Discriminator(PD)をマルチモーダル用に一般化したMultimodal PD(MPD)を提案(図6)。
f:id:Ninhydrin:20220221094547p:plain

画像、条件それぞれを特徴空間に埋め込み、条件なし項に関しては画像埋め込みをLinearで出力、条件ありの項に関しては条件の埋め込みと内積を取り、それらの和として表現するのがPDだが、MPDでは条件ありの部分を条件の数だけ増やす(式6)。
f:id:Ninhydrin:20220221094657p:plain

セグメンテーションマップとスケッチに関しては空間的なモダリティなのでそれぞれの解像度毎でMPDを行う(Multiscale MPD)
f:id:Ninhydrin:20220221095540p:plain

Losses and training procedure

Latent regularization

PoEの仮定(式1)の元、条件について周辺化したpriorと条件なしのpriorは一致する。
f:id:Ninhydrin:20220221100446p:plain

なので各解像度でKLを最小化。 \omega_iはモダリティに対して、 \omega^kは解像度に対しての重み。
f:id:Ninhydrin:20220221095923p:plain

Contrastive losses

contrastive lossはペアデータのバッチ (\textbf{u}, \textbf{v})=\{(u_i, v_i), i=1,...,N \}が与えられたとき、式9のように、ペアでないものに関しては離したままペア同士は似るようにするloss。
f:id:Ninhydrin:20220221101440p:plain

ここでは画像に関してと条件に関しての2種類のcontrastive lossを利用。
画像に関しては学習済みのVGG encoderを用いて本物の画像 xと、その条件から生成した画像 \tilde xについて類似度を最大化する。
f:id:Ninhydrin:20220221101649p:plain
perceptual lossに似てるが、それよりパフォーマンスが良いらしい。

条件に関しては2つあり、1つ目は本物の画像 \textbf xと条件 \textbf y_iそれぞれの埋め込みに対してで下記。
f:id:Ninhydrin:20220224084555p:plain
 D_x, D_{y_i}はDiscriminatorの中間表現で式6と図6(b)を参照。
このlossはあくまでDiscriminatorのupdate用で、Generatorには本物の画像ではなく生成画像 \tilde xに関してlossをとる。
f:id:Ninhydrin:20220224084955p:plain

最終的なlossは以下。
f:id:Ninhydrin:20220224085050p:plain

 \lambda_Xは重み、 \mathcal{L}_{GP} R_1のgradient penalty。

実験・結果

f:id:Ninhydrin:20220224085237p:plain
f:id:Ninhydrin:20220224085259p:plain
f:id:Ninhydrin:20220224085316p:plain
f:id:Ninhydrin:20220224085352p:plain
f:id:Ninhydrin:20220224085409p:plain

所感

複数のモダリティを条件としたときのcGANの提案。
思っていたよりシンプルだった(全部埋め込みにして生成)。
確かに、テキストやスタイルのが表現しやすいこともあるし、スケッチで表現したいときもある。
参考になった点は
1つ目はモダリティによって入力する場所を分割すること。確かにスケッチやセグメンテーションマップは生成結果の詳細部分への制約になるのでそれなりの解像度を保ったまま入力したい。逆にテキストやスタイルは画像全体に関わることなので入力で十分。StyleGANの生成結果制御でも似た議論があった。
2つ目はKL loss。確かに周辺化すれば一致するよね。
3つ目はLG-AdaIN(AdaINとSPADEの融合)。取り扱う情報の解像度に合わせて2種類を使い分けるのはなるほどとなる。

自分でcGANを使うにあたって参考になることが多かった。

[論文メモ] StyleGAN-XL: Scaling StyleGAN to Large Diverse Datasets

arxiv.org
github.com

StyleGAN3でImageNetのような多様な画像を生成できるようにした。

SIGGRAPH 2022

StyleGANはハイクオリティかつある程度の制御可能なGANだが、制御可能にできる分、構造が一定でない分散の大きいデータセットの学習には適さない。提案するStyleGAN-XLはこれを解決してImageNetのような分散の大きなデータの生成を可能にした。

既存手法ではImageNetを学習できるものもあるが、少なくともStyleGAN3をナイーブに学習しても厳しい(図1参照)。
特に高解像度の生成(1024x1024)になると安定しない。
目的はStyleGAN3でImageNetを生成できるようにすること。「生成できる」とはISやFIDといった既存の評価指標で定義。

手法

既存のStyleGAN3のデフォルト設定をConfig-AとしてConfig-Fに至るまで変更を加えていく。

正則化

StyleGAN3ではstyle mixingやpath lengths regularizationは廃止された。
特にpath lengths regularizationは分散の大きなデータセットには不向きと報告されている。
しかし、モデルの学習が十分に進んだ後(200k枚くらい学習したら)に適用するとこれを回避できることがわかった。

Discriminatorにはspectral normalization(gradient penaltyなし)と、始めの200k枚の入力には \sigma=2のガウシアンフィルタを適用する。
Discriminator blurringはStyleGAN3-Rの学習で利用され、Discriminatorが高周波に注目するのを防ぐ。


低次元の潜在空間

ProjectedGANの適用を考える。ProjectedGANについては以前のメモを参照。
ninhydrin.hatenablog.com

ProjectedGANはStyleGANよりもFastGANの構造に有効で、その大きな違いは潜在空間の大きさであると考える。
潜在空間  zはFastGANが \mathbb{R}^{100}、BigGANが \mathbb{R}^{128}、StyleGANが \mathbb{R}^{512}と大きすぎる。
近年の研究では自然画像は実は低次元に内在しているという主張があり、ImageNetは40前後と推測されている。
512次元でProjectedGANを適用するとその高速化の恩恵を受けられなかった。
そこで zを512から64に変更すると、学習が安定し高速の恩恵も得られた。
ベースモデル(Config-A)に対して上記の正則化とProjectedGANを適用したのがConfig-Bとなる。

事前学習したクラス埋め込み

Config-Bだと各クラスで同じような画像が生成される(recallが0.004と低い)。
これはProjectedGANの影響と考え、クラス埋め込みを事前学習した。
Efficientnet-lite0の最小の解像度の特徴をImageNetのクラス毎に平均し、それをconditionとして利用する。
これによりrecallが0.15に上昇。この設定をConfig-Cとする。

Progressive Growingの再導入

Progressive Growingはネットワークを徐々に大きくして高解像度の生成を可能にした手法だがアーティファクトが出る等の問題でStyleGAN2で消えた。StyleGAN3ではアーティファクトの原因はエイリアシングであるとわかり、アーキテクチャでそれを回避した。
そこでProgressive Growingを再度考える必要が出てきた。
開始の解像度を16x16として11層使って開始、最終的な1024x1024の解像度のときには39層に成長。
成長時、低解像度の層はmode collapseを回避するために固定される。
これがConfig-D。

Exploiting Multiple Feature Networks

ProjectedGANのablationではFeature Networkとして色々試しているが複数の組み合わせはない。
EfficientNet-lite0を基本として、追加の2つめのFeature Networkのタスク(クラス分類 or 自己教師あり学習)、アーキテクチャ(CNN or ViT)が与える影響を調査。
追加のCNNはタスクが教師あり or 自己教師ありのどちらでもFIDをわずかに下げるにとどまったが、ViTとの組み合わせは大きくパフォーマンスを向上。
これは「教師あり学習と自己教師あり学習で得られる特徴表現は類似している」「CNNとViTは異なる表現を学習している」という既存研究の結果を裏付けている。

これより多くFeature Networkを追加しても大きな改善は得られなかったのでEfficientNetとDeiT-MをFeature NetworkとしたものをConfig-Eとする。

なお特徴表現の参考文献は下記。

教師あり学習と自己教師あり学習の特徴表現について
arxiv.org

CNNとViTの特徴表現について
arxiv.org

Classifier Guidance for GANs

diffusion modelにクラス分類器をガイドとして導入した手法がある。
生成画像 xを学習済みクラス分類器 CLSに通してクラスの予測 c_iを得る。そしてcross-entropy loss  \mathcal{L}_{CE} = -\Sigma^Cc_i \log CLF(x_i) \lambdaでスケールしたものをGeneratorの追加のlossとする。クラス分類器としてはDeiT-Sを採用。
これによりISが大きく向上。
この設定をConfig-Fとする。
なお、 \lambda=8ぐらいがよく、解像度が大きく無いと効果がない(>  32^2)。

各Configでの実験結果はひょう1を参照。

実験・結果

解像度 1024^2のImageNetの生成。





所感

ImageNetレベルの分散の大きいデータをある程度生成できるのはすごい。
以前DanbooruデータセットでGANを学習した記事を読んだが、そこでもPath lengths lossをやめたとあり顔等のドメインがある程度固定されたもの以外ではそれなりにアーキテクチャやlossを考える必要がある。
ProjectedGANでCNNとViTの2つを利用するというのは使えそう。CNNとViTが獲得する特徴表現はことなることを調べた論文は読んでいたが、こういう利用方法は考えなかった。なるほど。
Progressive Growingは面倒なのでやりたくない。