Skip to content
Tutorial5 min di lettura

Classificazione di immagini con Potato

Imposta la classificazione di immagini in Potato mostrando le immagini con instance_display e raccogliendo le etichette con schemi radio e multiselect, controlli di qualità inclusi.

Potato Team

Prima o poi quasi tutti i progetti di computer vision hanno bisogno di un mucchio di immagini etichettate, e qualcuno deve etichettarle. Che tu stia ordinando foto di prodotti, filtrando contenuti o classificando immagini mediche, Potato si occupa dell'interfaccia e tu puoi concentrarti sulle etichette. Questo tutorial copre le configurazioni più comuni: classificazione a etichetta singola e multipla, strutture di categorie annidate e i controlli di qualità che tengono in riga i task su immagini.

Prima mostrare l'immagine, poi fare la domanda

In Potato classificare e disegnare sono lavori diversi, e confonderli è il primo errore tipico. instance_display mette l'immagine sullo schermo. annotation_schemes pone la domanda. Il tipo image_annotation serve a disegnare box e maschere su un'immagine, quindi un task di classificazione non lo usa affatto.

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 assegna alle sei etichette i tasti da 1 a 6. In un task che si riduce a un'occhiata e un clic, la tastiera determina gran parte della velocità di lavoro.

L'interfaccia mostra l'immagine con le etichette di categoria sotto:

Interfaccia di classificazione di immagini con etichette di categoria e scorciatoie da tastieraL'interfaccia di annotazione di immagini con la foto di un prodotto, le etichette di classificazione e le scorciatoie da tastiera

Formato dei dati

Crea 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"}

Le immagini possono essere percorsi locali all'interno della directory del task oppure URL assoluti. text_key indica il campo che contiene il percorso, cioè il campo che Potato passa alla visualizzazione.

Classificazione multi-etichetta

Quando un'immagine appartiene a più categorie contemporaneamente, usa 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

Categorie annidate

Potato non ha un tipo di etichetta annidata per i pulsanti radio, quindi una tassonomia a due livelli si traduce in due schemi. Ogni schema ha bisogno delle proprie labels, e l'elenco delle sottocategorie deve coprire tutte le categorie madri:

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

Se il secondo elenco diventa lungo, hierarchical_multiselect lo raccoglie in un unico widget invece di due schemi.

Controlli di qualità insieme alla classificazione

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

Le indicazioni per ogni etichetta vanno in tooltip, che è la chiave letta dalle etichette. Se le scrivi come description: su un'etichetta, il testo non compare in nessun punto visibile all'annotatore.

Esempio completo

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

Consigli per l'annotazione di immagini

Colori e luminosità cambiano da monitor a monitor, quindi quando la cosa conta assicurati che gli annotatori lavorino su schermi ragionevolmente calibrati. Metti immagini di esempio nelle linee guida invece di descrivere le categorie a parole; una foto chiude più discussioni di un paragrafo. Scrivi che cosa fare con le immagini ambigue, perché di immagini ambigue ce ne saranno. E ogni tanto fai etichettare al gruppo lo stesso lotto e confronta i risultati, così le derive si notano presto.

Per i dettagli di implementazione, vedi la documentazione sull'annotazione di immagini.

Prossimi passi


Documentazione completa sull'annotazione di immagini su Annotazione di Immagini.