はじめに
Image EncoderにCNN系のモデルであるConvNeXtを使用した、ConvLLaVAが提案されました。
本記事はConvLLaVAを使って768x768の画像が入力可能な日本語VLMを学習してみました。
また、学習したモデルを日本語ベンチマークを使用して他のモデルとの比較も行いました。
モデルの重みは以下で公開しています。
ConvLLaVAについて
ConvLLaVAはConvLLaVA: Hierarchical Backbones as Visual Encoder for Large Multimodal Modelsで提案された手法です。
前述したとおりImage EncoderにConvNeXtを使用しているのが特徴ですが他にも以下の2つの工夫点があります。
工夫点1
ConvNeXtにStage 5を追加することで解像度が高い画像を入力しても画像トークンが少なくなるようにしている。
ConvNeXtは通常4つのStageからできているモデルですが、ConvLLaVAでは以下のようにStage 5を追加しています。
ConvLLaVA: Hierarchical Backbones as Visual Encoder for Large Multimodal Models, Ge, C. et al.(2024)
ConvNeXtはStage 1では最初の層にストライドが4の4x4の畳み込み層があり、それ以降のStageの最初の層ではストライドが2の2x2の畳み込み層があります。
そのためStageを追加することで特徴マップの解像度が圧縮されて画像トークン数を減らすことができます。
ConvLLaVAの解像度ごとの画像トークン数は以下のとおりです。
解像度 | 画像トークン数 |
---|---|
768x768 | 144 |
1024x1024 | 256 |
1280x1280 | 400 |
1536x1536 | 576 |
工夫点2
高解像度に対応するためImage Encoderも発火させている。
ConvLLaVAでは以下の図のように学習が3段階で行われています。2段階目では高解像度の画像にも対応できるように、Image Encoderの学習を行っています。
ConvLLaVA: Hierarchical Backbones as Visual Encoder for Large Multimodal Models, Ge, C. et al.(2024)
ConvLLaVAの学習
今回学習を行うにあたり入力画像の解像度は768x768にリサイズし、Image EncoderとLLMは以下のものを使用しました。
モデル名 | |
---|---|
Image Encoder | laion/CLIP-convnext_large_d_320.laion2B-s29B-b131K-ft |
LLM | llm-jp/llm-jp-1.3b-v1.0 |
学習データ
学習データは過去に私が学習させたllava-jp-1.3b-v1.1と比較したかったこともあり以下を使用しました。
学習フェーズ | データセット名 |
---|---|
Stage1 | LLaVA-Pretrain-JA |
Stage2 | LLaVA-Pretrain-JA |
Stage3 | LLaVA-v1.5-Instruct-620K-JA |
学習パラメータ
学習パラメータは論文に合わせて以下のものを使用しました。
学習フェーズ | lr | batch size | warmup ratio | epoch | optimizer |
---|---|---|---|---|---|
Stage1 | 3e-4 | 32 | 0.03 | 1 | AdamW |
Stage2 | 2e-5 | 32 | 0.03 | 1 | adamw_bnb_8bit |
Stage3 | 2e-5 | 32 | 0.03 | 1 | adamw_bnb_8bit |
学習戦略
論文に合わせて学習段階ごとに発火させる層を変更しています。✓がついているのが発火させている層です。
Staeg 5はConvNeXtに追加したStage 5のことです。
学習フェーズ | ConvNeXt | Stage 5 | Projector | LLM |
---|---|---|---|---|
Stage1 | ✓ | ✓ | ||
Stage2 | ✓ | ✓ | ✓ | ✓ |
Stage3 | ✓ | ✓ |
評価
評価データ
評価データとしてRouge-Lで評価するJA-VG-VQA-500とJA-VLM-Bench-In-the-Wild、GPT4で評価を行うHeron-Benchを使用します。
評価データ | 評価手法 |
---|---|
JA-VG-VQA-500 | Rouge-L |
JA-VLM-Bench-In-the-Wild | Rouge-L |
Heron-Bench | GPT4 |
結果
今回学習させたConvLLaVAと既存の日本語VLMのベンチマークスコアは以下のとおりです。
モデル | パラメータ数 | JA-VG-VQA-500 | JA-VLM-Bench-In-the-Wild | Heron-Bench(Detail) | Heron-Bench(Conv) | Heron-Bench(Complex) | Heron-Bench(Average) |
---|---|---|---|---|---|---|---|
Japanese Stable VLM | 7.57B | - | 40.50 | 25.15 | 51.23 | 37.84 | 38.07 |
EvoVLM-JP-v1-7B | 7.57B | 19.70 | 51.25 | 50.31 | 44.42 | 40.47 | 45.07 |
Heron BLIP-7B | 8.15B | 14.51 | 33.26 | 49.09 | 41.51 | 45.72 | 45.44 |
Heron GIT-7B | 7.32B | 15.18 | 37.82 | 42.77 | 54.20 | 43.53 | 46.83 |
llava-jp-1.3b-v1.0-620k | 1.86B | 12.69 | 44.58 | 51.21 | 41.05 | 45.95 | 44.84 |
llava-jp-1.3b-v1.1 | 1.86B | 13.33 | 44.40 | 50.00 | 51.83 | 48.98 | 50.39 |
ConvLLaVA-JP-1.3b-768 | 2.10B | 12.05 | 42.80 | 44.24 | 40.00 | 48.16 | 44.96 |
ConvLLaVA-JP-1.3b-1280 | 11.88 | 43.64 | 38.95 | 44.79 | 41.24 | 42.31 |
- ※ 赤字は1番スコアが高いもの、青字は2番目にスコアが高いもの
768x768の画像で学習させたConvLLaVAの性能はSigLIPを画像エンコーダとして使用し、384x384の画像で学習させたllava-jp-1.3b-v1.0-620kと近い性能でした。
解像度をあげたにも関わらず性能が低いのは画像トークン数が少ないことが原因だと考えられます。
ただ、画像トークン数が少なく画像エンコーダも1回しか通さないため、推論速度が早いのは良いなと思いました(速度は正確に測定したわけではなく体感ですが)。
出力例
今回学習させたConvLLaVA-JPのHeron-Benchの出力をいくつか紹介します。
例1 「鳥の羽の色は何色でしょうか?」
モデル名 | 出力 |
---|---|
ConvLLaVA-JP-1.3b-768 | 鳥の羽の色は茶色です。 |
例2 「力士たちは何を行っているか説明してください。」
モデル名 | 出力 |
---|---|
ConvLLaVA-JP-1.3b-768 | 画像の中の力士たちは、おそらく日本の伝統的な儀式や祭りの一環として、大きな丸い丸いお札を使ってパフォーマンスを披露しています。彼らは、おそらく儀式の一部として、またはパフォーマンスの一部として、丸いお札を使ってパフォーマンスを行います。 |
例3 「あなたは車を運転しており、交差点で右折しようと思っています。このまま交差点に向かってよいでしょうか?」
モデル名 | 出力 |
---|---|
ConvLLaVA-JP-1.3b-768 | いいえ、画像の交差点で右折しようとする車を運転している人は、交差点で右折しようとする車を運転している人に注意し、注意を払う必要があります。交差点での右折は、交通の流れを乱し、事故のリスクを高める可能性があるため、慎重に行う必要があります。ドライバーは、交差点での右折を試みる前に、交通信号や標識に注意を払い、交通ルールを守り、他の車と安全な距離を保つ必要があります。 |
まとめ
本記事ではConvLLaVAを日本語LLMで学習させてみました。
768x768では性能が微妙でしたので、今後もう少し解像度をあげて学習してみようと思います。
1280x1280で学習してみましたが768x768よりベンチマーク結果が悪かったです。(2024/6/14 追記)
また、ConvLLaVAではアスペクト比を保つことでDocVQAの精度が向上したことも報告されています。そのため今後JDocQAの学習も試してみたいと考えています。
学習にしようしたコードは以下で公開しています。RTX4090が1枚あれば学習できるので気になる方は学習してみてください。
TODO
- 1280x1280の解像度でモデルを学習させる
- JDocQAで微調整してみる