アドバンストビジョン

第8回: 画像処理と言語処理の融合

千葉工業大学 上田 隆一


This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.

アドバンストビジョン第8回

今日やること

  • 今回のための補足
  • Vision Transformer
  • Image GPT
  • Diffusion Transformer
  • CLIP
  • DALL·E
  • GLIDE
  • DALL·E 2(unCLIP)
  • Stable Diffusion
アドバンストビジョン第8回

FiLM(Feature-wise Linear Modulation)[Perez 2017]

(今回のための補足です)

  • あるレイヤーの出力を線形変換する仕組み
    • 層正規化と同じ仕組みで正規化しないでで線形変換
    • を外の情報源から学習(内の情報でやることも)
  • 構造の例: 論文の図3
    • 補足
      • BN: バッチ正則化の層。やってませんが。
      • GRU: Gated Recurrent Unit(Transformerで置き換えられる)
  • 役割: 各層、各チャンネルの出力の特定の要素を強調
    • 例: 「青い・・・」とあったら青に対応する出力を強調するなど(図4)
    • 実際は不要な情報にマスクをかける方向に働くことが多い(図5)
アドバンストビジョン第8回

Vision Transformer(ViT)[Dosovitskiy 2020]

  • Transformerのエンコーダを画像に転用
    • 画像をブロック状に切って単語のように扱う(右図)
    • 右図のCLS: クラストークン
      • 文の分類と同じ
      • 全結合層(MLP Head)に通す
  • 画像をブロック状に扱うのはCNNと同じだが、CNNは遠くのブロックの関係性を見るのが苦手

画像: CC-BY-4.0 by Daniel Voigt Godoy[Dosovitskiy 2020]のFig.1にも構成図)

アドバンストビジョン第8回

ViTの大きさ

  • オリジナルの論文には大きさの異なる複数のモデル
    • ViT-Base: 層の数12、ベクトルの次元: 768、パラメータ数: 8600万
    • ViT-Large: 層の数24、ベクトルの次元: 1024、パラメータ数: 3.07億
    • ViT-Huge: 層の数32、ベクトルの次元: 1280、パラメータ数: 6.32億
アドバンストビジョン第8回

トークンに対応するベクトルの作り方

  • 画像を画素のブロックに区切る
    • 例: : ベクトルの次元は
      • 3はチャンネルの数(RGB)
    • 位置の埋め込みも行う
      • ただし固定値ではなく、パラメータは学習対象
  • 画像の理解
    • 局所的な理解: ベクトルの中
    • 大域的な理解: 自己注意機構で学習
アドバンストビジョン第8回

事前学習の方法

  • 教師あり学習で分類問題を解く
    • 言語と違って教師なし(BERTのような穴埋め)はあまり効果がない
  • オリジナルの論文で用いられた訓練データ
    • JFT-300M
      • 3億枚の画像、18291クラスのデータセット
    • ImageNet-21k
      • 1400万枚の画像、21841クラスのデータセット
  • 訓練データが多いと高い性能を発揮(JFT-300Mのほうがよかった)
アドバンストビジョン第8回

ViTの機能のしかた

  • 位置の埋め込みに関して
    • [Dosovitskiy 2020]のFig. 7左
    • 画像処理で使われる基底関数のようなものができている
  • どこを見て判断しているか
    • [Dosovitskiy 2020]のFig. 6、Fig. 7右
    • 自己注意機構のヘッド(マルチヘッド注意機構のヘッド)には、入力に近い層ですでに大域的なものとローカルなものなどバリエーションが出る
      • 大域的なものはCNNの入力に近い方のたたみ込み層に類似
    • 入力から遠ざかるとより大域的に
アドバンストビジョン第8回

Image GPT[Chen 2020]サイト)(動画

  • GPTの画像版
    • GPT-2の構造を使用
    • パラメータ数: iGPT-Lというモデルで
  • 画像を途中まで入力して、次の画素を当てさせる
  • GPT同様、ヘッドをつけてファインチューニングすると他のタスクに利用可能
アドバンストビジョン第8回

Image GPTの学習

  • 2種類の訓練方法
    • 次の画素の予測(GPT的)
    • 穴埋め問題(BERT的)
  • 埋め込みに相当するベクトル: 画像の解像度を下げて1列に並べたもの
    • サイト: , or pixel
    • 論文: , , or pixel
      • or の時は色をRGBからカラーパレットに(昔の計算機の方式)
      • , pixelのときはVQ-VAEで圧縮(それぞれの符号列に)
アドバンストビジョン第8回

Diffusion Transformer(DiT)[Peebles 2022]

  • 拡散モデル+Transformer
    • さらに潜在空間に情報を圧縮する潜在拡散モデルも使用
    • ラベルを入力して出力をコントロール(分類器なしガイダンス
  • 構造
    • [Peebles 2022]の図3
      • 入力: 画像のトークンの他、ラベルを表すベクトルと時刻を表すベクトルを足したトークン1つ
        • 後者はadaLN-Zeroという仕組みで画像に作用させる
          • FiLMにもうひとつパラメータを足したようなもの
      • 出力: 画素ごとのノイズの平均値と分散
    • 画像のサイズを落とすためにVAEを使用
アドバンストビジョン第8回

CLIP(Contrastive Language-Image Pre-training)[Radford 2021]

  • contrastive: 「対照的な」という意味
    • 対照学習(あとで説明)でテキストと画像を結びつけ
  • CLIPでできること
    • 画像に何が写っているかを認識(ある意味ではラベルの数に制限がない)
    • テキストから画像を生成するときの部品
      • unCLIP(あとで扱います)
アドバンストビジョン第8回

CLIPに関する背景

  • よく行われてきた画像認識の方法の手順
    1. 写真をあつめる
    2. 写真に写っているものをラベル付けする
    3. 学習
  • 上記方法の問題
    • めんどくさい
    • ラベルのあるものしか認識できない
なんとかラベルの付いている画像を集められないか?
アドバンストビジョン第8回

ラベル(ではなくキャプション)のついた画像の収集

  • 画像にはキャプションのついたものがある(論文はそうですよね?)
    画像とキャプションをいろんなところから大量に集めてくることは可能
    • 原論文: 4億組の画像とキャプションのセットを収集
  • 問題: キャプションは単語ではなく文や句になっている
    • 単純なラベルではない
Transformerを使ってなんとかならないか?
アドバンストビジョン第8回

CLIPの学習方法

  1. 前ページの方法で学習用のデータを準備
  2. ViTを使って画像をエンコーディング
  3. Transformerを使って文をエンコーディング
  4. エンコーディングされたデータ(埋め込み)同士の相関を学習
    画像から文、文から画像などの変換が可能なANNができる
  • 補足: 必ずしもViT、Transformerである必要はない(が、Transformerを使ったほうが性能が高くなる)
アドバンストビジョン第8回

CLIPの構造

  • p.12の図
  • image encoder: ViT
    • 入力は画像
    • クラストークンを出力として使う(数百次元のベクトル)
  • text encoder: Transformerのデコーダから交差注意機構を除いたもの
    • 入力は画像のキャプション
    • 出力のフォーマットをimage encoderの出力に合わせる
  • 数理的に重要な点: マルチモーダルであること
    • text encoderとimage encoderの出力が同じ潜在空間にプロットされる
      • キャプション(文、句)と画像が同じ空間に配置され、似たものが近くに配置される
アドバンストビジョン第8回

評価方法(対照学習、contrastive learning)

  • ペア(バッチ)の画像とキャプションをエンコーダに入力
    • image encoderの出力: ベクトル
    • text encoderの出力: ベクトル
  • ペアとなっている画像とキャプションのベクトルを同じにしたい
    • のコサイン類似度を大きくしたい
      • コサイン類似度:
  • ペアでない画像とキャプションのベクトルを違うものにしたい
    • のコサイン類似度を小さく
  • 損失関数:
    • は「温度」で学習が進むにつれて下げていく
アドバンストビジョン第8回

学習したモデルの使い方

  • 例: 画像の分類
    • 分類したいものに対してラベルを個準備
    • 「a photo of <ラベル>」という句を通り作って、それぞれをtext encoderに通して特徴ベクトルを得る
    • 画像をimage encoderに通して特徴ベクトルを得る
    • それぞれを比較し、最もコサイン類似度が高いを選択
アドバンストビジョン第8回

DALL·E(ダリ)[Ramesh 2021]

  • 句や文から画像を生成
  • Transformerに、文章の続きとして画像を考えさせる
  • 使うもの
    • Transformer(デコーダ)
      • GPT-3の改造版
      • 画像も埋め込みベクトルにして入力できるように
    • VQ-VAE(論文ではdiscrete VAE(dVAE)といっている)
      • の画像をの画像(というより符号列)にエンコード
アドバンストビジョン第8回

DALL·Eの学習

  • キャプションと画像がペアになったものを訓練データに
    • CLIPと同じ
  • Stage 1: 集めてきた画像を使ってdVAEに学習させる
    • 学習済みのデコーダに符号列を入力すると画像が生成されるように
  • Stage 2: 入力文の後ろに符号列を生成するようにTransformerを学習
アドバンストビジョン第8回

DALL·Eによる画像の生成

  • 前ページステージ2の構成で
アドバンストビジョン第8回

GLIDE[Nichol 2021]

  • Guided Language to Image Diffusion for generation and Editingの頭文字
    • generationがかわいそう
    • 「言語で誘導された画像の生成、編集のための拡散モデル」
  • 自然言語+分類器なしガイダンスで拡散モデルに画像を生成させる
    • (他、「CLIPガイダンス」も試されたが分類器なしのほうが結果がよかった)
    • 自然言語をエンコードしたものを分類器なしガイダンスのラベルに利用
    • 構造はU-Net
  • 生成される画像: 論文の図1
  • ファインチューニングで画像の一部をテキストで改変できる(image inpainting): 論文の図2, 3, 4
アドバンストビジョン第8回

DALL·E 2(公式の動画

  • DALL·Eの後継
  • 基本的なアイデア
    • CLIPを使う
    • テキストと画像が同じ潜在空間にいるので、
      潜在空間のベクトル画像でテキストも画像に変換可能
      • ただし、整った画像を出力するためにいろいろ工夫
アドバンストビジョン第8回

構造

  • 点線の上: CLIP(学習のときに使う)
  • 点線の下: 生成の部分
    • 事前モデル(prior)とデコーダ(ほぼGLIDE)で構成

画像: CC-BY-4.0 by Ramesh et al.

アドバンストビジョン第8回

事前モデル+デコーダ(unCLIP[Ramesh 2022]

  • テキストからの画像の推定(生成)の問題を冗長化
    • : それぞれ、画像とテキストのCLIPでの特徴ベクトル
    • 数式上は冗長だが学習のときにヒントが増えて質が向上
  • 最後の項:
    • 後ろの確率分布: 事前モデル
      • 質の高い画像の特徴ベクトルを出力
      • 単にテキストの特徴ベクトルを出力するのではなく、テキストも入力して強化
    • 前の確率分布: デコーダ
      • こちらもテキストを再度入力
アドバンストビジョン第8回

Stable Diffusion

  • サービスのサイト: https://stablediffusionweb.com/ja
  • DALL·Eシリーズのライバル
  • 使いやすくて一気に普及
  • 50億枚の画像を訓練に使用
アドバンストビジョン第8回

Stable Diffusion(v1)の構造(Latent Diffusion Models、LDM)[Rombach 2021]

  • [Rombach 2021]の図3(Wikipediaに掲載されている図
    • 上部のDiffusion Processの部分は訓練用
      • 訓練画像を潜在空間のベクトルに変換してからDDPMで拡散
        • 潜在空間: [Esser 2020]で提案されたVQGANのもの
          • 要はVQ-VAEのGAN版
          • 図中のピンク色の部分がVQGAN(の変種)
    • 下部のの部分が画像の生成部分
      • ノイズを潜在空間のベクトルに戻す(U-Net)
      • テキストや画像の埋め込み(図の白枠内で生成)によるガイダンスを交差注意機構で行う
        • 基本、行列の計算なのでU-Net内にも組み込める
アドバンストビジョン第8回

まとめ

  • 言語処理の技術の画像への転用や画像処理との組み合わせを勉強
  • この間にもどんどん最新のサービスがリリースされている
    • 新しい技術も開発されている
  • 扱っていないもの: 動画の理解や動画の生成
アドバンストビジョン第8回