🚀 🖼️🔗 ダイアグラムからグラフへの変換モデル
このモデルは、Zackariya Solution でのインターンシップ中に行われた研究プロジェクトです。画像から構造化データ(JSON)、特にノード、エッジ、およびそれらのサブ属性を抽出し、視覚情報を知識グラフとして表現することに特化しています。
🚀 注意: このモデルは学習目的のみを対象としており、本番環境での使用は想定されていません。抽出される構造化データは、プロジェクトのニーズに応じて異なる場合があります。
🚀 クイックスタート
このモデルを使用することで、画像から構造化データを抽出し、知識グラフとして表現することができます。以下のセクションでは、モデルの詳細、使用方法、トレーニングの詳細、評価結果などを説明します。
✨ 主な機能
- 画像から構造化データ(JSON)を抽出する。
- ノード、エッジ、およびそれらのサブ属性を特定し、知識グラフとして表現する。
- ダイアグラムからグラフへの変換を行う。
- AIによる画像からの構造化データ抽出をサポートする。
📋 モデルの詳細
属性 |
詳情 |
開発者 |
Zackariya Solutionインターンシップチーム(Mohammed Safvan) |
ファインチューニング元 |
Qwen/Qwen2.5-VL-3B-Instruct |
ライセンス |
Apache 2.0 |
言語 |
多言語(構造化抽出に重点) |
モデルタイプ |
Vision-Language Transformer(PEFTでファインチューニング) |
🎯 使用例
直接的な使用
- ダイアグラムからグラフへの変換の実験 📊
- 画像からのAIによる構造化抽出の理解
下流での使用(潜在的)
- BPMN/フローチャート分析の強化 🏗️
- 自動文書処理のサポート 📄
対象外の使用
- 実世界の本番環境でのデプロイには適していません ⚠️
- すべてのダイアグラムタイプに対して汎化性が高くない場合があります
💻 使用例
基本的な使用法
%pip install -q "transformers>=4.49.0" accelerate datasets "qwen-vl-utils[decord]==0.0.8"
import os
import PIL
import torch
from qwen_vl_utils import process_vision_info
from transformers import Qwen2_5_VLForConditionalGeneration, Qwen2_5_VLProcessor
MODEL_ID="zackriya/diagram2graph-adapters"
MAX_PIXELS = 1280 * 28 * 28
MIN_PIXELS = 256 * 28 * 28
model = Qwen2_5_VLForConditionalGeneration.from_pretrained(
MODEL_ID,
device_map="auto",
torch_dtype=torch.bfloat16
)
processor = Qwen2_5_VLProcessor.from_pretrained(
MODEL_ID,
min_pixels=MIN_PIXELS,
max_pixels=MAX_PIXELS
)
SYSTEM_MESSAGE = """You are a Vision Language Model specialized in extracting structured data from visual representations of process and flow diagrams.
Your task is to analyze the provided image of a diagram and extract the relevant information into a well-structured JSON format.
The diagram includes details such as nodes and edges. each of them have their own attributes.
Focus on identifying key data fields and ensuring the output adheres to the requested JSON structure.
Provide only the JSON output based on the extracted information. Avoid additional explanations or comments."""
def run_inference(image):
messages= [
{
"role": "system",
"content": [{"type": "text", "text": SYSTEM_MESSAGE}],
},
{
"role": "user",
"content": [
{
"type": "image",
"image": image,
},
{
"type": "text",
"text": "Extract data in JSON format, Only give the JSON",
},
],
},
]
text = processor.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
image_inputs, _ = process_vision_info(messages)
inputs = processor(
text=[text],
images=image_inputs,
return_tensors="pt",
)
inputs = inputs.to('cuda')
generated_ids = model.generate(**inputs, max_new_tokens=512)
generated_ids_trimmed = [
out_ids[len(in_ids):]
for in_ids, out_ids
in zip(inputs.input_ids, generated_ids)
]
output_text = processor.batch_decode(
generated_ids_trimmed,
skip_special_tokens=True,
clean_up_tokenization_spaces=False
)
return output_text
image = eval_dataset[9]['image']
output = run_inference(image)
import json
json.loads(output[0])
🏗️ トレーニングの詳細
- データセット: 内部で作成されたダイアグラムデータセット 🖼️
- ファインチューニング: LoRAベースの最適化 ⚡
- 精度: bf16混合精度トレーニング 🎯
📈 評価
評価指標
- 指標: F1スコア 🏆
- 制限事項: 複雑で密集したダイアグラムに対しては性能が低下する場合があります ⚠️
評価結果
- ノード検出で+14%の改善
- エッジ検出で+23%の改善
サンプル |
(ベース)ノードF1 |
(ファインチューニング後)ノードF1 |
(ベース)エッジF1 |
(ファインチューニング後)エッジF1 |
image_sample_1 |
0.46 |
1.0 |
0.59 |
0.71 |
image_sample_2 |
0.67 |
0.57 |
0.25 |
0.25 |
image_sample_3 |
1.0 |
1.0 |
0.25 |
0.75 |
image_sample_4 |
0.5 |
0.83 |
0.15 |
0.62 |
image_sample_5 |
0.72 |
0.78 |
0.0 |
0.48 |
image_sample_6 |
0.75 |
0.75 |
0.29 |
0.67 |
image_sample_7 |
0.6 |
1.0 |
1.0 |
1.0 |
image_sample_8 |
0.6 |
1.0 |
1.0 |
1.0 |
image_sample_9 |
1.0 |
1.0 |
0.55 |
0.77 |
image_sample_10 |
0.67 |
0.8 |
0.0 |
1.0 |
image_sample_11 |
0.8 |
0.8 |
0.5 |
1.0 |
image_sample_12 |
0.67 |
1.0 |
0.62 |
0.75 |
image_sample_13 |
1.0 |
1.0 |
0.73 |
0.67 |
image_sample_14 |
0.74 |
0.95 |
0.56 |
0.67 |
image_sample_15 |
0.86 |
0.71 |
0.67 |
0.67 |
image_sample_16 |
0.75 |
1.0 |
0.8 |
0.75 |
image_sample_17 |
0.8 |
1.0 |
0.63 |
0.73 |
image_sample_18 |
0.83 |
0.83 |
0.33 |
0.43 |
image_sample_19 |
0.75 |
0.8 |
0.06 |
0.22 |
image_sample_20 |
0.81 |
1.0 |
0.23 |
0.75 |
平均 |
0.749 |
0.891 |
0.4605 |
0.6945 |
🤝 コラボレーション
あなた自身のユースケースに合わせてモデルをファインチューニングしたい場合や、私たちがどのようにお手伝いできるかを調べたい場合は、一緒にコラボレーションしましょう。
Zackriya Solutions
🔗 参考文献
📄 ライセンス
このモデルは、Apache 2.0ライセンスの下で提供されています。
🚀好奇心を持ち続け、探求を続けましょう!🚀