Skip to content
Tutoriels5 min de lecture

Classification d'images avec Potato

Configurez la classification d'images dans Potato en affichant les images avec instance_display et en recueillant les étiquettes avec des schémas radio et multiselect, contrôles qualité compris.

Potato Team

Tôt ou tard, la plupart des projets de vision par ordinateur ont besoin d'un grand nombre d'images étiquetées, et quelqu'un doit faire cet étiquetage. Que vous triiez des photos de produits, filtriez du contenu ou classiez des images médicales, Potato prend en charge l'interface pour que vous puissiez vous concentrer sur les étiquettes. Ce tutoriel couvre les configurations courantes : classification mono-étiquette et multi-étiquettes, structures de catégories imbriquées, et les contrôles de qualité qui gardent les tâches sur images fiables.

Afficher l'image, puis poser la question

Dans Potato, classer et dessiner sont deux tâches différentes, et les confondre est l'erreur classique du débutant. instance_display affiche l'image à l'écran. annotation_schemes pose la question. Le type image_annotation sert à dessiner des boîtes et des masques sur une image, donc une tâche de classification ne l'utilise pas du tout.

yaml
annotation_task_name: "Product Image Classification"
task_dir: "."
 
data_files:
  - data/products.json
 
item_properties:
  id_key: product_id
  text_key: image_url
 
instance_display:
  fields:
    - key: image_url
      type: image
      label: "Product image"
      display_options:
        max_width: 600
        zoomable: true
 
annotation_schemes:
  - annotation_type: radio
    name: category
    description: "What type of product is shown?"
    labels:
      - Electronics
      - Clothing
      - Home & Garden
      - Sports & Outdoors
      - Books & Media
      - Other
    sequential_key_binding: true
 
output_annotation_dir: annotation_output/
export_annotation_format: jsonl

sequential_key_binding associe les six étiquettes aux touches 1 à 6. Sur une tâche qui se résume à un coup d'œil et un clic, le clavier fait l'essentiel du débit.

L'interface affiche l'image avec les étiquettes de catégorie en dessous :

Interface de classification d'images avec étiquettes de catégorie et raccourcis clavierL'interface d'annotation d'images affichant une image de produit avec des étiquettes de classification et des raccourcis clavier

Format des données

Créez data/products.json :

json
{"product_id": "P001", "image_url": "/images/products/laptop.jpg"}
{"product_id": "P002", "image_url": "/images/products/tshirt.jpg"}
{"product_id": "P003", "image_url": "/images/products/garden_tools.jpg"}
{"product_id": "P004", "image_url": "https://example.com/images/basketball.jpg"}

Les images peuvent être des chemins locaux sous le répertoire de la tâche ou des URL absolues. text_key désigne le champ qui contient le chemin, c'est-à-dire le champ que Potato transmet à l'affichage.

Classification multi-étiquettes

Lorsqu'une image appartient à plusieurs catégories à la fois, utilisez multiselect :

yaml
annotation_schemes:
  - annotation_type: multiselect
    name: attributes
    description: "Select all attributes that apply to this image"
    labels:
      - Contains people
      - Outdoor scene
      - Indoor scene
      - Contains text
      - Product photo
      - Lifestyle photo
      - Close-up shot
      - Wide angle

Catégories imbriquées

Potato n'a pas de type d'étiquette imbriquée pour les boutons radio, donc une taxonomie à deux niveaux correspond à deux schémas. Chaque schéma a besoin de ses propres labels, et une liste de sous-catégories doit couvrir tous les parents :

yaml
annotation_schemes:
  - annotation_type: radio
    name: main_category
    description: "Primary category"
    labels:
      - Apparel
      - Electronics
      - Home
 
  - annotation_type: radio
    name: subcategory
    description: "Subcategory within the primary category"
    labels:
      - Tops
      - Bottoms
      - Footwear
      - Phones & Tablets
      - Computers
      - Audio
      - Furniture
      - Kitchen
      - Decor

Si la seconde liste devient longue, hierarchical_multiselect la regroupe en un seul widget au lieu de deux schémas.

Contrôles de qualité en plus de la classification

yaml
annotation_schemes:
  - annotation_type: radio
    name: category
    description: "Product category"
    labels: [Electronics, Clothing, Home, Other]
 
  - annotation_type: radio
    name: image_quality
    description: "Is this image suitable for the product catalog?"
    labels:
      - name: Approved
        tooltip: "Clear, well-lit, product is visible"
      - name: Needs review
        tooltip: "Minor issues but potentially usable"
      - name: Rejected
        tooltip: "Poor quality, wrong product, or inappropriate"
 
  - annotation_type: multiselect
    name: quality_issues
    description: "If not approved, what issues are present?"
    labels:
      - Blurry or out of focus
      - Poor lighting
      - Wrong product shown
      - Watermark or text overlay
      - Inappropriate content
      - Multiple products in frame

Les consignes propres à chaque étiquette vont dans tooltip, qui est la clé que lisent les étiquettes. Si vous les écrivez sous forme de description: sur une étiquette, le texte n'apparaît nulle part où l'annotateur peut le voir.

Exemple complet

yaml
annotation_task_name: "E-commerce Image Classification"
task_dir: "."
 
data_files:
  - data/images.json
 
item_properties:
  id_key: sku
  text_key: image_path
 
instance_display:
  fields:
    - key: image_path
      type: image
      label: "Product image"
      display_options:
        max_width: 700
        zoomable: true
 
annotation_schemes:
  - annotation_type: radio
    name: primary_category
    description: "Select the main product category"
    labels:
      - Electronics
      - Clothing & Accessories
      - Home & Living
      - Beauty & Personal Care
      - Sports & Fitness
      - Toys & Games
      - Other
    sequential_key_binding: true
 
  - annotation_type: multiselect
    name: image_attributes
    description: "Select all that apply"
    labels:
      - White background
      - Lifestyle shot
      - Multiple angles
      - Model wearing or using
      - Size reference included
      - Brand visible
    label_requirement:
      required: false
 
  - annotation_type: radio
    name: listing_ready
    description: "Is this image ready for the product listing?"
    labels:
      - Ready to publish
      - Needs editing
      - Reshoot required
    label_requirement:
      required: true
 
annotation_instructions: |
  ## Image Classification Guidelines
 
  ### Category selection
  Choose the most specific category that fits the product.
 
  ### Image quality
  - Ready to publish: clear, professional, meets standards
  - Needs editing: good photo that needs cropping or color correction
  - Reshoot required: fundamentally unsuitable
 
output_annotation_dir: annotation_output/
export_annotation_format: jsonl

Conseils pour l'annotation d'images

La couleur et la luminosité varient d'un écran à l'autre. Pour tout ce qui en dépend, assurez-vous que les annotateurs travaillent sur des écrans raisonnablement calibrés. Mettez des images d'exemple dans vos consignes plutôt que de décrire les catégories avec des mots ; une image tranche plus de désaccords qu'un paragraphe. Précisez par écrit quoi faire des images ambiguës, car il y aura des images ambiguës. Et de temps en temps, faites étiqueter le même lot par toute l'équipe et comparez les résultats, pour repérer la dérive tôt.

Pour les détails d'implémentation, consultez la documentation sur l'annotation d'images.

Prochaines étapes


Voir la documentation complète sur l'annotation d'images sur Annotation d'images.