Créer des ensembles d'étiquettes

Un ensemble d'étiquettes correspond à l'ensemble des étiquettes que les étiqueteurs humains doivent utiliser pour étiqueter vos images. Par exemple, si vous souhaitez classer des images selon qu'elles contiennent un chien ou un chat, vous devez créer un ensemble contenant deux étiquettes : "chien" et "chat". (Mais vous pourriez aussi avoir besoin d'étiquettes pour "aucun des deux" et pour "les deux", comme indiqué ci-dessous.) Votre ensemble peut inclure jusqu'à 100 étiquettes.

Un projet peut avoir plusieurs ensembles d'étiquettes, chacun servant à une demande différente envoyée au service d'ajout d'étiquettes aux données. Vous pouvez obtenir la liste des ensembles d'étiquettes disponibles et supprimer ceux dont vous n'avez plus besoin. Pour en savoir plus, consultez la page sur les ressources d'ensembles de spécifications d'annotation.

Créer un ensemble d'étiquettes de qualité

Voici quelques consignes qui vous aideront à créer un ensemble d'étiquettes de haute qualité.

  • Utilisez un mot explicite pour chaque nom d'étiquette, tel que "chien", "chat" ou "bâtiment". N'utilisez pas de noms abstraits tels que "étiquette1" et "étiquette2", ou des acronymes peu courants. Plus les noms des étiquettes seront explicites, plus il sera facile pour les étiqueteurs humains de les appliquer avec précision et cohérence.
  • Assurez-vous que les étiquettes se distinguent facilement les unes des autres. Pour les tâches de classification où une seule étiquette est appliquée par élément de données, essayez de ne pas utiliser d'étiquettes ayant des significations similaires.
  • Pour les tâches de classification, il est généralement judicieux d'inclure une étiquette nommée "autre" ou "aucune" que vous utiliserez pour les données ne correspondant à aucune autre étiquette. Par exemple, si les étiquettes "chien" et "chat" "sont les seules disponibles, les étiqueteurs devront étiqueter chaque image avec l'une de ces deux étiquettes. Votre modèle personnalisé sera généralement plus robuste si vous incluez des images autres que des chiens ou des chats dans ses données d’entraînement.
  • Rappelez-vous que le travail des étiqueteurs est plus efficace et plus précis si vous définissez un maximum de 20 étiquettes dans l'ensemble d'étiquettes.

Créer une ressource d'ensemble d'étiquettes

UI Web

  1. Ouvrez l'interface utilisateur du service d'étiquetage des données.

    La page Ensembles d'étiquettes indique l'état des ensembles d'étiquettes créés précédemment pour le projet en cours.

    Si vous souhaitez ajouter un ensemble d'étiquettes pour un autre projet, sélectionnez ce dernier dans la liste déroulante située dans l'angle supérieur droit de la barre de titre.

  2. Cliquez sur le bouton Créer dans la barre de titre.

  3. Sur la page Créer un ensemble d'étiquettes, saisissez un nom et une description pour cet ensemble.

  4. Dans la section Étiquettes, saisissez le nom et la description de chaque étiquette que les étiqueteurs humains doivent appliquer.

    Après avoir saisi le nom et la description d'une étiquette, cliquez sur Ajouter une étiquette afin d'ajouter une ligne pour une autre étiquette. Vous pouvez ajouter jusqu'à 100 étiquettes.

  5. Cliquez sur Créer pour créer l'ensemble de spécifications d'annotation.

    Vous êtes redirigé vers la page contenant la liste des Ensembles d'étiquettes.

Ligne de commande

Pour créer la ressource d'ensemble d'étiquettes, répertoriez toutes les étiquettes au format JSON, puis transmettez la ressource au service d'ajout d'étiquettes aux données.

L'exemple suivant crée un ensemble nommé code_sample_label_set contenant deux étiquettes.

Enregistrez le nom "name" du nouvel ensemble d'étiquettes (issu de la réponse) afin de l'utiliser pour d'autres opérations, comme l'envoi des demandes d'ajout d'étiquettes.

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",
               }
           ],
       },
    }'

La sortie obtenue doit ressembler à ceci :

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

Avant de pouvoir exécuter cet exemple de code, vous devez installer les bibliothèques clientes 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

Avant de pouvoir exécuter cet exemple de code, vous devez installer les bibliothèques clientes 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();
    }
  }
}

Pour l'évaluation continue

Lorsque vous créez une tâche d'évaluation, vous devez spécifier un fichier CSV définissant votre ensemble de spécifications d'annotation :

  • Le fichier doit comporter une ligne pour chaque étiquette que votre modèle peut générer lors de la prédiction.
  • Chaque ligne doit contenir une paire étiquette-description séparée par une virgule : LABEL_NAME,DESCRIPTION
  • Lorsque vous créez une tâche d'évaluation, le service d'ajout d'étiquettes aux données utilise le nom de fichier du fichier CSV pour le nom de l'ensemble de spécifications d'annotation qu'il crée en arrière-plan.

Par exemple, si votre modèle prédit quel animal figure dans une image, vous pouvez écrire la spécification suivante dans un fichier nommé 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

Ensuite, ajoutez ce fichier à un bucket Cloud Storage du même projet que votre tâche d'évaluation continue.