Membuat set data

Set data adalah kumpulan item data yang ingin Anda beri label oleh pemberi label manual. Set data berisi sampel perwakilan yang ingin Anda klasifikasikan atau analisis. Set data yang diberi label dengan baik dapat digunakan untuk melatih model kustom.

Langkah-langkah utama untuk membangun set data adalah:

  1. Upload item data ke bucket Cloud Storage.
  2. Buat file nilai yang dipisahkan koma (CSV) yang mengkatalogkan item data, dan upload ke bucket Cloud Storage yang sama.
  3. Buat resource set data.
  4. Impor item data ke dalam resource set data.

Sebuah project dapat memiliki beberapa set data, dan setiap set data digunakan untuk permintaan Layanan Pelabelan Data AI Platform yang berbeda. Anda bisa mendapatkan daftar set data yang tersedia dan menghapus set data yang tidak lagi Anda butuhkan. Informasi selengkapnya dapat ditemukan di halaman referensi set data.

Menyiapkan data yang tidak berlabel

Langkah pertama dalam membuat set data adalah mengupload item data ke bucket Cloud Storage untuk pemberian label. Untuk informasi tentang cara membuat bucket, lihat Sebelum memulai.

Data Labeling Service mendukung pemberian label pada tiga jenis data. Anda dapat meluaskan bagian di bawah untuk melihat detail tentang cara memberikan item data berkualitas untuk setiap jenis. Saat ini, hanya set data dalam bahasa Inggris yang didukung untuk pemberian label.

Image

Gambar harus menggunakan jenis file yang didukung:

  • JPEG
  • PNG

Ukuran file maksimumnya adalah 30 MB untuk semua kasus pemberian label gambar, kecuali untuk segmentasi gambar. Ukuran file maksimum adalah 10 MB untuk pemberian label segmentasi gambar.

Dimensi maksimum gambar adalah 1920X1080.

Data pelatihan harus semirip mungkin dengan data yang menjadi dasar prediksi. Misalnya, jika dalam kasus penggunaan Anda terdapat gambar buram dengan resolusi rendah (seperti gambar dari kamera keamanan), data pelatihan Anda harus terdiri dari gambar buram dengan resolusi rendah. Secara umum, Anda juga harus mempertimbangkan untuk menyediakan beberapa sudut, resolusi, dan latar belakang untuk gambar pelatihan.

Melatih model akan berfungsi optimal jika ada gambar maksimal 100 kali lebih banyak untuk label yang paling umum daripada label yang paling tidak umum. Sebaiknya Anda menghapus label berfrekuensi rendah.

Video

Video harus dalam format MP4, dengan codec H.264, H.265, dan MPEG4. Ukuran video maksimum adalah 2 GB.

Data pelatihan harus semirip mungkin dengan data yang menjadi dasar prediksi. Misalnya, jika dalam kasus penggunaan Anda terdapat video buram dengan resolusi rendah (seperti video dari kamera keamanan), data pelatihan Anda harus terdiri dari video buram dengan resolusi rendah. Secara umum, Anda juga harus mempertimbangkan untuk menyediakan beberapa sudut, resolusi, dan latar belakang untuk video pelatihan Anda.

Sebaiknya gunakan sekitar 1.000 video pelatihan per label. Jumlah minimum per label adalah 10, atau 50 untuk model lanjutan. Secara umum, diperlukan lebih banyak contoh per label untuk melatih model dengan beberapa label per video, dan skor yang dihasilkan akan lebih sulit untuk ditafsirkan.

Model akan berfungsi optimal jika terdapat video maksimal 100 kali lebih banyak untuk label yang paling umum daripada label yang paling tidak umum. Sebaiknya Anda menghapus label berfrekuensi rendah.

Teks

File teks harus menggunakan format encoding file teks UTF-8.

Setiap dokumen harus berupa file teks terpisah. Anda tidak dapat memberikan beberapa dokumen dalam satu file teks; misalnya, Anda tidak dapat memperlakukan setiap baris file teks sebagai dokumennya sendiri.

Jumlah maksimum karakter per file teks adalah 100.000.

Coba buat data pelatihan Anda bervariasi seperti data yang akan digunakan untuk membuat prediksi. Set data harus berisi panjang dokumen yang berbeda, dokumen yang ditulis oleh orang yang berbeda, dokumen yang menggunakan kata-kata atau gaya yang berbeda, dan sebagainya.

Sebaiknya sediakan minimal 1.000 dokumen pelatihan per label. Jumlah minimum dokumen per label adalah 10. Namun, Anda dapat meningkatkan skor keyakinan dari model Anda dengan menggunakan lebih banyak contoh per label. Skor keyakinan yang lebih baik sangat membantu saat model Anda menampilkan beberapa label untuk mengklasifikasikan dokumen.

Model akan berfungsi optimal jika ada dokumen yang 100 kali lebih banyak untuk label yang paling umum daripada label yang paling tidak umum. Sebaiknya Anda menghapus label berfrekuensi rendah.

Membuat file CSV input

Selain item data contoh, Anda juga perlu membuat file nilai yang dipisahkan koma (CSV) yang mencantumkan semua data. File CSV dapat memiliki nama file apa pun, harus berenkode UTF-8, dan harus diakhiri dengan ekstensi .csv.

Untuk data gambar dan video, setiap baris dalam file CSV adalah lokasi (di bucket Google Cloud Storage project Anda) dari satu gambar atau video. Contoh:

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

Untuk data teks, setiap baris dalam file CSV adalah lokasi penyimpanan file teks. Contoh:

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

Setiap file data harus berisi data yang ingin Anda beri label. Konten setiap file data akan ditampilkan kepada pemberi label sebagai satu pertanyaan pelabelan.

Setelah Anda membuat file CSV yang membuat katalog item data, upload file tersebut ke bucket Cloud Storage yang sama dengan item data.

Membuat resource set data

Langkah berikutnya adalah membuat resource set data yang pada akhirnya akan menyimpan item data. Set data yang baru dibuat kosong hingga Anda mengimpor item data ke dalamnya pada langkah berikutnya.

UI Web

Di UI Data Labeling Service, Anda membuat set data dan mengimpor item ke dalam set data tersebut dari halaman yang sama.

  1. Buka UI Layanan Pelabelan Data.

    Halaman Set Data menampilkan status set data yang dibuat sebelumnya untuk project saat ini.

    Untuk menambahkan set data ke project lain, pilih project dari menu drop-down di kanan atas kolom judul.

  2. Klik tombol Create di kolom judul.

  3. Di halaman Tambahkan set data, masukkan nama dan deskripsi untuk set data.

  4. Dari menu drop-down Dataset type, pilih jenis item data yang Anda upload ke set data ini: gambar, video, atau teks.

  5. Di kotak CSV file location, masukkan jalur lengkap ke input CSV file.

    File CSV harus berada di bucket Google Cloud Storage yang sama dengan item data yang dicantumkannya.

  6. Klik Create.

    Anda akan kembali ke halaman Set Data; set data Anda akan menampilkan status sedang berlangsung saat dokumen sedang diimpor. Proses ini memerlukan waktu sekitar 10 menit per 1.000 item, tetapi mungkin perlu waktu lebih atau kurang.

    Jika layanan menampilkan error 405, kurangi jumlah dokumen yang Anda upload sekaligus. Anda harus memuat ulang halaman sebelum mencoba lagi.

Command-line

Contoh berikut akan membuat set data bernama test_dataset. Set data yang baru dibuat tidak berisi data apa pun sampai Anda mengimpor item ke dalamnya.

Simpan "name" dari set data baru (dari respons) untuk digunakan dengan operasi lain, seperti mengimpor item ke set data Anda.

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

Anda akan melihat output yang mirip dengan berikut ini:

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

Sebelum dapat menjalankan contoh kode ini, Anda harus menginstal Library Klien 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

Sebelum dapat menjalankan contoh kode ini, Anda harus menginstal Library Klien 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();
    }
  }
}

Mengimpor item data ke set data

Setelah membuat set data, Anda dapat mengimpor item data ke dalamnya menggunakan file CSV.

UI Web

Di UI Layanan Pemberian Label Data, Anda dapat melewati langkah ini karena impor telah dilakukan di langkah sebelumnya.

Command-line

  • Ganti DATASET_ID dengan ID set data Anda, dari respons saat Anda membuat set data. ID muncul di akhir nama set data lengkap: projects/{project-id}/locations/us-central1/datasets/{dataset-id}

  • Ganti CSV_FILE dengan jalur lengkap ke file CSV 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",
            }
           },
       }'

    Anda akan melihat output yang mirip dengan berikut ini. Anda dapat menggunakan ID operasi untuk mendapatkan status tugas. Mendapatkan status operasi adalah contohnya.

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

Sebelum dapat menjalankan contoh kode ini, Anda harus menginstal Library Klien 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

Sebelum dapat menjalankan contoh kode ini, Anda harus menginstal Library Klien 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();
    }
  }
}

Melihat item data dalam set data

Ikuti langkah-langkah berikut untuk melihat item data dalam set data yang diimpor:

  1. Buka UI Layanan Pelabelan Data.

    Halaman Set data menampilkan set data Layanan Pelabelan Data untuk project saat ini.

  2. Dalam daftar set data, klik nama set data yang itemnya ingin Anda lihat.

  3. Gunakan tab Details di halaman Dataset detail untuk melihat setiap item data yang disertakan dalam set data.