はじめに
先日、llama.cppが待望のQwen3-VLに対応した。そこで、Qwen3-VLの画像内のオブジェクト認識能力を検証した。
検証環境
検証環境は以下の通り。マルチGPU環境で実施。
| 項目 (Item) | 内容 (Content) |
|---|---|
| OS | Kubuntu 24.04.03 |
| CPU | Ryzen 5 7600 |
| メモリ (Memory) | DDR5-5600 64GB |
| マザーボード (Motherboard) | MSI MAG B650 TOMAHAWK WIFI |
| GPU1 | ZOTAC GAMING GeForce RTX 5060 Ti 16GB Twin Edge |
| GPU2 | MSI GeForce RTX 3060 VENTUS 2X 12G OC |
| GPUドライババージョン (GPU Driver Version) | 580.82.09 |
$ nvidia-smi
Mon Nov 3 12:31:33 2025
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 580.82.09 Driver Version: 580.82.09 CUDA Version: 13.0 |
+-----------------------------------------+------------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+========================+======================|
| 0 NVIDIA GeForce RTX 5060 Ti Off | 00000000:01:00.0 On | N/A |
| 0% 34C P3 13W / 180W | 1324MiB / 16311MiB | 1% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
| 1 NVIDIA GeForce RTX 3060 Off | 00000000:06:00.0 Off | N/A |
| 0% 37C P8 13W / 170W | 15MiB / 12288MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
VLMの実行には、llama-swapのDockerイメージのv171-cuda-b6907を使用。
検証に用いたコード
画像に含まれるオブジェクトごとに次の情報を抽出させることとした。
- 検出されたオブジェクトの名称
- オブジェクトの詳細な特徴説明
- このオブジェクトが存在する確信度
- 画像内での位置(前景、背景、左側、中央、右側など)
- 相対的なサイズ(小、中、大、非常に大きいなど)
これらの情報を抽出するためのスキーマ定義を、pydanticで以下のように記述した。
# 構造化出力のスキーマ定義
class ObjectDescription(BaseModel):
name: str = Field(description="検出されたオブジェクトの名称(例: 犬、車、建物)")
description: str = Field(description="オブジェクトの詳細な特徴説明(色、形状、位置など)")
confidence: float = Field(description="このオブジェクトが存在する確信度(0〜1)")
position: str = Field(description="画像内での位置(前景、背景、左側、中央、右側など)")
size: str = Field(description="相対的なサイズ(小、中、大、非常に大きいなど)")
class ImageAnalysisResult(BaseModel):
objects: List[ObjectDescription] = Field(description="画像内で検出された主要なオブジェクトのリスト(少なくとも3-5個, 最大20個)")
上記の抽出させるためのプロンプトは以下とした。
## 画像分析タスク
この画像を詳細に分析し、画像内の主要なオブジェクトを特定して構造化データとして出力してください。
## 分析の観点
以下の5つの観点で各オブジェクトを分析してください:
1. **名称**: オブジェクトの具体的な名称(例: 黒いラブラドールレトリバー、赤いスポーツカー、ガラス張りの高層ビル)
2. **説明**:
- 色、模様、質感
- 形状と構造的特徴
- 状態や動作
- 特徴的な属性や詳細
3. **信頼度**: 0.00〜1.00の範囲で、このオブジェクトが実際に存在する確信度(例: 0.95, 0.78)
4. **位置**:
- 深度: 前景/中景/背景
- 水平位置: 左側/中央/右側
- 垂直位置: 上部/中央/下部
5. **サイズ**: 画像内での相対的な大きさ(非常に小さい/小さい/中程度/大きい/非常に大きい)
## 出力要件
- 最低5個、最大20個の主要オブジェクトを特定してください。可能な限り多くのオブジェクトを特定してください。
- 重要度の高いオブジェクトから順に記載してください
- 信頼度が0.3未満のオブジェクトは除外してください
- 各オブジェクトは明確に区別可能な独立した存在としてください
- 人間、動物、乗り物、建物、自然物など多様なカテゴリを含めてください
{format_instructions}
コード全文は以下の通り。
from pydantic import BaseModel, Field
from typing import List
import base64
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import PydanticOutputParser
from langchain_core.messages import HumanMessage
import os
from dotenv import load_dotenv
load_dotenv()
# 構造化出力のスキーマ定義
class ObjectDescription(BaseModel):
name: str = Field(description="検出されたオブジェクトの名称(例: 犬、車、建物)")
description: str = Field(description="オブジェクトの詳細な特徴説明(色、形状、位置など)")
confidence: float = Field(description="このオブジェクトが存在する確信度(0〜1)")
position: str = Field(description="画像内での位置(前景、背景、左側、中央、右側など)")
size: str = Field(description="相対的なサイズ(小、中、大、非常に大きいなど)")
class ImageAnalysisResult(BaseModel):
objects: List[ObjectDescription] = Field(description="画像内で検出された主要なオブジェクトのリスト(少なくとも3-5個, 最大20個)")
def analyze_image_with_vlm_langchain(model_config: dict, image_path: str) -> ImageAnalysisResult:
# LangChainのモデルを初期化
model = ChatOpenAI(**model_config)
# 出力パーサーを設定
parser = PydanticOutputParser(pydantic_object=ImageAnalysisResult)
# プロンプトテンプレート
prompt = ChatPromptTemplate.from_messages([
("human", [
{"type": "image_url", "image_url": {"url": "{image_url}"}},
{"type": "text", "text": """
## 画像分析タスク
この画像を詳細に分析し、画像内の主要なオブジェクトを特定して構造化データとして出力してください。
## 分析の観点
以下の5つの観点で各オブジェクトを分析してください:
1. **名称**: オブジェクトの具体的な名称(例: 黒いラブラドールレトリバー、赤いスポーツカー、ガラス張りの高層ビル)
2. **説明**:
- 色、模様、質感
- 形状と構造的特徴
- 状態や動作
- 特徴的な属性や詳細
3. **信頼度**: 0.00〜1.00の範囲で、このオブジェクトが実際に存在する確信度(例: 0.95, 0.78)
4. **位置**:
- 深度: 前景/中景/背景
- 水平位置: 左側/中央/右側
- 垂直位置: 上部/中央/下部
5. **サイズ**: 画像内での相対的な大きさ(非常に小さい/小さい/中程度/大きい/非常に大きい)
## 出力要件
- 最低5個、最大20個の主要オブジェクトを特定してください。可能な限り多くのオブジェクトを特定してください。
- 重要度の高いオブジェクトから順に記載してください
- 信頼度が0.3未満のオブジェクトは除外してください
- 各オブジェクトは明確に区別可能な独立した存在としてください
- 人間、動物、乗り物、建物、自然物など多様なカテゴリを含めてください
{format_instructions}
"""}
])
])
# 画像をbase64エンコード
with open(image_path, "rb") as image_file:
encoded_image = base64.b64encode(image_file.read()).decode("utf-8")
image_url = f"data:image/jpeg;base64,{encoded_image}"
# チェーンを実行
chain = prompt | model | parser
result = chain.invoke({
"image_url": image_url,
"format_instructions": parser.get_format_instructions()
})
return result
def to_markdown_table(result: ImageAnalysisResult) -> str:
"""ImageAnalysisResultをMarkdownテーブル形式に変換する"""
if not result.objects:
return "検出されたオブジェクトはありません。"
table = [
"| No | 名称 | 説明 | 確信度 | 位置 | サイズ |",
"|----|------|------|--------|------|--------|",
]
for i, obj in enumerate(result.objects, start=1):
table.append(
f"| {i} | {obj.name} | {obj.description} | {obj.confidence:.2f} | {obj.position} | {obj.size} |"
)
return "\n".join(table)
VLM_CONFS = [
# local llm
{
"model": "Qwen3-VL-32B-Instruct-GGUF",
"base_url": os.getenv("LOCAL_LLM_BASE_URL"),
"api_key": os.getenv("LOCAL_LLM_API_KEY"),
"enable": True
},
{
"model": "Qwen3-VL-30B-A3B-Instruct-GGUF",
"base_url": os.getenv("LOCAL_LLM_BASE_URL"),
"api_key": os.getenv("LOCAL_LLM_API_KEY"),
"enable": True
},
{
"model": "Qwen3-VL-8B-Instruct-GGUF",
"base_url": os.getenv("LOCAL_LLM_BASE_URL"),
"api_key": os.getenv("LOCAL_LLM_API_KEY"),
"enable": True
},
{
"model": "gpt-5",
"api_key": os.getenv("OPENAI_API_KEY"),
"enable": True
},
]
if __name__ == "__main__":
for vlm_conf in VLM_CONFS:
if not vlm_conf["enable"]:
continue
conf_no_enable = {k: v for k, v in vlm_conf.items() if k != "enable"}
result = analyze_image_with_vlm_langchain(conf_no_enable, "input.jpg")
print("-------------------------------------")
print("# モデル\n", vlm_conf["model"], "\n\n")
# markdown形式の表で出力
print(to_markdown_table(result))
入力画像
VLM(Vision-Language Model)に入力する画像は以下の通りである。
画像上の主要なオブジェクトを書き出すと以下のようになる。これらのオブジェクトを認識できるかテストする。
採点基準
採点基準は以下の通りである。人手で採点するため、採点には多少のばらつきがある可能性がある。
- 1つのオブジェクトを正しく認識できれば1点とする。
- ペアのオブジェクト(例えば、スピーカーなど)は、それぞれ別のオブジェクトとして認識されていれば、それぞれ1点とする。ただし、1つのオブジェクトとして認識され、その詳細な説明(Description)の中に左右のスピーカーについて言及があれば、2点とする。
- オブジェクトが認識されているが、認識内容が合っているか間違っているかの判断に悩むものは0.5点とする。
- オブジェクトが認識されているが、明らかに間違っているものは0点とする。
評価対象モデル
今回、評価したQwen3-VLのモデルはInstructionモデルである。サンプリングパラメータはQwen3-VLのGitHubに記載されている推奨値を設定した。また、比較のためGPT-5についても評価した。
| モデル | 量子化 | 備考 |
|---|---|---|
| Qwen3-VL-8B-Instruct | UD-Q5_K_XL | サンプリングパラメータは推奨値でデプロイ(サンプリングパラメータは推奨値(top-p=0.8,top-k =20, temp=0.7, repeat-penalty=1.0, presence_penalty=1.5) |
| Qwen3-VL-30B-A3B-Instruct | UD-Q4_K_XL | 同上 |
| Qwen3-VL-32B-Instruct | UD-Q4_K_XL | 同上 |
| gpt-5 | - |
なお、Qwen3-VL起動時のパラメータは以下の通り。
"Qwen3-VL-30B-A3B-Instruct-GGUF":
cmd: |
${latest-llama}
--model /app/models/Qwen3-VL-30B-A3B-Instruct-GGUF/Qwen3-VL-30B-A3B-Instruct-UD-Q4_K_XL.gguf
--mmproj /app/models/Qwen3-VL-30B-A3B-Instruct-GGUF/mmproj-F16.gguf
--ctx-size 16384
--cache-type-k q8_0
--cache-type-v q8_0
--n-gpu-layers 1000
--top-p 0.8
--top-k 20
--temp 0.7
--repeat-penalty 1.0
--presence_penalty 1.5
--jinja
--flash-attn on
env:
- "CUDA_VISIBLE_DEVICES=0,1"
ttl: 600
"Qwen3-VL-32B-Instruct-GGUF":
cmd: |
${latest-llama}
--model /app/models/Qwen3-VL-32B-Instruct-GGUF/Qwen3-VL-32B-Instruct-UD-Q4_K_XL.gguf
--mmproj /app/models/Qwen3-VL-32B-Instruct-GGUF/mmproj-F16.gguf
--ctx-size 8192
--cache-type-k q8_0
--cache-type-v q8_0
--n-gpu-layers 1000
--top-p 0.8
--top-k 20
--temp 0.7
--repeat-penalty 1.0
--presence_penalty 1.5
--jinja
--flash-attn on
env:
- "CUDA_VISIBLE_DEVICES=0,1"
ttl: 600
"Qwen3-VL-8B-Instruct-GGUF":
cmd: |
${latest-llama}
--model /app/models/Qwen3-VL-8B-Instruct-GGUF/Qwen3-VL-8B-Instruct-UD-Q5_K_XL.gguf
--mmproj /app/models/Qwen3-VL-8B-Instruct-GGUF/mmproj-F16.gguf
--ctx-size 16384
--cache-type-k q8_0
--cache-type-v q8_0
--n-gpu-layers 1000
--top-p 0.8
--top-k 20
--temp 0.7
--repeat-penalty 1.0
--presence_penalty 1.5
--jinja
--flash-attn on
env:
- "CUDA_VISIBLE_DEVICES=0"
ttl: 600
結果
結果サマリ
Qwen3-VLはどのモデルも高い認識精度を示したが、やはりというか当然というか、Qwen3-VLの中では、総パラメータ数/アクティブパラメータ数の一番多いQwen3-VL-32Bが最も認識精度が高いという結果になった。 8B, 30Bも高い認識精度で十分実用的なレベルではあるものの、32Bと比較してしまうとやや見劣りする結果だった。gpt-5は、さすがに有料モデルだけあって、Qwen3-VL-32Bよりも認識精度が高かった。ただし、その差は僅かであり、ローカル環境で実行可能なQwen3-VL-32Bの性能の高さが印象的であった。
| No | モデル | スコア | サマリ |
|---|---|---|---|
| 1 | Qwen3-VL-8B-Instruct | 12 | ほとんどのオブジェクトを正確に認識できる。ただし、分割キーボードをマウスと誤認した。パラメータ数が8Bと少ないため、説明文は簡潔であった。 |
| 2 | Qwen3-VL-30B-A3B-Instruct | 11.5 | 8Bと同程度の認識精度。ほとんどのオブジェクトを正確に認識できる。ただし、8Bと同様に分割キーボード周りの認識が不安定であった。語彙力は8Bと同程度。 |
| 3 | Qwen3-VL-32B-Instruct | 14 | 8B, 30Bよりさらに認識精度が高い。ほとんどのオブジェクトを正確に認識でき、分割キーボードの左右が正しく認識できていた。ただし、トラックボールとリストレストが正しく認識できていなかった。語彙力も8B, 30Bよりも断然優れている。 |
| 4 | gpt-5 | 14.5 | トラックボール付きの分割キーボードを正しく認識できた。Qwen3-VL-32Bと同様にリストレストは認識できていない。Qwen3-VL-32Bより、わずかに優れている。 |
結果詳細
以降、それぞれのモデルの認識結果を表形式で出力したものを示す。なお、認識結果に含まれる確信度/位置/サイズについては可読性を考慮し、割愛している。
Qwen3-VL-8B-Instruct
| No | 名称 | 説明 | 採点 |
|---|---|---|---|
| 1 | 3画面ディスプレイ | 3台の黒いフレームを持つモニター。左側のモニターは白い背景に「llama-swap」というテキストが表示されている。中央と右側のモニターは暗いテーマで、コードやログデータが表示されている。3台はテーブル上に並べられ、視界を広げる角度で設置されている。 | 3 |
| 2 | マウスパッド | 長方形の黒いマウスパッド。中央に2つの小さな灰色の台座があり、それぞれに黒いマウスパスが置かれている。マウスはワイヤレスで、ケーブルがマウスパッドの端から伸びている。 | 1 |
| 3 | 青いマグカップ | 青いカラーリングのマグカップで、ハンドルが付いている。テーブル上に置かれ、周囲には小さなオブジェクトが配置されている。 | 1 |
| 4 | 黒いスピーカー | 黒いスピーカー2つの円形のスピーカー。各スピーカーの中央に金色の円形のディスプレイがあり、テーブル上に左右対称に配置されている。 | 2 |
| 5 | 木製デスク | 茶色の木目調のデスク。表面は滑らかで、モニター、マウスパッド、スピーカー、マグカップなどのオブジェクトが配置されている。 | 1 |
| 6 | カーテン | ブラウンのカラーの厚手で織り目のあるカーテン。画像の上部に垂直に吊り下げられており、窓の前や壁に沿って設置されている。 | 1 |
| 7 | 白い壁 | 画像の右側と上部に見える、平らで無地の白い壁。カーテンの右側に位置しており、室内の背景を形成している。 | 1 |
| 8 | 黒いマウス | マウスパッドの上に置かれている2つのマウス。デザインは複雑で、レトロなゲームコントローラーのような形状をしている。 | 0 |
| 9 | 黒いケーブル | マウスとマウスパッドの間を結ぶ黒いケーブル。複数の接続点があり、デスク上に散らばっている。 | 1 |
| 10 | 小型電子機器 | テーブル上に置かれている小さな黒い箱型のオブジェクト。おそらくUSBハブや外付けストレージデバイスの可能性。 | 0.5 |
| 11 | オブジェクト | 小型の黄色い 青いマグカップの近くに置かれている小さな黄色い円柱状の物体。おそらくインクカートリッジや小物。 | 0.5 |
Qwen3-VL-30B-A3B-Instruct
| No | 名称 | 説明 | 採点 |
|---|---|---|---|
| 1 | 3画面モニター | 木製のデスク上に配置された3台のモニター。モニターは縦長で、中央と右側のモニターは横長のワイドスクリーンタイプ。すべてのモニターは暗い背景のコーポレーションエディタやコンソール画面を表示しており、開発者の作業環境であることがわかる。 | 3 |
| 2 | 黒いマウスパッド | デスクの中央に置かれた大きな黒い長方形のマウスパッド。表面は滑らかな質感で、両端には小さな金属製の角材が固定されている。 | 1 |
| 3 | キーボード型オブジェクト | 左側のマウスパッド上に置かれた、青と緑のLEDライトが点灯しているキーボード型を模した形状のオブジェクト。これおそらく装飾品やゲーム用のコントローラー。 | 0.5 |
| 4 | 赤いボタン付きオブジェクト | 右側のマウスパッド上に置かれた、白と青の本体に赤い球状のボタンが付いた複雑な形状のオブジェクト。これはロボットやアンドロイドを模した装飾品。 | 0.5 |
| 5 | 黒いスピーカー | 中央のモニターの両脇に配置された2つ円形の黒いスピーカー。表面には光沢があり、中央に小さな金色のドーム状の部分がある。 | 2 |
| 6 | 青いマグカップ | 中央のモニターとスピーカーの間に置かれた青いプラスチック製のマグカップ。蓋がついており、持ち手部分は黒い。 | 1 |
| 7 | デスク | 濃い茶色の木目調のデスク。表面は光沢があり、モニターやオブジェクトを支える主要な構造物。 | 1 |
| 8 | カーテン | 背景に見える濃い茶色の布製のカーテン。垂直方向に折り目が入っており、窓を覆っている。 | 1 |
| 9 | 壁 | カーテンの右側に見える明るいベージュ色の壁。表面はざらついた質感で、無地。 | 1 |
| 10 | 黒いデバイス | 中央のスピーカーの間にある黒い長方形のデバイス。おそらくUSBハブや外部ディスクドライブ。 | 0.5 |
| 11 | 黒い円盤状のオブジェクト | 中央のスピーカーの間にある黒い円盤状のオブジェクト。表面は光沢があり、おそらくワイヤレス充電器。 | 0.5 |
Qwen3-VL-32B-Instruct
| No | 名称 | 説明 | 採点 |
|---|---|---|---|
| 1 | 左側のモニター(白い背景の画面) | 黒いフレームの縦長に設置されたディスプレイ。画面には「llama-swap」というテキストと、モデルの一覧が表示されている白地のウェブページが映し出されている。左側にメニュー、右側に詳細情報が並ぶレイアウト。 | 1 |
| 2 | 中央のモニター(コード編集画面) | 黒いフレームの縦長ディスプレイ。暗色テーマのコードエディタが表示されており、複数のカラーコード(赤、青、緑など)が含まれたプログラムコードが見える。画面下部にはタブやツールバーが確認できる。 | 1 |
| 3 | 右側のモニター(複数のウィンドウ) | 黒いフレームの横長ディスプレイ。画面は2分割されており、左側には青い背景のコードエディタ、右側には多数のテキストやカウンターが表示されたログまたはデータ監視画面が見える。 | 1 |
| 4 | 黒いマウスパッド | 大きな長方形の黒いマウスパッド。デスクの中央に配置され、その上には2つのキーボードと2つの金属製マウスパッドが置かれている。表面は滑らかで、質感はマットな布地。 | 1 |
| 5 | 左側のキーボード(青と緑のキー付き) | 黒いフレームに青と緑のLEDバックライトが点灯しているメカニカルキーボード。マウスパッドの左端に置かれ、一部のキーが可動式またはカスタムデザインである可能性がある。 | 1 |
| 6 | 右側のキーボード(赤いボタン付き) | 黒いフレームに赤い大きなボタンが装備されたカスタムキーボード。マウスパッドの右端に配置されており、特殊な操作用として使用されている可能性がある。 | 0.5 |
| 7 | 青いマグカップ | 青い本体に白い蓋とハンドルを持つステンレス製のマグカップ。中央のモニターの下に置かれ、飲み物を含んでいる可能性がある。 | 1 |
| 8 | 黒いスピーカー(左右対) | 円形の黒いスピーカー。中央のモニターの再側に配置され、金色のコーン型ドライバーが見える。質感はマットなプラスチック。 | 2 |
| 9 | 黒いUSBハブまたは充電器 | 黒い長方形の小型デバイス。中央のモニター下に置かれ、複数のポート(USBなど)が確認できる。周囲にはケーブルが接続されている。 | 1 |
| 10 | 黒いワイヤレス充電器またはラックパッド | 円形の黒いデバイス。USBハブの隣に置かれており、中央に小さな光るインジケータがある。ワイヤレス充電器またはラックパッドとして使用されている可能性がある。 | 0.5 |
| 11 | 木製のデスク | 濃い茶色の木目調のデスク。表面は滑らかで、オフィスやホームワークスペースに適したデザイン。3台のモニターと周辺機器が設置されている。 | 1 |
| 12 | カーテン(背景) | 濃いグレーまたは茶色の縦長のカーテン。画像の左側背景に見え、垂直のしわが確認できる。質感は厚手の布地。 | 1 |
| 13 | 壁(背景) | 濃いベージュまたはクリーム色の壁。表面は滑らかで、無地または微細な模様がある。カーテンの右側に広がっている。 | 1 |
| 14 | 金属製のマウスパッド(2つ) | 銀色の長方形の金属製マウスパッド。マウスパッドの左右に配置され、表面は光沢があり、キーボードの下に置かれている。 | 0 |
| 15 | 黒いケーブル(複数) | マウスパッド上に横たわる黒い電源またはデータケーブル。2つのキーボードを接続しているように見える。太さは中程度で、柔軟性がある。 | 1 |
| 16 | 小さな赤いボタン付きデバイス(右側のキーボード付属) | 右側のカスタムキーボードに取り付けられた大きな赤いボタン。おそらく緊急停止または特定の機能の起動を意図するもの。 | 0 |
gpt-5
| No | 名称 | 説明 | 採点 |
|---|---|---|---|
| 1 | 中央のPCモニター(横向き) | 黒いベゼルのワイドモニター。画面は暗色テーマのコードエディタを表示し、中央に据え付けられている。ブランドロゴ(Dell)が下部中央。 | 1 |
| 2 | 右側のPCモニター(横向き) | 黒いベゼルのワイドモニター。右に角度をつけて配置され、ターミナルやブラウザの暗色画面を表示。 | 1 |
| 3 | 左側のPCモニター(縦向き) | 縦置きされた黒いベゼルのモニター。明るい背景のウェブページを表示し、左端に立てられている。 | 1 |
| 4 | 木製デスク | 赤褐色の木目天板。広い作業面で機器を支え、画面下の前景に広がる。 | 1 |
| 5 | 大型デスクマット | 黒い長方形のマット。キーボードや手前の機器の下を覆い、滑り止めの質感。 | 1 |
| 6 | 分割エルゴノミックキーボード(右半分・赤いトラックボール付き) | 右手側の分割メカニカルキーボード。段差のある配列で、上面に大きな赤いトラックボールを内蔵。金属製の台座で傾斜(テント)させて設置。 | 1 |
| 7 | 分割エルゴノミックキーボード(左半分) | 左手側の分割メカニカルキーボード。黒と緑のキーキャップが混在。金属プレートのスタンドで角度をつけて固定。中央と右半分とケーブルで接続。 | 1 |
| 8 | 左のデスクトップスピーカー | 円形ドライバーを持つ小型スピーカー。黒い筐体に銅色のコーンが見える。中央モニターの左下に配置。 | 1 |
| 9 | 右のデスクトップスピーカー | 左と対になる小型スピーカー。黒い筐体で円形ドライバー。中央モニターの右下に配置。 | 1 |
| 10 | 縦置きスタンドのノートPC(クローズド) | 黒いラップトップが縦置きスタンドで立てられている。右モニターの下、机の右寄り。 | 0.5 |
| 11 | 折りたたみ式トラベルカップ(フタ付き) | 淡いブルーのシリコン製フタの折りたたみ式カップ。白いバンド状パーツがあり、中央モニター前に置かれている。 | 1 |
| 12 | 接続ケーブル類 | 黒いケーブルがキーボード間および機器へ伸びている。机上で緩やかに湾曲。 | 1 |
| 13 | ドッキングステーション/USBハブ | 中央モニター下の黒い長方形デバイス。ポートやLEDが前面にあり、周辺機器の中継に使われているように見える。 | 0.5 |
| 14 | 小さなガラスカップ | 透明のショットグラス風の小容器。青いカップの右隣に置かれている。 | 0 |
| 15 | 小型フィギュア/オブジェクト | 机の中央付近に置かれた小さな飾り物。オレンジ系の小像で、スピーカーの間に位置。 | 0.5 |
| 16 | カーテン | 濃い茶色の布製カーテン。左奥の背景で窓を覆っている。 | 1 |
| 17 | 白いテクスチャ壁 | 薄いクリーム〜白色の壁面。画面奥の背景として広がる。 | 1 |
まとめ
今回は、Qwen3-VLのオブジェクト認識精度を検証した。どのQwen3-VLのモデルでも、実用レベルの高い精度でオブジェクトの認識ができることがわかった。特にQwen3-VL-32Bについては、gpt-5に近い精度の認識能力を持つことが確認できた。
その他
パラメタ数が多くローカルでの実行が難しいQwen3-VLのモデル(qwen3-vl-235b-a22b-instruct)とクラウドAPIのみで提供されるモデル(qwen3-vl-flash, qwen3-vl-plus)についても、アリババクラウドのAPIを使って、同様の検証コードで実行したが、結果が正常に取得できなかった(オブジェクトが1つも認識できなかった)。現状、検証用コードに問題があるのか、他に問題があるのか原因は特定できていないが、今後検証でき次第、結果を追記したい。
Gemma3-27b-itの結果(11/04追記)
Gemma3-27b-it(量子化:Q4_K_M)の結果追記。7点。
検出しているオブジェクト数が少ないのと、スピーカーをヘッドホンと誤った認識をしており、スコアが伸びなかった。画像の認識能力がQwen3-VL-8Bよりも劣っている用に見える。サンプリングパラメータを特に調整しなかった影響等も考えるが、今回の検証では、イマイチな結果となっていた。
| No | 名称 | 説明 | 採点 |
|---|---|---|---|
| 1 | モニター | 左側の黒色のベゼルを持つモニター。画面にはテキストベースのインターフェースが表示されており、おそらくソフトウェア開発またはデータ分析に関連する内容です。 | 1 |
| 2 | モニター | 中央の黒色のベゼルを持つモニター。画面にはコードエディタのようなインターフェースが表示されており、カラフルな構文ハイライトが施されています。ソフトウェア開発環境で使用されている可能性が高いです。 | 1 |
| 3 | モニター | 右側の黒色のベゼルを持つモニター。画面にはコードやログデータのようなテキストが密集して表示されており、カラフルなハイライトが施されています。ソフトウェア開発またはシステム管理に使用されている可能性があります。 | 1 |
| 4 | キーボード | メカニカルキーボード。キーキャップは白とグレーの配色で、カスタマイズされているようです。 | 0.5 |
| 5 | マウス | ゲーミングマウス。黒色のデザインで、人間工学に基づいた形状をしています。 | 0 |
| 6 | マウスパッド | 大きな黒色のマウスパッド。キーボードとマウスの両方をカバーするサイズです。 | 1 |
| 7 | ヘッドホン | 黒色のオーバーイヤーヘッドホン。中央のモニターの左右に配置されています。 | 0 |
| 8 | 水筒 | 青色の水筒。中央のモニターの背後に配置されています。 | 0.5 |
| 9 | カーテン | 濃いグレーまたは黒色のカーテン。背景全体を覆っており、布の質感が見えます。 | 1 |
| 10 | デスク | 濃い木目調のデスク。モニター、キーボード、マウスなどが配置されています。 | 1 |

