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 a seconda che contengano un cane o un gatto, crei un set di etichette con due etichette: "Cane" e "Gatto". In realtà, come indicato di seguito, potresti volere anche le etichette per "Nessuno dei due" e "Entrambi". Il set di etichette può includere fino a 100 etichette.

Un progetto può avere più set di etichette, ognuno dei quali viene utilizzato per una diversa richiesta a Data Labeling Service. Puoi ottenere un elenco dei set di etichette disponibili ed eliminare quelli che non ti servono più; consulta la pagina delle risorse del set di specifiche di annotazioni per ulteriori informazioni.

Progetta un buon set di etichette

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

  • Assegna al nome visualizzato di ogni etichetta una parola significativa, ad esempio "cane", "gatto" o "edificio". Non usare nomi astratti, come "etichetta1" e "etichetta2", o acronimi che non conosci. Più significativi i nomi delle etichette, più facile sarà per gli etichettatori umani applicarli in modo accurato e coerente.
  • 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, di solito è una buona idea includere un'etichetta denominata"altro " o"nessuno" da utilizzare per i dati che non corrispondono alle altre etichette. Se le uniche etichette disponibili sono "cane" e "gatto", ad esempio, gli etichettatori dovranno etichettare ogni immagine con una di queste etichette. In genere, il modello personalizzato è più affidabile se includi immagini diverse da cani o gatti nei dati di addestramento.
  • Tieni presente che gli etichettatori sono più efficienti e precisi quando hai al massimo 20 etichette definite nel set di etichette.

Crea una risorsa del 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 set di etichette per un altro progetto, 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 set di etichette, inserisci un nome e una descrizione per il set.

  4. Nella sezione Etichette, inserisci nomi e descrizioni per ogni etichetta che vuoi applicare agli 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 di elenco Set di etichette.

Riga di comando

Per creare la risorsa del set di etichette, elenchi tutte le etichette in formato JSON, quindi le passi a Data Labeling Service.

L'esempio seguente crea un set di etichette denominato code_sample_label_set con due etichette.

Salva il "name" del nuovo set di etichette (dalla risposta) per utilizzarlo con altre operazioni, come 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 di 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 una valutazione continua

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

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

Ad esempio, se il tuo modello prevede quale animale è presente in un'immagine, potresti 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.