roboflowブログ

 roboflow製品情報
roboflowによるQwen2.5-VLモデルの微調整とデプロイ
roboflowによるQwen2.5-VLモデルの微調整とデプロイ
2025年1月28日にリリースされたQwen2.5-VLは、Qwen-VLシリーズ最新のビジョン言語モデルです。Qwen2.5-VLは、ビジュアル質問応答やOCR、ドキュメントから特定のテキストを抽出する作業など、幅広いマルチモーダルタスクに対応しています。
roboflowを活用することで、Qwen2.5-VLモデルの微調整や、roboflowワークフローを使ったアプリケーション開発、さらにroboflow Inferenceを利用した微調整モデルの独自ハードウェアへのデプロイが可能になりました。
このガイドでは、シッピングパレットマニフェストを読み取るQwen2.5-VLモデルを微調整し、デプロイする具体的な手順について紹介します。このモデルは、産業向け在庫管理ソリューションの一部として活用できます。
それでは、さっそく始めていきましょう!

ステップ1: マルチモーダル プロジェクトを作成する
開始するには、まず無料のroboflowアカウントを作成します。
このガイドでは、roboflow Universeで利用可能なオープンな配送パレットデータセットを使用します。このデータセットには、レシートのテキストに注釈が付けられたレシートの画像が含まれています。データセット内の画像と、レシート内のデータの対応するJSON注釈の例を次に示します。

roboflowアカウント
このデータセットをプロジェクトで使用するには、配送パレットのデータセットページに移動し、[Fork Project]をクリックします。

Fork Project
これにより、モデルの微調整に使用できるデータセットのコピーが作成されます。
カスタムデータセットを使用して独自のユースケースに合わせてモデルを微調整する場合は、roboflowダッシュボードから「Multimodal」プロジェクトを作成し、画像データをアップロードできます。

Multimodal
サポートされているJSONL形式のアノテーションファイルをお持ちの場合は、そちらをアップロードすることも可能です。アノテーションがない場合は、画像をアップロードした後、Roboflow Annotateを使ってデータにラベル付けを行うことができます。
アノテーションは、データがJSONL形式であれば、構造は任意で問題ありません。
例えば、配送パレットのデータセットでは、次のような構造を使用しています。


{"route": "Q967-KG-646","pallet_number": "6","delivery_date": "10/25/2024","load": "4","dock": "D16","shipment_id": "R40692490452","destination": "251 Fox Plaza, West Maria, KY 31250","asn_number": "6428483118","salesman": "GORDON COMPTON","products": [{"description": "495827 - CASE OF PLASTIC BAGS","cases": "4","sales_units": "8","layers": "4"},{"description": "485927 - BOX OF DRYING CLOTHS","cases": "64","sales_units": "64","layers": "4"},{"description": "836495 - BOX OF WINDOW WIPES","cases": "8","sales_units": "64","layers": "4"},{"description": "728495 - BOX OF STAIN REMOVERS","cases": "32","sales_units": "8","layers": "2"}],"total_cases": "108","total_units": "144","total_layers": "14","printed_date": "12/05/2024 11:29","page_number": "67"}
									
配送ルート、パレット番号、配送日、ドック、マニフェスト上の製品などのキーと値があります。

ステップ2: データセットバージョンを作成する
データセットにラベル付けが完了したら、「データセットバージョン」を作成できます。データセットバージョンは、ある時点でのデータセットの状態を保存したスナップショットです。作成したデータセットバージョンを使って、Roboflowプラットフォーム上でモデルのトレーニングを実行できます。
データセットバージョンを作成するには、プロジェクト画面の左側サイドバーにある「Versions」をクリックしてください。

データセットバージョン
次の 2 つの拡張を適用します。

・Auto-orient
・Resize (stretch) to 640x640.

オーグメンテーション
最初のバージョンでは、拡張処理(Augmentation)を適用しないことをおすすめします。これにより、ラベル付けされたデータセットそのものがどの程度のパフォーマンスを発揮するかを、正確に把握できます。
データセットの設定が完了したら、ページ下部の[Create]ボタンをクリックしてください。
データセットバージョンが生成され、自動的にモデルのトレーニングを開始できるページへ移動します。

ステップ3: Qwen2.5-VL モデルのトレーニング
Qwen2.5-VL モデルのトレーニングを開始するには、データセット バージョン ページで [Custom Train] をクリックします。

Custom Train
トレーニングジョブを設定できるウィンドウが表示されます。Qwen2.5-VL トレーニング オプションを選択します。

Qwen2.5-VL
次に、モデルサイズを確認するように求められます。現在は、ワンサイズ:3Bをサポートしています。

Qwen2.5-VL(3B)LoRA
次に、公開チェックポイントからのトレーニングを選択します。

公開チェックポイントからのトレーニングを選択
「トレーニングの開始」をクリックして、トレーニングジョブを開始します。
モデルのトレーニングにかかる時間の見積もりを示す通知が表示されます。これは、データセット内の画像の数によって異なります。マルチモーダルなファインチューニングジョブは、平均して数時間かかることが予想されます。
モデルのトレーニング中は、モデルのトレーニングページから時間の経過に伴う損失とパープレキシティを表示できます。

時間の経過に伴う損失とパープレキシティを表示

ステップ4: トレーニング済みの Qwen2.5-VL モデルをデプロイする
モデルのトレーニングが完了したら、roboflow Inferenceを使って独自のハードウェアにデプロイできます。
Qwen2.5-VLはマルチモーダルなビジョン言語モデルであるため、最適なパフォーマンスを発揮するには、少なくともNVIDIA T4 GPU以上を搭載したデバイスへのデプロイを推奨します。
また、roboflow Workflowsを活用することで、ビジョンアプリケーションを構築し、Inferenceを使ってそのモデルを簡単にデプロイできます。
始めるには、roboflowダッシュボードの左側サイドバーにある[Workflows]をクリックし、新しいワークフローを作成してください。

roboflow Workflows
[Add Block] をクリックし、Qwen2.5-VL を検索します。

Add Block Qwen2.5-VL
Qwen2.5-VL ブロックを追加します。「モデルID」フォームフィールドをクリックします。

Qwen2.5-VL ブロックを追加
ワークフローで使用するトレーニング済みモデルを選択できるウィンドウがポップアップ表示されます。トレーニングしたばかりのモデルを選択します。

ワークフローで使用するトレーニング済みモデルを選択
Qwen2.5-VLブロックの設定が完了したら、ワークフローにさまざまなロジックを追加できます。
たとえば、Qwen2.5-VLの出力に特定の情報が含まれているかどうかを判定し、条件に応じてSlack通知を送信する、といった処理も可能です。
このガイドでは、モデルを実行するシンプルな「ワンステップワークフロー」を使用します。
以下が、最終的なワークフローの構成例です。

最終的なワークフローの構成例
これで、モデルをデプロイする準備が整いました。
今回は、自社のハードウェアにモデルをデプロイしますが、Roboflow Dedicated Deploymentsを利用して、専用のクラウドGPUサーバーへデプロイすることも可能です。

デプロイを開始するには、Workflowsページの右上にある[デプロイ]ボタンをクリックしてください。
デプロイオプションを選択するウィンドウが表示されるので、「イメージで実行(ローカル)」タブを選択します。

イメージで実行(ローカル)
まず、デバイスにDockerがインストールされていることを確認します。Dockerをまだインストールしていない場合は、公式のDockerインストール手順を参照して開始してください。
次に、デバイスに Inference をインストールし、Inference サーバーを起動します。


pip install inference-cli && inference server start
									
次に、新しいPythonファイルを作成し、Workflows Webアプリケーションからコードを追加します。コードは次のようになります。


from inference_sdk import InferenceHTTPClient

client = InferenceHTTPClient(
    api_url="http://localhost:9001", # use local inference server
    api_key="YOUR_API_KEY"
)

result = client.run_workflow(
    workspace_name="YOUR_WORKSPACE",
    workflow_id="YOUR_WORKFLOW_ID",
    images={
        "image": "YOUR_IMAGE.jpg"
    }
)
									
上記のコードを更新して、プロジェクトIDとAPIキーを使用します。

プロジェクトID 確認する方法をご確認ください。
APIキーを見つける方法を学ぶ
このガイドでは、テスト セットの次の画像でモデルを試してみましょう。

イメージで実行(ローカル)
ワークフローは以下を返します。


[
  {
    "qwen_vl": {
      "What is in the image?": "{\"route\": \"W611-KB-718\",\"pallet_number\": \"4\",\"delivery_date\": \"6/12/2024\",\"load\": \"4\",\"dock\": \"D48\",\"shipment_id\": \"J826491437\",\"destination\": \"3373 Monroe Flat Suite 852, Ashleyhaven, MO 87156\",\"asn_number\": \"355699301\",\"salesman\": \"RONALD JAMES\",\"products\": [{\"description\": \"141421 - CASE OF LAMINATED SHEETERS\",\"cases\": \"4\",\"sales_units\": \"16\",\"layers\": \"5\"},{\"description\": \"357951 - 6PK OF HAND SANITIZER\",\"cases\": \"32\",\"sales_units\": \"64\",\"layers\": \"4\"},{\"description\": \"893975 - BOX OF LABEL SHEETS\",\"cases\": \"32\",\"sales_units\": \"64\",\"layers\": \"1\"},{\"description\": \"495867 - CASE OF SCRAPERS\",\"cases\": \"64\",\"sales_units\": \"64\",\"layers\": \"1\"},{\"description\": \"246810 - ROLL OF MASKING TAPE\",\"cases\": \"16\",\"sales_units\": \"4\",\"layers\": \"3\"},{\"description\": \"395847 - CASE OF FLOOR POLISHERS\",\"cases\": \"32\",\"sales_units\": \"16\",\"layers\": \"3\"},{\"total_cases\": \"180\",\"total_units\": \"228\",\"total_layers\": \"17\",\"printed_date\": \"11/29/2024 17:03\",\"page_number\": \"81\"}"
    }
  }
]
									
JSON文字列として解析すると、結果は次のようになります。


{
  "route": "W611-KB-718",
  "pallet_number": "4",
  "delivery_date": "6/12/2024",
  "load": "4",
  "dock": "D48",
  "shipment_id": "J826491437",
  "destination": "3373 Monroe Flat Suite 852, Ashleyhaven, MO 87156",
  "asn_number": "355699301",
  "salesman": "RONALD JAMES",
  "products": [
    {
      "description": "141421 - CASE OF LAMINATED SHEETERS",
      "cases": "4",
      "sales_units": "16",
      "layers": "5"
    },
    {
      "description": "357951 - 6PK OF HAND SANITIZER",
      "cases": "32",
      "sales_units": "64",
      "layers": "4"
    },
    {
      "description": "893975 - BOX OF LABEL SHEETS",
      "cases": "32",
      "sales_units": "64",
      "layers": "1"
    },
    {
      "description": "495867 - CASE OF SCRAPERS",
      "cases": "64",
      "sales_units": "64",
      "layers": "1"
    },
    {
      "description": "246810 - ROLL OF MASKING TAPE",
      "cases": "16",
      "sales_units": "4",
      "layers": "3"
    },
    {
      "description": "395847 - CASE OF FLOOR POLISHERS",
      "cases": "32",
      "sales_units": "16",
      "layers": "3"
    },
    {
      "total_cases": "180",
      "total_units": "228",
      "total_layers": "17",
      "printed_date": "11/29/2024 17:03",
      "page_number": "81"
    }
  ]
}
									
Qwen VLは以下を正常に特定しました。

1.マニフェスト上の製品
2.ルート番号
3.パレット番号
4.配送日
5.配送 ID
6.その他
まとめ
これで、Roboflowを活用してQwen2.5-VLモデルを微調整し、デプロイできるようになりました。
このガイドでは、シッピングマニフェストを読み取るためのマルチモーダルQwen2.5-VLモデルについて、データの準備から微調整、実行までの手順を紹介しました。

今回ご紹介した手順は、構造化データの抽出、画像キャプション生成、視覚的な質問応答など、VLM(ビジョン言語モデル)が対応できるさまざまな課題に応用できます。

アノテーション・AI学習データ(教師データ)作成・AIモデル構築ツール「roboflow」

お問い合せ

お問い合せはこちら

AI活用の機械学習を自動化するツール「roboflow」についてのご質問・ご相談はこちら

お電話でのお問い合せも受け付けています。お気軽にご相談ください。

03-5821-9761