Labelsets erstellen

Ein Labelsatz ist die Gruppe von Labels, mit denen menschliche Labelersteller Ihren Bildern Label hinzufügen sollen. Wenn Sie Bilder beispielsweise anhand der Kriterien Hund oder Katze klassifizieren möchten, erstellen Sie einen Labelsatz mit zwei Labels: "Hund" und "Katze". Wie unten erwähnt, können Sie auch Labels für "Keine" und "Beide" verwenden. Ihr Labelsatz kann bis zu 100 Labels enthalten.

Ein Projekt kann mehrere Labelsätze haben, die jeweils für eine andere Data Labeling Service-Anfrage verwendet werden. Sie können eine Liste der verfügbaren Labelsätze abrufen und nicht mehr benötigte Sätze löschen. Auf der Ressourcenseite für Annotationsspezifikationssätze finden Sie weitere Informationen.

Einen guten Labelsatz entwerfen

Hier finden Sie einige Richtlinien zur Erstellung eines hochwertigen Labelsatzes.

  • Benennen Sie jedes Label mit einem aussagekräftigen Begriff, z. B. "Hund", "Katze" oder "Gebäude". Verwenden Sie keine abstrakten Namen wie "label1" und "label2" oder unbekannte Akronyme. Je aussagekräftiger die Labelnamen sind, desto einfacher ist es für menschliche Labelersteller, sie exakt und konsistent anzuwenden.
  • Achten Sie darauf, dass die Labels leicht voneinander zu unterscheiden sind. Für Klassifizierungsaufgaben, bei denen auf jedes Datenelement immer ein Label abgewendet wird, sollte die Bedeutung der Labels klar voneinander abgegrenzt sein.
  • Bei Klassifizierungsaufgaben ist es in der Regel sinnvoll, ein Label mit dem Namen "Sonstiges" oder "Keines" einzufügen. Dieses Label kann dann für Daten verwendet werden, für die kein anderes Label zutrifft. Wenn die einzigen verfügbaren Labels beispielsweise "Hund" und "Katze" sind, müssen Labelersteller jedes Bild mit einem dieser Labels kennzeichnen. Ihr benutzerdefiniertes Modell wird in der Regel robuster, wenn Sie in einem solchen Fall Bilder mit anderen Inhalten als nur Hunde oder Katzen in die Trainingsdaten aufnehmen.
  • Beachten Sie, dass für eine effiziente und präzise Labelerstellung nicht mehr als 20 Labels im Labelsatz enthalten sein sollten.

Labelsatz-Ressource erstellen

Web-UI

  1. Rufen Sie die Data Labeling Service-UI auf.

    Auf der Seite Label sets (Labelsätze) wird der Status zuvor erstellter Label für das aktuelle Projekt angezeigt.

    Wenn Sie einen Labelsatz für ein anderes Projekt hinzufügen möchten, wählen Sie das Projekt in der Drop-down-Liste rechts oben in der Titelleiste aus.

  2. Klicken Sie in der Titelleiste auf die Schaltfläche Create (Erstellen).

  3. Geben Sie auf der Seite Create a label set (Labelsatz erstellen) einen Namen und eine Beschreibung für den Satz ein.

  4. Geben Sie im Abschnitt Labels einen Namen und eine Beschreibung für jedes Label ein, das von menschlichen Labelerstellern zugeordnet werden soll.

    Klicken Sie nach der Eingabe des Namens und der Beschreibung für ein Label auf Add label (Label hinzufügen), um eine Zeile für ein zusätzliches Label einzufügen. Sie können bis zu 100 Labels hinzufügen.

  5. Klicken Sie auf Create (Erstellen), um den Annotationsspezifikationssatz zu erstellen.

    Es wird dann wieder die Seite mit der Liste Label sets (Labelsätze) angezeigt.

Befehlszeile

Zum Erstellen einer Ressource für Labelsätze listen Sie alle Labels im JSON-Format auf und übergeben sie dann an den Data Labeling Service.

Im folgenden Beispiel wird ein Labelsatz namens code_sample_label_set mit zwei Labels erstellt.

Speichern Sie den "name" des neuen Labelsatzes (aus der Antwort) zur Verwendung mit anderen Vorgängen, z. B. Senden der Labeling-Anfrage.

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

Die Ausgabe sollte in etwa so aussehen:

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

Für dieses Codebeispiel müssen die Python-Clientbibliotheken installiert sein.

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

Für dieses Codebeispiel müssen die Java-Clientbibliotheken installiert sein.
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();
    }
  }
}

Für eine kontinuierliche Evaluierung

Wenn Sie einen Evaluierungsjob erstellen, müssen Sie eine CSV-Datei angeben, die Ihren Annotationsspezifikationssatz definiert:

  • Die Datei muss eine Zeile für jedes Label enthalten, das von Ihrem Modell bei der Vorhersage ausgegeben werden kann.
  • Jede Zeile muss ein durch Kommas getrenntes Paar enthalten, das aus dem Label und einer Beschreibung des Labels besteht: LABEL_NAME,DESCRIPTION
  • Wenn Sie einen Evaluierungsjob erstellen, verwendet der Data Labeling Service den Dateinamen der CSV-Datei für den Namen des Annotationsspezifikationssatzes, den er im Hintergrund erstellt.

Wenn Ihr Modell beispielsweise vorhersagt, welches Tier sich in einem Bild befindet, können Sie die folgende Spezifikation in eine Datei mit dem Namen animals.csv schreiben:

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

Laden Sie diese Datei anschließend in einen Cloud Storage-Bucket hoch. Dieser muss in dem Projekt mit Ihrem Job für die kontinuierliche Evaluierung enthalten sein.