[論文メモ] VECTOR-QUANTIZED IMAGE MODELING WITH IMPROVED VQGAN

openreview.net
あくまで個人的なメモ

VQGANの改善とベクトル量子化を使った画像生成モデル・画像分類モデルの改善。

VQVAEはCNNベースのAE、VQGANはそこにadversarial lossを導入した。
これらはCNNのauto encoder(AE)の学習(ステージ1)とencodeしたlatent variablesの密度をCNN(or Transformer)で学習する(ステージ2)という2つのプロセスから成る。
こういったベクトル量子化の学習(ステージ1)->画像タスク(ステージ2)といった手法はVector-quantized Image Modeling (VIM)と呼ばれるらしい。
ベクトル量子化の結果は下流のタスク(ここでは画像認識と画像生成の2つ)に大きく影響し、より良いベクトル量子化下流タスクの精度改善、学習の高速化にもつながる。

f:id:Ninhydrin:20211014085939p:plain

VECTOR-QUANTIZED IMAGES WITH VIT-VQGAN

VQGANをベースにベクトル量子化を改良していく。
CNN-VQGANとViT-VQGANのパフォーマンス比較は表1。
f:id:Ninhydrin:20211014095626p:plain

ViT-VQGAN

VQVAEもVQGANもCNNベースのencoder、decoderだったがこれをViTベースに変更する(ViT-VQGAN)。
8x8のオーバーラップなしでパッチを切り出しエンコードする(256x256は32x32=1024のトークンになる)。
また、transformerブロックの出力にtanhの活性化関数と2層のMLPを適用する。
ただしencoderとdecoderの出力には活性化関数は適用しない。
これらによりグリッドのアーティファクトが消えより高精度な画像が生成できる。

Codebook

ベクトル量子化の目的関数は式(1)の形。 \verb|sg|(x)=x \frac{d}{dx}\verb|sg|(x)=0でstop-gradient。 eがcodebookベクトル、z_{e}(x)はencoderの出力。encoderの出力とcodebookベクトルをお互いに近づける感じ。
f:id:Ninhydrin:20211013093851p:plain

普通のVQVAEなどはcodebookの初期化が良いとはいえず、実際に使われないcodeが多い。
codebookの品質は画像の再合成や画像生成にも大きく影響する。VQGANでは1024のcodebookの選択をヒューリスティックな選択に依存し、高精度な画像を得ている。
大きなcodebook(サイズ8192)でも使用率を高くするため以下の2つの改善を行う。

Factorized codes

ルックアップのインデックスコードをencoderの出力を線形写像し低次元にする(768次元 -> 32次元 or 8次元)。
つまり実際にdecoderで使うのは高次元だが、codebookから検索するときは写像した低次元で行う。
これによりcodebookの使用率が向上。
低次元への写像はルックアップと埋め込みを分離する効果があると考えられる。

 l_2-normalized codes

encoderの出力 z_e(x)とcodebookベクトルe l_2の正規化を適用(球面に射影)。
 l_2正規化したので z_e(x)eユークリッド距離はコサイン類維持度になる。
これにより学習が安定し、再構成の質も改善。

VIT-VQGAN Training losses

logit-laplace loss、 l_2loss、perceptual loss(VGG)とGAN loss(StyleGAN Discriminator)の重み付き和。
重みは再構成の質、codebookの使用率、FIDとInception Scoreから調整した。
 L=L_{\verb|VQ|} +0.1L_{\verb|Adv|} + 0.1L_{\verb|Perceptual|}+0.1L_{\verb|Logit-laplace|} + 1.0L_2
VGGを使ったperceptual lossはStage2での Vector-quantized Image ModelingでリークするのでViT-VQGANの学習時はperceptual lossは使用しない。

VECTOR-QUANTIZED IMAGE MODELING

Transformerのdecoderのみのモデルを利用して、画像データの密度P(x)を自己回帰でモデル化(式(2))。lossはnegative log-likelihood。
f:id:Ninhydrin:20211014091601p:plain
この学習済みモデルを用いて画像生成、画像分類を行う。

IMAGE SYNTHESIS

事前に学習したTransformerは条件なしのトークンのサンプリングができ、サンプリングしたトークン列をViT-VQGANのdecoderに入力することで画像を生成する。
クラス条件付きのImageNetの画像生成を行う場合は、クラスIDトークンを画像トークンを入れる前にdecoderに入力するように拡張する。

UNSUPERVISED LEARNING

画像トークンをTransformerに入力し、途中のブロックから1024個のトークン列を得る。このトークン列を平均化してクラス分類器に入力する。この時トークン列は固定しクラス分類器のみ学習する。
トークン列を得る途中のブロックはTransformerの中央辺りが良いらしい。

実験

論文を参照。かなり高精細な画像生成ができるがStyleGAN2には劣るといった感じ。
f:id:Ninhydrin:20211014094731p:plain
f:id:Ninhydrin:20211014094825p:plain

所感

正直VQGANをViTで置き換えたぐらいの印象でそこまで感動はなかった。Transformerを使って画像トークン列を生成するのもVQGANのTaming Transformerでやられていたので正直うーんといった感じ。
codebookのルックアップ用に低次元に写像 and  l_2正規化はたしかに効果がありそう。
生成結果は悪くはなさそうだがのっぺりとしたスムージングをした感じの画像でノイズが少ないという意味では良さそう。自然物よりも人工物の生成が良さそう?
ベクトル量子化の方法としてCNNよりはViTを使った方が良さそうだが、ある程度の精度を出すのにどれくらいの画像が必要なのかが気になる。

[論文メモ] Patches Are All You Need?

openreview.net

2021/10/8時点でUnder review as a conference paper at ICLR 2022

概要

画像タスクでViTが高い性能を発揮しているが、それは本当にTransformerのアーキテクチャの恩恵なのか、それともパッチに分割するという画像タスクに適した帰納バイアスのおかげなのか。
提案するConvMixerはMLP-MixerをベースにしつつViTの考え方を踏襲した非常にシンプルなモデルだが、ViTやMLP-Mixerよりも優れている。
f:id:Ninhydrin:20211008101053p:plain

手法

ConvMixerのアーキテクチャについて。全体図は図2参照。
f:id:Ninhydrin:20211008091809p:plain
構造としてはPatch EmbeddingとConvMixer LayerとGlobal Average Poolingから成る。

Patch Embedding

Patch Embeddingはただのconvolutionで行う(式(1))。
入力チャンネルが c_{in}、出力チャンネルが h、パッチサイズが p(なのでconvのstrideとkernelサイズは p)
 \sigmaは活性化関数でここではGELU。
f:id:Ninhydrin:20211008091433p:plain

ConvMixer Layer

ConvMixerのブロックはdepthwise convとpointwise convから成る(式(2), 式(3))。
residual構造のdepthwise convのあとに pointwise convを適用する。
f:id:Ninhydrin:20211008092336p:plain
このブロックを d回繰り返したあとGlobal Average Pooling -> FCで出力を得る。

図3にConvMixerブロックPytorchの実装を示す。
f:id:Ninhydrin:20211008092538p:plain

ConvMixerは入力画像のサイズは自由。

Motivation

MLPやSelf-Attention(SA)の強みは空間的に離れた箇所の特徴を使えることにある。そこでカーネルサイズを大きくして対応。
MLPやSAはConvと違い受容野のサイズが自由で柔軟だが、Convは受容野が狭い分画像タスクの帰納バイアスがありデータ効率が良い。

実験

ConvMxierは4つのパラメータから成る。
 h) チャンネルサイズ
[te:x d]) ブロックの繰り返し回数
 p) 入力のパッチサイズ
 k) カーネルサイズ
ConvMixerの命名はチャンネルサイズとブロックの繰り返し回数から ConvMixer- h/ dとする。また入力の画像サイズをnとしてそれをパッチサイズ pで割った値をinternal resolutionと呼ぶ。

CIFAR-10については図4を参照。

f:id:Ninhydrin:20211008093744p:plain

ImageNet-1k

augmentationはRandAugment、mixup、CutMix、 random erasing。またgradient norm clippingも採用。最適化はAdamW。
実験結果が表1。他モデルと比べ少ないパラメータで同等レベルのtop-1精度だが、実行時間が遅い。
f:id:Ninhydrin:20211008094323p:plain

Appendix

詳しくは論文を参照。
1) カーネルサイズは大きいほうがよ差そうだが、速度が遅くなる。
2) CIFAR-10ではLyaerNormよりBatchNormの方が優れていた。ImageNetレベルでは不明。
3) パッチサイズを大きくすると速くなるけど精度が落ちる。トレードオフ

所感

シンプルなconvolutionのみでSOTAレベルを達成。ただ速度とパラメータのトレードオフ感は否めない。
またブロック数が多くなると学習に必要なepoch数も多くなりそう。AppendixにConvMixer-1536/20の学習時間について記載があったが10個のRTX8000で150epochに9日はかなりコストが高いように感じる。
convolutionもまだまだ捨てたもんじゃないという気持ちになる論文ではあった。
本文自体は短く約4枚。Conclusionに「まだ先があると思った?急いで出したと思う?そうじゃなくてシンプルな手法だから説明もシンプルな方が効果的だと考えたんだ。必ずしも8ページや9ページも要るか?重要なところは書いたから詳細が必要な人のためには付録を付けたよ(意訳)」とありせやなという気持ち。
またタイトルも以下のようになっていて少々遊び心があるなと思った(これが良いのか悪いのかは...)。
f:id:Ninhydrin:20211008100949p:plain

[論文メモ] ResNet strikes back: An improved training procedure in timm

arxiv.org
少々雑なまとめ。微妙におかしいところがあるかもなので勘弁。

ILSVRC2012の画像分類タスクの精度がモデルの評価としてよく使われている。
モデルの精度は以下の式と考えられる。

 \verb|accuracy(model)| = f(\mathcal{A}, \mathcal{T}, \mathcal{N})

 \mathcal{A}がモデルのアーキテクチャ \mathcal{T}が学習手続き、 \mathcal{N}が測定時のノイズ(過学習やmaxのモデル選択なども含める)。
ここでいう学習手続きとはepoch数やバッチサイズ、augmentationなど。
異なるアーキテクチャを比較するときに同じ学習手続きが最適とは限らず、学習手続きの選択によってどちらかのアーキテクチャを暗黙的に有利にしていることがある。
ResNet-50は比較対象として良く採用されるが、精度としては当時の論文の精度が引用される。
この引用した精度と比較しても、精度改善したのがアーキテクチャの恩恵なのかそれとも現代までの学習手続きの恩恵か切り離せない。
なので古いアーキテクチャを引用し新しいアーキテクチャの有意を主張するには比較対象の古いアーキテクチャに適した現代の学習手続きを探す努力をすべきである。
実際論文によって報告されるResNet-50の精度は75.2~79.5%の範囲で、この論文ではこの差をはっきりさせる。

Training Procedures

3つの学習手続きを比較。各手続きは異なるコストとパフォーマンス
セッティングとaccuracyをまとめたのが表1。
もう少し詳しくすると
A1) 最も良いパフォーマンスを発揮するために設定したもので、長期学習(600epochs)した。4つのV100 32GB GPUs
A2) 300epochsでDeiT等の近年のモデルと同じレベルの学習量。ただバッチサイズは2048と大きい。
A3) 短いepochと2048バッチサイズでオリジナルのResNet50を上回るのを目的。

Loss: multi-label classification objective

クロスエントロピーは暗黙的に各クラスが混合する確率を扱うことになる。
(これの意味が少々わからない。猫と犬が写っている画像で確率が{猫: 0.5, 犬: 0.5}と扱うのは適切ではないということ?)

これらのクラスが全て存在するとし、分類からマルチラベル分類として扱う。
そこでバイナリクロスエントロピー(BCE)を採用する。こうすることでMixupやCutMixを導入してもlossに一貫性が出る。
Mixupなどを使用したときは各ラベルが1になる。
実験したところ、Mixしたときにターゲットラベルを確率分布としsumが1になるるようにするよりもターゲットラベルは全て1(or 1-εのスムージング)にしたほうが効果的だった。

Data-Augmentation

利用したのは

  • Random Resized Crop(RRC)
  • horizontal flip
  • pytorch image modelsのtimmのRandAugment、Mixup、そしてCutMix

これらはDeiTで使われたもの。

Regularization

Weight Decayに加え、label smoothing、Repeated-Augmentation(RA)、stochastic-Depth(SD)を使用。
label smoothingはA1だけ。
RAとSDは収束時の結果を改善するが初期段階での学習が遅くなる。なので学習が短いとこの2つは効果的ではない。
なのでRAとSDはA1とA2に適用。
より大きなResNet(152や200)ではより多くのRAやmixupなどで恩恵があることに注意。

Optimization

よく使われていたのはSGDだが、Transformerや最近のMLPではAdamWやLAMBが使われている。
DosovitskiyはResNet50ではAdamWもSGDも似たパフォーマンスだったと報告しているが、これは中間のサイズのバッチサイズ(512)での実験結果と一致する。
2048と大きいバッチサイズで repeated augmentationとBCEと合わせるときはLAMBが一貫して良いパフォーマンスを出した。
またSGDとBCEは収束が困難だった。

元のResNet-50との比較を表2に示す。
f:id:Ninhydrin:20211005101131p:plain

実験

既存の学習方法と提案した学習方法の比較し評価をする。
1)ランダムな要因に対するパフォーマンスの感度の定量
2) 別のテストデータでの検証で過適合を評価

Comparison of training procedures for ResNet-50

表1のA1のセッティングは既存のResNet-50(224x224)を上回った。

Performance comparison with other architectures

A1~3の学習手続きで他のアーキテクチャを学習した結果が表3。
多くのアーキテクチャで改善が見られる。
古い手法やモデルサイズがResNet-50に近いデモるでは、その論文で報告されているパフォーマンスよりも高いパフォーマンスを示している。
ViT-BなどについてはA1よりA2のセッティングの方が良い結果となったが、これはハイパーパラメータが長期の学習に適さなかったと考えられる(正則化が必要)。
また補足の実験は表4。

f:id:Ninhydrin:20211006091636p:plain
f:id:Ninhydrin:20211006092502p:plain

Significance of measurements: seed experiments

モデルの初期値やデータの学習順序などのランダムな要因が学習結果に作用する。
これらのランダムな要素がパフォーマンスに与える影響を測定する。
seed値についてはちょうど同じ時期に報告された。seed値によって平均を大きく上回る/下回る外れ値が存在する。
arxiv.org

A2の設定で1~100のseed値で実験した結果を図1に示す。
なお、この実験では最終的なパフォーマンスに注目していて途中のmaxは取らない(maxを取るのはseed選択に近く、また学習期間の影響がある?)。
図1からImageNet-valの結果は標準偏差0.1前後で他の論文での報告と一致している。
seed 0での学習結果は平均の79.72%を0.13%上回る結果となった。
f:id:Ninhydrin:20211006092840p:plain

Peak performance and control of overfitting

検証の精度を過大評価することを防ぐために学習終了時のモデルを選択。
ハイパーパラメーター探索も比較的粗いグリッドを使用して、追加のseedの効果が導入されないようにする。

多数のパラメータを最適化すると過学習につながる。 図1からわかるようにA2の設定でも良い時は80.0%に近いことが確認できる。
図2に精度の分布をヒストグラムを示す。
ただ、これが本当に良いモデルなのか、それとも偶然検証用データに適していたのか。これを判断するため他のデータセットで検証をした。
ImageNet-val top1 accとImageNet-V2 top1 accのペアのseed値をプロットしたのが図1の左側の散布図。
相関はほぼなく、同じseed値では両方のベストパフォーマンスは得られない。

More on sensitivity analysis: variance along epochs

図3のepoch毎のパフォーマンスの分散を示す。
f:id:Ninhydrin:20211006095858p:plain

Transfer Learning

7つのデータセットについてA1~3の設定で学習した結果をPytorchのそれぞれの学習済みモデルと比較。結果は図5参照。
全体的にA1がベストパフォーマンス。A2はPytorch学習済みモデルに近いパフォーマンスを出す。A3は大幅に劣っているがこれは解像度の問題と考えられる。

Comparing architectures and training procedures: a show-case of contradictory conclusions

同じ学習手続きで2つのアーキテクチャを比較するのも、逆に同じアーキテクチャで違う学習手続きを比較するのも難しい。
ResNet-50とDeiT-Sを比較するために最適化をチューニングした(300epochかつ同じバッチサイズの制限のもと)。
各学習手続きをResNet-50はA2、DeiT-Sは新たにチューニングし、それをT2とする。
DeiTに関して、提案時のImageNet-valに比べて精度が改善した(79.8% -> 80.4%)。
f:id:Ninhydrin:20211007090818p:plain
各学習手続きによってテストセットに基づいて優れていると表現できる。
ImageNet-valというテストセットのもと、A2を使うとResNet-50の方が優れていると言えるし、T2を使うとDeiT-Sのが優れている。
ImageNet-v2をテストに使うと、DeiT-Sが優れていると結論付けられる(ただ、A3に焦点を当てると統計的に有意ではないとなる 67.9% vs 68.1%)。
つまり、1つのアーキテクチャで1つのテスト(ここではImageNet-val)を使って2つの学習手続きを比較した場合引き分けと結論付けられる。

Ablations

Main ingredients and hyper-parameters.

学習手続きは中間的なA2にしぼる。結果は表6。
f:id:Ninhydrin:20211007091852p:plain

学習率とWeight Decay(WD)

学習率を 5 \times 10^{-3}がベストとなったが大きすぎると発散のリスクが大きい。
WDは事前調査の結果0.02~0.03を試したが、少々敏感なパラメータで他の正則化と合わせて調整すべき。0.02と0.03で大きく異る結果になることがあった。

損失関数:BCEとCE

BCEからCEにするとパフォーマンスが下がる。
これはMixUpやCutMixを1-vs-allのクラス分類問題とみなすため。CEは合計が1になる制約がある。
ただ必ずしもBCEが良いわけではなく、今回の設定ではBCEが良かった。

Repeated augmentation

場合によって良し悪しが大きく異なるので結論は難しい。

Stochastic Depth & Smoothing

表7を参照。この2つはある程度epochが多くないと効果が無い。
f:id:Ninhydrin:20211007093552p:plain

Augmentation

統計的有意なのを示すのは難しく、少なくとも表8の変更を行ったが論文で述べた平均パフォーマンス(79.72% - std0.1)より悪化。
f:id:Ninhydrin:20211007093731p:plain

Crop-ratio

表9。一般的に0.875が採用される。この値を大きくすると特にViTでの精度向上が報告されている。
f:id:Ninhydrin:20211007094032p:plain

Evaluation at other resolutions

図4。A1とA2はより大きい画像を利用した方が高パフォーマンス。
f:id:Ninhydrin:20211007094340p:plain

結論

ResNet-50の新しい学習方法を提案(A1とA2)。
ただ、これは普遍的な学習方法とは主張せず、むしろ逆の主張をする。提案した学習方法は一部のアーキテクチャではその論文より良い結果をもたらすが、そうでないアーキテクチャもある。
アーキテクチャと学習方法は組み合わせて最適化する必要がある。

所感

確かに古いアーキテクチャの精度を当時の論文から引用しても、提案するアーキテクチャに対しては最新の最適化手法やaugmentationを利用しているので単純比較は難しそう。
精度が改善したとしてもアーキテクチャの恩恵とは言いきれそうにない。
学習の設定についてもアーキテクチャごとに最適なものがあり、例えばあるアーキテクチャは強めのWeight Decayが有効でも他は逆かもしれず、同じ学習設定で学習すれば比較できるわけではない。
だからといってこの論文のように古いアーキテクチャの精度改善を頑張るのも現実的ではなさそう。
この論文がResNet-50については新しいベースラインを築いてくれた。
新しい論文が出たからと言って、単純に精度だけで考えるのではなく比較対象の精度を確認(当時の引用?きちんと比較できる条件で学習した?など)すべきということを再認識點せられた。

[論文メモ] Localizing Objects with Self-Supervised Transformers and no Labels

arxiv.org

自己教師あり学習でobject localizationを学習する論文
github.com
f:id:Ninhydrin:20211004101320p:plain

概要

自動運転とかでも重要なobject dectionは高精度を得るためには大量のラベル付きデータが必要。
教師なしデータでの学習方法もあるが精度が低い。
最近では顕著性に基づいた検出候補の抽出手法や画像間での類似度を測る手法などもあるが検出候補の数やデータセットの大きさによっては適用できない。

提案手法は一枚の画像から検出する(画像間で類似度を測らない)ので画像数に線形のスケーラビリティ。

手法

特徴量を得るのにVision Transformer(ViT)を利用する。
ViTは画像をパッチに分割し、それをシーケンスとみなしてTransformerに入力する。
またパッチだけでなく1つだけCLSトークンを追加する。
自己教師あり学習としてはDINOを使う。
arxiv.org

DINO-segではCLSトークンに注目していたが、本論文ではではCLSトークンは利用しないobject localization・特徴抽出を行うLOSTを提案する。

LOST

(多分Localizing Objects with Self-Supervised TransformersからLOST)
LOSTではTransformerの最終層から抽出した特徴量の集合 \textbf{F} \in \mathbb{R}^dを利用する。dは特徴量の次元数,  Nはパッチ数。
 \textbf{f}_p \in \mathbb{R}^dはポジションp \in \{1,...,N\}の特徴量。
LOSTは画像中に最低1つはオブジェクトがあると仮定し、画像中のオブジェクトの中からその内1つのオブジェクトの位置を検出する。
そのためにオブジェクトに関係しているパッチを選択することが重要で、そのパッチをseedと呼ぶ。

初期seedの選択

seed選択の方法として以下を仮定する。
(1) オブジェクトを含むパッチ同士は相関があり、そうではない背景とかのパッチとは相関しない
(2) 個々のオブジェクトは背景より領域が少ない

自己教師あり学習したTransformerから抽出した特徴量は経験的に仮定(1)に合っている。
なのでTransformerの特徴量を用い、仮定(2)に基づいて他のパッチとの正の相関が最も少ないものを初期seed、 p^*として選択する。
これによりパッチ同士の相関を表した(パッチ p qに正の相関がある箇所だけ1)二値行列 A=(a_{pq})_{1 \leq p,q \leq N} \in \{0, 1\}^{N \times N}を得る。
ただし
f:id:Ninhydrin:20211001101500p:plain

そしてseed選択は式2で行う。単純に他のパッチとの正の相関が少ないパッチを選択する(仮定2)。
f:id:Ninhydrin:20211001101652p:plain
4枚画像に対するのseed  p^*の選択結果が図2。真ん中の行の画像で赤色のパッチがseed、灰色のパッチがseedと正の相関のあるパッチ。seed  p*と正の相関のあるパッチは確かにオブジェクトに属している。
f:id:Ninhydrin:20211001101827p:plain

seedの拡張

2つ目以降のseedは \textbf{f}_{p^*}と正の相関を持ったパッチの中から、他のパッチとの相関の少ないパッチを選択する。
他のパッチとの相関の少ないパッチ集合を \mathcal{D}_kとして検出に利用するseed集合  \mathcal{S}
 \mathcal{S} = \{q|q \in \mathcal{D}_k \quad \verb|and| \quad \textbf{f}^{\intercal}_p\textbf{f}_s \geq 0 \}
 |\mathcal{D}_k| = kでk=100にクリップ。当然 p^* \in \mathcal{D}_k

矩形抽出

オブジェクトマスク \textbf{m} \in \{ 0, 1 \}^Nを求める。
画像中のあるパッチ qに対してマスク m_qは以下の式3で決定する。
f:id:Ninhydrin:20211004092723p:plain
パッチ qがオブジェクトに属するかは、 \mathcal{S}内のパッチとの相関の平均で決まる。
図3が矩形抽出の例で。黄色の四角がseed  p^*のみで決定した矩形、紫色が上記の方法で選択した矩形。
f:id:Ninhydrin:20211004093004p:plain

Towards unsupervised object detection

1枚の画像には少なくとも1つのオブジェクトが存在すると仮定した上で、LOSTを使って1枚の画像から1つの矩形を抽出し既存の物体検出手法で学習する。
この時2つのパターン考える

Class-agnostic detection (CAD)

LOSTによって生成された矩形を全て「前景」カテゴリとして学習を行う。LOSTは1枚の画像から1つのオブジェクトしか抽出しないが、学習するObject Detectorの出力は1枚の画像から複数のオブジェクト検出を行い、かつLOSTの出力よりも正確な位置検出ができる(表1)。

Class-aware detection (OD).

矩形検出だけでなくカテゴリ認識についても行う。fully unsupervisedで行うためにカテゴリ認識も教師なしモデルを利用する。ここではDINO。
検出した矩形を224x224にリサイズしDINOを使って特徴量(CLSトークン)を抽出しそれをk-meansでクラスタリングして疑似ラベルとする。
評価時はハンガリアン法ででラベル割当。

実験・結果

省略するので詳しくは論文参照。
f:id:Ninhydrin:20211004094443p:plain

LOSTのバックボーンのモデルのアーキテクチャと学習方法の調査。
DINOで学習したViT-S/16がよいのはわかるが、supervisedなViT-S/16が無いのが気になる。ResNet同士の比較でDINO > supervisedな感じはするが、ViTでのDINOとsupervisedの比較が無いのは少々恣意的に感じる
f:id:Ninhydrin:20211004094636p:plain

Unsupervised object detectionでの結果。DetectorはFaster R-CNN。

Unsupervised class-aware detection
一部のクラスはラベル付きの弱教師あり学習より優れている。バックボーン等の違いあるらしく比較はできないらしいが、WSDDNとPCLには少々見劣りする。
同じく教師なしのrOSDと比較すると多少良い。
f:id:Ninhydrin:20211004095454p:plain

Unsupervised class-agnostic detection
結果は表4。
Selective Searchとかとの比較はまあそうだろうなという感じ。

f:id:Ninhydrin:20211004100304p:plain

制約

LOSTの検出方法の仕組み上オーバーラップに対応できない。
また「個々のオブジェクトは背景より領域が少ない」と仮定しているのでオブジェクトが大半を占める画像に対応できない。
これらはfuture work。

所感

教師なしのObject Detectionということで教師なしモデルの特徴量を使うというのはよくある手法で、それをどう使うのかが気になった。
この論文では2つの仮定に基づいて検出戦略を組んでいた。
1つ目の仮定もよくある話。2つ目の仮定は少々強い仮定な気がした。
ただ2つ目の仮定がないと選択が難しいのだろうとは思う。
制約のところでも述べられていたが大きすぎるオブジェクトは無理だし、また、データセット的に小さいオブジェクトとともに写ってしまうオブジェクトも検出できないはず。
初期値seed  p^*の選択をした後のマスク生成の戦略はよさそうなので初期seedの選択方法を練ればもう少し良くなりそう。
ただ、failureにあるが同じ種類のオブジェクトが複数写っているとマスク生成の戦略上全てがまとまってしまう。

また特徴量抽出として教師なし学習のDINOの選択も良さそう。他の手法(SimCLRとか)との比較が気になるところ。

そこまで精度が良いとは思えないが、個人でannotationする場合には良いかもしれない。
また2つの仮定が合っているデータセットなら強いのかも。

関係ないが、appendixに複数画像例があるが車に対する初期seedの多くが車輪についていて面白かった。
seed拡張の戦略で車全体まで広がるから良いのだが、自己教師あり学習の特徴量という気がした。
f:id:Ninhydrin:20211005092202p:plain

[論文メモ] DyStyle: Dynamic Neural Network for Multi-Attribute-Conditioned Style Editing

arxiv.org

GANの生成結果を操作する系の論文。
f:id:Ninhydrin:20210929092344p:plain
StyleGANなどは高精細な画像の生成を可能にしたが、生成結果のコントロールが難しい。
生成結果のコントロールするためにスタイル編集ネットワーク(StyleGANのlatent codeを生成する)を作成する手法がある。
しかしlatent codeを変化させると意図しない部分も同時に変化してしまい狙った箇所のみを変化させるのが困難。

GANSpaceやSeFaなどの手法ももあるがPCAを使ったデータドリブンな方法。
これらの手法はlatent spaceが線形であるという仮定。
実際はlatent spaceで複数要素がentangleしていて一つの属性を変化させると他のセマンティクスが予期せず変化してしまう。
latent spaceを線形に分離は限界がありStyleRigやStyleFlow、Hijack-GANなどはlatent codeを非線形な編集を行う。
StyleRigの結果は良いが顔の属性の詳細な制御はできない。
StyleFlowは学習時に属性の制御が明示的に課せられてはおらず、データの偏りの影響を受ける。
Hijack-GANは属性が直行しているという仮定をしている。

スタイル編集ネットワークは多様な属性に対応できる必要があり、学習時に操作する属性の構成に偏りがあるとそれの影響を受ける。
例えば実画像の編集を例で髪の色と年齢をを変えたいとした時、この属性構成が同じ確率でサンプリングされてほしい。
データセットで髪の色と年齢に相関があると片方を編集するともう一方も予期せず変化してしまうかもしれない。
これを避けるためには学習時、各属性が独立にサンプリングされてほしい。

そこで提案するDyStyleでは
1) 静的な学習データセットではなく、属性構成を均等にサンプリング
2) 各属性操作に特化したエキスパートで構成
を行う。

手法

提案するDynamic Style Manipulation Network(DyStyleNet)のアーキテクチャと学習方法について。
全体図は図3を参照(論文では図3と図2の画像が間違っていそう)
f:id:Ninhydrin:20210929101156p:plain
DyStyleではlatent codeとして \textbf{W}+を扱う。 \textbf{W}+は18個の512次元ベクトルでStyleGAN2の各層に利用される。
 \textbf{W}+はMapping Networkの出力か学習済みのimage to code network(図3のEncoder)の出力。
DyStyleNetは \textbf{W}+を受け取り、操作後のlatent code  \hat{\textbf{W}}+を生成。この \hat{\textbf{W}}+をStyleGAN2に入れて編集後の画像 \textbf{I}_Mを得る。また \textbf{W}+からも編集なしの画像 \textbf{W}_Uを得る。
 \textbf{I}_M \textbf{I}_Uと指定した属性は変化しながらもアイデンティティは一致してほしく、そういった制約を課す。これらの制約は学習済みモデル( N_{attr} N_{id})によって行う。

Dynamic network architecture

アーキテクチャは図2を参照。
f:id:Ninhydrin:20210927094704p:plain
編集する属性構成情報は A_n \textbf{W}_l+を1つずつ処理する。
このとき属性構成 A_nを単体で処理するのではなく \textbf{W}_lとインタラクションすることで、各層で適当なstyle codeを生成できる(図2の緑の四角内部。 A_n W_lをFCに通したあとでアダマール積をとっている)。
各属性情報で処理したあと、Cross-Attentionで1つのfused proxy codeを得る。
Cross-Attentionの恩恵は2つ
1) 各属性とのインタラクション(顔画像に対しヨーとピッチを変更したとき、鼻や目の変化は両方の影響を受ける)
2) 可変な入力に対応できる(編集する属性数は可変)
またCross-Attentionの前にスイッチ(図だと赤字のdynamic)があり、編集する属性のみ入力する。
Cross-Attentionは式1を参照。
f:id:Ninhydrin:20210928092822p:plain

Training method

Training losses

lossは3つのlossの和。
f:id:Ninhydrin:20210928093030p:plain
 L_{id}は編集前の画像とのアイデンティティを保つためloss。学習済みのface identifierを使ったコサイン類似度を採用。
ただし、ターゲットの画像が写真とかではない場合、既存のidentifierではアイデンティティを保つのが難しいのでLPIPSを採用する。
 L_{norm}は画像の質が落ちないようにする補正用のloss。 \hat{\textbf{W}}_lがStyleGAN2のもとの \textbf{W}の空間からはずれないようにする。
 L_{attr} A_nが各属性に対応するためのloss。属性に関してはピッチ等の量的変数と髪の色等の質的変数がありそれぞれに適したlossを提案。
量的変数に対しては式3で定義するcontrastive lossを利用。
f:id:Ninhydrin:20210928095407p:plain
A^i_M,  A^i_Uはそれぞれ学習済みモデル N_{A^i}で測定した I_M,  I_Uのi番目の属性の値。
 \Delta^{gt}_{A^i} I_Mから I_Uへの変化量。 T_{A^i}は定数のしきい値
質的変数については0か1の値を取る。これについても学習済みモデル N_{A^i}を利用する。lossは式4。
f:id:Ninhydrin:20210928100646p:plain
 \textbf{emb}_{M}^{A^i} Mを入力としたときの学習済みモデル N_{A^i}の最後から二番目の層の値。
なので A^i_{gt}==A^i_{U}のときはコサイン類似度が高くなるように、それ以外はcross entropyという感じ。

Two-stage training strategy

DyStyleは2ステージで学習を行う
1ステージ目は1つの属性編集のみの学習。これにより各属性のエキスパートの学習ができる。
2ステージ目では複数の属性をランダムにサンプリング・編集して学習を行う。これによりエキスパート同士のコミュニケーションができ複雑な属性編集に対応できるようになる。

実験

比較対象はInterFaceGANとStyleFlow。
実装はPyTorch1.6で学習はTesla V100が1台。
結果は表1を参照。その他の実験については論文を参照。
f:id:Ninhydrin:20210929091336p:plain

Ablation studies

dynamic architectureとtwo-stage trainingの効果を検証。
dynamicに対しstaticは操作する属性に関わらず全てのスイッチをオンにしておく。
結果が図4と図5。学習が進むとdynamic + two-stageのが良いことが確認できる。
f:id:Ninhydrin:20210929093347p:plain
f:id:Ninhydrin:20210929093443p:plain

Appendix

Layer selection strategy

既存手法で特定の属性は特定のlatent vectorにのみ相関しているという観測結果がある。なので属性ごとに関与するlayerが決まっている。表3を参照。
例えばyawとpitchに関しては1~2層の \textbf{W}+のみ編集する。
f:id:Ninhydrin:20210929092126p:plain

また、使用した属性については表4を参照。
f:id:Ninhydrin:20210929092653p:plain

所感

シンプルな手法で学習もそこそこ早そうなのは良さそう。

実験結果の画像を見ても悪くはなさそうだが、多分チェリーピックなので完全に信用はできない。
各属性ごとにエキスパートを作るMixture of Experts の戦略や、スイッチを作り必要ない部分は完全に関与させないといった手法は応用できそう。
今回は属性がラベル付けされ明示的に別れていたのでスイッチを用意するdynamicな手法が適用できたが、逆にエキスパートを明示的に分けられない場合はMode-Adaptive Neural Networks for Quadruped Motion Controlのようにすると良いのかもしれない(これはモーション生成の論文だが)。
http://homepages.inf.ed.ac.uk/tkomura/dog.pdf
複数のネットワークを用意し、これらを混ぜる割合を別のネットワークで予測して学習する。
明示的にエキスパートとして学習しているわけではないが学習中に各ネットワークがエキスパート化してくるといった感じ。

tow-stage trainingは少々面倒だが、実験結果を見る感じ個々のエキスパートを先に学習することでエキスパートがしっかり特化しているように見える(口の開き方とか)。
口の開き方や髪の色については実際にはバイナリではなく、口の開き方についてはmiddleや髪の色については赤だとしても薄い赤等連続的な値な気がする。
学習済みモデルを利用するならその出力をターゲットとして連続値で学習すれば良さそうな気もする。
図のミス等少々読みにくい論文ではあった。

[論文メモ] Instance-Conditioned GAN

arxiv.org
Facebook AI Research

画像インスタンスを生成時の条件として入力するノンパラメトリックなconditional GANの提案。
f:id:Ninhydrin:20210922094008p:plain

概要

class-conditional GANはクラスラベルを条件として受け取ることで複雑な分布にも対応したがデータセットを作成するコストがかかる。
教師なしでデータを分割しGANを学習する手法もあるがclass-conditional GANと結果を比較するとかなりし、データを比較的粗いオーバーラップなしの分割を行うため様々なオブジェクトやシーンが含まれた多様体が生成され、このデータの分散が生成結果の質を下げる。
データを細かく分割する手法もあるがデータの少ないクラスタが生まれこれも質を下げる。
本論文ではデータをオーバーラップありの多様体に分割し、各データポイント周辺の分布を学習するInstance-Conditioned GANを提案する。

手法

instance-conditional GAN(IC-GAN)について説明する。
IC-GANは複雑なデータセットを細かいオーバーラップありのクラスタに分割してモデル化する。
クラスタはデータポイント x_i(これをインスタンスと呼ぶ)とその周辺のデータポイント集合 \mathcal{A}_iによって成る。
解きたい問題はデータの分布 p(x)のモデル化で、 p(x) M個のインスタンスの特徴ベクトル \textbf{h}_iを条件とした分布 p(x|\textbf{h}_i)の混合分布として表現する。つまり p(x) \approx \frac{1}{M}\Sigma_i p(x|\textbf{h}_i)

 M個のデータから成るデータセット \mathcal{D} = \{x_i\}^M_{i=1}とする。
特徴ベクトル \textbf{h}_iはパラメータ \phiを持つ関数 fで抽出( \textbf{h}_i=f_{\phi}(x_i))。 f_{\phi}は教師なし or 自己教師ありで学習。
 \mathcal{A}_iはコサイン類似度を使ったk近傍法で決定する。図2(a)を参照。

generatorには p(x|\textbf{h}_i)を暗黙的に学習させる( G(\bf{z}, \textbf{h}_i))。
generatorはガウシアンからサンプルした z xに変換する。ただし、 x \sim p(x|\textbf{h}_i)
つまりgeneratorは zインスタンス x_iの特徴ベクトル \textbf{h}_iを受け取り画像を生成する。

discriminator  D( \textbf{x}, \textbf{h}_i)は入力された画像が \textbf{h}_iの近傍か否かを学習する。
なのでrealサンプルは \textbf{h}_iの近傍のサンプル、つまり \mathcal{A}_iからサンプルする。
式にすると下の(1)になる。 \mathcal{u}は一様サンプルと思われ。
f:id:Ninhydrin:20210921101016p:plain

f:id:Ninhydrin:20210922093646p:plain

Extension to class-conditional generation

IC-GANにクラスラベル yを追加して拡張する。
関数 f_{\phi}は教師なし、自己教師あり、教師ありのいずれかで学習。
集合 \mathcal{A}_iのサンプルは \textbf{h}_iのコサイン類似度で選ばれるため集合内のサンプル同士でクラスラベルが異なる場合がある。そのため近傍で同じクラスラベルを持つサンプルがk個より少なくなることがある。
学習時は各 \textbf{h}_iの近傍集合 \mathcal{A}_iからサンプルした x_jとそのラベル y_jを利用する。

実験

省略

Selection of stored instances and neighborhood size

インスタンスの選択方法・選択数とその近傍の数について調査。
図4を参照。
まずはインスタンスの選択方法と選択数について。
インスタンスの選択方法はランダムとk-meansを比較。k-meansの方が優れる。
インスタンス数は1000を超えると大きな改善は見られない。
またprecisionとrecallを見た時、インスタンスが増えるとprecisionがわずかに下がる(画像の質が低下)。recallは大幅に向上(網羅的)。

次に近傍のサンプル数について。
インスタンス数が少ないときは近傍のサンプル数は多いほうがFID、recallともに良い結果。
インスタンス数が多いときは逆の傾向がある。
precisionには影響しない。
f:id:Ninhydrin:20210922093813p:plain

所感

実際の画像インスタンスをconditionとして、その周辺の画像を生成するというは良さそうなアイディア。
Adversarial latent AE(ALAE)に近いものを感じる。あちらはAEを同時に学習するので手間が少なそう。
IC-GANはconditionとして入力した画像と f_{\phi}の距離的に似た画像を生成するのに対して、ALAEはビジュアル的に似た画像を生成するので自由度はIC-GANのほうが高そう。ビジュアル的に似た者同士が近くなるような特徴化する f_{\phi}を利用すれば良いはず?
ただ、IC-GANはk-meansでインスタンスやサンプルの決定をするので学習前の手間がありそう。また f_{\phi}の学習も事前に行う必要があるのは少々面倒。

音楽用OSのDaphileをインストールした

今までの音楽を聞くのにvolumioというOSを利用していた。
volumio.org
音楽を聞くだけの最低限の構成で、日本語も対応しているしsshもできるしで特に不満はなかった。
ただ、DACとしてTopping D90をUSB接続で利用していたのだがある時、急に認識しなくなってしまった。
OSを再インストールしても認識せず、PCの問題なのかもしれない。ちなみにPCはIntel NUCを利用している(raspberry piではない)。

気分転換も兼ねて他のOSにしようと思い調べたらmoodeというOSを見つけた。
moodeaudio.org
しかし、これはraspberry pi用みたいなので却下。
他に調べているとDaphileというのを見つけた。
www.daphile.com
CPUのアーキテクチャx86で大丈夫(むしろraspberry piとかは未対応?)で音質もいいらしい。
また参考記事を探すと結構新しいものが出てくるのでそこそこ新しい or 更新されている感じを受けた。なので利用してみる。
インストールはそこそこかんたん。こちらを参考にすると良さそう。
asoyaji.blogspot.com

自分はNASもあるけど多少のラグが気になるので内部ストレージに保存したい派。
NUCには1TBのSSDを入れてあるのでできればNASからそこにrsyncしたいがsshはできない様子?
ローカルストレージはフォーマットされ認識しているので何かしらで接続はできそう。
f:id:Ninhydrin:20210918110158p:plain
file managerにしてブラウザへのドラッグアンドドロップはできるらしいがいちいち面倒 and NASからコピーしたい。
多分nfsやsambaぐらいあるだろうととりあえずnmapでポートスキャンしたら445ポートが空いていた。多分sambaで間違いなさそう。
どうやらshareがついていると普通にネットワークで検出できるようになるみたい(これが共有サーバーの設定なのかvisibilityの設定なのかまでは調べていない)。
linuxサーバーからmountする。写真の状態だと //{ip}/Music(Identificationの部分)、ユーザーはGESTでパスワードはなしでマウントできた。
これでNASからDaphileのローカルストレージに音楽をコピーできた。

音質の違いは正直わからない。
スマホのブラウザUIはvolumioよりも凝縮された感じ。一部の動作はSPAではないのでリセットがかかる。どうせなら完全にSPAにしてほしかった。
Daphileは言語設定に日本語がない。UIに関しては英語のほうがいいので問題ないが、音楽のソート順が少々不安(設定のAlphabetical orderにはjapaneseがあるので一応対応?)。
まだ使い始めたばかりなので慣れないが悪くはなさそうだ。