Creazione di set di dati

Un set di dati è la raccolta di elementi di dati che vuoi che vengano etichettati dagli etichettatori umani. Contiene campioni rappresentativi che vuoi classificare o analizzare. È possibile utilizzare un set di dati ben etichettato per addestrare un modello personalizzato.

Di seguito sono riportati i passaggi principali per la creazione di un set di dati:

  1. Carica gli elementi di dati in un bucket Cloud Storage.
  2. Crea un file con valori separati da virgole (CSV) per catalogare gli elementi di dati e caricalo nello stesso bucket Cloud Storage.
  3. Crea una risorsa del set di dati.
  4. Importa gli elementi di dati nella risorsa del set di dati.

Un progetto può avere più set di dati, ognuno dei quali utilizzato per una diversa richiesta di AI Platform Data Labeling Service. Puoi ottenere un elenco dei set di dati disponibili ed eliminare quelli che non ti servono più. Per saperne di più, consulta la pagina delle risorse dei set di dati.

Staging dei dati non etichettati

Il primo passaggio nella creazione di un set di dati è il caricamento degli elementi di dati in un bucket Cloud Storage per l'etichettatura. Per informazioni sulla creazione di un bucket, consulta Prima di iniziare.

Data Labeling Service supporta l'etichettatura di tre tipi di dati. Puoi espandere le sezioni seguenti per vedere i dettagli su come fornire elementi di dati di qualità per ogni tipo. Attualmente, l'etichettatura supporta solo i set di dati in inglese.

Immagini

Le immagini devono utilizzare un tipo di file supportato:

  • JPEG
  • PNG

La dimensione massima del file è 30 MB per tutti i casi di etichettatura delle immagini, ad eccezione della segmentazione delle immagini. La dimensione massima del file per l'etichettatura della segmentazione delle immagini è 10 MB.

Le dimensioni massime di un'immagine sono 1920 x 1080.

I dati di addestramento devono essere il più simili possibile ai dati su cui devono essere fatte le previsioni. Ad esempio, se il tuo caso d'uso prevede immagini sfocate e a bassa risoluzione (come quelle di una videocamera di sicurezza), i dati di addestramento dovrebbero essere composti da immagini sfocate e a bassa risoluzione. In generale, ti consigliamo di fornire più angolazioni, risoluzioni e sfondi per le immagini di addestramento.

L'addestramento di un modello funziona meglio quando il numero di immagini per l'etichetta più comune è 100 volte superiore rispetto a quello per l'etichetta meno comune. Consigliamo di rimuovere le etichette di frequenza molto bassa.

Video

I video devono essere in formato MP4 con codec H.264, H.265 e MPEG4. La dimensione massima del video è 2 GB.

I dati di addestramento devono essere il più simili possibile ai dati su cui devono essere fatte le previsioni. Ad esempio, se il tuo caso d'uso prevede video sfocati e a bassa risoluzione (come quelli di una videocamera di sicurezza), i dati di addestramento dovrebbero essere costituiti da video sfocati e a bassa risoluzione. In generale, ti consigliamo di fornire più angolazioni, risoluzioni e sfondi per i video di formazione.

Consigliamo circa 1000 video di addestramento per etichetta. Il valore minimo per etichetta è 10 o 50 per i modelli avanzati. In generale, sono necessari più esempi per etichetta per addestrare modelli con più etichette per video e i punteggi risultanti sono più difficili da interpretare.

Il modello funziona meglio quando ci sono al massimo 100 volte più video per l'etichetta più comune rispetto all'etichetta meno comune. Consigliamo di rimuovere le etichette di frequenza molto bassa.

Testo

I file di testo devono utilizzare il formato di codifica file di testo UTF-8.

Ogni documento deve essere un file di testo separato. Non puoi fornire più documenti in un unico file di testo; ad esempio, non puoi trattare ogni riga di un file di testo come un documento separato.

Il numero massimo di caratteri per file di testo è 100.000.

Prova a rendere i dati di addestramento diversi da quelli su cui verranno effettuate le previsioni. I set di dati devono contenere documenti di diversa lunghezza, documenti creati da persone diverse, documenti con formulazioni o stili diversi e così via.

Ti consigliamo di fornire almeno 1000 documenti di addestramento per etichetta. Il numero minimo di documenti per etichetta è 10. Tuttavia, puoi migliorare i punteggi di affidabilità del modello utilizzando più esempi per etichetta. I migliori punteggi di affidabilità sono particolarmente utili quando il modello restituisce più etichette per classificare un documento.

Il modello funziona meglio quando il numero di documenti per l'etichetta più comune è 100 volte superiore rispetto a quello per l'etichetta meno comune. Consigliamo di rimuovere le etichette di frequenza molto bassa.

Crea il file CSV di input

Oltre agli elementi di dati di esempio, devi creare anche un file con valori separati da virgole (CSV) che cataloghi tutti i dati. Il file CSV può avere qualsiasi nome, deve avere la codifica UTF-8 e deve terminare con un'estensione .csv.

Per i dati di immagini e video, ogni riga del file CSV corrisponde alla posizione (nel bucket Google Cloud Storage del tuo progetto) di un'immagine o di un video. Ad esempio:

gs://my_project_bucket/image1.png
gs://my_project_bucket/image2.png
gs://my_project_bucket/image3.png
gs://my_project_bucket/image4.png

Per i dati di testo, ogni riga del file CSV rappresenta la posizione di archiviazione di un file di testo. Ad esempio:

gs://my_project_bucket/file1.txt
gs://my_project_bucket/file2.txt
gs://my_project_bucket/file3.txt
gs://my_project_bucket/file4.txt

Ogni file di dati deve contenere i dati da etichettare. Il contenuto di ogni file di dati verrà mostrato agli etichettatori sotto forma di domanda sull'etichettatura.

Dopo aver creato il file CSV di catalogazione degli elementi di dati, caricalo nello stesso bucket Cloud Storage degli elementi di dati.

crea la risorsa del set di dati

Il passaggio successivo consiste nel creare una risorsa del set di dati che conterrà gli elementi di dati. Il set di dati appena creato è vuoto finché non importi gli elementi di dati al suo interno al passaggio successivo.

UI web

Nell'interfaccia utente di Data Labeling Service, puoi creare un set di dati e importare elementi al suo interno dalla stessa pagina.

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

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

    Per aggiungere un set di dati 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 Aggiungi un set di dati, inserisci un nome e una descrizione per il set di dati.

  4. Nell'elenco a discesa Tipo di set di dati, scegli il tipo di elementi di dati da caricare in questo set di dati: immagini, video o testo.

  5. Nella casella Posizione file CSV, inserisci il percorso completo del file CSV di input.

    Il file CSV deve trovarsi nello stesso bucket Google Cloud Storage degli elementi di dati che elenca.

  6. Fai clic su Crea.

    Tornerai alla pagina Set di dati. Il set di dati mostrerà lo stato In corso durante l'importazione dei documenti. Questo processo dovrebbe richiedere circa 10 minuti ogni 1000 elementi, ma potrebbe richiedere più o meno tempo.

    Se il servizio restituisce un errore 405, riduci il numero di documenti che stai caricando contemporaneamente. Devi aggiornare la pagina prima di riprovare.

Riga di comando

L'esempio seguente crea un set di dati denominato test_dataset. Il set di dati appena creato non contiene dati finché non importi gli elementi al suo interno.

Salva il "name" del nuovo set di dati (dalla risposta) per utilizzarlo con altre operazioni, come l'importazione di elementi nel set di dati.

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}/datasets \
   -d '{
     "dataset": {
     "displayName": "test_dataset",
     "description": "dataset for curl commands testing",
     },
   }'

Dovresti vedere un output simile al seguente:

{
  "name": "projects/data-labeling-codelab/datasets/5c897e1e_0000_2ab5_9159_94eb2c0b4daa",
  "displayName": "test_dataset",
  "description": "dataset for curl commands testing",
  "createTime": "2019-03-14T03:11:50.926475415Z"
}

Python

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

def create_dataset(project_id):
    """Creates a dataset for the given Google Cloud project."""
    from google.cloud import datalabeling_v1beta1 as datalabeling

    client = datalabeling.DataLabelingServiceClient()

    formatted_project_name = f"projects/{project_id}"

    dataset = datalabeling.Dataset(
        display_name="YOUR_DATASET_SET_DISPLAY_NAME", description="YOUR_DESCRIPTION"
    )

    response = client.create_dataset(
        request={"parent": formatted_project_name, "dataset": dataset}
    )

    # The format of resource name:
    # project_id/{project_id}/datasets/{dataset_id}
    print(f"The dataset resource name: {response.name}")
    print(f"Display name: {response.display_name}")
    print(f"Description: {response.description}")
    print("Create time:")
    print(f"\tseconds: {response.create_time.timestamp_pb().seconds}")
    print(f"\tnanos: {response.create_time.timestamp_pb().nanos}\n")

    return response

Java

Prima di poter eseguire questo esempio di codice, devi installare le librerie client Java.
import com.google.cloud.datalabeling.v1beta1.CreateDatasetRequest;
import com.google.cloud.datalabeling.v1beta1.DataLabelingServiceClient;
import com.google.cloud.datalabeling.v1beta1.DataLabelingServiceSettings;
import com.google.cloud.datalabeling.v1beta1.Dataset;
import com.google.cloud.datalabeling.v1beta1.ProjectName;
import java.io.IOException;

class CreateDataset {

  // Create a dataset that is initially empty.
  static void createDataset(String projectId, String datasetName) throws IOException {
    // String projectId = "YOUR_PROJECT_ID";
    // String datasetName = "YOUR_DATASET_DISPLAY_NAME";

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

      Dataset dataset =
          Dataset.newBuilder()
              .setDisplayName(datasetName)
              .setDescription("YOUR_DESCRIPTION")
              .build();

      CreateDatasetRequest createDatasetRequest =
          CreateDatasetRequest.newBuilder()
              .setParent(projectName.toString())
              .setDataset(dataset)
              .build();

      Dataset createdDataset = dataLabelingServiceClient.createDataset(createDatasetRequest);

      System.out.format("Name: %s\n", createdDataset.getName());
      System.out.format("DisplayName: %s\n", createdDataset.getDisplayName());
      System.out.format("Description: %s\n", createdDataset.getDescription());
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

Importa gli elementi di dati nel set di dati

Dopo aver creato un set di dati, puoi importare gli elementi di dati al suo interno utilizzando il file CSV.

UI web

Nell'interfaccia utente di Data Labeling Service, puoi saltare questo passaggio poiché l'importazione è già stata eseguita nel passaggio precedente.

Riga di comando

  • Sostituisci DATASET_ID con l'ID del tuo set di dati, dalla risposta al momento della creazione del set di dati. L'ID si trova alla fine del nome completo del set di dati: projects/{project-id}/locations/us-central1/datasets/{dataset-id}

  • Sostituisci CSV_FILE con il percorso completo del file CSV di input.

    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}/datasets/${DATASET_ID}:importData \
       -d '{
         "inputConfig": {
           "dataType": "IMAGE",
           "gcsSource": {
              "inputUri": "${CSV_FILE}",
              "mimeType": "text/csv",
            }
           },
       }'
    

    Dovresti vedere un output simile al seguente. Puoi utilizzare l'ID operazione per conoscere lo stato dell'attività. Recupero dello stato di un'operazione è un esempio.

    {
      "name": "projects/data-labeling-codelab/operations/5c73dd6b_0000_2b34_a920_883d24fa2064",
      "metadata": {
        "@type": "type.googleapis.com/google.cloud.data-labeling.v1beta1.ImportDataOperationMetadata",
        "dataset": "projects/data-labeling-codelab/datasets/5c73db3d_0000_23e0_a25b_94eb2c119c4c"
      }
    }
    

Python

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

def import_data(dataset_resource_name, data_type, input_gcs_uri):
    """Imports data to the given Google Cloud project and dataset."""
    from google.cloud import datalabeling_v1beta1 as datalabeling

    client = datalabeling.DataLabelingServiceClient()

    gcs_source = datalabeling.GcsSource(input_uri=input_gcs_uri, mime_type="text/csv")

    csv_input_config = datalabeling.InputConfig(
        data_type=data_type, gcs_source=gcs_source
    )

    response = client.import_data(
        request={"name": dataset_resource_name, "input_config": csv_input_config}
    )

    result = response.result()

    # The format of resource name:
    # project_id/{project_id}/datasets/{dataset_id}
    print(f"Dataset resource name: {result.dataset}\n")

    return result

Java

Prima di poter eseguire questo esempio di codice, devi installare le librerie client Java.
import com.google.api.gax.longrunning.OperationFuture;
import com.google.cloud.datalabeling.v1beta1.DataLabelingServiceClient;
import com.google.cloud.datalabeling.v1beta1.DataLabelingServiceSettings;
import com.google.cloud.datalabeling.v1beta1.DataType;
import com.google.cloud.datalabeling.v1beta1.GcsSource;
import com.google.cloud.datalabeling.v1beta1.ImportDataOperationMetadata;
import com.google.cloud.datalabeling.v1beta1.ImportDataOperationResponse;
import com.google.cloud.datalabeling.v1beta1.ImportDataRequest;
import com.google.cloud.datalabeling.v1beta1.InputConfig;
import java.io.IOException;
import java.util.concurrent.ExecutionException;

class ImportData {

  // Import data to an existing dataset.
  static void importData(String datasetName, String gcsSourceUri) throws IOException {
    // String datasetName = DataLabelingServiceClient.formatDatasetName(
    //     "YOUR_PROJECT_ID", "YOUR_DATASETS_UUID");
    // String gcsSourceUri = "gs://YOUR_BUCKET_ID/path_to_data";

    DataLabelingServiceSettings settings =
        DataLabelingServiceSettings.newBuilder()
            .build();
    try (DataLabelingServiceClient dataLabelingServiceClient =
        DataLabelingServiceClient.create(settings)) {
      GcsSource gcsSource =
          GcsSource.newBuilder().setInputUri(gcsSourceUri).setMimeType("text/csv").build();

      InputConfig inputConfig =
          InputConfig.newBuilder()
              .setDataType(DataType.IMAGE) // DataTypes: AUDIO, IMAGE, VIDEO, TEXT
              .setGcsSource(gcsSource)
              .build();

      ImportDataRequest importDataRequest =
          ImportDataRequest.newBuilder().setName(datasetName).setInputConfig(inputConfig).build();

      OperationFuture<ImportDataOperationResponse, ImportDataOperationMetadata> operation =
          dataLabelingServiceClient.importDataAsync(importDataRequest);

      ImportDataOperationResponse response = operation.get();

      System.out.format("Imported items: %d\n", response.getImportCount());
    } catch (IOException | InterruptedException | ExecutionException e) {
      e.printStackTrace();
    }
  }
}

Visualizza gli elementi di dati nel set di dati

Segui questi passaggi per visualizzare gli elementi di dati in un set di dati importato:

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

    La pagina Set di dati mostra i set di dati di Data Labeling Service per il progetto attuale.

  2. Nell'elenco dei set di dati, fai clic sul nome del set di dati di cui vuoi visualizzare gli elementi.

  3. Utilizza la scheda Dettagli della pagina Dettagli set di dati per visualizzare i singoli elementi di dati inclusi nel set di dati.