Skip to content
Tutorials5 Min. Lesezeit

Bildklassifikation mit Potato

So richtest du Bildklassifikation in Potato ein: Bilder mit instance_display anzeigen, Labels mit radio- und multiselect-Schemata erfassen, Qualitätsprüfungen inklusive.

Potato Team

Fast jedes Computer-Vision-Projekt braucht irgendwann einen Stapel gelabelter Bilder, und jemand muss das Labeln übernehmen. Ob du Produktfotos sortierst, Inhalte prüfst oder medizinische Aufnahmen klassifizierst, Potato kümmert sich um die Oberfläche, damit du dich auf die Labels konzentrieren kannst. Dieses Tutorial behandelt die gängigen Varianten: Klassifikation mit einem Label und mit mehreren Labels, verschachtelte Kategorien und die Qualitätsprüfungen, die eine Bildaufgabe ehrlich halten.

Erst das Bild zeigen, dann die Frage stellen

Klassifizieren und Zeichnen sind in Potato zwei verschiedene Aufgaben, und sie zu verwechseln ist der typische erste Fehler. instance_display bringt das Bild auf den Bildschirm. annotation_schemes stellt die Frage. Der Typ image_annotation dient zum Zeichnen von Boxen und Masken auf einem Bild, eine Klassifikationsaufgabe verwendet ihn also überhaupt nicht.

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 legt die sechs Labels auf die Tasten 1 bis 6. Bei einer Aufgabe, die aus einem Blick und einem Klick besteht, macht die Tastatur den Großteil des Durchsatzes aus.

Die Oberfläche zeigt das Bild mit den Kategorielabels darunter:

Oberfläche zur Bildklassifikation mit Kategorielabels und TastenkürzelnDie Oberfläche zur Bildannotation mit einem Produktfoto, Klassifikationslabels und Tastenkürzeln

Datenformat

Lege data/products.json an:

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

Bilder können lokale Pfade unterhalb des Aufgabenverzeichnisses oder absolute URLs sein. text_key zeigt auf das Feld mit dem Pfad, also auf das Feld, das Potato an die Anzeige übergibt.

Klassifikation mit mehreren Labels

Wenn ein Bild zu mehreren Kategorien gleichzeitig gehört, verwende 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

Verschachtelte Kategorien

Potato hat keinen verschachtelten Labeltyp für Radiobuttons, daher besteht eine zweistufige Taxonomie aus zwei Schemata. Jedes Schema braucht eigene labels, und eine Liste von Unterkategorien muss alle Oberkategorien abdecken:

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

Wird die zweite Liste lang, fasst hierarchical_multiselect sie zu einem einzigen Widget zusammen, statt zwei Schemata zu verwenden.

Qualitätsprüfungen neben der Klassifikation

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

Hinweise pro Label gehören in tooltip, denn diesen Schlüssel lesen Labels. Schreibst du sie als description: an ein Label, landet der Text nirgends, wo die Annotierenden ihn sehen können.

Vollständiges Beispiel

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

Hinweise zur Bildannotation

Farben und Helligkeit fallen von Monitor zu Monitor unterschiedlich aus. Wo das eine Rolle spielt, achte darauf, dass die Annotierenden an halbwegs kalibrierten Bildschirmen sitzen. Pack Beispielbilder in deine Richtlinien, statt Kategorien in Worten zu beschreiben; ein Bild klärt mehr Streitfälle als ein Absatz. Schreib auf, was mit den uneindeutigen Bildern passieren soll, denn uneindeutige Bilder wird es geben. Und lass das Team hin und wieder denselben Stapel labeln und vergleiche die Ergebnisse, damit du ein Abdriften früh bemerkst.

Details zur Umsetzung stehen in der Dokumentation zur Bildannotation.

Nächste Schritte


Die vollständige Dokumentation zur Bildannotation findest du unter Bildannotation.