こんにちは、最近は論文を読みたいですが、機械学習は優秀な解説記事が多すぎて、まずはそちらに目を通すようになってしまいました。今回は仕事で必要なのでViTです。
まず最初の解説記事。
Vision Transformer(ViT)を調べてみた
https://www.netforce.co.jp/techblog/entry/0003.shtml
「ViTとは、2020年にGoogleが発表した画像認識モデルです。自然言語解析の分野では、BERTやGPT-3などがSelf-Attention構造にもとづいたTransformerを応用したモデルとしてそれまでのRNNに取って替わりましたが、それを画像認識タスクにも応用したものです。」
とてもわかりやすいです。最近のTransformerモデルの発展は画像認識分野までに及ぶということですね。
「ViTの構造は、BERTと同様にTransformerのEncoder部分と同じです。BERTでは各単語のベクトル表現をEncoderに入力していましたが、ViTでは画像を小さなパッチに分割してベクトル化したものを入力します。」
自然言語処理の場合には単語を入れていたのを、ViTでは画像を分割して入れることで動作するようです。
記事は簡潔でものすごいわかりやすく、コードの実行もされていました。
「ViTの論文をみると、ImageNetだけでなく、JFT-300M のような別の大きなデータセットも用いて学習していました。ViTではこのように大きなデータセットでの学習が前提で、サンプルで試したような小さな(?)データセットで、学習済みモデルなしで初期値から学習しただけのような場合には、そこまで真価を発揮しないようです。とってもData Hungry!なのです。」
ということで、ゼロから学習する際には結構大変そうでした。
次の記事です。
画像認識の大革命。AI界で話題爆発中の「Vision Transformer」を解説!
https://qiita.com/omiita/items/0049ade809c4817670d7
こちらも大変わかりやすいです。解説することないです。
大事な部分として三つあり、
- 入力画像
- アーキテクチャ
- 事前学習とファインチューニング
ということでした。入力画像はパッチに分解して、平坦化しベクトルとして入力。
アーキテクチャに関してはTransformerのエンコーダー部分と同じということでわかりやすかったです。
と、ちょっと事前学習についても言及が細かくありましたのでみてみたいと思います。
- 事前学習時の解像度(e.g 224)よりもファインチューニング時の解像度を大きく(e.g 384)する。[Touvron, H.(NeurIPS'19)]
- パッチの大きさは事前学習とファインチューニングで一定。(つまり、ファインチューニング時は解像度が大きいのでパッチの数が増える。)
- 事前学習で学習した位置エンコーディングはファインチューニング時には足りないところを内挿で補う。
とのことです。この記事すごいですね。
「比較としてBiTでの結果(BiT-Lともう1つはここを参考にするとResNet50っぽいです。)も示されています。ここから言えるのは、ViTは小さいデータセットでの事前学習ではあまりよくはないが、巨大なデータセットで真価を発揮するということです。ViTの事前学習には巨大なデータセットが必須なようですね。」
ということで、データセットのサイズはとても重要です。
追加考察も充実してました。
- ViTの埋め込み層
- ViTの位置エンコーディング
- Attentionの適用範囲
- 自己教師あり学習
この記事を何回も読み込むことで納得できそうです。
次の記事です。
【ViT】画像認識の大革命!Vision Transformerとは?
https://maru.nagoya/index.php/2022/05/18/what-is-vision-transformer/
元の論文は、
An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale
https://openreview.net/forum?id=YicbFdNTTy
特徴は、
Vision Transformerの特徴
・畳み込みを行わない
・SOTAを更新
・計算量を大幅に減少
その後も一通りの解説が進み、基本的なViTの説明が簡潔にされています。
マルチヘッドアテンションについて多少言及がありました。
「Attention(q,K,V)ではqueryとkeyの類似度を計算し、それに応じた重みのvalueを出力することになります。」
アテンションの仕組みについて詳細に説明されていました。僕もよくわかっていないので少しずつ学びたいです。
全体的に説明も丁寧でいい感じの記事でした。
次です。
Vision Transformer: 畳み込み演算を用いない最新画像識別技術
こちらもこれまで紹介してきた記事とは雰囲気が少し違いますが、いい感じで説明がされています。
「Transformerという技術は元々、画像処理分野でなく、自然言語処理分野にて、Google Researchが提案した手法となります。
つまり、自然言語処理にて用いられていた技術が、画像処理に転用された形となります。」
そして、
「尚、ここで面白い事実があり、論文には上記説明がされているものの、Google Researchが発行するGithubリポジトリでは、(1)について、実は異なる処理が行われています。」
!!!!!!!!
「16x16などの大きめの畳込みフィルタで、ストライド幅16などの大きめの間引きをしながら、高圧縮畳み込み演算を行い、それをバラバラ画像の重ね合わせの代わりとする」
。。。。
ここにきて。。。この記事は論文を追うだけでなく、実装を追ってますので、また別の側面が見えました。結構論文や理論のみを追う解説記事とはちょっと一線を画している感じがします。
「ViTが実装されている各種リポジトリの紹介若干本筋からは外れますが、Github上に公開して頂いているViTのリポジトリは幾つか存在し、それぞれに特徴がある為、紹介させて頂こうと思います。」
ということで実装に関してもかなり各種リポジトリを通じて紹介されていました。この記事もかなり参考になりました。機械学習は習得するまで時間がかかりかかりそうですね。。。
今回はViTの雰囲気を掴む前に巷の解説記事を眺めてみました。こちらも結構解説記事が充実していましたが、意外と実装と異なる疑惑もあり、実装を中心に取り掛かると違う側面も見えそうです。
引き続きViTの実装なども今後見ていきたいと思います。