Qwen2-VLを試して化学実験系の専門データを解読してみるメモ
はじめに
そろそろマルチモーダルモデルを本格的に触ろうと思ったので、今更ですが、Qwen2-VLを試しました。
諸々の画像について、gpt-4oとの比較も交えながらテキスト化し、実力を調べました。
参考ページ
セットアップ
マシン
RTX-6000 Adaを使います。CPUはthreadripper 3990
セットアップ
conda create -n qwen python=3.11 -y
conda activate qwen
pip install qwen-vl-utils==0.0.8
pip install transformers==4.5.1
pip install torch==2.4.1
pip install torchvision==0.19.1
pip install accelerate==0.34.2
推論コード
from transformers import Qwen2VLForConditionalGeneration, AutoTokenizer, AutoProcessor
from qwen_vl_utils import process_vision_info
model_name="Qwen/Qwen2-VL-2B-Instruct"
# default: Load the model on the available device(s)
model = Qwen2VLForConditionalGeneration.from_pretrained(
model_name , torch_dtype="auto", device_map="auto"
)
processor = AutoProcessor.from_pretrained(
model_name
)
#推論関数
from PIL import Image
import requests
def process_image(
model,processor,
img_path,
query="中身を解析して",
max_new_tokens=128,
):
# 画像の準備
image = Image.open(img_path)
# メッセージの準備
messages = [
{
"role": "user",
"content": [
{
"type": "image",
},
{"type": "text", "text": query},
],
}
]
# 入力の準備
text_prompt = processor.apply_chat_template(messages, add_generation_prompt=True)
inputs = processor(
text=[text_prompt],
images=[image],
padding=True,
return_tensors="pt"
)
inputs = inputs.to("cuda")
# 推論の実行
output_ids = model.generate(**inputs, max_new_tokens=max_new_tokens)
generated_ids = [
output_ids[len(input_ids) :]
for input_ids, output_ids in zip(inputs.input_ids, output_ids)
]
output_text = processor.batch_decode(
generated_ids, skip_special_tokens=True, clean_up_tokenization_spaces=True
)
return output_text
#推論
path="images/particle.png"
query="この画像は何?"
text=process_image(model,processor,path,query)
2Bモデルは10GBほどのramがあれば推論までできました。推論時間は2 sec程度。
7Bモデルは17GB程度のramが必要でした。推論時間は4sec程度。
1. 電子顕微鏡像のチェック
最近書いた以下の論文で使った電子顕微鏡像(CC-BY-4.0)を解析してみます。
電子顕微鏡像
![](https://assets.st-note.com/img/1727683725-1xzCcR8ryYmFulBOIpXUqT9V.png?width=1200)
まずは2Bで動かしてみます。
推論時間は2sec程度でした。
Q. この画像は何?
A. この画像は、異なる実験条件(ロボットと人間)で得られた電子顕微鏡写真です。各写真は、それぞれの実験の結果を示しています。
コメント: 電子顕微鏡像であることを認識できるようです
Q: この画像には何が写っている?
A: この画像には、3つの異なる実験の結果が写っています。それぞれの実験は「ロボット」、「人間」、「3回目の実験」の名前で示されています。各実験の写真は、それぞれの実験の結果を示しています。
コメント: 3つではなく6つと回答すべき
Q: この画像には何がどういう材料が写っている?
A: この画像には、異なる材料が写っています。以下に各材料について説明します。
a) ロボット - ロボットの表面は、細かい粒子や微細な構造が見られます。これは、ロボットの表面が細かい粒子や微細な構造を持つことを示しています。
b) 人間 - 人間の表面は、大きな粒子や大きな構造が見られます。これは、人間の表面が大きな粒子や大きな構造を持つことを示しています。 これらの画像は、異なる材料の表面の比較を示しています。
コメント: 粒子であることは認識できている。ロボット、人間の考察の差は間違い
Q: 微粒子のサイズはどれくらいか
A: 微粒子のサイズは、それぞれの画像の右下に示されています。それぞれの画像の右下には、それぞれの微粒子のサイズが示されています。
コメント: 右下に示されているのはスケールバーなので、回答は間違い
(GPT-4oの場合はそれなりに回答できた)
gpt-4oの回答
画像に示されているスケールバーが2 μm(マイクロメートル)であることから、微粒子のサイズはおよそ1~3 μm程度と推測されます。これは各画像内の微粒子のサイズがスケールバーと比較してだいたい同じか、少し小さいくらいに見えるためです。
7bの回答
A: この画像では、微粒子のサイズは \(2 \mu \mathrm{m}\) です。
コメント: スケールバーはかろうじて認識できている感じか。
2. サンプル瓶の置き方の比較
スターラー上に、ARマーカー付きのホルダに入ったサンプル瓶をおいた際の写真です。ロボットは置き方が雑なのが画像上のポイントです。
![](https://assets.st-note.com/img/1727684429-XGpxdP4jk9CgYTAebHys2UOF.png?width=1200)
Q: 左右の違いは何か?
A: 左右の写真の違いは、人間とロボットの顕著な違いです。以下にその違いを具体的に説明します。
1. **顔の形状**: - a) は人間の顔で、顔の形状は円形で、左右に分かれています。 - b) はロボットの顔で、顔の形状は三角形で、左右に分かれています。
2. **顔の位置**: - a) は人間の顔が正面に位置しています。 ….
コメント: 全く認識できていない。これに対し、GPT-4oは正しく認識できた。
gpt-4oの回答
左右の画像は、「Human」と「Robot」のタグが付けられており、主に以下の点で違いがあります。タグの違い: 左側の画像には「Human(人間)」、右側の画像には「Robot(ロボット)」と記されています。これはおそらく、それぞれの画像が人間とロボットによる操作や配置を表している可能性があります。
物体の配置: どちらの画像でも同じ物体(おそらくビーカーのようなもの)とQRコードのようなものが見えますが、右の「Robot」のほうは、若干角度が異なっているように見えます。特にQRコードの位置や角度が異なっており、ロボットの操作である場合により正確な配置が意図されている可能性があります。
撮影角度の違い: 左側の「Human」では、物体がカメラに対してより水平に置かれているのに対し、右側の「Robot」では若干斜めに配置されています。
この違いは、人間とロボットが同じ作業を行った際にどのような結果が得られるかを比較している実験の一部かもしれません。
7bの回答 (ダメダメ)
A: この画像は、人間とロボットの違いを示しています。以下にそれぞれの違いを説明します。 **a) 人間** - 人間の顔が写っています。 - 人間の表情や感情が表現されています。 - 人間の皮膚の色が表示されています。 **b) ロボット** - ロボットの顔が写っています。 - ロボットの表情や感情が表現されていません。 - ロボットの皮膚の色が表示されていません。
3. 濁度の推定
反応液が徐々に濁っていく過程を1-5段階で評価します。
![](https://assets.st-note.com/img/1727684923-1zUaVDEZ0i63uxSN9tXhk2Rm.png?width=1200)
Qwen-2b
Q: 4つのサンプル瓶に入っている反応液の濁度を1-5で定量して
A: 申し訳ありませんが、この質問は具体的な画像やデータを提供していただけますか? それにより、適切な回答を提供することが可能となります。
コメント: 画像を認識できていない
GPT-4o (good)
Q: 濁度を1-5段階で定量して
A: 画像を見る限り、時間経過に伴う濁りの変化を評価するように見えますね。濁度を1から5の段階で定量する方法を以下のように提案します。
濁度の基準設定(1-5段階)
1段階: 透明またはほぼ透明、濁りなし
2段階: かすかな濁り
3段階: 中程度の濁りが見られるが、まだ奥が見える
4段階: 濃い濁りがあり、奥が見えにくい
5段階: 非常に濃い濁り、全く透過しない
段階ごとの評価
1秒: 濁りが少なく透明に近い。濁度1
737秒: かすかに濁ってきたが、まだ透明度がある。濁度2
1472秒: 中程度の濁りが見られる。濁度3
3313秒: 濁りが非常に濃くなり、透過性がほとんどない。濁度4または5(奥が見えにくければ5)
画像だけでは細かい判定が難しい場合もあるため、実際には測定器を使用して濁度を数値化するのが正確かもしれませんが、この基準を使って段階的に評価できます。
7b (それなりにできた)
Q: 濁度を1-5段階で定量して
A: この画像は、時間経過とともに液体の混濁度がどのように変化するかを示しています。以下に、混濁度を1-5段階で定量するための基準を提案します。
1. 透明: 混濁度が非常に低い場合、液体は非常に透明で、混ざり合った粒子がほとんど見えない。
2. 輕度混濁: 混濁度がやや高い場合、液体は一部混ざり合った粒子が見えるが、全体的に透明である。
3. 中程度混濁: 混濁度が中程度の場合、液体は混ざり合った粒子がよく見えるが、全体的に透明である。
4. 高度混濁: 混濁度が非常に高い場合、液体は混ざり合った粒子が非常に見え、全体的に混濁している。
5. 混濁: 混濁度が非常に高い場合、液体は混ざり合った粒子が非常に見え、全体的に混濁している。
この基準に従って、画像の混濁度を定量すると、1秒後は「透明」、737秒後は「軽度混濁」、1472秒後は「中程度混濁」、3313秒後は「高度混濁」になります。
ベンゼン
![](https://assets.st-note.com/img/1727685754-xtKHJ7oINhEWDBiG8lU2qOFL.png)
7b
Q: なにこれ
A: これはベンゼンの構造式です。ベンゼンは六員環の芳香族炭化水素で、化学式はC6H6です。ベンゼンは石油製品や溶剤などに含まれており、化学反応の触媒としても使用されます。
2b
Q: なにこれ
A: これはベンゼンの構造式です。
フラン
![](https://assets.st-note.com/img/1727685840-EzBNu4JTIyxeCmipL9wlMXQ8.png)
2b
Q: なにこれ
A: この文字は「フラン」という化学物質の名前です。フランは芳香族化合物の一種で、主に芳香族化合物の合成に使用されます。
Q: この化合物の名称とSMILESは?
A: この化合物の名前は "1,3,5-三嗪" です。SMILES (Structure-Mapping Identifier System) は、化学構造を表すための規則で、この化合物のSMILESは以下のように表されます: ``` [O][C][C][C][C][C][C][C][C][C][C][C][C][C][C][C][C][C][C][C][C][C][C][C][C][C][C][C][C][C][C][C][C][C][C][C
(コメント: 間違い)
7b
Q: なにこれ
A: これは5-メチル-2-フェニル-1,3-ジオキサン-4-オールの構造式です。これは有機化合物の一種で、化学式はC13H18Oです。
(コメント: 間違い)
Q: この化合物の名称とSMILESは?
A: この化合物の名称は「2-メチル-1,3-ジオキサン」です。 SMILES表現は「C1CC1OCC1」です。
(コメント: 間違い)
GPT-4o (間違い)
![](https://assets.st-note.com/img/1727686912-aEnuJHk2dWyPQghKAwbGT3xY.png?width=1200)
スライド
![](https://assets.st-note.com/img/1727686128-uqVxw6gB4Ac7jDMQ9nlFEemG.png?width=1200)
7bの方が、やや正確
2b
Q: 文字起こしして
A: 背景
人間: 教科書などを学習 (実験 + 結果 + 説明)
・科学的に正しい思考様式が身につきやすい
AI: データの羅列を学習 (実験+結果)
・科学理論を学ばないので、ローカルルールの信奉など、誤った思考様式に陥る恐れ
→ ありえない提案や解釈不能な予測を引き起こす主要因
→ 小規模データセットからの予測が本質的に困難
7b
Q: 文字起こしして
A: 背景 人間 vs. 既存のAI
人間: 教科書などを学習 (実験 + 結果 + 説明)
・科学的に正しい思考様式が身につきやすい
AI: データの羅列を学習 (実験+結果)
・科学理論を学ばないので、ローカルルールの信奉など、誤った思考様式に陥る恐れ
→ ありえない提案や解釈不能な予測を引き起こす主要因
→ 小規模データセットからの予測 …
スライド2
複雑なスライドを文字列に変換できるかどうか
![](https://assets.st-note.com/img/1727686422-4uI7lpdQHB5Wb6EAarg9KoVX.png?width=1200)
2b (破綻)
Q: 正確に文字起こしして。図や表などは、きれいにまとめ直して A: GPT-4の活用例 • その2: 反応液の経時観察と定量化 指示 時間の経過に伴う濁度の変化を0~5のスケールで定量化し、表データとして出力しなさい Reaction A (Run 1) Reaction B (Run 2) 出力 日常的な実験観察の(半)定量化※ (24時間の見守りが可能) 0 1 2 3 4 5 0 1000 2000 3000 Reaction time [s] Turbidity [l] Run 1 Run 1 (human) Run 3 Run 3 (human) Run 1 Run 1 (human) Run 3 Run 3 (human) …
7b (テキスト部分は正確に抽出)
Q: 正確に文字起こしして。図や表などは、きれいにまとめ直して
A: GPT-4の活用例
•その2: 反応液の経時観察と定量化
指示
時間の経過に伴う濁度の変化を0~5のスケールで 定量化し、表データとして出力しなさい
出力
日常的な実験観察の(半)定量化※
(24時間の見守りが可能) 0 1000 2000 3000 Reaction time [s] 0 1 2 3 4 5 Turbidity [-] Run 1 Run 1 (human) Run 3 Run 3 (human)
※注 ・出力された表データをもとに筆者がグラフを作成。
・Humanは、人手による評価を表す。
・人間は写真以外の角度からも反応液を観察していたので、Run 1の 方が濁度が高いことを知っている(→予測誤差の主要因)
29
GPT-4o (qwen-7bと同程度。もっと精度が欲しい)
GPT-4の活用例
その2: 反応液の経時観察と定量化
指示
時間の経過に伴う濁度の変化を0~5のスケールで定量化し、表データとして出力しなさい
出力
日常的な実験観察の(半)定量化※
(24時間の見守りが可能)
※注
出力された表データをもとに筆者がグラフを作成。
Human1, 人手による評価を表す。
人間は写真以外の角度からも反応を観察していたので、Run1の方が濁度が高いことを知っている(予測誤差の主要因)
まとめ
実力は、GPT-4o > 7B > 2B でした。
各項目ごとの評価は以下の通り。
実験観察: 2Bはダメダメなケースあり。 7Bはかろうじて動く。GPT-4oは期待以上の観察が可能なケースあり。
分子構造: 2、7Bはたまに答えられるが、信頼性は低い。GPT-4oはほとんど回答不可。
文字のOCR: 評判通り、2,7Bで高性能
スライドのテキスト化: 画像部分の記述に課題
分子構造の認識については、GTP-4oよりもQwenの方が上の可能性がありそうです。まだ認識精度がイマイチの箇所が多々ありますが、基本的には、学習データの共有の問題であるように思われるので、そのうち、改善するような気がしました。
推論コストが低いので、今後、実験室のリアルタイムモニタリングや、多量のパワポetcデータの高速OCRができるようにようになりそうです。