ノートブック|推論| autodistill |集める
Autodistillは、大きくて遅い基礎モデルを使用して、小さな、より高速な監視モデルを訓練します。 autodistillを使用すると、非標識画像から推論に移動することができます。
ヒント
独自のハードウェアでAutoDistillを使用するか、AutoDistillのRoboflowホストバージョンを使用して、クラウド内の画像にラベルを付けることができます。
現在、 autodistillオブジェクトの検出やインスタンスセグメンテーションなどのビジョンタスクをサポートしていますが、将来的には言語(およびその他の)モデルをサポートするために拡張できます。
| チュートリアル | ドキュメント | サポートされているモデル | 貢献する |
|---|
AutoDistillを使用してオートラベルデータセットで訓練された後に牛乳ボトルとボトルキャップを検出したターゲットモデルの予測の例を示します(完全なウォークスルーについては、AutoDistill YouTubeビデオを参照):
autodistill使用するには、オントロジーを使用して、特定のタスクを実行するために微調整された蒸留モデルを出力するターゲットモデルをトレーニングするために使用されるデータセットにラベルを付けるベースモデルに無効なデータを入力します。
Autodistillはいくつかの基本的なプリミティブを定義します。
autodistillパイプラインの各コンポーネント(ベースモデル、オントロジー、およびターゲットモデル)のタスクは、それらが互いに互換性があるように一致する必要があります。現在、オブジェクトの検出とインスタンスセグメンテーションは、 detectionタスクを通じてサポートされています。 classificationサポートはまもなく追加されます。CaptionOntologyです。たとえば、他のオントロジーは、テキストキャプションの代わりにクリップベクトルまたはサンプル画像を使用する場合があります。autodistillプロセスの最終出力です。これは、予測を取得するために展開できるタスクのために微調整された一連の重みです。 人間のラベル付けは、コンピュータービジョンの幅広い採用に対する最大の障壁の1つです。生産モデルのトレーニングに適したデータセットを作成するのに数千時間かかる場合があります。監視されたモデルをトレーニングするための蒸留のプロセスは新しいものではありません。実際、従来の人間のラベル付けは、非常に有能な基本モデル(人間の脳?)からの蒸留の別の形式にすぎません。
ファンデーションモデルは多くのことをよく知っていますが、生産には少し知っているモデルが必要です。
基礎モデルがますます良くなるにつれて、彼らはラベル付けプロセスで人間を増やしたり置き換えることができるようになります。これらのモデルを操縦、利用、比較するためのツールが必要です。さらに、これらの基礎モデルは大きく、高価であり、多くの場合、プライベートAPIの後ろにゲートされています。多くの生産使用ケースでは、エッジで安くかつリアルタイムで実行できるモデルが必要です。
AutoDistillのベースモデルは、多くの一般的なユースケースのデータセットを既に作成できます(そして、創造的なプロンプトと少数のショットを通じて、ユーティリティをさらに多くに拡張できますが、まだ完璧ではありません。やるべきことはまだたくさんあります。これはほんの始まりに過ぎず、システムの機能をテストして拡大するのが大好きです!
AutoDistillはモジュラーです。ベースモデルおよびターゲットモデルプラグイン(特定のモデルを実装)とともに、 autodistillパッケージ(上記の概念のインターフェイスを定義する)をインストールする必要があります。
これらをプラグインとして個別にパッケージ化することにより、依存関係とライセンスの非互換性が最小限に抑えられ、誰でも新しいモデルを実装および維持できます。
例:
pip install autodistill autodistill-grounded-sam autodistill-yolov8また、ローカル開発のためにGitHubからプロジェクトをクローンすることもできます。
git clone https://github.com/roboflow/autodistill
cd autodistill
pip install -e .追加のベースモデルとターゲットモデルを以下に列挙します。
autodistillの簡単な紹介については、デモノートブックを参照してください。このノートブックは、ラベル付けのない牛乳容器検出モデルの構築を進めます。
以下に、 autodistillをすばやく紹介するために、ノートブックの重要な部分を凝縮しています。
AutoDistillを1つのコマンドで実行することもできます。まず、 autodistillをインストールします。
pip install autodistill次に、実行:
autodistill images --base= " grounding_dino " --target= " yolov8 " --ontology ' {"prompt": "label"} ' --output= " ./dataset "このコマンドは、グラウンドディノを備えたimagesと呼ばれるディレクトリ内のすべての画像にラベルを付け、ラベル付き画像を使用してYolov8モデルをトレーニングします。グラウンドディノは、すべての画像に「プロンプト」でラベル付けされ、ラベルを「ラベル」として保存します。必要なだけ多くのプロンプトとラベルを指定できます。結果のデータセットは、 datasetと呼ばれるフォルダーに保存されます。
この例では、Autodistill-Grounded-SamとAutodistill-Yolov8を使用して、接地型を小さなYolov8モデルに蒸留する方法を示します。
pip install autodistill autodistill-grounded-sam autodistill-yolov8
from autodistill_grounded_sam import GroundedSAM
from autodistill . detection import CaptionOntology
from autodistill_yolov8 import YOLOv8
# define an ontology to map class names to our GroundingDINO prompt
# the ontology dictionary has the format {caption: class}
# where caption is the prompt sent to the base model, and class is the label that will
# be saved for that caption in the generated annotations
base_model = GroundedSAM ( ontology = CaptionOntology ({ "shipping container" : "container" }))
# label all images in a folder called `context_images`
base_model . label (
input_folder = "./images" ,
output_folder = "./dataset"
)
target_model = YOLOv8 ( "yolov8n.pt" )
target_model . train ( "./dataset/data.yaml" , epochs = 200 )
# run inference on the new model
pred = target_model . predict ( "./dataset/valid/your-image.jpg" , confidence = 0.5 )
print ( pred )
# optional: upload your model to Roboflow for deployment
from roboflow import Roboflow
rf = Roboflow ( api_key = "API_KEY" )
project = rf . workspace (). project ( "PROJECT_ID" )
project . version ( DATASET_VERSION ). deploy ( model_type = "yolov8" , model_path = f"./runs/detect/train/" )autodistillを使用して単一の画像の注釈をプロットするには、以下のコードを使用できます。このコードは、基本モデル(つまり接地されたもの)によって生成された注釈とターゲットモデル(つまりYolov8)の結果を視覚化するのに役立ちます。
import supervision as sv
import cv2
img_path = "./images/your-image.jpeg"
image = cv2 . imread ( img_path )
detections = base_model . predict ( img_path )
# annotate image with detections
box_annotator = sv . BoxAnnotator ()
label_annotator = sv . LabelAnnotator ()
labels = [
f" { base_model . ontology . classes ()[ class_id ] } { confidence :0.2f } "
for _ , _ , confidence , class_id , _ , _ in detections
]
annotated_frame = box_annotator . annotate (
scene = image . copy (), detections = detections
)
annotated_frame = label_annotator . annotate (
scene = annotated_frame , detections = detections , labels = labels
)
sv . plot_image ( annotated_frame , ( 16 , 16 ))私たちの目標は、 autodistillベースモデルとしてすべての基礎モデルを使用し、ほとんどのSOTA監視モデルをターゲットモデルとして使用することをサポートすることです。最初にオブジェクトの検出とセグメンテーションタスクに焦点を当てましたが、すぐに分類サポートを起動する予定です!将来、 autodistillコンピュータービジョンを超えたモデルにも使用されることを願っています。
| ベース /ターゲット | Yolov8 | ヨロナス | Yolov5 | detr | Yolov6 | Yolov7 | mt-yolov6 |
|---|---|---|---|---|---|---|---|
| 接地されたサム2 | ✅ | ✅ | ✅ | ✅ | ? | ||
| 拘束 | ✅ | ✅ | ✅ | ✅ | ? | ||
| グラウンドサム | ✅ | ✅ | ✅ | ✅ | ? | ||
| GroundingDino | ✅ | ✅ | ✅ | ✅ | ? | ||
| フクロウのvit | ✅ | ✅ | ✅ | ✅ | ? | ||
| サムクリップ | ✅ | ✅ | ✅ | ✅ | ? | ||
| llava-1.5 | ✅ | ✅ | ✅ | ✅ | ? | ||
| コスモス-2 | ✅ | ✅ | ✅ | ✅ | ? | ||
| owlv2 | ✅ | ✅ | ✅ | ✅ | ? | ||
| Roboflow Universeモデル(50k+事前訓練モデル) | ✅ | ✅ | ✅ | ✅ | ? | ||
| コード | ✅ | ✅ | ✅ | ✅ | ? | ||
| Azureカスタムビジョン | ✅ | ✅ | ✅ | ✅ | ? | ||
| aws rekognition | ✅ | ✅ | ✅ | ✅ | ? | ||
| Google Vision | ✅ | ✅ | ✅ | ✅ | ? |
| ベース /ターゲット | Yolov8 | ヨロナス | Yolov5 | Yolov7 | セグフォーマー |
|---|---|---|---|---|---|
| グラウンドサム | ✅ | ? | ? | ||
| サムクリップ | ✅ | ? | ? | ||
| seggpt | ✅ | ? | ? | ||
| fastsam | ? | ? | ? |
| ベース /ターゲット | vit | Yolov8 | Yolov5 |
|---|---|---|---|
| クリップ | ✅ | ✅ | ? |
| メタリップ | ✅ | ✅ | ? |
| dinov2 | ✅ | ✅ | ? |
| ブリップ | ✅ | ✅ | ? |
| アルベフ | ✅ | ✅ | ? |
| fastVit | ✅ | ✅ | ? |
| altclip | ✅ | ✅ | ? |
| Evaclip | ✅ | ✅ | ? |
| ジェミニ | ✅ | ✅ | ? |
| fuyu | ? | ? | ? |
| フラミンゴを開きます | ? | ? | ? |
| GPT-4 | |||
| パーム-2 |
オプションで、RoboflowでAutoDistillを使用してトレーニングされたいくつかのターゲットモデルを展開できます。 Roboflowで展開することで、Web展開用のRoboflow.jsからNvidia Jetsonデバイスまで、エッジでモデルを使用するためにさまざまな簡潔なSDKを使用できます。
次のAutoDistillターゲットモデルは、展開のためにRoboflowによってサポートされています。
| モデル名 | サポートされていますか? |
|---|---|
| Yolov8オブジェクトの検出 | ✅ |
| Yolov8インスタンスセグメンテーション | ✅ |
| Yolov5オブジェクトの検出 | ✅ |
| Yolov5インスタンスセグメンテーション | ✅ |
| Yolov8分類 |
AutoDistill:Zero AnnotationsでYolov8を訓練します
新しいモデルを追加することとは別に、以下を含むautodistillで探索する予定の領域がいくつかあります。
私たちはあなたの入力が大好きです!開始するための寄稿ガイドをご覧ください。すべての貢献者に感謝します!
autodistillパッケージは、Apache 2.0の下でライセンスされています。各ベースまたはターゲットモデルプラグインは、基礎となるモデルのライセンスに対応する独自のライセンスを使用できます。詳細については、各プラグインレポンのライセンスを参照してください。
PytorchStreamReader failed reading zip archive: failed finding central directory ?このエラーは、Pytorchがモデルにモデルの重みをロードできない場合に発生します。 ~/.cache/autodistillディレクトリに移動し、ロードしようとしているモデルに関連付けられたフォルダーを削除します。次に、もう一度コードを実行します。モデルの重みはゼロからダウンロードされます。インストールプロセスを途切れないままにします。
| プロジェクト | 説明 |
|---|---|
| 監督 | コンピュータービジョンプロジェクトで使用する汎用ユーティリティ、予測フィルタリングとディスプレイからオブジェクト追跡、モデル評価まで。 |
| Autodistill(このプロジェクト) | コンピュータービジョンモデルのトレーニングで使用するために画像を自動的にラベル付けします。 |
| 推論 | 多くの一般的なモデルアーキテクチャと微調整されたモデルの展開をサポートするコンピュータービジョンのための使いやすい制作可能な推論サーバー。 |
| ノートブック | 最先端のモデルのトレーニングからオブジェクトの追跡、ゾーン内のオブジェクトのカウントまで、コンピュータービジョンタスクのチュートリアル。 |
| 集める | 自動化されたインテリジェントなデータ収集は、クリップを搭載しています。 |