ailia SDKを試す<第20回> QWEN2-VLで画像説明文の生成

 今回は,Qwen2-VLを取り上げます.Qwen2-VLはQwen-VL 系列の最新版にあたるビジョン+言語(VL:Vision-Language)モデルであり,画像や動画を理解し,自然言語で解説できる仕組みを備えています.
 
●Qwen2-VLの特徴
 主な特徴は次の通りです.
▲1,任意解像度/アスペクト比への対応
 従来のように,あらかじめ定められた解像度で画像を処理する方式ではなく,入力された画像をそのままの解像度で扱えます.そのため,画像の解像度や比率が異なる場合でも,情報を保持したまま処理でき,検出結果に違いが表れることがあります.
▲2,動画への対応
 静止画だけでなく,長時間の動画を対象とした解析や解説も可能です.
▲3,多言語対応の強化
 画像中に含まれる文字情報を多言語で認識/理解でき,日本語を含むさまざまな言語での質疑応答に対応しています.
 技術的な詳細については,次の解説記事に整理されていますので,併せて参照いただくと理解が深まります.
******
Qwen2-VL:ローカルで動作する Vision Language Model
https://blog.ailia.ai/tips/qwen2-vl-vision-language-model/
******
 
●実行環境
 今回の検証で使用した環境を表1に示します.十分なメモリとGPUを搭載したPCを用意することで,Qwen2-VLを安定して動作させることができました.

名称 (Name) 内容 (Content)
OS Ubuntu24
CPU Intel(R) Core(TM) Ultra 7 265K
RAM 128GB
GPU NVIDIA GrForce RTX 5060 16GB
Python python-3.10.11-amd64
ailia-SDK Version 1.5.0.0
ailia-models v1.4.0 (https://github.com/axinc-ai/ailia-models)
cuda Cuda compilation tools, release 13.0, V13.0.88

表1 検証に使用したシステム構成

 
●環境構築
 環境構築の手順は,基本的にはailia-modelsおよびqwen2_vlのリポジトリに含まれるREADME.mdを参照してください.ここでは概要のみを示します.
▲ステップ1:依存ライブラリのインストール
 まず,ailia-modelsフォルダ直下にあるrequirements.txtを利用して必要なライブラリをインストールします.
******
> pip install -r requirements.txt 
******
▲ステップ2:transformers のインストール
 次に,qwen2_vl/README.mdに記載されている指定バージョンのtransformersをインストールします.
******
> pip install git+https://github.com/huggingface/transformers@21fac7abba2a37fae86106f87fcf9974fd1e3830
******
 以上で,Qwen2-VLの実行に必要な環境が整います.詳細なオプションや環境依存の注意点については,各リポジトリのREADME.mdを確認してください.
 
●サンプルの実行と結果
 初回実行時には,必要なモデル・ファイルがインターネットから自動的にダウンロードされます.そのため,インターネットに接続された環境でスクリプトを実行してください. なお,ダウンロードするファイルの合計サイズは約6.7GBです.事前にディスク容量と通信環境を確認しておくことをおすすめします.
▲実行コマンド
 環境を指定せずに実行した場合,デフォルトでenv_id: 1が選択され,CPU(Intel MKL)環境で処理が行われます.実行例を次に示します.
******
> python llava-jp.py 
 INFO arg_utils.py (13) : Start!
 INFO arg_utils.py (163) : env_id: 1
 INFO arg_utils.py (166) : CPU-IntelMKL
******
 この状態では,CPU上で処理が行われるため,モデル・サイズによっては実行に時間がかかります.もしGPUを利用できる環境であれば,–env_idオプションを指定してGPU実行に切り替えることが可能です.
 なお,Qwen2-VLは大規模なモデルであり,多くのGPUメモリを必要とします.そのため,今回紹介したGPU(例:RTX 5060 16GB)以外ではメモリ不足によりエラーとなる場合があります.まずはCPU環境で動作確認を行い,環境が整ってからGPU実行を試すことをおすすめします.
▲実行結果
 サンプル・スクリプトにおけるデフォルト設定は,デフォルトの条件で参照される画像
を図1に示します.また,デフォルトのプロンプトは,
******
Describe this image.
******
です.
 この条件でサンプルを実行した結果を表2に示します.
 
図1 デフォルト設定で参照される画像
 
環境 生成した解説
env_id: 1 The image depicts a serene beach scene with a woman and a dog. The woman is sitting on the sand, wearing a plaid shirt and black pants, and appears to be smiling. She is giving a high-five to the dog, which is sitting on the sand next to her. The dog is wearing a colorful harness and appears to be wagging its tail. The background shows the ocean with gentle waves, and the sky is clear with a soft glow, suggesting either sunrise or sunset. The overall atmosphere is peaceful and joyful.

表2 デフォルト設定での生成結果

 

●任意の画像を入力して精度を検証
 今回の検証には,これまでと同じ新幹線の駅ホーム画像(図1)を用います.駅のホームは安全面や時刻の確認など注意すべき点が多く,生成される説明文の質を評価する題材として適しています.今回の検証では,画像の解像度を変えることで,生成される解説文の内容にどのような違いが出るかを確認します.プロンプトは,
******
Describe this image.
******
です.

図1 新幹線の駅ホーム画像
 
▲1,画像の解像度
 解像度を変えて同じ画像を入力し,生成された解説文を比較しました.環境はデフォルトのCPU-IntelMKL(env_id: 1)に固定しています.生成結果を表3に示します.

解像度 処理時間[s] 生成した解説
320×180 19.79

The image depicts a high-speed bullet train, specifically a Shinkansen, at a station. The train is sleek and modern, with a white body and a streamlined design. The platform is marked with yellow lines, and there are several passengers visible, including a person standing near the train. The station appears to be well-lit and clean, with a modern design. The overall scene suggests a busy and well-maintained transportation hub.

1024×576 60.86

The image depicts a modern bullet train, specifically a high-speed rail vehicle, stationed at a platform in what appears to be a train station. The train is sleek and white, with a streamlined design typical of bullet trains, which are designed to reduce air resistance and increase speed. The train has two large, circular windows on the front, which are likely used for observation and communication purposes.

The platform is well-lit and appears to be clean and organized. There are several people visible on the platform, including a person standing near the front of the train, possibly a conductor or a station staff member. The platform has a yellow safety line, which is a standard feature in train stations to indicate the edge of the platform.

In the background, there are additional train stations or platforms, suggesting that this is part of a larger network of high-speed rail lines. The architecture of the station is modern, with large glass windows and a clean, functional design. There are also some signs and information boards visible, which are typical in train stations for providing information to passengers.

Overall, the image captures a moment in a busy train station, with the bullet train as the central focus. The clean and well-maintained environment indicates a well-organized and efficient transportation system.

2016×1136 110.01

The image depicts a modern bullet train, specifically a Shinkansen, stationed at a platform in a train station. The train is sleek and white, with a streamlined design that is characteristic of high-speed rail technology. The front of the train features two large, circular windows and a sleek, aerodynamic nose. The train is labeled “KYUSHU SHINKANSEN 800” and has the number “U007” on its rear. The platform is well-lit and has a yellow safety line, and there are several people visible in the background, including a security guard and other passengers. The station appears to be well-maintained and modern, with a clean and organized layout.

表3 解像度ごとの生成結果

 
 この結果から,次が分かります・
******
・低解像度(320×180):概略的な説明にとどまり,人物や環境描写は少なめ
・中解像度(1024×576):駅構内の建築や標識に加え,人物についても「運転士か駅員」といったより具体的な描写が追加される
・高解像度(2016×1136):列車の型名(KYUSHU SHINKANSEN 800,U007)や警備員の存在など,細部まで描写が可能となる
******
 以上でQwen2-VL が掲げる「任意解像度での画像処理」という特徴が反映されており,解像度を上げることで生成される解説文の具体性が高まることを確認できました.一方で,解像度を上げると処理時間も増大することが分かりました.つまり,詳細な解説を得たい場合には高解像度を利用できますが,実行速度とのトレードオフを考慮する必要があります.
▲2,日本語対応
 続いて,日本語によるプロンプトを用いた場合の結果を確認しました.使用したプロンプトは,
******
この画像を説明してください。
******
です.解像度ごとの生成結果を表4に示します.
 
解像度 処理時間[s] 生成した解説
320×180 20.54 この画像は、日本でよく見かける高速鉄道の車両です。車両は白色で、前方に大きな窓があり、運行速度が速いことを示しています。車両の前面には「SHINKANAN」の文字が書かれています。この車両は「新幹線」の通称で、日本国内の都市間を高速で往復する鉄道です。
1024×576 61.86 この画像には、駅のホームに停車中の高速鉄道車両が写っています。車両は白色で、前方には大きな窓があり、車体には文字が書かれています。車両の前面には、2つの大きな窓があり、車体の前面には文字が書かれています。車両の前面には、2つの大きな窓があり、車体の前面には文字が書かれています。車両の前面には、2つの大きな窓があり、車体の前面には文字が書かれています。車両の前面には、2つの大きな窓があり、車体の前面には文字が書かれています。車両の前面には、2つの大きな窓があり、車体の前面には文字が書かれています。車両の前面には、2つの大きな窓があり、車体の前面には文字が書かれています。車両の前面には、2つの大きな窓があり、車体の前面には文字が書かれています。車両の前面には、
2016×1136 110.01 この画像には、高速鉄道の車両が写っています。車両は白色で、前方には大きな窓があり、後方には小さな窓があります。車両の名前は「KYUSHU SHINKANSEN 800」で、車両の後ろには「U007」の番号が表示されています。車両の前面には、飛行機の形状を模したデザインが施されています。車両は、駅のホームに停車しています。背景には、駅の構内が見え、人々がいることがわかります。

表4 日本語プロンプトによる生成結果

 
 ここから,次が分かります.
******
・低解像度(320×180):大まかな説明が生成され,「新幹線」と正しく認識されたものの,低解像度では判読できないはずの文字をSHINKANANと誤って推測するなどの誤記が見られた
・中解像度(1024×576):駅ホームや窓などの描写は適切である一方,文章が機械的に繰り返される不自然さが出た
・高解像度(2016×1136):列車の型名(KYUSHU SHINKANSEN 800,U007)が認識され,詳細で自然な説明文が生成された
******
 以上でQwen2-VLは日本語でも十分に解説を生成できることが確認できました.一方で,誤記や文章の冗長な繰り返しといった弱点も見られました.高解像度では情報量が増える点は英語と同様ですが,日本語出力では品質にばらつきがあるため,用途に応じたプロンプト設計や出力後の調整が必要と考えられます.
▲3,GPU対応
 GPU環境下で実行してみます.環境は,env_id:を
******
env_id: 2
 cuDNN-NVIDIA GeForce RTX 5060 Ti (12.0, FP32)
env_id: 3
 cuDNN-NVIDIA GeForce RTX 5060 Ti (12.0, FP32)
******
とします.
 解像度別の処理結果を表5に示します.
解像度/環境 処理時間[s] 生成した解説
320×180/env_id: 2 9.79 CPU-IntelMK と 同じ内容
320×180/env_id: 3 4.53 I’m here.
1024×576/env_id: 2 27 CPU-IntelMK と 同じ内容
1024×576/env_id: 3 It’s a picture of a a a a a a a a a a a a …
2016×1136/env_id: 2 中止(コア・ダンプ)
2016×1136/env_id: 3 中止(コア・ダンプ)

表5 GPU実行における生成結果

 
 ここから,次が分かります.
******
・速度面:env_id:2ではCPU実行に比べて処理時間が大幅に短縮され,320×180解像度で約半分,1024×576解像度でも高速化が確認できた
・安定性の問題:env_id:3では「I’m here.」や単語の繰り返しなど,意図しない出力が生成された.また,高解像度(2016×1136)では両環境ともコア・ダンプが発生し実行が中止された
******
 以上で,GPU実行は速度面で有効である一方で,出力の安定性や高解像度入力時の動作に課題があることが分かりました.実務で利用する場合には,モデル・サイズや入力解像度を制御しながら GPUを活用する工夫が必要です.
 
●まとめ
 今回の検証では,Qwen2-VLを用いて画像解説を行い,解像度/日本語対応/GPU実行の観点から挙動を確認しました.その結果は次の通りです.
▲画像解像度
 解像度を上げることで説明文の具体性が増し,列車の型名や人物の役割など細部まで認識されました.一方で,処理時間も大幅に増加し,精度と速度のトレードオフが明確になりました.
▲日本語対応
 日本語でも新幹線を正しく認識し,自然な説明文を生成可能です.ただし,低解像度では誤記(例:SHINKANAN)が見られ,中解像度では文章の繰り返しといった不自然さが発生しました.高解像度では,より詳細かつ自然な記述が得られる傾向がありますが,解像度を上げても必ずしも高品質になるとは限らず,品質にはばらつきが残りました.
▲GPU対応
 CPU実行と比べて処理速度は大幅に改善しました.しかし,一部の環境では短文や単語の繰り返しといった不安定な出力があり,高解像度ではコア・ダンプによる実行中止が発生しました.安定性の面では,CPU実行が無難であり,GPU実行は環境依存性を考慮して利用する必要があります.
  *  *
 Qwen2-VLは,任意解像度対応や多言語対応といった特徴を備えた強力なビジョン+言語モデルであり,画像内容を豊かに記述できることを確認しました.一方で,日本語生成における誤記や冗長な繰り返し,GPU実行時の安定性といった課題も明らかになりました.実際に利用する際には,解像度と処理時間のバランスをとること,日本語出力の品質を補正する工夫,GPUメモリや安定性に配慮した環境設定が重要であるといえます.
 
氏森 充(うじもり・たかし)
約30年間,(株)構造計画研究所にてIoT,ビッグデータ,機械学習,AI関連のシステム開発や実務応用に従事.退職後はLLM(大規模言語モデル)関連の情報収集や技術動向の調査・発信に注力し,雑誌「Interface」でもLLM技術に関する記事を執筆中.