cahiers | Inférence | AutodistIll | collecter
AutoDistill utilise de grands modèles de fondation plus lents pour former de petits modèles supervisés plus rapides. En utilisant autodistill , vous pouvez passer des images non marquées à l'inférence sur un modèle personnalisé fonctionnant au bord sans intervention humaine entre les deux.
Conseil
Vous pouvez utiliser AutoDistill sur votre propre matériel ou utiliser la version hébergée Roboflow d'AutoDistill pour étiqueter les images dans le cloud.
Actuellement, autodistill prend en charge les tâches de vision comme la détection d'objets et la segmentation des instances, mais à l'avenir, elle peut être élargie pour soutenir les modèles de langage (et d'autres).
| Tutoriel | Docs | Modèles pris en charge | Contribuer |
|---|
Voici des exemples de prédictions d'un modèle cible détectant des bouteilles de lait et des bouteilles après avoir été formée sur un ensemble de données marqué automatiquement à l'aide d'AutoDistill (voir la vidéo YouTube AutoDistill pour une procédure pas à pas complète):
Pour utiliser autodistill , vous saisissez des données non marquées dans un modèle de base qui utilise une ontologie pour étiqueter un ensemble de données qui est utilisé pour former un modèle cible qui publie un modèle distillé ajusté pour effectuer une tâche spécifique.
AutoDistill définit plusieurs primitives de base:
autodistill doit correspondre à leur compatibilité. La détection d'objets et la segmentation des instances sont actuellement prises en charge via la tâche detection . Le support classification sera bientôt ajouté.CaptionOntology qui invite un modèle de base avec des légendes de texte et les mappe aux noms de classe. D'autres ontologies peuvent, par exemple, utiliser un vecteur de clip ou des images d'exemples au lieu d'une légende de texte.autodistill ; C'est un ensemble de poids affinés pour votre tâche qui peuvent être déployés pour obtenir des prédictions. L'étiquetage humain est l'un des plus grands obstacles à une large adoption de la vision par ordinateur. Il peut prendre des milliers d'heures pour créer un ensemble de données adapté à la formation d'un modèle de production. Le processus de distillation pour la formation des modèles supervisés n'est pas nouveau, en fait, l'étiquetage humain traditionnel n'est qu'une autre forme de distillation d'un modèle de base extrêmement capable (le cerveau humain?).
Les modèles de fondation en savent beaucoup, mais pour la production, nous avons besoin de modèles qui en savent beaucoup.
Au fur et à mesure que les modèles de fondation s'améliorent de mieux en mieux, ils pourront de plus en plus augmenter ou remplacer les humains dans le processus d'étiquetage. Nous avons besoin d'outils pour la direction, l'utilisation et la comparaison de ces modèles. De plus, ces modèles de fondation sont grands, chers et souvent fermés derrière des API privées. Pour de nombreux cas d'utilisation de production, nous avons besoin de modèles qui peuvent fonctionner à moindre coût et en temps réel à la pointe.
Les modèles de base d'Autodistill peuvent déjà créer des ensembles de données pour de nombreux cas d'utilisation courants (et grâce à l'incitation créative et à quelques coups, nous pouvons étendre leur utilité à bien d'autres), mais ils ne sont pas encore parfaits. Il y a encore beaucoup de travail à faire; Ce n'est que le début et nous serions ravis de votre aide à tester et à élargir les capacités du système!
Autodistill est modulaire. Vous devrez installer le package autodistill (qui définit les interfaces pour les concepts ci-dessus) avec le modèle de base et les plugins de modèle cible (qui implémentent des modèles spécifiques).
En les emballant séparément en tant que plugins, les incompatibilités de dépendance et de licence sont minimisées et les nouveaux modèles peuvent être mis en œuvre et entretenus par n'importe qui.
Exemple:
pip install autodistill autodistill-grounded-sam autodistill-yolov8Vous pouvez également cloner le projet de GitHub pour le développement local:
git clone https://github.com/roboflow/autodistill
cd autodistill
pip install -e .Des modèles de base et cibles supplémentaires sont énumérés ci-dessous.
Voir le cahier de démonstration pour une introduction rapide à autodistill . Ce cahier marche dans la construction d'un modèle de détection de conteneurs de lait sans étiquetage.
Ci-dessous, nous avons condensé des parties clés du cahier pour une introduction rapide à autodistill .
Vous pouvez également exécuter AutoDistill dans une commande. Tout d'abord, installez autodistill :
pip install autodistillEnsuite, courez:
autodistill images --base= " grounding_dino " --target= " yolov8 " --ontology ' {"prompt": "label"} ' --output= " ./dataset " Cette commande étiquetera toutes les images dans un répertoire appelé images avec la mise à la terre Dino et utilisera les images étiquetées pour former un modèle Yolov8. La mise à la terre Dino étiquetera toutes les images avec "l'invite" et enregistrera l'étiquette en "étiquette". Vous pouvez spécifier autant d'invites et d'étiquettes que vous le souhaitez. L'ensemble de données résultant sera enregistré dans un dossier appelé dataset .
Pour cet exemple, nous allons montrer comment distiller le sol au sol en un petit modèle YOLOV8 en utilisant AutodistIll-SAM et AutoDistill-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/" ) Pour tracer les annotations pour une seule image à l'aide autodistill , vous pouvez utiliser le code ci-dessous. Ce code est utile pour visualiser les annotations générées par votre modèle de base (c.-à-d. FormedSam) et les résultats de votre modèle cible (c'est-à-dire 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 )) Notre objectif est que autodistill soutient en utilisant tous les modèles de fondation comme modèles de base et la plupart des modèles supervisés SOTA comme modèles cibles. Nous nous sommes d'abord concentrés sur les tâches de détection et de segmentation des objets, mais prévoyons de lancer bientôt le support de classification! À l'avenir, nous espérons autodistill sera également utilisé pour des modèles au-delà de la vision par ordinateur.
| base / cible | Yolov8 | Yolo-nas | Yolov5 | Détachement | Yolov6 | Yolov7 | Mt-yolov6 |
|---|---|---|---|---|---|---|---|
| Sam 2 ancré | ✅ | ✅ | ✅ | ✅ | ? | ||
| Décorer | ✅ | ✅ | ✅ | ✅ | ? | ||
| Coiffeur | ✅ | ✅ | ✅ | ✅ | ? | ||
| Groundingdino | ✅ | ✅ | ✅ | ✅ | ? | ||
| Hibou | ✅ | ✅ | ✅ | ✅ | ? | ||
| Sam-clip | ✅ | ✅ | ✅ | ✅ | ? | ||
| Llava-1.5 | ✅ | ✅ | ✅ | ✅ | ? | ||
| Kosmos-2 | ✅ | ✅ | ✅ | ✅ | ? | ||
| Owlv2 | ✅ | ✅ | ✅ | ✅ | ? | ||
| Modèles d'univers Roboflow (modèles 50k + pré-formés) | ✅ | ✅ | ✅ | ✅ | ? | ||
| Codet | ✅ | ✅ | ✅ | ✅ | ? | ||
| Vision personnalisée Azure | ✅ | ✅ | ✅ | ✅ | ? | ||
| REKOGNITION AWS | ✅ | ✅ | ✅ | ✅ | ? | ||
| Google Vision | ✅ | ✅ | ✅ | ✅ | ? |
| base / cible | Yolov8 | Yolo-nas | Yolov5 | Yolov7 | SegFormer |
|---|---|---|---|---|---|
| Coiffeur | ✅ | ? | ? | ||
| Sam-clip | ✅ | ? | ? | ||
| Seggpt | ✅ | ? | ? | ||
| Jeûne | ? | ? | ? |
| base / cible | Vitonner | Yolov8 | Yolov5 |
|---|---|---|---|
| AGRAFE | ✅ | ✅ | ? |
| Métaclip | ✅ | ✅ | ? |
| Dinov2 | ✅ | ✅ | ? |
| SPOT | ✅ | ✅ | ? |
| Même si | ✅ | ✅ | ? |
| Rapide | ✅ | ✅ | ? |
| Altclip | ✅ | ✅ | ? |
| Évacler | ✅ | ✅ | ? |
| Gémeaux | ✅ | ✅ | ? |
| Fuyu | ? | ? | ? |
| Flaming ouvert | ? | ? | ? |
| Gpt-4 | |||
| Palm-2 |
Vous pouvez éventuellement déployer certains modèles cibles formés à l'aide d'AutoDistill sur Roboflow. Le déploiement sur Roboflow vous permet d'utiliser une gamme de SDK concises pour utiliser votre modèle sur le bord, de Roboflow.js pour le déploiement Web vers les appareils Nvidia Jetson.
Les modèles cibles AutoDistill suivants sont pris en charge par Roboflow pour le déploiement:
| nom du modèle | Soutenu? |
|---|---|
| Détection d'objet Yolov8 | ✅ |
| Segmentation d'instance Yolov8 | ✅ |
| Détection d'objet Yolov5 | ✅ |
| Segmentation d'instance Yolov5 | ✅ |
| Classification Yolov8 |
AutoDistill: Train Yolov8 avec zéro annotations
En plus d'ajouter de nouveaux modèles, il y a plusieurs domaines que nous prévoyons d'explorer avec autodistill , notamment:
Nous aimons votre contribution! Veuillez consulter notre guide de contribution pour commencer. Merci à tous nos contributeurs!
Le package autodistill est sous licence sous APACHE 2.0. Chaque plugin de base ou de modèle cible peut utiliser sa propre licence correspondant à la licence de son modèle sous-jacent. Veuillez vous référer à la licence dans chaque récompense de plugin pour plus d'informations.
PytorchStreamReader failed reading zip archive: failed finding central directory ? Cette erreur est causée lorsque Pytorch ne peut pas charger les poids du modèle pour un modèle. Allez dans le répertoire ~/.cache/autodistill et supprimez le dossier associé au modèle que vous essayez de charger. Ensuite, exécutez à nouveau votre code. Les poids du modèle seront téléchargés à partir de zéro. Laissez le processus d'installation sans interruption.
| Projet | Description |
|---|---|
| surveillance | Utilitaires à usage général à utiliser dans les projets de vision par ordinateur, du filtrage des prédictions et de l'affichage au suivi des objets en passant par l'évaluation du modèle. |
| AutoDistill (ce projet) | Étiquetez automatiquement les images à utiliser dans la formation des modèles de vision informatique. |
| Inférence | Un serveur d'inférence facile à utiliser et prêt pour la production pour la vision par ordinateur prenant en charge le déploiement de nombreuses architectures de modèles populaires et modèles affinés. |
| Cahiers | Tutoriels pour les tâches de vision par ordinateur, de la formation de modèles de pointe pour suivre les objets au comptage d'objets dans une zone. |
| Collecter | COLLECTE DE DONNÉES Intelligent automatisée alimentée par Clip. |