Creazione di set di dati

Un set di dati è la raccolta di elementi di dati che vuoi che vengano etichettati dagli etichettatori umani. Contiene esempi rappresentativi che vuoi classificare o analizzare. Un set di dati ben etichettato può essere utilizzato per addestrare un modello personalizzato.

I passaggi principali per creare un set di dati sono:

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

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

Esegui la gestione delle fasi dei dati non etichettati

Il primo passaggio per creare un set di dati è caricare gli elementi di dati in un bucket Cloud Storage per l'etichettatura. Per informazioni sulla creazione di un separato, consulta Prima di iniziare.

Data Labeling Service supporta l'etichettatura di tre tipi di dati. Puoi espandere le sezioni riportate di seguito per visualizzare i dettagli sulla fornitura di elementi di dati di qualità per ogni tipo. Al momento, per l'etichettatura sono supportati 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 è 10 MB per l'etichettatura della segmentazione delle immagini.

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 eseguite le previsioni. Ad esempio, se il tuo caso d'uso prevede immagini sfocate e a bassa risoluzione (ad esempio quelle di una videocamera di sicurezza), i dati di addestramento devono essere costituiti da immagini sfocate e a bassa risoluzione. In generale, ti consigliamo anche di fornire più angolazioni, risoluzioni e sfondi per le immagini di addestramento.

L'addestramento di un modello funziona meglio quando ci sono al massimo 100 volte più immagini per l'etichetta più comune rispetto a quella meno comune. Ti consigliamo di rimuovere le etichette con 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 eseguite le previsioni. Ad esempio, se il tuo caso d'uso prevede video sfocati e a bassa risoluzione (ad esempio quelli di una videocamera di sicurezza), i dati di addestramento devono essere costituiti da video sfocati e a bassa risoluzione. In generale, ti consigliamo anche di fornire più angolazioni, risoluzioni e sfondi per i tuoi video di formazione.

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

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

Testo

I file di testo devono utilizzare il formato di codifica dei 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 autonomo.

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

Cerca di rendere i dati di addestramento il più vari possibile rispetto ai dati su cui verranno eseguite le previsioni. I set di dati devono contenere documenti di lunghezze diverse, scritti da persone diverse, che utilizzano un linguaggio o uno stile 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 confidenza del modello utilizzando più esempi per etichetta. I migliori coefficienti di confidenza sono particolarmente utili quando il modello restituisce più etichette per classificare un documento.

Il modello funziona meglio quando ci sono al massimo 100 volte più documenti per l'etichetta più comune che per l'etichetta meno comune. Ti consigliamo di rimuovere le etichette con frequenza molto bassa.

Crea il file CSV di input

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

Per i dati di immagini e video, ogni riga del file CSV è la posizione (nel bucket Google Cloud Storage del 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 è 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 che vuoi etichettare. I contenuti di ogni file di dati verranno mostrati ai labeler come una singola domanda di etichettatura.

Dopo aver creato il file CSV che cataloga gli elementi di dati, carica lo nello stesso bucket Cloud Storage degli elementi di dati.

Crea la risorsa del set di dati

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

UI web

Nell'interfaccia utente di Data Labeling Service, crei un set di dati e ne importi gli elementi 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 corrente.

    Per aggiungere un set di dati per un progetto diverso, 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 che carichi in questo set di dati: immagini, video o testo.

  5. Nella casella Località del 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 elencati.

  6. Fai clic su Crea.

    Tornerai alla pagina Set di dati. Il set di dati mostrerà lo stato In corso mentre i documenti vengono importati. Questa procedura dovrebbe richiedere circa 10 minuti per 1000 articoli, 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.

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 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 utilizzando il file CSV.

UI web

Nell'interfaccia utente del servizio di etichettatura dei dati, puoi saltare questo passaggio perché l'importazione è già stata eseguita nel passaggio precedente.

Riga di comando

  • Sostituisci DATASET_ID con l'ID del set di dati, riportato nella risposta quando hai creato il set di dati. L'ID viene visualizzato 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 recuperare lo stato dell'attività. Ottenere lo 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 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

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 corrente.

  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.