Creazione di set di etichette

Un set di etichette è l'insieme di etichette che vuoi che gli etichettatori umani utilizzino per etichettare le tue immagini. Ad esempio, se vuoi classificare le immagini in base al fatto che includano un cane o un gatto, crea un insieme di etichette con due etichette: "Cane" e "Gatto". In realtà, come indicato di seguito, potresti anche volere etichette per "Nessuno" e "Entrambi". Il set di etichette può includere fino a 100 etichette.

Un progetto può avere più insiemi di etichette, ciascuno utilizzato per una diversa richiesta Data Labeling Service. Puoi ottenere un elenco degli set di etichette disponibili ed eliminare quelli che non ti servono più. Per ulteriori informazioni, consulta la pagina della risorsa relativa agli set di specifiche di annotazione.

Progettare un buon set di etichette

Di seguito sono riportate alcune linee guida per creare un set di etichette di alta qualità.

  • Assegna a ogni etichetta un nome visualizzato significativo, ad esempio "cane", "gatto" o "edificio". Non utilizzare nomi astratti come "etichetta1" ed "etichetta2" o acronimi non familiari. Quanto più significativi sono i nomi delle etichette, più è facile per gli etichettatori umani applicarle con precisione e coerenza.
  • Assicurati che le etichette siano facilmente distinguibili l'una dall'altra. Per le attività di classificazione in cui viene applicata una singola etichetta a ogni elemento di dati, cerca di non utilizzare etichette i cui significati si sovrappongono.
  • Per le attività di classificazione, in genere è buona norma includere un'etichetta denominata"Altro " o"Nessuna" da utilizzare per i dati che non corrispondono alle altre etichette. Ad esempio, se le uniche etichette disponibili sono "cane" e "gatto", gli etichettatori dovranno etichettare ogni immagine con una di queste etichette. Il tuo modello personalizzato è in genere più solido se includi immagini diverse da cani o gatti nei suoi dati di addestramento.
  • Tieni presente che gli etichettatori sono più efficienti e precisi quando sono definite al massimo 20 etichette nell'insieme di etichette.

Crea una risorsa set di etichette

UI web

  1. Apri l'interfaccia utente di Data Labeling Service.

    La pagina Set di etichette mostra lo stato dei set di etichette creati in precedenza per il progetto corrente.

    Per aggiungere un insieme di etichette per un progetto diverso, seleziona il progetto dall'elenco a discesa in alto a destra nella barra del titolo.

  2. Fai clic sul pulsante Crea nella barra del titolo.

  3. Nella pagina Crea un insieme di etichette, inserisci un nome e una descrizione per l'insieme.

  4. Nella sezione Etichette, inserisci i nomi e le descrizioni di ogni etichetta che vuoi che venga applicata dagli etichettatori umani.

    Dopo aver inserito il nome e la descrizione di un'etichetta, fai clic su Aggiungi etichetta per aggiungere una riga per un'altra etichetta. Puoi aggiungere fino a 100 etichette.

  5. Fai clic su Crea per creare il set di specifiche di annotazione.

    Tornerai alla pagina dell'elenco Insiemi di etichette.

Riga di comando

Per creare la risorsa set di etichette, elenca tutte le etichette in formato JSON, quindi passale a Data Labeling Service.

L'esempio seguente crea un insieme di etichette denominato code_sample_label_set che contiene due etichette.

Salva il "name" del nuovo insieme di etichette (dalla risposta) per utilizzarlo con altre operazioni, ad esempio l'invio della richiesta di etichettatura.

curl -X POST \
     -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
     -H "Content-Type: application/json" \
     https://datalabeling.googleapis.com/v1beta1/projects/"${PROJECT_ID}"/annotationSpecSets \
     -d '{
       "annotationSpecSet": {
           "displayName": "code_sample_label_set",
           "description": "code sample general label set",
           "annotationSpecs": [
               {
                   "displayName": "dog",
                   "description": "label dog",
               },
               {
                   "displayName": "cat",
                   "description": "label cat",
               }
           ],
       },
    }'

Dovresti vedere un output simile al seguente:

{
  "name": "projects/data-labeling-codelab/annotationSpecSets/5c73db2d_0000_2f46_983d_001a114a5d7c",
  "displayName": "code_sample_label_set",
  "description": "code sample general label set",
  "annotationSpecs": [
    {
      "displayName": "dog",
      "description": "label dog"
    },
    {
      "displayName": "cat",
      "description": "label cat"
    }
  ]
}

Python

Prima di poter eseguire questo esempio di codice, devi installare le librerie client Python.

def create_annotation_spec_set(project_id):
    """Creates a data labeling annotation spec set for the given
    Google Cloud project.
    """
    from google.cloud import datalabeling_v1beta1 as datalabeling

    client = datalabeling.DataLabelingServiceClient()

    project_path = f"projects/{project_id}"

    annotation_spec_1 = datalabeling.AnnotationSpec(
        display_name="label_1", description="label_description_1"
    )

    annotation_spec_2 = datalabeling.AnnotationSpec(
        display_name="label_2", description="label_description_2"
    )

    annotation_spec_set = datalabeling.AnnotationSpecSet(
        display_name="YOUR_ANNOTATION_SPEC_SET_DISPLAY_NAME",
        description="YOUR_DESCRIPTION",
        annotation_specs=[annotation_spec_1, annotation_spec_2],
    )

    response = client.create_annotation_spec_set(
        request={"parent": project_path, "annotation_spec_set": annotation_spec_set}
    )

    # The format of the resource name:
    # project_id/{project_id}/annotationSpecSets/{annotationSpecSets_id}
    print(f"The annotation_spec_set resource name: {response.name}")
    print(f"Display name: {response.display_name}")
    print(f"Description: {response.description}")
    print("Annotation specs:")
    for annotation_spec in response.annotation_specs:
        print(f"\tDisplay name: {annotation_spec.display_name}")
        print(f"\tDescription: {annotation_spec.description}\n")

    return response

Java

Prima di poter eseguire questo esempio di codice, devi installare le librerie client Java.
import com.google.cloud.datalabeling.v1beta1.AnnotationSpec;
import com.google.cloud.datalabeling.v1beta1.AnnotationSpecSet;
import com.google.cloud.datalabeling.v1beta1.CreateAnnotationSpecSetRequest;
import com.google.cloud.datalabeling.v1beta1.DataLabelingServiceClient;
import com.google.cloud.datalabeling.v1beta1.DataLabelingServiceSettings;
import com.google.cloud.datalabeling.v1beta1.ProjectName;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

class CreateAnnotationSpecSet {

  // Create an annotation spec set.
  static void createAnnotationSpecSet(String projectId) throws IOException {
    // String projectId = "YOUR_PROJECT_ID";

    Map<String, String> annotationLabels = new HashMap<>();
    annotationLabels.put("label_1", "label_1_description");
    annotationLabels.put("label_2", "label_2_description");


    DataLabelingServiceSettings settings =
        DataLabelingServiceSettings.newBuilder()
            .build();
    try (DataLabelingServiceClient dataLabelingServiceClient =
        DataLabelingServiceClient.create(settings)) {
      ProjectName projectName = ProjectName.of(projectId);

      List<AnnotationSpec> annotationSpecs = new ArrayList<>();
      for (Entry<String, String> entry : annotationLabels.entrySet()) {
        AnnotationSpec annotationSpec =
            AnnotationSpec.newBuilder()
                .setDisplayName(entry.getKey())
                .setDescription(entry.getValue())
                .build();
        annotationSpecs.add(annotationSpec);
      }

      AnnotationSpecSet annotationSpecSet =
          AnnotationSpecSet.newBuilder()
              .setDisplayName("YOUR_ANNOTATION_SPEC_SET_DISPLAY_NAME")
              .setDescription("YOUR_DESCRIPTION")
              .addAllAnnotationSpecs(annotationSpecs)
              .build();

      CreateAnnotationSpecSetRequest request =
          CreateAnnotationSpecSetRequest.newBuilder()
              .setAnnotationSpecSet(annotationSpecSet)
              .setParent(projectName.toString())
              .build();

      AnnotationSpecSet result = dataLabelingServiceClient.createAnnotationSpecSet(request);

      System.out.format("Name: %s\n", result.getName());
      System.out.format("DisplayName: %s\n", result.getDisplayName());
      System.out.format("Description: %s\n", result.getDescription());
      System.out.format("Annotation Count: %d\n", result.getAnnotationSpecsCount());

      for (AnnotationSpec annotationSpec : result.getAnnotationSpecsList()) {
        System.out.format("\tDisplayName: %s\n", annotationSpec.getDisplayName());
        System.out.format("\tDescription: %s\n\n", annotationSpec.getDescription());
      }
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

Per la valutazione continua

Quando crei un job di valutazione, devi specificare un file CSV che definisce il set di specifiche di annotazione:

  • Il file deve contenere una riga per ogni possibile etichetta generata dal modello durante la previsione.
  • Ogni riga deve essere una coppia separata da virgola contenente l'etichetta e una descrizione dell'etichetta: LABEL_NAME,DESCRIPTION
  • Quando crei un job di valutazione, il servizio Data Labeling Service utilizza il nome del file CSV come nome di un insieme di specifiche di annotazione creato in background.

Ad esempio, se il tuo modello prevede quale animale si trova in un'immagine, puoi scrivere la seguente specifica in un file denominato animals.csv:

bird,any animal in the class Aves - see https://en.wikipedia.org/wiki/Bird
cat,any animal in the species Felis catus (domestic cats, not wild cats) - see https://en.wikipedia.org/wiki/Cat
dog,any animal in the genus Canis (domestic dogs and close relatives) - see https://en.wikipedia.org/wiki/Canis
multiple,image contains more than one of the above
none,image contains none of the above

Quindi, carica questo file in un bucket Cloud Storage nello stesso progetto del job di valutazione continua.