Creazione di set di etichette

Un set di etichette è l'insieme di etichette che devono essere usate dagli etichettatori umani per etichettare le immagini. Ad esempio, se vuoi classificare le immagini che contengano un cane o un gatto, crei un set di etichette con due etichette: "Cane" e "Gatto". (In realtà, come indicato in basso, potresti voler aggiungere etichette per "Nessuno dei due" ed "Entrambi".) Il set di etichette può includere fino a 100 etichette.

Un progetto può avere più set di etichette, ciascuno utilizzato per un Richiesta a Data Labeling Service. Puoi visualizzare un elenco delle etichette disponibili imposta ed elimina set di dati più bisogno; Consulta la pagina delle risorse del set di specifiche delle annotazioni per ulteriori informazioni.

Progetta un set di etichette efficace

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

  • Rendi il nome visualizzato di ogni etichetta una parola significativa, ad esempio "cane", "gatto" o "edificio". Non utilizzare nomi astratti come "label1" e "label2" o acronimi sconosciuti. 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 la classificazione in cui viene applicata una singola etichetta a ogni elemento dati, cerca di non usare etichette i significati si sovrappongono.
  • Per le attività di classificazione, di solito è una buona idea includere un'etichetta chiamata "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. La tua è in genere più affidabile se includi immagini diverse da cani o gatti nella sua dati di addestramento.
  • Tieni presente che gli etichettatori sono più efficienti e precisi se ne hai al massimo 20 etichette definite nel set di etichette.

Crea una risorsa set di etichette

UI web

  1. Apri l'UI 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 dal menu 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 l'insieme.

  4. Nella sezione Etichette, inserisci i nomi e le descrizioni per ciascuna che vuoi venga applicata dagli etichettatori umani.

    Dopo aver inserito il nome e la descrizione di un'etichetta, fai clic su Aggiungi etichetta per aggiungerla una riga per un'ulteriore 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 set di etichette, elenca tutte le etichette in formato JSON, poi passarlo a Data Labeling Service.

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

Salva "name" del nuovo set di etichette (dalla risposta) per da utilizzare 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, è necessario installare 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, è necessario installare 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 una Il 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 del 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 modello prevede quale animale è presente in un'immagine, potresti scrivere quanto segue a 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 il file in Cloud Storage bucket nello stesso progetto del job di valutazione continua.