

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 建立培訓和測試資料集
<a name="creating-datasets"></a>



資料集指描述這些影像的一組影像和標籤。您的專案需要訓練資料集和測試資料集。Amazon Rekognition 自訂標籤會使用訓練資料集來訓練您的模型。訓練結束後，Amazon Rekognition 自訂標籤會使用測試資料集來驗證訓練過的模型預測正確標籤的成效。

您可以使用 Amazon Rekognition 自訂標籤主控台或 AWS SDK 建立資料集。建立資料集之前，我們建議您先閱讀 [了解 Amazon Rekognition 自訂標籤](understanding-custom-labels.md)。如需其他資料集任務，請參閱 [管理資料集](managing-dataset.md)。

為專案建立訓練和測試資料集的步驟如下：

**建立專案的訓練和測試資料集**

1. 確定您需要如何標記訓練和測試資料集。如需更多詳細資訊，[規劃資料集](md-dataset-purpose.md)。

1. 收集訓練和測試資料集的影像。如需詳細資訊，請參閱[準備影像](md-prepare-images.md)。

1. 建立訓練和測試資料集。如需詳細資訊，請參閱[建立包含影像的訓練和測試資料集](md-create-dataset.md)。如果您使用的是 AWS 開發套件，請參閱 [建立訓練和測試資料集 (SDK)](md-create-dataset.md#cd-create-dataset-sdk)。

1. 如有必要，請新增影像層級標籤或週框方塊至您的資料集影像。如需詳細資訊，請參閱[標記檔案](md-labeling-images.md)。

建立資料集之後，您即可[訓練](training-model.md)模型。

**Topics**
+ [規劃資料集](md-dataset-purpose.md)
+ [準備影像](md-prepare-images.md)
+ [建立包含影像的訓練和測試資料集](md-create-dataset.md)
+ [標記檔案](md-labeling-images.md)
+ [偵錯資料集](debugging-datasets.md)

# 規劃資料集
<a name="md-dataset-purpose"></a>

在專案中標記訓練和測試資料集的方式會決定您建立的模型類型。使用 Amazon Rekognition 自訂標籤，您可以建立執行下列動作的模型。
+ [尋找物件、場景和概念](#md-dataset-purpose-classification)
+ [尋找物件位置](#md-dataset-purpose-localization)
+ [尋找品牌位置](#md-dataset-purpose-brands)

## 尋找物件、場景和概念
<a name="md-dataset-purpose-classification"></a>

模型會將和整個影像相關聯的物件、場景和概念進行分類。

您可以建立兩種類型的分類模型：*影像分類*和*多標籤分類*。針對這兩種類型的分類模型，模型會從用於訓練的完整標籤集中尋找一個或多個相符標籤。訓練和測試資料集至少需要兩個標籤。

### Image classification
<a name="md-dataset-image-classification"></a>

 

模型會將影像分類為屬於一組預定義的標籤。例如，您可能需要確定影像是否包含居住空間的模型。下列影像可能具有 *ling\$1space* 影像層級標籤。

![\[附火場的舒適客廳，大型窗戶可遠景後院露台。中性色調、木材裝飾。\]](http://docs.aws.amazon.com/zh_tw/rekognition/latest/customlabels-dg/images/living_space1.jpeg)


針對此類型的模型，請新增單一影像層級標籤至每個訓練和測試資料集影像。如需範例專案，請參閱 [Image classification](getting-started.md#gs-image-classification-example)。

### 多標籤分類
<a name="md-dataset-image-classification-multi-label"></a>

模型會將影像分類為多個類別，例如花卉的類型以及是否有葉子。例如，下列影像可能具有 *mediterranean\$1spurge* 和 *no\$1leaves* 影像層級標籤。

![\[綠色 viburnum 花朵叢集的特寫，其中包含緊密包裝的小花。\]](http://docs.aws.amazon.com/zh_tw/rekognition/latest/customlabels-dg/images/mediterranean_spurge3.jpg)


針對此類型的模型，請指派每個類別的影像層級標籤給訓練和測試資料集影像。如需範例專案，請參閱 [多標籤影像分類](getting-started.md#gs-multi-label-image-classification-example)。

### 指派影像層級標籤
<a name="w2aac20c17c21b7c11"></a>

如果您的影像存放在 Amazon S3 儲存貯體中，您可以使用[資料夾名稱](md-create-dataset-s3.md)自動新增影像層級標籤。如需詳細資訊，請參閱[從 Amazon S3 儲存貯體匯入映像](md-create-dataset-s3.md)。您也可以在建立資料集之後，新增影像層級標籤至影像，如需更多詳細資訊，請參閱 [將影像層級標籤指派給影像](md-assign-image-level-labels.md)。您可以根據需要新增標籤。如需詳細資訊，請參閱[管理標籤](md-labels.md)。

## 尋找物件位置
<a name="md-dataset-purpose-localization"></a>

若要建立預測影像中物件位置的模型，您需要為訓練和測試資料集中的影像定義物件位置週框方塊和標籤。週框方框是緊密圍繞物件的方塊。例如，下列影像即顯示 Amazon Echo 和 Amazon Echo Dot 周圍的週框方塊。每個週框方塊都有一個指派的標籤 (*Amazon Echo* 或 *Amazon Echo Dot*)。

![\[兩個 Amazon 智慧喇叭，一個帶有綠色週框方塊和一個藍色週框方塊，位於木頭表面。\]](http://docs.aws.amazon.com/zh_tw/rekognition/latest/customlabels-dg/images/echos.png)


若要尋找物件位置，您的資料集至少需要至少一個標籤。在模型訓練期間，會自動建立更多標籤，代表影像上週框方塊外部的區域。

### 指派週框方塊
<a name="w2aac20c17c21b9b9"></a>

 建立資料集時，您可以包含影像的週框方塊資訊。例如，您可以匯入包含週框方塊的 SageMaker AI Ground Truth 格式[資訊清單檔案](md-create-manifest-file.md)。您也可以在建立資料集之後新增週框方塊。如需詳細資訊，請參閱[使用週框方塊標記物件](md-localize-objects.md)。您可以根據需要新增標籤。如需詳細資訊，請參閱[管理標籤](md-labels.md)。

## 尋找品牌位置
<a name="md-dataset-purpose-brands"></a>

如果您想要尋找品牌的位置，例如標誌和動畫人物，您可以為訓練資料集影像使用兩種不同類型的影像。
+  僅屬於標誌的影像。每個影像都需要代表標誌名稱的單一影像層級標籤。例如，下列影像的影像層級標籤可能是 *Lambda*。  
![\[橘色背景上的白色 Lambda 標誌。\]](http://docs.aws.amazon.com/zh_tw/rekognition/latest/customlabels-dg/images/lambda-logo.jpg)
+ 在自然位置包含標誌的影像，例如足球比賽或建築圖。每個訓練影像都需要圍繞標誌的每個執行個體的週框方塊。例如，下圖顯示結構圖，其中包含 AWS Lambda 和 Amazon Pinpoint 標誌周圍的標記週框方塊。  
![\[顯示 AWS Lambda 服務將使用者活動饋送至 Amazon Pinpoint 以取得建議的反向工作流程。\]](http://docs.aws.amazon.com/zh_tw/rekognition/latest/customlabels-dg/images/brand-detection-lambda.png)

我們建議您不要在訓練影像中混合使用影像層級的標籤和週框方塊。

測試影像必須在您要尋找的品牌執行個體周圍有週框方塊。只有在訓練影像包含標記的週框方塊時，您才可以分割訓練資料集來建立測試資料集。如果訓練影像只具有影像層級標籤，您即必須建立測試資料集，其中需包含影像和標記的週框方塊。如果您訓練模型來尋找品牌位置，請根據您標記影像的方式進行 [使用週框方塊標記物件](md-localize-objects.md) 和 [將影像層級標籤指派給影像](md-assign-image-level-labels.md)。

[品牌偵測](getting-started.md#gs-brand-detection-example) 的範例專案展示了 Amazon Rekognition 自訂標籤如何使用標籤的邊界框來培訓尋找物體位置的模型。

## 模型類型的標籤需求
<a name="md-model-types-table"></a>

使用下表確定如何標記影像。

您可以在單一資料集中合併影像層級標籤和已標記影像的週框方塊。在這種情況下，Amazon Rekognition 自訂標籤會選擇要建立影像層級模型或是物件位置模型。


| 範例 | 訓練影像 | 測試影像 | 
| --- | --- | --- | 
|  [Image classification](#md-dataset-image-classification)  |  每個影像 1 個影像層級標籤  |  每個影像 1 個影像層級標籤   | 
|  [多標籤分類](#md-dataset-image-classification-multi-label)  |  每個影像多個影像層級標籤  |  每個影像多個影像層級標籤  | 
|  [尋找品牌位置](#md-dataset-purpose-brands)  |  影像層級標籤 (您也可以使用標記的週框方塊)  |  標記的週框方塊  | 
|  [尋找物件位置](#md-dataset-purpose-localization)  |  標記的週框方塊  |  標記的週框方塊  | 

# 準備影像
<a name="md-prepare-images"></a>

 訓練和測試資料集中的影像包含您希望模型尋找的物件、場景或概念。

影像的內容應具有各種背景和光源，以代表您希望訓練過的模型識別的影像。

本區段會提供訓練和測試資料集中影像的相關資訊。

## 影像格式
<a name="pi-image-format"></a>

您可以使用 PNG 和 JPEG 格式的影像來訓練 Amazon Rekognition 自訂標籤。同樣地，若要使用 `DetectCustomLabels` 偵測自訂標籤，您需要 PNG 和 JPEG 格式的影像。

## 輸入影像建議
<a name="md-image-recommendations"></a>

Amazon Rekognition 自訂標籤需要影像來訓練和測試您的模型。為了準備影像，請考慮下列事項：
+ 針對您要建立的模型選擇特定網域。例如，您可以為風景檢視選擇模型，為諸如機器零件之類的物件選擇另一個模型。如果您的影像位於所選網域中，Amazon Rekognition 自訂標籤的成效最佳。
+ 至少使用 10 個影像來訓練您的模型。
+ 影像必須採用 PNG 或 JPEG 格式。
+ 使用以各種光源、背景和解析度顯示物件的影像。
+ 訓練和測試影像應與您要和模型搭配使用的影像類似。
+ 決定將那些標籤指派給影像。
+ 確保影像的解析度足夠大。如需詳細資訊，請參閱[Amazon Rekognition 自訂標籤中的指南和配額](limits.md)。
+ 確保遮蔽物不會遮掩您要偵測的物件。
+ 使用與背景充分對比的映像。
+ 使用明亮且銳利的映像。盡量避免使用可能會因主體和相機移動而模糊的影像。
+ 使用物件佔據影像很大比例的影像。
+ 測試資料集中的影像不應該是訓練資料集中的影像。它們應該包括訓練模型來分析的物件、場景和概念。

## 影像集大小
<a name="md-set"></a>

Amazon Rekognition 自訂標籤會使用一組影像來訓練模型。最起碼，您應該至少使用 10 個影像進行訓練。Amazon Rekognition 自訂標籤會在資料集中存放訓練和測試影像。如需詳細資訊，請參閱[建立包含影像的訓練和測試資料集](md-create-dataset.md)。

# 建立包含影像的訓練和測試資料集
<a name="md-create-dataset"></a>

您可以從具有單一資料集的專案開始，或具有不同訓練和測試資料集的專案開始。如果您從單一資料集開始，Amazon Rekognition 自訂標籤會在培訓期間分割您的資料集，以便為您的專案建立培訓資料集 (80%) 和測試資料集 (20%)。如果您希望 Amazon Rekognition 自訂標籤決定影像用於訓練和測試的位置，請從單一資料集開始。為了完全控制培訓、測試和效能調整，我們建議您使用個別的培訓和測試資料集來啟動專案。

從下列其中一個位置匯入影像，即可為專案建立訓練和測試資料集：
+ [從 Amazon S3 儲存貯體匯入映像](md-create-dataset-s3.md)
+ [從本機電腦匯入映像](md-create-dataset-computer.md)
+ [使用資訊清單檔案匯入映像](md-create-dataset-ground-truth.md)
+ [從現有資料集複製內容](md-create-dataset-existing-dataset.md)

如果您使用不同的訓練和測試資料集啟動專案，即可針對每個資料集使用不同的來源位置。

依據您匯入影像的位置而定，您的影像可能沒有標記。例如，從本機電腦匯入的影像即沒有標記。從 Amazon SageMaker AI Ground Truth 資訊清單檔案匯入的影像會加上標籤。您可以使用 Amazon Rekognition 自訂標籤主控台來新增、變更和分配標籤。如需詳細資訊，請參閱[標記檔案](md-labeling-images.md)。

如果上傳的影像有錯誤、影像遺失或影像缺少標籤，請閱讀 [偵錯失敗的模型訓練](tm-debugging.md)。

如需資料集的詳細資訊，請參閱 [管理資料集](managing-dataset.md)。

## 建立訓練和測試資料集 (SDK)
<a name="cd-create-dataset-sdk"></a>

您可以使用 AWS SDK 來建立訓練和測試資料集。

`CreateDataset` 操作可讓您在建立新資料集時選擇性地指定標籤，以便分類和管理 資源。

### 訓練資料集
<a name="cd-create-training-dataset"></a>

您可以使用 AWS SDK 以下列方式建立訓練資料集。
+ 將 [CreateDataset](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_CreateDataset) 與您提供的 Amazon Sagemaker 格式清單檔案搭配使用。如需詳細資訊，請參閱[建立清單檔案](md-create-manifest-file.md)。如需範例程式碼，請參閱 [使用 SageMaker AI Ground Truth 資訊清單檔案 (SDK) 建立資料集](md-create-dataset-ground-truth.md#md-create-dataset-ground-truth-sdk)。
+ 使用 `CreateDataset` 複製現有的 Amazon Rekognition 自訂標籤資料集。如需範例程式碼，請參閱 [使用現有的資料集建立資料集 (SDK)](md-create-dataset-existing-dataset-sdk.md)。
+ 使用 `CreateDataset` 建立空白資料集，並在稍後使用 [UpdateDatasetEntries](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_UpdateDatasetEntries) 新增資料集項目。若要建立空白資料集，請參閱 [將資料集新增至專案](md-add-dataset.md)。若要新增影像至資料集，請參閱 [新增更多圖像 (SDK)](md-add-images.md#md-add-images-sdk)。您需要先新增資料集項目，才能訓練模型。

### 測試資料集
<a name="cd-create-test-dataset"></a>

您可以使用 AWS SDK 以下列方式建立測試資料集：
+ 將 [CreateDataset](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_CreateDataset) 與您提供的 Amazon Sagemaker 格式清單檔案搭配使用。如需詳細資訊，請參閱[建立清單檔案](md-create-manifest-file.md)。如需範例程式碼，請參閱 [使用 SageMaker AI Ground Truth 資訊清單檔案 (SDK) 建立資料集](md-create-dataset-ground-truth.md#md-create-dataset-ground-truth-sdk)。
+ 使用 `CreateDataset` 複製現有的 Amazon Rekognition 自訂標籤資料集。如需範例程式碼，請參閱 [使用現有的資料集建立資料集 (SDK)](md-create-dataset-existing-dataset-sdk.md)。
+ 使用 `CreateDataset` 建立空白資料集，並在稍後使用 `UpdateDatasetEntries` 新增資料集項目。若要建立空白資料集，請參閱 [將資料集新增至專案](md-add-dataset.md)。若要新增影像至資料集，請參閱 [新增更多圖像 (SDK)](md-add-images.md#md-add-images-sdk)。您需要先新增資料集項目，才能訓練模型。
+ 將訓練資料集分割為不同的訓練和測試資料集。首先使用 `CreateDataset` 建立空白測試資料集。接著，呼叫 [DistributeDatasetEntries](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_DistributeDatasetEntries)，將 20% 的訓練資料集項目移至測試資料集。若要建立空白資料集，請參閱 [將資料集新增至專案（SDK）](md-add-dataset.md#md-add-dataset-sdk)。若要分割訓練資料集，請參閱[分配培訓資料集 (SDK)](md-distributing-datasets.md)。

# 從 Amazon S3 儲存貯體匯入映像
<a name="md-create-dataset-s3"></a>

從 Amazon S3 儲存貯體會入影像。您可以使用主控台儲存貯體，或 AWS 帳戶中的其他 Amazon S3 儲存貯體。如果您正在使用主控台儲存貯體，則已設定所需權限。如果您沒有使用主控台儲存貯體，請參閱 [存取外部 Amazon S3 儲存貯體](su-console-policy.md#su-external-buckets)。

**注意**  
您無法使用 AWS SDK 直接從 Amazon S3 儲存貯體中的映像建立資料集。請改為建立參考影像來源位置的清單檔案。如需詳細資訊，請參閱[使用資訊清單檔案匯入映像](md-create-dataset-ground-truth.md)

在建立資料集期間，您可以選擇根據包含影像的資料夾名稱，為影像分配標籤名稱。資料夾必須是您在資料集建立期間在 **S3 資料夾位置**中指定的 Amazon S3 資料夾路徑的子系。若要建立資料集，請參閱 [從 S3 儲存貯體匯入影像以建立資料集](#cd-procedure)。

例如，假設 Amazon S3 儲存貯體具有下列資料夾結構。如果您將 Amazon S3 資料夾位置指定為 *S3-bucket/alexa-devices*，標籤 *echo* 即會被指派給資料夾 *echo* 中的影像。同樣地，標籤 *echo-dot* 會被指派給資料夾 *echo-dot* 中的影像。較深的子資料夾的名稱不會用於標記影像。而會改用 Amazon S3 資料夾位置的適當子資料夾。同樣地，標籤 *echo-dot* 會被指派給資料夾 *white-echo-dots* 中的影像。S3 資料夾位置 (*alexa-devices*) 層級的影像沒有被指派的標籤。

 指定較深的 S3 資料夾位置，即可使用資料夾結構中較深的資料夾來標記影像。例如，如果您指定 *S3-bucket/alexa-devices/echo-dot*，資料夾 *white-echo-dot* 中的影像會以 *white-echo-dot* 標記。不會匯入指定的 s3 資料夾位置以外的影像，例如 *echo*。

```
S3-bucket
└── alexa-devices
    ├── echo
    │   ├── echo-image-1.png
    │   └── echo-image-2.png
    │   ├── .
    │   └── .
    └── echo-dot
        ├── white-echo-dot
        │   ├── white-echo-dot-image-1.png
        │   ├── white-echo-dot-image-2.png
        │
        ├── echo-dot-image-1.png
        ├── echo-dot-image-2.png
        ├── .
        └── .
```

我們建議您在目前 AWS 區域中第一次開啟主控台時，使用 Amazon Rekognition 為您建立的 Amazon Amazon S3 儲存貯體 （主控台儲存貯體）。如果您正在使用的 Amazon S3 儲存貯體與主控台儲存貯體不同 (外部)，則主控台會在建立資料集期間提示您設定適當的權限。如需詳細資訊，請參閱[步驟 2：設定 Amazon Rekognition 自訂標籤主控台權限](su-console-policy.md)。

## 從 S3 儲存貯體匯入影像以建立資料集
<a name="cd-procedure"></a>

下列程序會說明如何使用存放在 Console S3 儲存貯體中的影像來建立資料集。影像會自動以存放影像的資料夾名稱標記。

匯入影像之後，您即可從資料集圖庫頁面新增更多影像、分配標籤，以及新增週框方塊。如需詳細資訊，請參閱[標記檔案](md-labeling-images.md)。<a name="cd-upload-s3-bucket"></a>

**將您的影像上傳到 Amazon Simple Storage Service (S3) 儲存貯體**

1. 在本機檔案系統上建立資料夾。使用資料夾名稱，例如 *alexa-devices*。

1. 在您剛建立的資料夾中，建立以您要使用的每個標籤命名的資料夾。例如，*echo* 和 *echo-dot*。資料夾結構應該類似下列內容。

   ```
   alexa-devices
   ├── echo
   │   ├── echo-image-1.png
   │   ├── echo-image-2.png
   │   ├── .
   │   └── .
   └── echo-dot
       ├── echo-dot-image-1.png
       ├── echo-dot-image-2.png
       ├── .
       └── .
   ```

1. 將與標籤對應的影像放入具有相同標籤名稱的資料夾中。

1. 登入 AWS 管理主控台 ，並在 https：//[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) 開啟 Amazon S3 主控台。

1. 在*第一次設定*期間，將您在步驟 1 中建立的[資料夾新增](https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-objects.html)至 Amazon Rekognition 自訂標籤為您建立的 Amazon S3 儲存貯體 (主控台儲存貯體)。如需詳細資訊，請參閱[管理 Amazon Rekognition 自訂標籤專案](managing-project.md)。

1. 開啟 Amazon Rekognition 主控台：[https://console.aws.amazon.com/rekognition/](https://console.aws.amazon.com/rekognition/)。

1. 選擇**使用自訂標籤**。

1. 選擇**開始使用**。

1. 在左側導覽視窗中，選擇**專案**。

1. 在**專案** 頁面，選擇您要新增資料集的專案。專案的詳細資訊頁面隨即顯示。

1. 選擇**建立資料集**。**建立資料集**頁面即會顯示。

1. 在**開始設定**中，選擇**從單一資料集開始**或**從訓練資料集開始**。若要建立更高品質的模型，我們建議您從個別的訓練和測試資料集開始。

------
#### [ Single dataset ]

   1. 在**訓練資料集詳細資訊**區段中，選擇**從 S3 儲存貯體匯入影像**。

   1. 在**訓練資料集詳細資訊**區段的**影像來源設定**區段中，輸入步驟 13 至 15 的資訊。

------
#### [ Separate training and test datasets ]

   1. 在**訓練資料集詳細資訊**區段中，選擇**從 S3 儲存貯體匯入影像**。

   1. 在**訓練資料集詳細資訊**區段的**影像來源設定**區段中，輸入步驟 13 至 15 的資訊。

   1. 在**測試資料集詳細資訊**區段中，選擇**從 S3 儲存貯體匯入影像**。

   1. 在**測試資料集詳細資訊**區段的**影像來源設定**區段中，輸入步驟 13 至 15 的資訊。

------

1. 選擇**從 Amazon S3 儲存貯體匯入影像**。

1. 在 **S3 URI** 中，輸入 Amazon S3 儲存貯體位置和資料夾路徑。

1. 選擇**根據資料夾自動將標籤連接至影像**。

1. 選擇**建立資料集**。專案的資料集頁面隨即開啟。

1. 如果您需要新增或變更標籤，請執行 [標記檔案](md-labeling-images.md)。

1. 請遵循 [培訓模型（主控台）](training-model.md#tm-console) 中的步驟訓練模型。

# 從本機電腦匯入映像
<a name="md-create-dataset-computer"></a>

影像會直接從您的電腦載入。您一次最多可以上傳 30 個影像。

您上傳的影像不會有與其相關連的標籤。如需詳細資訊，請參閱[標記檔案](md-labeling-images.md)。如果您要上傳許多影像，請考慮使用 Amazon S3 儲存貯體。如需詳細資訊，請參閱[從 Amazon S3 儲存貯體匯入映像](md-create-dataset-s3.md)。

**注意**  
您無法使用 AWS SDK 建立具有本機映像的資料集。請改為建立清單檔案，並將影像上傳至 Amazon S3 儲存貯體。如需詳細資訊，請參閱[使用資訊清單檔案匯入映像](md-create-dataset-ground-truth.md)。

**使用本機電腦 (主控台) 上的影像建立資料集**

1. 開啟 Amazon Rekognition 主控台：[https://console.aws.amazon.com/rekognition/](https://console.aws.amazon.com/rekognition/)。

1. 選擇**使用自訂標籤**。

1. 選擇**開始使用**。

1. 在左側導覽視窗中，選擇**專案**。

1. 在**專案** 頁面，選擇您要新增資料集的專案。專案的詳細資訊頁面隨即顯示。

1. 選擇**建立資料集**。**建立資料集**頁面即會顯示。

1. 在**開始設定**中，選擇**從單一資料集開始**或**從訓練資料集開始**。若要建立更高品質的模型，我們建議您從個別的訓練和測試資料集開始。

------
#### [ Single dataset ]

   1. 在**訓練資料集詳細資訊區段**中，選擇**從您的電腦上傳影像**。

   1. 選擇**建立資料集**。

   1. 在專案的資料集頁面上，選擇**新增影像**。

   1. 從電腦檔案中選擇要上傳至資料集的影像。您可以拖曳影像或從本機電腦選擇要上傳的影像。

   1. 選擇**上傳影像**。

------
#### [ Separate training and test datasets ]

   1. 在**訓練資料集詳細資訊**區段中，選擇**從您的電腦上傳影像**。

   1. 在**測試資料集詳細資訊**區段中，選擇**從您的電腦上傳影像**。
**注意**  
您的訓練和測試資料集可以有不同的影像來源。

   1. 選擇**建立資料集**。專案的資料集頁面隨即顯示，其中會包含各自資料集的**訓練**索引標籤和**測試**索引標籤。

   1. 選擇**動作**，然後選擇**新增影像至訓練資料集**。

   1. 選擇要上傳至資料集的影像。您可以拖曳影像或從本機電腦選擇要上傳的影像。

   1. 選擇**上傳影像**。

   1. 重複步驟 5e 至 5g。對於步驟 5e，請選擇**動作**，然後選擇**新增影像至測試資料集**。

------

1. 請遵循 [標記檔案](md-labeling-images.md) 中的步驟標記影像。

1. 請遵循 [培訓模型（主控台）](training-model.md#tm-console) 中的步驟訓練模型。

# 使用資訊清單檔案匯入映像
<a name="md-create-dataset-ground-truth"></a>

您可以使用 Amazon SageMaker AI Ground Truth 格式資訊清單檔案來建立資料集。您可以從 Amazon SageMaker AI Ground Truth 任務使用資訊清單檔案。如果您的影像和標籤不是 SageMaker AI Ground Truth 資訊清單檔案的格式，您可以建立 SageMaker AI 格式資訊清單檔案，並使用它來匯入已標記的影像。

`CreateDataset` 操作已更新，可讓您在建立新資料集時選擇性地指定標籤。標籤是可用於分類和管理 資源的鍵值組。

**Topics**
+ [使用 SageMaker AI Ground Truth 資訊清單檔案 （主控台） 建立資料集](#md-create-dataset-ground-truth-console)
+ [使用 SageMaker AI Ground Truth 資訊清單檔案 (SDK) 建立資料集](#md-create-dataset-ground-truth-sdk)
+ [建立資料集請求](#create-dataset-ground-truth-request)
+ [使用 Amazon SageMaker AI Ground Truth 任務標記映像](md-create-dataset-ground-truth-job.md)
+ [建立清單檔案](md-create-manifest-file.md)
+ [在資訊清單檔案中匯入影像層級標籤](md-create-manifest-file-classification.md)
+ [資訊清單檔案中的物件當地語系化](md-create-manifest-file-object-detection.md)
+ [清單檔案的驗證規則](md-create-manifest-file-validation-rules.md)
+ [將其他資料集格式轉換為清單檔案](md-converting-to-sm-format.md)

## 使用 SageMaker AI Ground Truth 資訊清單檔案 （主控台） 建立資料集
<a name="md-create-dataset-ground-truth-console"></a>

下列程序說明如何使用 SageMaker AI Ground Truth 格式資訊清單檔案來建立資料集。

1. 執行下列其中一項操作，建立訓練資料集的清單檔案：
   + 遵循 中的指示，使用 SageMaker AI GroundTruth 任務建立資訊清單檔案[使用 Amazon SageMaker AI Ground Truth 任務標記映像](md-create-dataset-ground-truth-job.md)。
   + 依照 [建立清單檔案](md-create-manifest-file.md) 中的指示，建立您自己的清單檔案。

   如果您要建立測試資料集，請重複步驟 1 即可建立測試資料集。

1. 開啟 Amazon Rekognition 主控台：[https://console.aws.amazon.com/rekognition/](https://console.aws.amazon.com/rekognition/)。

1. 選擇**使用自訂標籤**。

1. 選擇**開始使用**。

1. 在左側導覽視窗中，選擇**專案**。

1. 在**專案** 頁面，選擇您要新增資料集的專案。專案的詳細資訊頁面隨即顯示。

1. 選擇**建立資料集**。**建立資料集**頁面即會顯示。

1. 在**開始設定**中，選擇**從單一資料集開始**或**從訓練資料集開始**。若要建立更高品質的模型，我們建議您從個別的訓練和測試資料集開始。

------
#### [ Single dataset ]

   1. 在**訓練資料集詳細資訊**區段中，選擇**匯入由 SageMaker Ground Truth 標記的影像**。

   1. 在 **.manifest 檔案位置**，輸入您在步驟 1 建立之清單檔案的位置。

   1. 選擇**建立資料集**。專案的資料集頁面隨即開啟。

------
#### [ Separate training and test datasets ]

   1. 在**訓練資料集詳細資訊**區段中，選擇**匯入由 SageMaker Ground Truth 標記的影像**。

   1. 在 **.manifest 檔案位置**，輸入您在步驟 1 建立之訓練資料集清單檔案的位置。

   1. 在**測試資料集詳細資訊**區段中，選擇**匯入由 SageMaker Ground Truth 標記的影像**。
**注意**  
您的訓練和測試資料集可以有不同的影像來源。

   1. 在 **.manifest 檔案位置**，輸入您在步驟 1 建立之測試資料集清單檔案的位置。

   1. 選擇**建立資料集**。專案的資料集頁面隨即開啟。

------

1. 如果您需要新增或變更標籤，請執行 [標記檔案](md-labeling-images.md)。

1. 請遵循 [培訓模型（主控台）](training-model.md#tm-console) 中的步驟訓練模型。

## 使用 SageMaker AI Ground Truth 資訊清單檔案 (SDK) 建立資料集
<a name="md-create-dataset-ground-truth-sdk"></a>

下列程序會說明如何使用 [CreateDataset](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_CreateDataset) API 從清單檔案建立訓練或測試資料集。

您可以使用現有的資訊清單檔案，例如 [SageMaker AI Ground Truth 任務](md-create-dataset-ground-truth-job.md)的輸出，或建立您自己的[資訊清單檔案](md-create-manifest-file.md)。

1. 如果您尚未這麼做，請安裝並設定 AWS CLI 和 AWS SDKs。如需詳細資訊，請參閱[步驟 4：設定 AWS CLI 和 AWS SDKs](su-awscli-sdk.md)。

1. 執行下列其中一項操作，建立訓練資料集的清單檔案：
   + 遵循 中的指示，使用 SageMaker AI GroundTruth 任務建立資訊清單檔案[使用 Amazon SageMaker AI Ground Truth 任務標記映像](md-create-dataset-ground-truth-job.md)。
   + 依照 [建立清單檔案](md-create-manifest-file.md) 中的指示，建立您自己的清單檔案。

   如果您要建立測試資料集，請重複步驟 2 即可建立測試資料集。

1. 使用以下程式碼範例建立訓練和測試資料集。

------
#### [ AWS CLI ]

   使用下列程式碼建立資料集。取代以下項目：
   + `project_arn` — 您要為其新增測試資料集的專案的 ARN。
   + `type`— 您要建立的資料集類型 (訓練或測試)
   + `bucket` － 包含資料集之清單檔案的儲存貯體。
   + `manifest_file` － 清單檔案的路徑和檔案名稱

   ```
   aws rekognition create-dataset --project-arn project_arn \
     --dataset-type type \
     --dataset-source '{ "GroundTruthManifest": { "S3Object": { "Bucket": "bucket", "Name": "manifest_file" } } }' \
     --profile custom-labels-access
     --tags '{"key1": "value1", "key2": "value2"}'
   ```

------
#### [ Python ]

   使用下列值建立資料集。請提供以下命令列參數：
   + `project_arn` — 您要為其新增測試資料集之專案的 ARN。
   + `dataset_type` — 您要建立的資料集類型 (`train` 或 `test`)。
   + `bucket` － 包含資料集之清單檔案的儲存貯體。
   + `manifest_file` － 清單檔案的路徑和檔案名稱

   ```
   #Copyright 2023 Amazon.com, Inc. or its affiliates. All Rights Reserved.
   #PDX-License-Identifier: MIT-0 (For details, see https://github.com/awsdocs/amazon-rekognition-custom-labels-developer-guide/blob/master/LICENSE-SAMPLECODE.)
   
   
   import argparse
   import logging
   import time
   import json
   import boto3
   from botocore.exceptions import ClientError
   
   logger = logging.getLogger(__name__)
   
   def create_dataset(rek_client, project_arn, dataset_type, bucket, manifest_file):
       """
       Creates an Amazon Rekognition Custom Labels dataset.
       :param rek_client: The Amazon Rekognition Custom Labels Boto3 client.
       :param project_arn: The ARN of the project in which you want to create a dataset.
       :param dataset_type: The type of the dataset that you want to create (train or test).
       :param bucket: The S3 bucket that contains the manifest file.
       :param manifest_file: The path and filename of the manifest file.
       """
   
       try:
           #Create the project
           logger.info("Creating %s dataset for project %s",dataset_type, project_arn)
   
           dataset_type = dataset_type.upper()
   
           dataset_source = json.loads(
               '{ "GroundTruthManifest": { "S3Object": { "Bucket": "'
               + bucket
               + '", "Name": "'
               + manifest_file
               + '" } } }'
           )
   
           response = rek_client.create_dataset(
               ProjectArn=project_arn, DatasetType=dataset_type, DatasetSource=dataset_source
           )
   
           dataset_arn=response['DatasetArn']
   
           logger.info("dataset ARN: %s",dataset_arn)
   
           finished=False
           while finished is False:
   
               dataset=rek_client.describe_dataset(DatasetArn=dataset_arn)
   
               status=dataset['DatasetDescription']['Status']
               
               if status == "CREATE_IN_PROGRESS":
                   logger.info("Creating dataset: %s ",dataset_arn)
                   time.sleep(5)
                   continue
   
               if status == "CREATE_COMPLETE":
                   logger.info("Dataset created: %s", dataset_arn)
                   finished=True
                   continue
   
               if status == "CREATE_FAILED":
                   error_message = f"Dataset creation failed: {status} : {dataset_arn}"
                   logger.exception(error_message)
                   raise Exception (error_message)
                   
               error_message = f"Failed. Unexpected state for dataset creation: {status} : {dataset_arn}"
               logger.exception(error_message)
               raise Exception(error_message)
               
           return dataset_arn
      
       
       except ClientError as err:
           logger.exception("Couldn't create dataset: %s",err.response['Error']['Message'])
           raise
   
   def add_arguments(parser):
       """
       Adds command line arguments to the parser.
       :param parser: The command line parser.
       """
   
       parser.add_argument(
           "project_arn", help="The ARN of the project in which you want to create the dataset."
       )
   
       parser.add_argument(
           "dataset_type", help="The type of the dataset that you want to create (train or test)."
       )
   
       parser.add_argument(
           "bucket", help="The S3 bucket that contains the manifest file."
       )
       
       parser.add_argument(
           "manifest_file", help="The path and filename of the manifest file."
       )
   
   
   def main():
   
       logging.basicConfig(level=logging.INFO, format="%(levelname)s: %(message)s")
   
       try:
   
           #Get command line arguments.
           parser = argparse.ArgumentParser(usage=argparse.SUPPRESS)
           add_arguments(parser)
           args = parser.parse_args()
   
           print(f"Creating {args.dataset_type} dataset for project {args.project_arn}")
   
           #Create the dataset.
           session = boto3.Session(profile_name='custom-labels-access')
           rekognition_client = session.client("rekognition")
   
           dataset_arn=create_dataset(rekognition_client, 
               args.project_arn,
               args.dataset_type,
               args.bucket,
               args.manifest_file)
   
           print(f"Finished creating dataset: {dataset_arn}")
   
   
       except ClientError as err:
           logger.exception("Problem creating dataset: %s", err)
           print(f"Problem creating dataset: {err}")
   
   
   
   if __name__ == "__main__":
       main()
   ```

------
#### [ Java V2 ]

   使用下列值建立資料集。請提供以下命令列參數：
   + `project_arn` — 您要為其新增測試資料集之專案的 ARN。
   + `dataset_type` — 您要建立的資料集類型 (`train` 或 `test`)。
   + `bucket` － 包含資料集之清單檔案的儲存貯體。
   + `manifest_file` － 清單檔案的路徑和檔案名稱

   ```
   /*
      Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
      SPDX-License-Identifier: Apache-2.0
   */
   
   package com.example.rekognition;
   
   import software.amazon.awssdk.auth.credentials.ProfileCredentialsProvider;
   import software.amazon.awssdk.regions.Region;
   import software.amazon.awssdk.services.rekognition.RekognitionClient;
   import software.amazon.awssdk.services.rekognition.model.CreateDatasetRequest;
   import software.amazon.awssdk.services.rekognition.model.CreateDatasetResponse;
   import software.amazon.awssdk.services.rekognition.model.DatasetDescription;
   import software.amazon.awssdk.services.rekognition.model.DatasetSource;
   import software.amazon.awssdk.services.rekognition.model.DatasetStatus;
   import software.amazon.awssdk.services.rekognition.model.DatasetType;
   import software.amazon.awssdk.services.rekognition.model.DescribeDatasetRequest;
   import software.amazon.awssdk.services.rekognition.model.DescribeDatasetResponse;
   import software.amazon.awssdk.services.rekognition.model.GroundTruthManifest;
   import software.amazon.awssdk.services.rekognition.model.RekognitionException;
   import software.amazon.awssdk.services.rekognition.model.S3Object;
   
   import java.util.logging.Level;
   import java.util.logging.Logger;
   
   public class CreateDatasetManifestFiles {
   
       public static final Logger logger = Logger.getLogger(CreateDatasetManifestFiles.class.getName());
   
       public static String createMyDataset(RekognitionClient rekClient, String projectArn, String datasetType,
               String bucket, String name) throws Exception, RekognitionException {
   
           try {
   
               logger.log(Level.INFO, "Creating {0} dataset for project : {1} from s3://{2}/{3} ",
                       new Object[] { datasetType, projectArn, bucket, name });
   
               DatasetType requestDatasetType = null;
   
               switch (datasetType) {
               case "train":
                   requestDatasetType = DatasetType.TRAIN;
                   break;
               case "test":
                   requestDatasetType = DatasetType.TEST;
                   break;
               default:
                   logger.log(Level.SEVERE, "Could not create dataset. Unrecognized dataset type: {0}", datasetType);
                   throw new Exception("Could not create dataset. Unrecognized dataset type: " + datasetType);
   
               }
   
               GroundTruthManifest groundTruthManifest = GroundTruthManifest.builder()
                       .s3Object(S3Object.builder().bucket(bucket).name(name).build()).build();
   
               DatasetSource datasetSource = DatasetSource.builder().groundTruthManifest(groundTruthManifest).build();
   
               CreateDatasetRequest createDatasetRequest = CreateDatasetRequest.builder().projectArn(projectArn)
                       .datasetType(requestDatasetType).datasetSource(datasetSource).build();
   
               CreateDatasetResponse response = rekClient.createDataset(createDatasetRequest);
   
               boolean created = false;
   
               do {
   
                   DescribeDatasetRequest describeDatasetRequest = DescribeDatasetRequest.builder()
                           .datasetArn(response.datasetArn()).build();
                   DescribeDatasetResponse describeDatasetResponse = rekClient.describeDataset(describeDatasetRequest);
   
                   DatasetDescription datasetDescription = describeDatasetResponse.datasetDescription();
   
                   DatasetStatus status = datasetDescription.status();
   
                   logger.log(Level.INFO, "Creating dataset ARN: {0} ", response.datasetArn());
   
                   switch (status) {
   
                   case CREATE_COMPLETE:
                       logger.log(Level.INFO, "Dataset created");
                       created = true;
                       break;
   
                   case CREATE_IN_PROGRESS:
                       Thread.sleep(5000);
                       break;
   
                   case CREATE_FAILED:
                       String error = "Dataset creation failed: " + datasetDescription.statusAsString() + " "
                               + datasetDescription.statusMessage() + " " + response.datasetArn();
                       logger.log(Level.SEVERE, error);
                       throw new Exception(error);
   
                   default:
                       String unexpectedError = "Unexpected creation state: " + datasetDescription.statusAsString() + " "
                               + datasetDescription.statusMessage() + " " + response.datasetArn();
                       logger.log(Level.SEVERE, unexpectedError);
                       throw new Exception(unexpectedError);
                   }
   
               } while (created == false);
   
               return response.datasetArn();
   
           } catch (RekognitionException e) {
               logger.log(Level.SEVERE, "Could not create dataset: {0}", e.getMessage());
               throw e;
           }
   
       }
   
       public static void main(String[] args) {
   
           String datasetType = null;
           String bucket = null;
           String name = null;
           String projectArn = null;
           String datasetArn = null;
   
           final String USAGE = "\n" + "Usage: " + "<project_arn> <dataset_type> <dataset_arn>\n\n" + "Where:\n"
                   + "   project_arn - the ARN of the project that you want to add copy the datast to.\n\n"
                   + "   dataset_type - the type of the dataset that you want to create (train or test).\n\n"
                   + "   bucket - the S3 bucket that contains the manifest file.\n\n"
                   + "   name - the location and name of the manifest file within the bucket.\n\n";
   
           if (args.length != 4) {
               System.out.println(USAGE);
               System.exit(1);
           }
   
           projectArn = args[0];
           datasetType = args[1];
           bucket = args[2];
           name = args[3];
   
           try {
   
               // Get the Rekognition client
               RekognitionClient rekClient = RekognitionClient.builder()
                   .credentialsProvider(ProfileCredentialsProvider.create("custom-labels-access"))
                   .region(Region.US_WEST_2)
                   .build();
   
   
                // Create the dataset
               datasetArn = createMyDataset(rekClient, projectArn, datasetType, bucket, name);
   
               System.out.println(String.format("Created dataset: %s", datasetArn));
   
               rekClient.close();
   
           } catch (RekognitionException rekError) {
               logger.log(Level.SEVERE, "Rekognition client error: {0}", rekError.getMessage());
               System.exit(1);
           } catch (Exception rekError) {
               logger.log(Level.SEVERE, "Error: {0}", rekError.getMessage());
               System.exit(1);
           }
   
       }
   
   }
   ```

------

1. 如果需要新增或變更標籤，請參閱 [管理標籤 (SDK)](md-labels.md#md-labels-sdk)。

1. 請遵循 [培訓模型 (SDK)](training-model.md#tm-sdk) 中的步驟訓練模型。

## 建立資料集請求
<a name="create-dataset-ground-truth-request"></a>

 以下是 CreateDataset 操作請求的格式：

```
{
"DatasetSource": {
"DatasetArn": "string",
"GroundTruthManifest": {
"S3Object": {
"Bucket": "string",
"Name": "string",
"Version": "string"
}
}
},
"DatasetType": "string",
"ProjectArn": "string",
"Tags": {
"string": "string"
}
}
```

# 使用 Amazon SageMaker AI Ground Truth 任務標記映像
<a name="md-create-dataset-ground-truth-job"></a>

透過 Amazon SageMaker AI Ground Truth，您可以使用來自您選擇的廠商公司 Amazon Mechanical Turk 的工作者，或是內部的私有人力資源，以及可讓您建立標籤組映像的機器學習。Amazon Rekognition 自訂標籤會從您指定的 Amazon S3 儲存貯體匯入 SageMaker AI Ground Truth 資訊清單檔案。

Amazon Rekognition 自訂標籤支援下列 SageMaker AI Ground Truth 任務。
+ [影像分類](https://docs.aws.amazon.com/sagemaker/latest/dg/sms-image-classification.html)
+ [週框方塊](https://docs.aws.amazon.com/sagemaker/latest/dg/sms-bounding-box.html)

您匯入的檔案是影像和清單檔案。清單檔案包含您匯入影像的標籤和週框方塊資訊。

Amazon Rekognition 需要權限才能存取存放影像的 Amazon S3 儲存貯體。如果您正在使用 Amazon Rekognition 自訂標籤為您設定的主控台儲存貯體，則已設定所需權限。如果您沒有使用主控台儲存貯體，請參閱 [存取外部 Amazon S3 儲存貯體](su-console-policy.md#su-external-buckets)。

## 使用 SageMaker AI Ground Truth 任務建立資訊清單檔案 （主控台）
<a name="md-create-dataset-ground-truth-job-console"></a>

下列程序說明如何使用由 SageMaker AI Ground Truth 任務標記的影像來建立資料集。任務輸出檔案會存放在 Amazon Rekognition 自訂標籤主控台儲存貯體中。<a name="create-dataset-procedure-ground-truth"></a>

**使用 SageMaker AI Ground Truth 任務標記的影像建立資料集 （主控台）**

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)：// 開啟 Amazon S3 主控台。

1. 在主控台儲存貯體中，[建立資料夾](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-folder.html)以保存您的訓練影像。
**注意**  
主控台儲存貯體會在您第一次在 AWS 區域中開啟 Amazon Rekognition 自訂標籤主控台時建立。如需詳細資訊，請參閱[管理 Amazon Rekognition 自訂標籤專案](managing-project.md)。

1. [將影像上傳](https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-objects.html)至您剛建立的資料夾。

1. 在主控台儲存貯體中，建立資料夾以保存 Ground Truth 任務的輸出。

1. 開啟位在 [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/) 的 SageMaker AI 主控台。

1. 建立 Ground Truth 標記任務。您需要在步驟 2 和步驟 4 中建立之資料夾的 Amazon S3 URL。如需詳細資訊，請參閱[使用 Amazon SageMaker Ground Truth 進行資料標記](https://docs.aws.amazon.com/sagemaker/latest/dg/sms.html)。

1. 記下 `output.manifest` 檔案在您於步驟 4 建立的資料夾中的位置。它應該位於子資料夾 `Ground-Truth-Job-Name/manifests/output`。

1. 請遵循 [使用 SageMaker AI Ground Truth 資訊清單檔案 （主控台） 建立資料集](md-create-dataset-ground-truth.md#md-create-dataset-ground-truth-console) 中的指示，使用上傳的資訊清單檔案建立資料集。對於步驟 8，請在 **.manifest 檔案位置**，輸入您在上一個步驟中記下的位置的 Amazon S3 URL。如果您使用 AWS SDK，請執行 [使用 SageMaker AI Ground Truth 資訊清單檔案 (SDK) 建立資料集](md-create-dataset-ground-truth.md#md-create-dataset-ground-truth-sdk)。

1. 重複步驟 1 - 6，為您的測試資料集建立 SageMaker AI Ground Truth 任務。

# 建立清單檔案
<a name="md-create-manifest-file"></a>

您可以透過匯入 SageMaker AI Ground Truth 格式清單檔案來建立測試或訓練資料集。如果影像的標記格式不是 SageMaker AI Ground Truth 資訊清單檔案，請使用下列資訊來建立 SageMaker AI Ground Truth 格式資訊清單檔案。

清單檔案採用 [JSON Lines](http://jsonlines.org) 格式，其中每行都是一個完整的 JSON 物件，代表影像的標記資訊。Amazon Rekognition 自訂標籤支援具有 JSON 行的 SageMaker AI Ground Truth 資訊清單，格式如下：
+ [分類任務輸出](https://docs.aws.amazon.com/sagemaker/latest/dg/sms-data-output.html#sms-output-class) — 用於將影像層級標籤新增至影像。影像層級標籤會定義影像上的場景、概念或物件類別 (如果不需要物件位置資訊)。一個影像可以有一個以上的影像層級標籤。如需詳細資訊，請參閱[在資訊清單檔案中匯入影像層級標籤](md-create-manifest-file-classification.md)。
+ [週框方塊任務輸出](https://docs.aws.amazon.com/sagemaker/latest/dg/sms-data-output.html#sms-output-box) — 用於在影像上標記一或多個物件的類別和位置。如需詳細資訊，請參閱[資訊清單檔案中的物件當地語系化](md-create-manifest-file-object-detection.md)。

影像層級和本地化 (週框方塊) JSON Lines 可以鏈接在同一個清單檔案中。

**注意**  
本區段中的 JSON Line 範例已格式化以提高可讀性。

匯入清單檔案時，Amazon Rekognition 自訂標籤會套用限制、語法和語意的驗證規則。如需詳細資訊，請參閱[清單檔案的驗證規則](md-create-manifest-file-validation-rules.md)。

清單檔案所參考的影像必須位於同一個 Amazon S3 儲存貯體中。清單檔案可以位於與存放影像的 Amazon S3 儲存貯體不同的 Amazon S3 儲存貯體中。您可以在 JSON Line 的 `source-ref` 欄位中指定影像的位置。

Amazon Rekognition 需要權限才能存取存放影像的 Amazon S3 儲存貯體。如果您正在使用 Amazon Rekognition 自訂標籤為您設定的主控台儲存貯體，則已設定所需權限。如果您沒有使用主控台儲存貯體，請參閱 [存取外部 Amazon S3 儲存貯體](su-console-policy.md#su-external-buckets)。

**Topics**
+ [建立清單檔案](#md-create-manifest-file-console)

## 建立清單檔案
<a name="md-create-manifest-file-console"></a>

下列程序會建立具有訓練和測試資料集的專案。資料集會從您建立的訓練和測試清單檔案建立。

<a name="create-dataset-procedure-manifest-file"></a>

**使用 SageMaker AI Ground Truth 格式資訊清單檔案 （主控台） 建立資料集**

1. 在主控台儲存貯體中，[建立資料夾](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-folder.html)以保存您的清單檔案。

1. 在主控台儲存貯體中，建立資料夾以保存您的影像。

1. 將影像上傳至您剛建立的資料夾。

1. 為您的訓練資料集建立 SageMaker AI Ground Truth 格式清單檔案。如需詳細資訊，請參閱[在資訊清單檔案中匯入影像層級標籤](md-create-manifest-file-classification.md)及[資訊清單檔案中的物件當地語系化](md-create-manifest-file-object-detection.md)。
**重要**  
每個 JSON Line 中的 `source-ref` 欄位值都必須對應至您上傳的影像。

1. 為您的測試資料集建立 SageMaker AI Ground Truth 格式清單檔案。

1. [將清單檔案上傳](https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-objects.html)至您剛建立的資料夾。

1. 記下清單檔案的位置。

1. 請遵循 [使用 SageMaker AI Ground Truth 資訊清單檔案 （主控台） 建立資料集](md-create-dataset-ground-truth.md#md-create-dataset-ground-truth-console) 中的指示，使用上傳的資訊清單檔案建立資料集。對於步驟 8，請在 **.manifest 檔案位置**，輸入您在上一個步驟中記下的位置的 Amazon S3 URL。如果您使用 AWS SDK，請執行 [使用 SageMaker AI Ground Truth 資訊清單檔案 (SDK) 建立資料集](md-create-dataset-ground-truth.md#md-create-dataset-ground-truth-sdk)。

# 在資訊清單檔案中匯入影像層級標籤
<a name="md-create-manifest-file-classification"></a>

若要匯入影像層級標籤 （標記為不需要當地語系化資訊的場景、概念或物件的影像），請將 SageMaker AI Ground Truth [分類任務輸出](https://docs.aws.amazon.com/sagemaker/latest/dg/sms-data-output.html#sms-output-class)格式 JSON 行新增至資訊清單檔案。清單檔案由一個或多個 JSON Lines 組成，每個要匯入的影像都有一個。

**提示**  
為了簡化清單檔案的建立，我們會提供 Python 指令碼，用於從 CSV 檔案建立清單檔案。如需詳細資訊，請參閱[從 CSV 檔案建立清單檔案。](ex-csv-manifest.md)。

**建立影像層級標籤的清單檔案**

1. 建立空白文字檔案。

1. 針對要匯入的每個影像新增 JSON Line。每個 JSON Line 應該看起來類似下列內容。

   ```
   {"source-ref":"s3://custom-labels-console-us-east-1-nnnnnnnnnn/gt-job/manifest/IMG_1133.png","TestCLConsoleBucket":0,"TestCLConsoleBucket-metadata":{"confidence":0.95,"job-name":"labeling-job/testclconsolebucket","class-name":"Echo Dot","human-annotated":"yes","creation-date":"2020-04-15T20:17:23.433061","type":"groundtruth/image-classification"}}
   ```

1. 儲存檔案。您可以使用副檔名 `.manifest`，但這不是必要的。

1. 使用您建立的清單檔案建立資料集。如需詳細資訊，請參閱[使用 SageMaker AI Ground Truth 格式資訊清單檔案 （主控台） 建立資料集](md-create-manifest-file.md#create-dataset-procedure-manifest-file)。

 

## 影像層級 JSON Lines
<a name="md-manifest-classification-json"></a>

在本區段中，我們會說明如何為單一影像建立 JSON Line。考慮下列影像。下列影像的場景可能稱為 *Sunrise*。

![\[日落在湖上，有碼頭和小船，被山環繞。\]](http://docs.aws.amazon.com/zh_tw/rekognition/latest/customlabels-dg/images/sunrise.png)


上一個影像 (具有場景 *Sunrise*) 的 JSON Line 可能如下所示。

```
{
    "source-ref": "s3://bucket/images/sunrise.png",
    "testdataset-classification_Sunrise": 1,
    "testdataset-classification_Sunrise-metadata": {
        "confidence": 1,
        "job-name": "labeling-job/testdataset-classification_Sunrise",
        "class-name": "Sunrise",
        "human-annotated": "yes",
        "creation-date": "2020-03-06T17:46:39.176",
        "type": "groundtruth/image-classification"
    }
}
```

記下以下資訊。

### source-ref
<a name="w2aac20c17c25c27c19c11c13"></a>

(必要) 影像的 Amazon S3 位置。格式是 `"s3://BUCKET/OBJECT_PATH"`。匯入資料集中的影像必須存放在同一個 Amazon S3 儲存貯體中。

### *testdataset-classification\$1Sunrise*
<a name="w2aac20c17c25c27c19c11c15"></a>

(必要) 屬性標籤。您可以選擇欄位名稱。欄位值 (前面範例中為 1) 為標籤屬性識別碼。Amazon Rekognition 自訂標籤不會使用，而且可以是任何整數值。必須有由欄位名稱識別的對應中繼資料，並附加了 *-metadata*。例如 `"testdataset-classification_Sunrise-metadata"`。

### *testdataset-classification\$1Sunrise*-metadata
<a name="w2aac20c17c25c27c19c11c17"></a>

(必要) 有關標籤屬性的中繼資料。欄位名稱必須與附加了 *-metadata* 的標籤屬性相同。

*信賴度*  
(必要) Amazon Rekognition 自訂標籤目前未使用，但必須提供介於 0 到 1 之間的值。

*job-name*  
(選用) 您為處理影像的任務選擇的名稱。

*class-name*  
(必要) 您為套用至影像的場景或概念選擇的類別名稱。例如 `"Sunrise"`。

*human-annotated*  
(必要) 如果註釋由人類完成，則指定 `"yes"`。否則為 `"no"`。

*creation-date*   
(必要) 建立標籤時的國際標準時間 (UTC) 日期和時間。

*type*  
(必要) 應套用至影像的處理類型。若為影像層級標籤，值為 `"groundtruth/image-classification"`。

### 對影像新增多個影像層級標籤
<a name="md-dataset-purpose-classification-multiple-labels"></a>

您可以對影像新增多個標籤。例如，下面的 JSON 對單一影像新增了兩個標籤，即 *football* 和 *ball*。

```
{
    "source-ref": "S3 bucket location", 
    "sport0":0, # FIRST label
    "sport0-metadata": { 
        "class-name": "football", 
        "confidence": 0.8, 
        "type":"groundtruth/image-classification", 
        "job-name": "identify-sport", 
        "human-annotated": "yes", 
        "creation-date": "2018-10-18T22:18:13.527256" 
    },
    "sport1":1, # SECOND label
    "sport1-metadata": { 
        "class-name": "ball", 
        "confidence": 0.8, 
        "type":"groundtruth/image-classification", 
        "job-name": "identify-sport", 
        "human-annotated": "yes", 
        "creation-date": "2018-10-18T22:18:13.527256" 
    }
}  # end of annotations for 1 image
```

# 資訊清單檔案中的物件當地語系化
<a name="md-create-manifest-file-object-detection"></a>

您可以將 SageMaker AI Ground Truth [邊界框任務輸出](https://docs.aws.amazon.com/sagemaker/latest/dg/sms-data-output.html#sms-output-box)格式 JSON 行新增至資訊清單檔案，以匯入標示物件當地語系化資訊的影像。

本地化資訊代表物件在影像上的位置。位置由圍繞物件的週框方塊表示。週框方塊結構包含週框方塊的左上角座標，以及週框方塊的寬度和高度。週框方塊格式 JSON Line 包含影像上一或多個物件位置的週框方塊，以及影像上每個物件的類別。

清單檔案由一或多個 JSON Lines 組成，每行包含單一影像的資訊。

**建立物件本地化的清單檔案**

1. 建立空白文字檔案。

1. 針對要匯入的每個影像新增 JSON Line。每個 JSON Line 應該看起來類似下列內容。

   ```
   {"source-ref": "s3://bucket/images/IMG_1186.png", "bounding-box": {"image_size": [{"width": 640, "height": 480, "depth": 3}], "annotations": [{ "class_id": 1,	"top": 251,	"left": 399, "width": 155, "height": 101}, {"class_id": 0, "top": 65, "left": 86, "width": 220,	"height": 334}]}, "bounding-box-metadata": {"objects": [{ "confidence": 1}, {"confidence": 1}],	"class-map": {"0": "Echo",	"1": "Echo Dot"}, "type": "groundtruth/object-detection", "human-annotated": "yes",	"creation-date": "2013-11-18T02:53:27", "job-name": "my job"}}
   ```

1. 儲存檔案。您可以使用副檔名 `.manifest`，但這不是必要的。

1. 使用您剛建立的檔案建立資料集。如需詳細資訊，請參閱[使用 SageMaker AI Ground Truth 格式資訊清單檔案 （主控台） 建立資料集](md-create-manifest-file.md#create-dataset-procedure-manifest-file)。



## 物件週框方塊 JSON Lines
<a name="md-manifest-object-localization-json"></a>

在本區段中，我們會說明如何為單一影像建立 JSON Line。下列影像即顯示 Amazon Echo 和 Amazon Echo Dot 裝置周圍的週框方塊。

![\[兩個 Amazon 智慧喇叭，一個帶有綠色週框方塊和一個藍色週框方塊，位於木頭表面。\]](http://docs.aws.amazon.com/zh_tw/rekognition/latest/customlabels-dg/images/echos.png)


以下是上一個影像的週框方塊 JSON Line。

```
{
	"source-ref": "s3://custom-labels-bucket/images/IMG_1186.png",
	"bounding-box": {
		"image_size": [{
			"width": 640,
			"height": 480,
			"depth": 3
		}],
		"annotations": [{
			"class_id": 1,
			"top": 251,
			"left": 399,
			"width": 155,
			"height": 101
		}, {
			"class_id": 0,
			"top": 65,
			"left": 86,
			"width": 220,
			"height": 334
		}]
	},
	"bounding-box-metadata": {
		"objects": [{
			"confidence": 1
		}, {
			"confidence": 1
		}],
		"class-map": {
			"0": "Echo",
			"1": "Echo Dot"
		},
		"type": "groundtruth/object-detection",
		"human-annotated": "yes",
		"creation-date": "2013-11-18T02:53:27",
		"job-name": "my job"
	}
}
```

記下以下資訊。

### source-ref
<a name="cd-manifest-source-ref"></a>

(必要) 影像的 Amazon S3 位置。格式是 `"s3://BUCKET/OBJECT_PATH"`。匯入資料集中的影像必須存放在同一個 Amazon S3 儲存貯體中。

### *bounding-box*
<a name="md-manifest-source-bounding-box"></a>

(必要) 屬性標籤。您可以選擇欄位名稱。包含在影像中偵測到的每個物件的影像大小和週框方塊。必須有由欄位名稱識別的對應中繼資料，並附加了 *-metadata*。例如 `"bounding-box-metadata"`。

*image\$1size*  
(必要) 包含以像素為單位之影像大小的單一元素陣列。  
+ *height* — (必要) 以像素為單位的影像高度。
+ *width* — (必要) 以像素為單位的影像深度。
+ *depth* — (必要) 影像中的頻道數。若為 RGB 影像，值為 3。Amazon Rekognition 自訂標籤未使用，但需要一個值。

*註釋*  
(必要) 影像中偵測到的每個物件的週框方塊資訊陣列。  
+ *class\$1id* — (必要) 對應至 *class-map* 中的標籤。在前面的範例中，*class\$1id* 為 `1` 的物件是影像中的 Echo Dot。
+ *top* — (必要) 從影像頂端到週框方塊頂端的距離，以像素為單位。
+ *left* — (必要) 從影像左側到週框方塊左側的距離，以像素為單位。
+ *width* — (必要) 以像素為單位的週框方塊寬度。
+ *height* — (必要) 以像素為單位的週框方塊高度。

### *bounding-box*-metadata
<a name="md-manifest-source-bounding-box-metadata"></a>

(必要) 有關標籤屬性的中繼資料。欄位名稱必須與附加了 *-metadata* 的標籤屬性相同。影像中偵測到的每個物件的週框方塊資訊陣列。

*物件*  
(必要) 影像中的物件陣列。對應至*註釋*陣列 (依索引)。Amazon Rekognition 自訂標籤不使用可信度屬性。

*class-map*  
(必要) 套用至影像中偵測到之物件的類別的對應。

*type*  
(必要) 分類任務的類型。`"groundtruth/object-detection"` 將任務識別為物件偵測。

*creation-date*   
(必要) 建立標籤時的國際標準時間 (UTC) 日期和時間。

*human-annotated*  
(必要) 如果註釋由人類完成，則指定 `"yes"`。否則為 `"no"`。

*job-name*  
(必要) 處理影像的任務的名稱。

# 清單檔案的驗證規則
<a name="md-create-manifest-file-validation-rules"></a>

 匯入清單檔案時，Amazon Rekognition 自訂標籤會套用限制、語法和語意的驗證規則。SageMaker AI Ground Truth 結構描述會強制執行語法驗證。如需更多詳細資訊，請參閱[輸出](https://docs.aws.amazon.com/sagemaker/latest/dg/sms-data-output.html)。以下是限制和語意的驗證規則。

**注意**  
20% 的無效規則會累加套用至所有驗證規則。如果由於任何組合而導致匯入超過 20% 的限制，例如 15% 無效 JSON 和 15% 無效影像，則匯入會失敗。
每個資料集物件都是清單檔案中的一行。空白/無效行也會計為資料集物件。
重疊是 (測試和訓練之間的常見標籤)/(訓練標籤)。

**Topics**
+ [限制](#md-validation-rules-limits)
+ [語意學](#md-validation-rules-semantics)

## 限制
<a name="md-validation-rules-limits"></a>


| 驗證 | 限制 | 引發錯誤 | 
| --- | --- | --- | 
|  清單檔案大小  |  上限為 1 GB  |  錯誤  | 
|  清單檔案的最大行計數  |  清單檔案中最多 250,000 個資料集物件的行。  |  錯誤  | 
|  每個標籤的有效資料集物件總數的下邊界   |  >= 1  |  錯誤  | 
|  標籤上的下邊界  |  >=2  |  錯誤  | 
|  標籤上的上邊界  |  <= 250  |  錯誤  | 
|  每個影像的最小週框方塊  |  0  |  無  | 
|  每個影像的最大週框方塊  |  50  |  無  | 

## 語意學
<a name="md-validation-rules-semantics"></a>




| 驗證 | 限制 | 引發錯誤 | 
| --- | --- | --- | 
|  空白清單檔案  |    |  錯誤  | 
|  缺少/無法存取的 source-ref 物件  |  物件數量小於 20%  |  警告  | 
|  缺少/無法存取的 source-ref 物件  |  物件數量 > 20%  |  錯誤  | 
|  訓練資料集中不存在測試標籤   |  標籤中至少有 50% 的重疊  |  錯誤  | 
|  資料集中相同標籤的標籤與物件範例的混合。資料集物件中相同類別的分類和偵測。  |    |  沒有錯誤或警告  | 
|  測試和訓練之間的重疊資產   |  測試和訓練資料集之間不應該有重疊。  |    | 
|  資料集中的影像必須來自同一個儲存貯體   |  如果物件位於不同的儲存貯體中，則會發生錯誤  |  錯誤  | 

# 將其他資料集格式轉換為清單檔案
<a name="md-converting-to-sm-format"></a>

您可以使用以下資訊，從各種來源資料集格式建立 Amazon SageMaker AI 格式資訊清單檔案。建立清單檔案後，請使用它來建立資料集。如需詳細資訊，請參閱[使用資訊清單檔案匯入映像](md-create-dataset-ground-truth.md)。

**Topics**
+ [將 COCO 資料集轉換為資訊清單檔案格式](md-transform-coco.md)
+ [轉換多標籤 SageMaker AI Ground Truth 資訊清單檔案](md-gt-cl-transform.md)
+ [從 CSV 檔案建立清單檔案。](ex-csv-manifest.md)

# 將 COCO 資料集轉換為資訊清單檔案格式
<a name="md-transform-coco"></a>

[COCO](http://cocodataset.org/#home) 是一種用於指定大規模物件偵測、分割和字幕資料集的格式。此 Python [範例](md-coco-transform-example.md)會說明如何將 COCO 物件偵測格式資料集轉換為 Amazon Rekognition 自訂標籤[週框方塊格式清單檔案](md-create-manifest-file-object-detection.md)。本區段還包括您可用於撰寫自己的程式碼的資訊。

COCO 格式的 JSON 檔案由五個區段組成，提供*整個資料集*的資訊。如需詳細資訊，請參閱[COCO 資料集格式](md-coco-overview.md)。
+ `info` — 有關資料集的一般資訊。
+ `licenses ` — 資料集中影像的授權資訊。
+ [`images`](md-coco-overview.md#md-coco-images) — 資料集中的影像清單。
+ [`annotations`](md-coco-overview.md#md-coco-annotations) — 資料集中所有影像中出現的註釋清單 (包括週框方塊)。
+ [`categories`](md-coco-overview.md#md-coco-categories) — 標籤類別清單。

您需要 `images`、`annotations` 和 `categories` 清單中的資訊，才能建立 Amazon Rekognition 自訂標籤清單檔案。

Amazon Rekognition 自訂標籤清單檔案採用 JSON Lines 格式，其中每行都具有*影像上*一或多個物件的週框方塊和標籤資訊。如需詳細資訊，請參閱[資訊清單檔案中的物件當地語系化](md-create-manifest-file-object-detection.md)。

## 將 COCO 物件對應至自訂標籤 JSON Line
<a name="md-mapping-coco"></a>

若要轉換 COCO 格式資料集，請將 COCO 資料集對應至 Amazon Rekognition 自訂標籤清單檔案，以進行物件本地化。如需詳細資訊，請參閱[資訊清單檔案中的物件當地語系化](md-create-manifest-file-object-detection.md)。若要為每個影像建置 JSON Line，清單檔案需要對應 COCO 資料集 `image`、`annotation` 和 `category` 物件欄位 ID。

以下是 COCO 清單檔案範例。如需詳細資訊，請參閱[COCO 資料集格式](md-coco-overview.md)。

```
{
    "info": {
        "description": "COCO 2017 Dataset","url": "http://cocodataset.org","version": "1.0","year": 2017,"contributor": "COCO Consortium","date_created": "2017/09/01"
    },
    "licenses": [
        {"url": "http://creativecommons.org/licenses/by/2.0/","id": 4,"name": "Attribution License"}
    ],
    "images": [
        {"id": 242287, "license": 4, "coco_url": "http://images.cocodataset.org/val2017/xxxxxxxxxxxx.jpg", "flickr_url": "http://farm3.staticflickr.com/2626/xxxxxxxxxxxx.jpg", "width": 426, "height": 640, "file_name": "xxxxxxxxx.jpg", "date_captured": "2013-11-15 02:41:42"},
        {"id": 245915, "license": 4, "coco_url": "http://images.cocodataset.org/val2017/nnnnnnnnnnnn.jpg", "flickr_url": "http://farm1.staticflickr.com/88/xxxxxxxxxxxx.jpg", "width": 640, "height": 480, "file_name": "nnnnnnnnnn.jpg", "date_captured": "2013-11-18 02:53:27"}
    ],
    "annotations": [
        {"id": 125686, "category_id": 0, "iscrowd": 0, "segmentation": [[164.81, 417.51,......167.55, 410.64]], "image_id": 242287, "area": 42061.80340000001, "bbox": [19.23, 383.18, 314.5, 244.46]},
        {"id": 1409619, "category_id": 0, "iscrowd": 0, "segmentation": [[376.81, 238.8,........382.74, 241.17]], "image_id": 245915, "area": 3556.2197000000015, "bbox": [399, 251, 155, 101]},
        {"id": 1410165, "category_id": 1, "iscrowd": 0, "segmentation": [[486.34, 239.01,..........495.95, 244.39]], "image_id": 245915, "area": 1775.8932499999994, "bbox": [86, 65, 220, 334]}
    ],
    "categories": [
        {"supercategory": "speaker","id": 0,"name": "echo"},
        {"supercategory": "speaker","id": 1,"name": "echo dot"}
    ]
}
```

下圖顯示*資料集*的 COCO 資料集清單如何對應至*影像*的 Amazon Rekognition 自訂標籤 JSON Lines。影像的每個 JSON 行都顯示來源參考、任務和任務中繼資料欄位。相符顏色表示單一影像的資訊。請注意，在資訊清單中，個別影像可能有多個註釋和中繼資料/類別。

![\[圖表顯示 Coco 資訊清單的結構，其中包含影像、註釋和類別。\]](http://docs.aws.amazon.com/zh_tw/rekognition/latest/customlabels-dg/images/coco-transform.png)


**取得單一 JSON Line 的 COCO 物件**

1. 對於影像清單中的每個影像，請從註釋清單中取得註釋，其中註釋欄位 `image_id` 的值會和影像 `id` 欄位相符。

1. 對於步驟 1 中相符的每個註釋，請詳閱 `categories` 清單並取得 `category` 欄位 `id` 的值和 `annotation` 物件 `category_id` 欄位相符的每個 `category`。

1. 使用相符的 `image`、`annotation` 和 `category` 物件為影像建立 JSON Line。若要對應欄位，請參閱 [將 COCO 物件對應至自訂標籤 JSON Line 物件欄位](#md-mapping-fields-coco)。

1. 重複步驟 1 至 3，直到您為 `images` 清單中的每個 `image` 物件建立 JSON Lines 為止。

如需範例程式碼，請參閱 [轉換 COCO 資料集](md-coco-transform-example.md)。

## 將 COCO 物件對應至自訂標籤 JSON Line 物件欄位
<a name="md-mapping-fields-coco"></a>

在您識別 Amazon Rekognition 自訂標籤 JSON Line 的 COCO 物件之後，您需要將 COCO 物件欄位對應至各自的 Amazon Rekognition 自訂標籤 JSON Line 物件欄位。下列 Amazon Rekognition 自訂標籤 JSON Line 範例會將一個影像 (`id`=`000000245915`) 對應至前一個 COCO JSON 範例。記下以下資訊。
+ `source-ref` 是 Amazon S3 儲存貯體中影像的位置。如果您的 COCO 影像未存放在 Amazon S3 儲存貯體中，您需要將它們移至 Amazon S3 儲存貯體。
+ 此 `annotations` 清單包含影像上每個物件的 `annotation` 物件。`annotation` 物件包括週框方塊資訊 (`top`、`left`、`width`、`height`) 和標籤識別碼 (`class_id`)。
+ 標籤識別碼 (`class_id`) 會對應至中繼資料中的 `class-map` 清單。它會列出在影像上使用的標籤。

```
{
	"source-ref": "s3://custom-labels-bucket/images/000000245915.jpg",
	"bounding-box": {
		"image_size": {
			"width": 640,
			"height": 480,
			"depth": 3
		},
		"annotations": [{
			"class_id": 0,
			"top": 251,
			"left": 399,
			"width": 155,
			"height": 101
		}, {
			"class_id": 1,
			"top": 65,
			"left": 86,
			"width": 220,
			"height": 334
		}]
	},
	"bounding-box-metadata": {
		"objects": [{
			"confidence": 1
		}, {
			"confidence": 1
		}],
		"class-map": {
			"0": "Echo",
			"1": "Echo Dot"
		},
		"type": "groundtruth/object-detection",
		"human-annotated": "yes",
		"creation-date": "2018-10-18T22:18:13.527256",
		"job-name": "my job"
	}
}
```

使用下列資訊將 Amazon Rekognition 自訂標籤清單檔案欄位對應至 COCO 資料集 JSON 欄位。

### source-ref
<a name="md-source-ref-coco"></a>

影像位置的 S3 格式 URL。影片必須存放在 S3 儲存貯體中。如需詳細資訊，請參閱[source-ref](md-create-manifest-file-object-detection.md#cd-manifest-source-ref)。如果 `coco_url` COCO 欄位指向 S3 儲存貯體位置，您可以使用 `coco_url` 的值作為 `source-ref` 的值。或者，您可以將 `source-ref` 對應至 `file_name` (COCO) 欄位，並在轉換程式碼中，將必要的 S3 路徑新增至影像的存放位置。

### *bounding-box*
<a name="md-label-attribute-id-coco"></a>

您選擇的標籤屬性名稱。如需詳細資訊，請參閱[*bounding-box*](md-create-manifest-file-object-detection.md#md-manifest-source-bounding-box)。

#### image\$1size
<a name="md-image-size-coco"></a>

影像大小 (以像素為單位)。對應至`image`影像[清單中的 ](md-coco-overview.md#md-coco-images) 物件。
+ `height`-> `image.height`
+ `width`-> `image.width`
+ `depth`-> Amazon Rekognition 自訂標籤目前未使用，但必須一個值。

#### 註釋
<a name="md-annotations-coco"></a>

`annotation` 物件的清單。影像上的每個物件都有一個 `annotation`。

#### 註釋
<a name="md-annotation-coco"></a>

包含影像上某個物件執行個體的週框方塊資訊。
+ `class_id` -> 數字 ID 對應至自訂標籤的 `class-map` 清單。
+ `top` -> `bbox[1]`
+ `left` -> `bbox[0]`
+ `width` -> `bbox[2]`
+ `height` -> `bbox[3]`

### *bounding-box*-metadata
<a name="md-metadata-coco"></a>

標籤屬性的中繼資料。包括標籤和標籤識別碼。如需詳細資訊，請參閱[*bounding-box*-metadata](md-create-manifest-file-object-detection.md#md-manifest-source-bounding-box-metadata)。

#### 物件
<a name="cd-metadata-objects-coco"></a>

影像中的物件陣列。對應至 `annotations` 清單 (依索引)。

##### 物件
<a name="cd-metadata-object-coco"></a>
+ `confidence`->Amazon Rekognition 自訂標籤未使用，但需要值 (1)。

#### class-map
<a name="md-metadata-class-map-coco"></a>

套用至影像中偵測到之物件的標籤 (類別) 的對應。對應至[類別](md-coco-overview.md#md-coco-categories)清單中的類別物件。
+ `id` -> `category.id`
+ `id value` -> `category.name`

#### type
<a name="md-type-coco"></a>

必須為 `groundtruth/object-detection`

#### human-annotated
<a name="md-human-annotated-coco"></a>

可指定為 `yes` 或 `no`。如需詳細資訊，請參閱[*bounding-box*-metadata](md-create-manifest-file-object-detection.md#md-manifest-source-bounding-box-metadata)。

#### creation-date -> [image](md-coco-overview.md#md-coco-images).date\$1captured
<a name="md-creation-date-coco"></a>

影像的建立日期和時間。對應至 COCO 影像清單中影像的 [image](md-coco-overview.md#md-coco-images).date\$1captured 欄位。Amazon Rekognition 自訂標籤預期 `creation-date` 的格式為 *Y-M-DTH:M:S*。

#### job-name
<a name="md-job-name-coco"></a>

您選擇的任務名稱。

# COCO 資料集格式
<a name="md-coco-overview"></a>

COCO 資料集由五個區段的資訊組成，可提供整個資料集的資訊。COCO 物件偵測資料集的格式會以 [COCO 資料格式](http://cocodataset.org/#format-data)記錄。
+ info — 有關資料集的一般資訊。
+ licenses — 資料集中影像的授權資訊。
+ [images](#md-coco-images) — 資料集中的影像清單。
+ [annotations](#md-coco-annotations) — 資料集中所有影像中出現的註釋清單 (包括週框方塊)。
+ [categories](#md-coco-categories) — 標籤類別清單。

若要建立自訂標籤清單檔案，請使用 COCO 清單檔案中的 `images`、`annotations`、和 `categories` 清單。其他區段 (`info`、`licences`) 則非必要。以下是 COCO 清單檔案範例。

```
{
    "info": {
        "description": "COCO 2017 Dataset","url": "http://cocodataset.org","version": "1.0","year": 2017,"contributor": "COCO Consortium","date_created": "2017/09/01"
    },
    "licenses": [
        {"url": "http://creativecommons.org/licenses/by/2.0/","id": 4,"name": "Attribution License"}
    ],
    "images": [
        {"id": 242287, "license": 4, "coco_url": "http://images.cocodataset.org/val2017/xxxxxxxxxxxx.jpg", "flickr_url": "http://farm3.staticflickr.com/2626/xxxxxxxxxxxx.jpg", "width": 426, "height": 640, "file_name": "xxxxxxxxx.jpg", "date_captured": "2013-11-15 02:41:42"},
        {"id": 245915, "license": 4, "coco_url": "http://images.cocodataset.org/val2017/nnnnnnnnnnnn.jpg", "flickr_url": "http://farm1.staticflickr.com/88/xxxxxxxxxxxx.jpg", "width": 640, "height": 480, "file_name": "nnnnnnnnnn.jpg", "date_captured": "2013-11-18 02:53:27"}
    ],
    "annotations": [
        {"id": 125686, "category_id": 0, "iscrowd": 0, "segmentation": [[164.81, 417.51,......167.55, 410.64]], "image_id": 242287, "area": 42061.80340000001, "bbox": [19.23, 383.18, 314.5, 244.46]},
        {"id": 1409619, "category_id": 0, "iscrowd": 0, "segmentation": [[376.81, 238.8,........382.74, 241.17]], "image_id": 245915, "area": 3556.2197000000015, "bbox": [399, 251, 155, 101]},
        {"id": 1410165, "category_id": 1, "iscrowd": 0, "segmentation": [[486.34, 239.01,..........495.95, 244.39]], "image_id": 245915, "area": 1775.8932499999994, "bbox": [86, 65, 220, 334]}
    ],
    "categories": [
        {"supercategory": "speaker","id": 0,"name": "echo"},
        {"supercategory": "speaker","id": 1,"name": "echo dot"}
    ]
}
```

## 影像清單
<a name="md-coco-images"></a>

COCO 資料集所參考的影像會列在影像陣列中。每個影像物件都包含影像的相關資訊，例如影像檔案名稱。在下列影像物件範例中，請注意下列資訊，以及建立 Amazon Rekognition 自訂標籤清單檔案所需的欄位。
+ `id` — (必要) 影像的唯一識別碼。`id` 欄位會對應至註解陣列中的 `id` 欄位 (存放週框方塊資訊的位置)。
+ `license` — (非必要) 對應至授權陣列。
+ `coco_url` — (選用) 影像的位置
+ `flickr_url` — (非必要) 影像在 Flickr 上的位置。
+ `width` — (必要) 影像的寬度。
+ `height` — (必要) 影像的寬度。
+ `file_name` — (必要) 影像檔案名稱。在這個範例中，`file_name` 和 `id` 相符，但這並非 COCO 資料集的需求。
+ `date_captured` — (必要) 擷取影像的日期和時間。

```
{
    "id": 245915,
    "license": 4,
    "coco_url": "http://images.cocodataset.org/val2017/nnnnnnnnnnnn.jpg",
    "flickr_url": "http://farm1.staticflickr.com/88/nnnnnnnnnnnnnnnnnnn.jpg",
    "width": 640,
    "height": 480,
    "file_name": "000000245915.jpg",
    "date_captured": "2013-11-18 02:53:27"
}
```

## 註釋 (週框方塊) 清單
<a name="md-coco-annotations"></a>

所有影像上所有物件的週框方塊資訊會存放在註解清單中。單一註釋物件包含單一物件的週框方塊資訊，以及影像上物件的標籤。影像上物件的每個執行個體都有註釋物件。

在下列範例中，請注意下列資訊，以及建立 Amazon Rekognition 自訂標籤清單檔案所需的欄位。
+ `id` — (非必要) 註釋的識別碼。
+ `image_id` — (必要) 對應於影像陣列中的影像 `id`。
+ `category_id` — (必要) 標籤的識別碼，可識別週框方塊內的物件。它會對應至類別陣列的 `id` 欄位。
+ `iscrowd` — (非必要) 指定影像是否包含一群物件。
+ `segmentation` — (非必要) 影像上物件的分割資訊。Amazon Rekognition 自訂標籤不支援分割。
+ `area` — (非必要) 註釋的區域。
+ `bbox` – (必要) 包含影像上物件周圍週框方塊的座標 (以像素為單位)。

```
{
    "id": 1409619,
    "category_id": 1,
    "iscrowd": 0,
    "segmentation": [
        [86.0, 238.8,..........382.74, 241.17]
    ],
    "image_id": 245915,
    "area": 3556.2197000000015,
    "bbox": [86, 65, 220, 334]
}
```

## 類別清單
<a name="md-coco-categories"></a>

標籤資訊存放在類別陣列中。在下列類別物件範例中，請注意下列資訊，以及建立 Amazon Rekognition 自訂標籤清單檔案所需的欄位。
+ `supercategory` — (非必要) 標籤的父類別。
+ `id` — (必要) 標籤識別碼。`id` 欄位會對應至 `annotation` 物件中的 `category_id` 欄位。在下列範例中，Echo Dot 的識別碼為 2。
+ `name` — (必要) 標籤名稱。

```
        {"supercategory": "speaker","id": 2,"name": "echo dot"}
```

# 轉換 COCO 資料集
<a name="md-coco-transform-example"></a>

使用下列 Python 範例將週框方塊資訊從 COCO 格式資料集轉換為 Amazon Rekognition 自訂標籤清單檔案。程式碼會將建立的清單檔案上傳至 Amazon S3 儲存貯體。此程式碼也會提供 AWS CLI 命令，您可以用來上傳影像。

**轉換 COCO 資料集 (SDK)**

1. 如果您尚未執行：

   1. 請確認您具備 `AmazonS3FullAccess` 權限。如需詳細資訊，請參閱[設定 SDK 權限](su-sdk-permissions.md)。

   1. 安裝和設定 AWS CLI 和 AWS SDKs。如需詳細資訊，請參閱[步驟 4：設定 AWS CLI 和 AWS SDKs](su-awscli-sdk.md)。

1. 使用下列 Python 程式碼來轉換 COCO 資料集。設定下列值。
   + `s3_bucket` — 您要存放影像和 Amazon Rekognition 自訂標籤清單檔案之 S3 儲存貯體的名稱。
   + `s3_key_path_images` — 要在 S3 儲存貯體 (`s3_bucket`) 中放置影像的路徑。
   + `s3_key_path_manifest_file` — 要在 S3 儲存貯體 (`s3_bucket`) 中放置自訂標籤清單檔案的路徑。
   + `local_path` — 範例開啟輸入 COCO 資料集的本機路徑，並儲存新的自訂標籤清單檔案。
   + `local_images_path` — 要用於訓練之影像的本機路徑。
   + `coco_manifest` — 輸入 COCO 資料集檔案名稱。
   + `cl_manifest_file` — 範例所建立之清單檔案的名稱。檔案會儲存在 `local_path` 所指定的位置。按照慣例，該檔案會具有副檔名 `.manifest`，但這不是必要的。
   + `job_name` — 自訂標籤任務的名稱。

   ```
   import json
   import os
   import random
   import shutil
   import datetime
   import botocore
   import boto3
   import PIL.Image as Image
   import io
   
   #S3 location for images
   s3_bucket = 'bucket'
   s3_key_path_manifest_file = 'path to custom labels manifest file/'
   s3_key_path_images = 'path to images/'
   s3_path='s3://' + s3_bucket  + '/' + s3_key_path_images
   s3 = boto3.resource('s3')
   
   #Local file information
   local_path='path to input COCO dataset and output Custom Labels manifest/'
   local_images_path='path to COCO images/'
   coco_manifest = 'COCO dataset JSON file name'
   coco_json_file = local_path + coco_manifest
   job_name='Custom Labels job name'
   cl_manifest_file = 'custom_labels.manifest'
   
   label_attribute ='bounding-box'
   
   open(local_path + cl_manifest_file, 'w').close()
   
   # class representing a Custom Label JSON line for an image
   class cl_json_line:  
       def __init__(self,job, img):  
   
           #Get image info. Annotations are dealt with seperately
           sizes=[]
           image_size={}
           image_size["width"] = img["width"]
           image_size["depth"] = 3
           image_size["height"] = img["height"]
           sizes.append(image_size)
   
           bounding_box={}
           bounding_box["annotations"] = []
           bounding_box["image_size"] = sizes
   
           self.__dict__["source-ref"] = s3_path + img['file_name']
           self.__dict__[job] = bounding_box
   
           #get metadata
           metadata = {}
           metadata['job-name'] = job_name
           metadata['class-map'] = {}
           metadata['human-annotated']='yes'
           metadata['objects'] = [] 
           date_time_obj = datetime.datetime.strptime(img['date_captured'], '%Y-%m-%d %H:%M:%S')
           metadata['creation-date']= date_time_obj.strftime('%Y-%m-%dT%H:%M:%S') 
           metadata['type']='groundtruth/object-detection'
           
           self.__dict__[job + '-metadata'] = metadata
   
   
   print("Getting image, annotations, and categories from COCO file...")
   
   with open(coco_json_file) as f:
   
       #Get custom label compatible info    
       js = json.load(f)
       images = js['images']
       categories = js['categories']
       annotations = js['annotations']
   
       print('Images: ' + str(len(images)))
       print('annotations: ' + str(len(annotations)))
       print('categories: ' + str(len (categories)))
   
   
   print("Creating CL JSON lines...")
       
   images_dict = {image['id']: cl_json_line(label_attribute, image) for image in images}
   
   print('Parsing annotations...')
   for annotation in annotations:
   
       image=images_dict[annotation['image_id']]
   
       cl_annotation = {}
       cl_class_map={}
   
       # get bounding box information
       cl_bounding_box={}
       cl_bounding_box['left'] = annotation['bbox'][0]
       cl_bounding_box['top'] = annotation['bbox'][1]
    
       cl_bounding_box['width'] = annotation['bbox'][2]
       cl_bounding_box['height'] = annotation['bbox'][3]
       cl_bounding_box['class_id'] = annotation['category_id']
   
       getattr(image, label_attribute)['annotations'].append(cl_bounding_box)
   
   
       for category in categories:
            if annotation['category_id'] == category['id']:
               getattr(image, label_attribute + '-metadata')['class-map'][category['id']]=category['name']
           
       
       cl_object={}
       cl_object['confidence'] = int(1)  #not currently used by Custom Labels
       getattr(image, label_attribute + '-metadata')['objects'].append(cl_object)
   
   print('Done parsing annotations')
   
   # Create manifest file.
   print('Writing Custom Labels manifest...')
   
   for im in images_dict.values():
   
       with open(local_path+cl_manifest_file, 'a+') as outfile:
               json.dump(im.__dict__,outfile)
               outfile.write('\n')
               outfile.close()
   
   # Upload manifest file to S3 bucket.
   print ('Uploading Custom Labels manifest file to S3 bucket')
   print('Uploading'  + local_path + cl_manifest_file + ' to ' + s3_key_path_manifest_file)
   print(s3_bucket)
   s3 = boto3.resource('s3')
   s3.Bucket(s3_bucket).upload_file(local_path + cl_manifest_file, s3_key_path_manifest_file + cl_manifest_file)
   
   # Print S3 URL to manifest file,
   print ('S3 URL Path to manifest file. ')
   print('\033[1m s3://' + s3_bucket + '/' + s3_key_path_manifest_file + cl_manifest_file + '\033[0m') 
   
   # Display aws s3 sync command.
   print ('\nAWS CLI s3 sync command to upload your images to S3 bucket. ')
   print ('\033[1m aws s3 sync ' + local_images_path + ' ' + s3_path + '\033[0m')
   ```

1. 執行程式碼。

1. 在程式輸出中，記下磁碟區 `s3 sync` 命令。下一個步驟需要此值。

1. 在命令提示中，執行 `s3 sync` 命令。將影像上傳至 S3 儲存貯體。如果命令在上傳期間失敗，請再次執行，直到本機影像與 S3 儲存貯體同步為止。

1. 在程式輸出中，記下清單檔案的 S3 URL 路徑。下一個步驟需要此值。

1. 請遵循 [使用 SageMaker AI Ground Truth 資訊清單檔案 （主控台） 建立資料集](md-create-dataset-ground-truth.md#md-create-dataset-ground-truth-console) 中的指示，使用上傳的清單檔案建立資料集。對於步驟 8，請在 **.manifest 檔案位置**，輸入您在上一個步驟中記下的 Amazon S3 URL。如果您使用 AWS SDK，請執行 [使用 SageMaker AI Ground Truth 資訊清單檔案 (SDK) 建立資料集](md-create-dataset-ground-truth.md#md-create-dataset-ground-truth-sdk)。

# 轉換多標籤 SageMaker AI Ground Truth 資訊清單檔案
<a name="md-gt-cl-transform"></a>

本主題說明如何將多標籤 Amazon SageMaker AI Ground Truth 資訊清單檔案轉換為 Amazon Rekognition 自訂標籤格式資訊清單檔案。

多標籤任務的 SageMaker AI Ground Truth 資訊清單檔案的格式與 Amazon Rekognition 自訂標籤格式資訊清單檔案不同。多標籤分類指將影像分類為一組類別，但可能同時屬於多個類別。在這種情況下，影像可能有多個標籤 (多標籤)，例如 *football* 和 *ball*。

如需多標籤 SageMaker AI Ground Truth 任務的詳細資訊，請參閱[影像分類 （多標籤）](https://docs.aws.amazon.com/sagemaker/latest/dg/sms-image-classification-multilabel.html)。如需多標籤格式 Amazon Rekognition 自訂標籤清單檔案的相關資訊，請參閱 [對影像新增多個影像層級標籤](md-create-manifest-file-classification.md#md-dataset-purpose-classification-multiple-labels)。

## 取得 SageMaker AI Ground Truth 任務的資訊清單檔案
<a name="md-get-gt-manifest"></a>

下列程序說明如何取得 Amazon SageMaker AI Ground Truth 任務的輸出資訊清單檔案 (`output.manifest`)。將 `output.manifest` 用為下個程序的輸入。

**下載 SageMaker AI Ground Truth 任務清單檔案**

1. 開啟 [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)。

1. 在導覽窗格中，選擇 **Ground Truth**，然後選擇**標記任務**。

1. 選擇包含您要使用之清單檔案的標記任務。

1. 在詳細資訊頁面上，選擇**輸出資料集位置**下方的連結。Amazon S3 主控台會在資料集位置開啟。

1. 選擇 `Manifests`、`output`，然後選擇 `output.manifest`。

1. 若要下載清單檔案，請選擇**物件動作**，然後選擇**下載**。

## 轉換多標籤 SageMaker AI 資訊清單檔案
<a name="md-transform-ml-gt"></a>

下列程序會從現有的多標籤格式 SageMaker AI GroundTruth 資訊清單檔案建立多標籤格式的 Amazon Rekognition 自訂標籤資訊清單檔案。

**注意**  
若要執行程式碼，您需要 Python 版本 3 或更高版本。<a name="md-procedure-multi-label-transform"></a>

**轉換多標籤 SageMaker AI 資訊清單檔案**

1. 使用以下 Python 程式碼。提供您在 [取得 SageMaker AI Ground Truth 任務的資訊清單檔案](#md-get-gt-manifest) 中建立的清單檔案名稱作為命令列引數。

   ```
   # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
   # SPDX-License-Identifier:  Apache-2.0
   """
   Purpose
   Shows how to create and Amazon Rekognition Custom Labels format
   manifest file from an Amazon SageMaker Ground Truth Image
   Classification (Multi-label) format manifest file.
   """
   import json
   import logging
   import argparse
   import os.path
   
   logger = logging.getLogger(__name__)
   
   def create_manifest_file(ground_truth_manifest_file):
       """
       Creates an Amazon Rekognition Custom Labels format manifest file from
       an Amazon SageMaker Ground Truth Image Classification (Multi-label) format
       manifest file.
       :param: ground_truth_manifest_file: The name of the Ground Truth manifest file,
       including the relative path.
       :return: The name of the new Custom Labels manifest file.
       """
   
       logger.info('Creating manifest file from %s', ground_truth_manifest_file)
       new_manifest_file = f'custom_labels_{os.path.basename(ground_truth_manifest_file)}'
   
       # Read the SageMaker Ground Truth manifest file into memory.
       with open(ground_truth_manifest_file) as gt_file:
           lines = gt_file.readlines()
   
       #Iterate through the lines one at a time to generate the
       #new lines for the Custom Labels manifest file.
       with open(new_manifest_file, 'w') as the_new_file:
           for line in lines:
               #job_name - The of the Amazon Sagemaker Ground Truth job.
               job_name = ''
               # Load in the old json item from the Ground Truth manifest file
               old_json = json.loads(line)
   
               # Get the job name
               keys = old_json.keys()
               for key in keys:
                   if 'source-ref' not in key and '-metadata' not in key:
                       job_name = key
   
               new_json = {}
               # Set the location of the image
               new_json['source-ref'] = old_json['source-ref']
   
               # Temporarily store the list of labels
               labels = old_json[job_name]
   
               # Iterate through the labels and reformat to Custom Labels format
               for index, label in enumerate(labels):
                   new_json[f'{job_name}{index}'] = index
                   metadata = {}
                   metadata['class-name'] = old_json[f'{job_name}-metadata']['class-map'][str(label)]
                   metadata['confidence'] = old_json[f'{job_name}-metadata']['confidence-map'][str(label)]
                   metadata['type'] = 'groundtruth/image-classification'
                   metadata['job-name'] = old_json[f'{job_name}-metadata']['job-name']
                   metadata['human-annotated'] = old_json[f'{job_name}-metadata']['human-annotated']
                   metadata['creation-date'] = old_json[f'{job_name}-metadata']['creation-date']
                   # Add the metadata to new json line
                   new_json[f'{job_name}{index}-metadata'] = metadata
               # Write the current line to the json file
               the_new_file.write(json.dumps(new_json))
               the_new_file.write('\n')
   
       logger.info('Created %s', new_manifest_file)
       return  new_manifest_file
   
   def add_arguments(parser):
       """
       Adds command line arguments to the parser.
       :param parser: The command line parser.
       """
   
       parser.add_argument(
           "manifest_file", help="The Amazon SageMaker Ground Truth manifest file"
           "that you want to use."
       )
   
   
   def main():
       logging.basicConfig(level=logging.INFO,
                           format="%(levelname)s: %(message)s")
       try:
           # get command line arguments
           parser = argparse.ArgumentParser(usage=argparse.SUPPRESS)
           add_arguments(parser)
           args = parser.parse_args()
           # Create the manifest file
           manifest_file = create_manifest_file(args.manifest_file)
           print(f'Manifest file created: {manifest_file}')
       except FileNotFoundError as err:
           logger.exception('File not found: %s', err)
           print(f'File not found: {err}. Check your manifest file.')
   
   if __name__ == "__main__":
       main()
   ```

1. 記下指令碼顯示的新清單檔案的名稱。在下一個步驟中用得到。

1. [將清單檔案上傳](https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-objects.html)到您要用於存放清單檔案的 Amazon S3 儲存貯體。
**注意**  
請確保 Amazon Rekognition 自訂標籤可存取清單檔案 JSON Lines 的 `source-ref` 欄位中參考的 Amazon S3 儲存貯體。如需詳細資訊，請參閱[存取外部 Amazon S3 儲存貯體](su-console-policy.md#su-external-buckets)。如果您的 Ground Truth 任務將影像存放在 Amazon Rekognition 自訂標籤主控台儲存貯體中，則不需要新增權限。

1. 請遵循 [使用 SageMaker AI Ground Truth 資訊清單檔案 （主控台） 建立資料集](md-create-dataset-ground-truth.md#md-create-dataset-ground-truth-console) 中的指示，使用上傳的資訊清單檔案建立資料集。對於步驟 8，請在 **.manifest 檔案位置**，輸入清單檔案位置的 Amazon S3 URL。如果您使用 AWS SDK，請執行 [使用 SageMaker AI Ground Truth 資訊清單檔案 (SDK) 建立資料集](md-create-dataset-ground-truth.md#md-create-dataset-ground-truth-sdk)。

# 從 CSV 檔案建立清單檔案。
<a name="ex-csv-manifest"></a>

此 Python 指令碼範例使用逗號分隔值 (CSV) 檔案來標記影像，簡化了清單檔案的建立。建立 CSV 檔案。清單檔案適用於[多標籤影像分類](getting-started.md#gs-multi-label-image-classification-example) 或 [多標籤影像分類](getting-started.md#gs-multi-label-image-classification-example)。如需詳細資訊，請參閱[尋找物件、場景和概念](understanding-custom-labels.md#tm-classification)。

**注意**  
此指令碼不會建立適合尋找[物件位置](understanding-custom-labels.md#tm-object-localization)或尋找[品牌位置](understanding-custom-labels.md#tm-brand-detection-localization)的清單檔案。

清單檔案會描述用於訓練模型的影像。例如，指派給影像的影像位置和標籤。清單檔案由一或多個 JSON Lines 組成。每個 JSON Line 會描述單一影像。如需詳細資訊，請參閱[在資訊清單檔案中匯入影像層級標籤](md-create-manifest-file-classification.md)。

CSV 檔案代表文字檔案中多資料列的表格式資料。資料列中的欄位以逗號分隔。如需詳細資訊，請參閱[逗號分隔值](https://en.wikipedia.org/wiki/Comma-separated_values)。對於此指令碼，CSV 檔案中的每一資料列會代表單一影像，並對應至清單檔案中的 JSON Line。若要為支援[多標籤影像分類](getting-started.md#gs-multi-label-image-classification-example)的清單檔案建立 CSV 檔案，請在每一資料列新增一或多個影像層級標籤。若要建立適合 [Image classification](getting-started.md#gs-image-classification-example) 的清單檔案，請將單一影像層級標籤新增至每一資料列。

例如，下列 CSV 檔案描述 [多標籤影像分類](getting-started.md#gs-multi-label-image-classification-example) (Flowers) *入門*專案中的影像。

```
camellia1.jpg,camellia,with_leaves
camellia2.jpg,camellia,with_leaves
camellia3.jpg,camellia,without_leaves
helleborus1.jpg,helleborus,without_leaves,not_fully_grown
helleborus2.jpg,helleborus,with_leaves,fully_grown
helleborus3.jpg,helleborus,with_leaves,fully_grown
jonquil1.jpg,jonquil,with_leaves
jonquil2.jpg,jonquil,with_leaves
jonquil3.jpg,jonquil,with_leaves
jonquil4.jpg,jonquil,without_leaves
mauve_honey_myrtle1.jpg,mauve_honey_myrtle,without_leaves
mauve_honey_myrtle2.jpg,mauve_honey_myrtle,with_leaves
mauve_honey_myrtle3.jpg,mauve_honey_myrtle,with_leaves
mediterranean_spurge1.jpg,mediterranean_spurge,with_leaves
mediterranean_spurge2.jpg,mediterranean_spurge,without_leaves
```

該指令碼會為每一資料列產生 JSON Lines。例如，以下是第一資料列 (`camellia1.jpg,camellia,with_leaves`) 的 JSON Line。

```
{"source-ref": "s3://bucket/flowers/train/camellia1.jpg","camellia": 1,"camellia-metadata":{"confidence": 1,"job-name": "labeling-job/camellia","class-name": "camellia","human-annotated": "yes","creation-date": "2022-01-21T14:21:05","type": "groundtruth/image-classification"},"with_leaves": 1,"with_leaves-metadata":{"confidence": 1,"job-name": "labeling-job/with_leaves","class-name": "with_leaves","human-annotated": "yes","creation-date": "2022-01-21T14:21:05","type": "groundtruth/image-classification"}}
```

在 CSV 範例中，影像的 Amazon S3 路徑不存在。如果您的 CSV 檔案不包含影像的 Amazon S3 路徑，請使用 `--s3_path` 命令列引數指定影像的 Amazon S3 路徑。

指令碼會在已刪除重複影像的 CSV 檔案中記錄每個影像的第一個項目。已刪除重複影像的 CSV 檔案包含輸入 CSV 檔案中找到的每個影像的單一執行個體。輸入 CSV 檔案中影像的進一步出現次數會記錄在重複影像 CSV 檔案中。如果指令碼尋找重複影像，請檢閱重複影像的 CSV 檔案，並視需要更新已刪除重複影像的 CSV 檔案。使用已刪除重複資料的檔案重新執行指令碼。如果在輸入的 CSV 檔案中找不到重複項目，則指令碼會刪除已刪除重複影像的 CSV 檔案和重複影像的 CSV 檔案，因為它們是空白的。

 在此程序中，您可以建立 CSV 檔案並執行 Python 指令碼來建立清單檔案。

**從 CSV 檔案建立清單檔案**

1. 建立 CSV 檔案，每一資料列中包含以下欄位 (每個影像一個資料列)。請勿將標題資料列新增至 CSV 檔案。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/rekognition/latest/customlabels-dg/ex-csv-manifest.html)

   例如：`camellia1.jpg,camellia,with_leaves` 或 `s3://my-bucket/flowers/train/camellia1.jpg,camellia,with_leaves` 

1. 儲存 CSV 檔案。

1. 執行下列 Python 指令碼。提供下列引數：
   + `csv_file` — 您在步驟 1 中建立的 CSV 檔案。
   + `manifest_file` — 您要建立的清單檔案的名稱。
   + (選用) `--s3_path s3://path_to_folder/` — 要新增至影像檔案名稱的 Amazon S3 路徑 (欄位 1)。如果欄位 1 中的影像尚未包含 S3 路徑，請使用 `--s3_path`。

   ```
   # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
   # SPDX-License-Identifier:  Apache-2.0
   
   from datetime import datetime, timezone
   import argparse
   import logging
   import csv
   import os
   import json
   
   """
   Purpose
   Amazon Rekognition Custom Labels model example used in the service documentation.
   Shows how to create an image-level (classification) manifest file from a CSV file.
   You can specify multiple image level labels per image.
   CSV file format is
   image,label,label,..
   If necessary, use the bucket argument to specify the S3 bucket folder for the images.
   https://docs.aws.amazon.com/rekognition/latest/customlabels-dg/md-gt-cl-transform.html
   """
   
   logger = logging.getLogger(__name__)
   
   
   def check_duplicates(csv_file, deduplicated_file, duplicates_file):
       """
       Checks for duplicate images in a CSV file. If duplicate images
       are found, deduplicated_file is the deduplicated CSV file - only the first
       occurence of a duplicate is recorded. Other duplicates are recorded in duplicates_file.
       :param csv_file: The source CSV file.
       :param deduplicated_file: The deduplicated CSV file to create. If no duplicates are found
       this file is removed.
       :param duplicates_file: The duplicate images CSV file to create. If no duplicates are found
       this file is removed.
       :return: True if duplicates are found, otherwise false.
       """
   
       logger.info("Deduplicating %s", csv_file)
   
       duplicates_found = False
   
       # Find duplicates.
       with open(csv_file, 'r', newline='', encoding="UTF-8") as f,\
               open(deduplicated_file, 'w', encoding="UTF-8") as dedup,\
               open(duplicates_file, 'w', encoding="UTF-8") as duplicates:
   
           reader = csv.reader(f, delimiter=',')
           dedup_writer = csv.writer(dedup)
           duplicates_writer = csv.writer(duplicates)
   
           entries = set()
           for row in reader:
               # Skip empty lines.
               if not ''.join(row).strip():
                   continue
   
               key = row[0]
               if key not in entries:
                   dedup_writer.writerow(row)
                   entries.add(key)
               else:
                   duplicates_writer.writerow(row)
                   duplicates_found = True
   
       if duplicates_found:
           logger.info("Duplicates found check %s", duplicates_file)
   
       else:
           os.remove(duplicates_file)
           os.remove(deduplicated_file)
   
       return duplicates_found
   
   
   def create_manifest_file(csv_file, manifest_file, s3_path):
       """
       Reads a CSV file and creates a Custom Labels classification manifest file.
       :param csv_file: The source CSV file.
       :param manifest_file: The name of the manifest file to create.
       :param s3_path: The S3 path to the folder that contains the images.
       """
       logger.info("Processing CSV file %s", csv_file)
   
       image_count = 0
       label_count = 0
   
       with open(csv_file, newline='', encoding="UTF-8") as csvfile,\
               open(manifest_file, "w", encoding="UTF-8") as output_file:
   
           image_classifications = csv.reader(
               csvfile, delimiter=',', quotechar='|')
   
           # Process each row (image) in CSV file.
           for row in image_classifications:
               source_ref = str(s3_path)+row[0]
   
               image_count += 1
   
               # Create JSON for image source ref.
               json_line = {}
               json_line['source-ref'] = source_ref
   
               # Process each image level label.
               for index in range(1, len(row)):
                   image_level_label = row[index]
   
                   # Skip empty columns.
                   if image_level_label == '':
                       continue
                   label_count += 1
   
                  # Create the JSON line metadata.
                   json_line[image_level_label] = 1
                   metadata = {}
                   metadata['confidence'] = 1
                   metadata['job-name'] = 'labeling-job/' + image_level_label
                   metadata['class-name'] = image_level_label
                   metadata['human-annotated'] = "yes"
                   metadata['creation-date'] = \
                       datetime.now(timezone.utc).strftime('%Y-%m-%dT%H:%M:%S.%f')
                   metadata['type'] = "groundtruth/image-classification"
   
                   json_line[f'{image_level_label}-metadata'] = metadata
   
                   # Write the image JSON Line.
               output_file.write(json.dumps(json_line))
               output_file.write('\n')
   
       output_file.close()
       logger.info("Finished creating manifest file %s\nImages: %s\nLabels: %s",
                   manifest_file, image_count, label_count)
   
       return image_count, label_count
   
   
   def add_arguments(parser):
       """
       Adds command line arguments to the parser.
       :param parser: The command line parser.
       """
   
       parser.add_argument(
           "csv_file", help="The CSV file that you want to process."
       )
   
       parser.add_argument(
           "--s3_path", help="The S3 bucket and folder path for the images."
           " If not supplied, column 1 is assumed to include the S3 path.", required=False
       )
   
   
   def main():
   
       logging.basicConfig(level=logging.INFO,
                           format="%(levelname)s: %(message)s")
   
       try:
   
           # Get command line arguments
           parser = argparse.ArgumentParser(usage=argparse.SUPPRESS)
           add_arguments(parser)
           args = parser.parse_args()
   
           s3_path = args.s3_path
           if s3_path is None:
               s3_path = ''
   
           # Create file names.
           csv_file = args.csv_file
           file_name = os.path.splitext(csv_file)[0]
           manifest_file = f'{file_name}.manifest'
           duplicates_file = f'{file_name}-duplicates.csv'
           deduplicated_file = f'{file_name}-deduplicated.csv'
   
           # Create manifest file, if there are no duplicate images.
           if check_duplicates(csv_file, deduplicated_file, duplicates_file):
               print(f"Duplicates found. Use {duplicates_file} to view duplicates "
                     f"and then update {deduplicated_file}. ")
               print(f"{deduplicated_file} contains the first occurence of a duplicate. "
                     "Update as necessary with the correct label information.")
               print(f"Re-run the script with {deduplicated_file}")
           else:
               print("No duplicates found. Creating manifest file.")
   
               image_count, label_count = create_manifest_file(csv_file,
                                                               manifest_file,
                                                               s3_path)
   
               print(f"Finished creating manifest file: {manifest_file} \n"
                     f"Images: {image_count}\nLabels: {label_count}")
   
       except FileNotFoundError as err:
           logger.exception("File not found: %s", err)
           print(f"File not found: {err}. Check your input CSV file.")
   
   
   if __name__ == "__main__":
       main()
   ```

1. 如果您打算使用測試資料集，請重複步驟 1 至 3，為測試資料集建立清單檔案。

1. 如有必要，請將影像複製到您在 CSV 檔案的資料欄 1 中指定的 Amazon S3 儲存貯體路徑 (或在 `--s3_path` 命令列中指定)。您可以使用下列 AWS S3 命令。

   ```
   aws s3 cp --recursive your-local-folder s3://your-target-S3-location
   ```

1. [將清單檔案上傳](https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-objects.html)到您要用於存放清單檔案的 Amazon S3 儲存貯體。
**注意**  
請確保 Amazon Rekognition 自訂標籤可存取清單檔案 JSON Lines 的 `source-ref` 欄位中參考的 Amazon S3 儲存貯體。如需詳細資訊，請參閱[存取外部 Amazon S3 儲存貯體](su-console-policy.md#su-external-buckets)。如果您的 Ground Truth 任務將影像存放在 Amazon Rekognition 自訂標籤主控台儲存貯體中，則不需要新增權限。

1. 請遵循 [使用 SageMaker AI Ground Truth 資訊清單檔案 （主控台） 建立資料集](md-create-dataset-ground-truth.md#md-create-dataset-ground-truth-console) 中的指示，使用上傳的資訊清單檔案建立資料集。對於步驟 8，請在 **.manifest 檔案位置**，輸入清單檔案位置的 Amazon S3 URL。如果您使用 AWS SDK，請執行 [使用 SageMaker AI Ground Truth 資訊清單檔案 (SDK) 建立資料集](md-create-dataset-ground-truth.md#md-create-dataset-ground-truth-sdk)。

# 從現有資料集複製內容
<a name="md-create-dataset-existing-dataset"></a>

如果您先前已建立資料集，則可以將其內容複製到新的資料集。若要使用 AWS SDK 從現有資料集建立資料集，請參閱 [使用現有的資料集建立資料集 (SDK)](md-create-dataset-existing-dataset-sdk.md)。

**使用現有 Amazon Rekognition 自訂標籤資料集 (主控台) 建立資料集**

1. 開啟 Amazon Rekognition 主控台：[https://console.aws.amazon.com/rekognition/](https://console.aws.amazon.com/rekognition/)。

1. 選擇**使用自訂標籤**。

1. 選擇**開始使用**。

1. 在左側導覽視窗中，選擇**專案**。

1. 在**專案** 頁面，選擇您要新增資料集的專案。專案的詳細資訊頁面隨即顯示。

1. 選擇**建立資料集**。**建立資料集**頁面即會顯示。

1. 在**開始設定**中，選擇**從單一資料集開始**或**從訓練資料集開始**。若要建立更高品質的模型，我們建議您從個別的訓練和測試資料集開始。

------
#### [ Single dataset ]

   1. 在**訓練資料集詳細資訊**區段中，選擇**複製現有的 Amazon Rekognition 自訂標籤資料集**。

   1. 在**訓練資料集詳細資訊**區段的**資料集**編輯方塊中，輸入或選取您要複製的資料集名稱。

   1. 選擇**建立資料集**。專案的資料集頁面隨即開啟。

------
#### [ Separate training and test datasets ]

   1. 在**訓練資料集詳細資訊**區段中，選擇**複製現有的 Amazon Rekognition 自訂標籤資料集**。

   1. 在**訓練資料集詳細資訊**區段的**資料集**編輯方塊中，輸入或選取您要複製的資料集名稱。

   1. 在**測試資料集詳細資訊**區段中，選擇**複製現有的 Amazon Rekognition 自訂標籤資料集**。

   1. 在**測試資料集詳細資訊**區段的**資料集**編輯方塊中，輸入或選取您要複製的資料集名稱。
**注意**  
您的訓練和測試資料集可以有不同的影像來源。

   1. 選擇**建立資料集**。專案的資料集頁面隨即開啟。

------

1. 如果您需要新增或變更標籤，請執行 [標記檔案](md-labeling-images.md)。

1. 請遵循 [培訓模型（主控台）](training-model.md#tm-console) 中的步驟訓練模型。

# 標記檔案
<a name="md-labeling-images"></a>

標籤可識別影像中物件周圍的物件、場景、概念或週框方塊。例如，如果您的資料集包含狗的影像，您可以新增犬種的標籤。

將影像匯入資料集之後，您可能需要對影像新增標籤，或更正標記錯誤的影像。例如，從本機電腦匯入的影像即沒有標記。您可以使用資料集圖庫新增標籤至資料集，並將標籤和週框方塊指派給資料集中的影像。

您在資料集中標記影像的方式會決定 Amazon Rekognition 自訂標籤訓練的模型類型。如需詳細資訊，請參閱[規劃資料集](md-dataset-purpose.md)。

**Topics**
+ [管理標籤](md-labels.md)
+ [將影像層級標籤指派給影像](md-assign-image-level-labels.md)
+ [使用週框方塊標記物件](md-localize-objects.md)

# 管理標籤
<a name="md-labels"></a>

您可使用 Amazon Rekognition 自訂標籤主控台管理影像。沒有用於管理標籤的特定 API — 當您使用 `CreateDataset` 建立資料集或使用 `UpdateDatasetEntries` 新增更多影像至資料集時，標籤會新增至資料集。

**Topics**
+ [管理標籤 (主控台)](#md-labels-console)
+ [管理標籤 (SDK)](#md-labels-sdk)

## 管理標籤 (主控台)
<a name="md-labels-console"></a>

您可以使用 Amazon Rekognition 自訂標籤主控台來新增、變更標籤或從資料集移除標籤。若要將標籤新增至資料集，您可以新增您建立的新標籤或從 Rekognition 中的現有資料集匯入標籤。

**Topics**
+ [新增標籤 (主控台)](#md-add-new-labels)
+ [變更和移除標籤 (主控台)](#md-edit-labels-after-adding)

### 新增標籤 (主控台)
<a name="md-add-new-labels"></a>

您可以指定要新增至資料集的新標籤。

#### 使用編輯視窗新增標籤
<a name="add-with-modal"></a>

**新增標籤 (主控台)**

1. 開啟 Amazon Rekognition 主控台：[https://console.aws.amazon.com/rekognition/](https://console.aws.amazon.com/rekognition/)。

1. 選擇**使用自訂標籤**。

1. 選擇**開始使用**。

1. 在左側導覽視窗中，選擇**專案**。

1. 在**所有專案**頁面上，選擇您要使用的專案。專案的詳細資訊頁面隨即顯示。

1. 如果您要為訓練資料集新增標籤，請選擇**訓練**索引標籤。否則，請選擇**測試**索引標籤，將標籤新增至測試資料集。

1. 選擇**開始標記**以進入標記模式。

1. 在資料集圖庫的**標籤**區段中，選擇**管理標籤**，以開啟**管理標籤**對話方塊。

1. 在編輯框中，輸入新標籤名稱。

1. 選擇**新增標籤**。

1. 重複步驟 9 和 10，直到您建立完所需的標籤為止。

1. 選擇**儲存**以儲存您新增的標籤。

### 變更和移除標籤 (主控台)
<a name="md-edit-labels-after-adding"></a>

您可以在將標籤新增至資料集後重新命名或移除標籤。您只能移除未指派給任何影像的標籤。

**重新命名或移除現有標籤 (主控台)**

1. 在 [https://console.aws.amazon.com/rekognition/](https://console.aws.amazon.com/rekognition/) 開啟 Amazon Rekognition 主控台。

1. 選擇**使用自訂標籤**。

1. 選擇**開始使用**。

1. 在左側導覽視窗中，選擇**專案**。

1. 在**所有專案**頁面上，選擇您要使用的專案。專案的詳細資訊頁面隨即顯示。

1. 如果您想要變更或刪除訓練資料集中的標籤，請選擇**訓練**索引標籤。否則，請選擇**測試**索引標籤，以變更或刪除測試資料集的標籤。

1. 選擇**開始標記**以進入標記模式。

1. 在資料集圖庫的**標籤**區段中，選擇**管理標籤**，以開啟**管理標籤**對話方塊。

1. 選擇您要編輯或刪除的標籤。  
![\[管理標籤對話方塊，顯示文字欄位以新增標籤和名為「測試」的現有標籤，以及儲存或取消變更的選項。\]](http://docs.aws.amazon.com/zh_tw/rekognition/latest/customlabels-dg/images/change-delete-label.jpg)

   1. 如果您選擇刪除圖示 (X)，則會從清單中移除標籤。

   1. 如果要變更標籤，請選擇編輯圖示 (鉛筆和紙墊)，然後在編輯方塊中輸入新的標籤名稱。

1. 選擇**儲存**，以儲存變更。

## 管理標籤 (SDK)
<a name="md-labels-sdk"></a>

沒有管理資料集標籤的唯一 API。如果您使用 `CreateDataset`、在清單檔案或複製的資料集中找到的標籤建立資料集，請建立初始的標籤集。如果您使用 `UpdateDatasetEntries` API 新增更多影像，則在項目中找到的新標籤會新增至資料集。如需詳細資訊，請參閱[新增更多圖像 (SDK)](md-add-images.md#md-add-images-sdk)。若要刪除資料集中的標籤，您必須移除資料集中的所有標籤註釋。

**從資料集中刪除標籤**

1. 呼叫 `ListDatasetEntries` 以取得資料集項目。如需範例程式碼，請參閱 [列出資料集條目 (SDK)](md-listing-dataset-entries-sdk.md)。

1. 在檔案中，移除所有標籤註釋。如需詳細資訊，請參閱 [在資訊清單檔案中匯入影像層級標籤](md-create-manifest-file-classification.md) 及 [資訊清單檔案中的物件當地語系化](md-create-manifest-file-object-detection.md)。

1. 使用檔案以透過 `UpdateDatasetEntries` API 更新資料集。如需詳細資訊，請參閱[新增更多圖像 (SDK)](md-add-images.md#md-add-images-sdk)。

# 將影像層級標籤指派給影像
<a name="md-assign-image-level-labels"></a>

您可以使用影像層級標籤來訓練將影像分類為不同類別的模型。影像層級標籤表示影像包含物件、場景或概念。例如，下列影像即顯示河流。如果您的模型將影像分類為包含河流，則需要新增 *river* 影像層級標籤。如需詳細資訊，請參閱[規劃資料集](md-dataset-purpose.md)。

![\[湖在日落或日出時在靜止的水中反射山脈和雲朵。\]](http://docs.aws.amazon.com/zh_tw/rekognition/latest/customlabels-dg/images/pateros.jpg)


包含影像層級標籤的資料集至少需要定義兩個標籤。每個影像都需要至少一個指派的標籤，以識別影像中的物件、場景或概念。

**將影像層級標籤指派給影像 (主控台)**

1. 開啟 Amazon Rekognition 主控台：[https://console.aws.amazon.com/rekognition/](https://console.aws.amazon.com/rekognition/)。

1. 選擇**使用自訂標籤**。

1. 選擇**開始使用**。

1. 在左側導覽視窗中，選擇**專案**。

1. 在**所有專案**頁面上，選擇您要使用的專案。專案的詳細資訊頁面隨即顯示。

1. 在左側導覽窗格中，選擇**資料集**。

1. 如果您要為訓練資料集新增標籤，請選擇**訓練**索引標籤。否則，請選擇**測試**索引標籤，將標籤新增至測試資料集。

1. 選擇**開始標記**以進入標記模式。

1. 在影像圖庫中，選取您要新增標籤的一或多個影像。您一次只能選取單一頁面上的影像。若要在頁面上選取連續範圍的影像：

   1. 選取範圍中的第一個影像。

   1. 按住 Shift 鍵。

   1. 選取最後一個影像範圍。也會選取第一和第二個影像之間的影像。

   1. 放開 Shift 鍵。

1. 選擇 **指派影像層級標籤**。

1. 在**將影像層級標籤指派給選取的影像**對話方塊中，選取您要指派給影像或影像的標籤。

1. 選擇 **指派**，為影像指派標籤。

1. 重複標記，直至每個影像都用所需的標籤進行註釋。

1. 請選擇**儲存變更**，以儲存您所做的變更。

## 指派影像層級標籤 (SDK)
<a name="md-assign-image-level-labels-sdk"></a>

您可以使用 `UpdateDatasetEntries` API 新增或更新指派給影像的影像層級標籤。`UpdateDatasetEntries` 需要一個或多個 JSON Lines。每個 JSON Line 代表一個影像。對於具有影像層級標籤的影像，JSON Line 看起來類似以下內容。

```
{"source-ref":"s3://custom-labels-console-us-east-1-nnnnnnnnnn/gt-job/manifest/IMG_1133.png","TestCLConsoleBucket":0,"TestCLConsoleBucket-metadata":{"confidence":0.95,"job-name":"labeling-job/testclconsolebucket","class-name":"Echo Dot","human-annotated":"yes","creation-date":"2020-04-15T20:17:23.433061","type":"groundtruth/image-classification"}}
```

`source-ref` 欄位表示影像的位置。JSON Line 也包含指派給影像的影像層級標籤。如需詳細資訊，請參閱[在資訊清單檔案中匯入影像層級標籤](md-create-manifest-file-classification.md)。

**將影像層級標籤指派給影像**

1. 使用 `ListDatasetEntries` 取得現有影像的 JSON Line。對於 `source-ref` 欄位，指定要為其分配標籤的影像的位置。如需詳細資訊，請參閱[列出資料集條目 (SDK)](md-listing-dataset-entries-sdk.md)。

1. 使用 [在資訊清單檔案中匯入影像層級標籤](md-create-manifest-file-classification.md) 中的資訊更新上一個步驟中傳回的 JSON Line。

1. 呼叫 `UpdateDatasetEntries` 以更新影像。如需詳細資訊，請參閱[將更多圖像新增至資料集](md-add-images.md)。

# 使用週框方塊標記物件
<a name="md-localize-objects"></a>

如果您希望模型偵測影像中物件的位置，您必須識別物件是什麼，以及物件在影像中的位置。週框方塊是標示影像中物件的方塊。您可以使用週框方塊來訓練模型，以偵測相同影像中的不同物件。您可以透過將標籤指派給週框方塊來識別物件。

**注意**  
如果您正在訓練模型以尋找具有影像層級標籤的物件、場景和概念，則不需要執行此步驟。

例如，如果您想要訓練偵測 Amazon Echo Dot 裝置的模型，您可以在影像中的每個 Echo Dot 周圍繪製一個週框方塊，並為週框方塊指派一個名為 *Echo Dot* 的標籤。下列影像即顯示 Echo Dot 裝置周圍的週框方塊。影像還包含一個沒有週框方塊的 Amazon Echo。

![\[Amazon Echo 點和 Echo 裝置，帶有 Echo 點周圍的週框方塊。\]](http://docs.aws.amazon.com/zh_tw/rekognition/latest/customlabels-dg/images/dot.jpg)


## 使用週框方塊尋找物件 (主控台)
<a name="md-localize-objects-console"></a>

 在此程序中，您可以使用主控台繪製影像中物件周圍的週框方塊。您也可以透過將標籤指派給週框方塊來識別物件。

**注意**  
您無法使用 Safari 瀏覽器對影像新增週框方塊。如需支援的瀏覽器，請參閱 [設定 Amazon Rekognition 自訂標籤](setting-up.md)。

您必須先新增至少一個標籤至資料集，才能新增週框方塊。如需詳細資訊，請參閱[新增標籤 (主控台)](md-labels.md#md-add-new-labels)。

****

**新增週框方塊至影像 (主控台)**

1. 開啟 Amazon Rekognition 主控台： [https://console.aws.amazon.com/rekognition/](https://console.aws.amazon.com/rekognition/)。

1. 選擇**使用自訂標籤**。

1. 選擇**開始使用**。

1. 在左側導覽視窗中，選擇**專案**。

1. 在**所有專案**頁面上，選擇您要使用的專案。專案的詳細資訊頁面隨即顯示。

1. 在專案詳細資訊頁面上，選擇**標籤影像**

1. 如果您想要新增週框方塊到訓練資料集影像，請選擇**訓練**索引標籤。否則，請選擇**測試**索引標籤，將週框方塊新增到測試資料集影像。

1. 選擇**開始標記**以進入標記模式。

1. 在影像圖庫中，選擇您要新增週框方塊的影像。

1. 選擇**繪製週框方塊**。在顯示週框方塊編輯器之前，會先顯示一系列提示。

1. 在右側的**標籤**窗格中，選取要指派給週框方塊的標籤。

1. 在繪圖工具中，將指標置於所需物件的左上角區域。

1. 按下滑鼠左鍵並在物件周圍繪製一個方塊。嘗試繪製盡可能靠近物件的週框方塊。

1. 放開滑鼠按鈕。週框方塊會反白顯示。

1. 如果要標記更多影像，請選擇**下一步**。否則，請選擇**完成**，以完成標記。  
![\[要在影像周圍繪製週框方塊的 UI，影像是木表面上的 Amazon Echo 和 Echo Dot 智慧發言者。\]](http://docs.aws.amazon.com/zh_tw/rekognition/latest/customlabels-dg/images/draw-bounding-box.png)

1. 重複步驟 1 至 7，直到您在每個包含物件的影像中建立週框方塊為止。

1. 選擇**儲存變更**，以儲存您所做的變更。

1. 選擇**退出**，可退出標記模式。

## 使用週框方塊尋找物件 (SDK)
<a name="md-localize-objects-sdk"></a>

您可以使用 `UpdateDatasetEntries` API 來新增或更新影像的物件位置資訊。 `UpdateDatasetEntries` 需要一或多個 JSON Lines。每個 JSON Line 代表一個影像。對於物件本地化，JSON Line 看起來類似如下內容。

```
{"source-ref": "s3://bucket/images/IMG_1186.png", "bounding-box": {"image_size": [{"width": 640, "height": 480, "depth": 3}], "annotations": [{ "class_id": 1,	"top": 251,	"left": 399, "width": 155, "height": 101}, {"class_id": 0, "top": 65, "left": 86, "width": 220,	"height": 334}]}, "bounding-box-metadata": {"objects": [{ "confidence": 1}, {"confidence": 1}],	"class-map": {"0": "Echo",	"1": "Echo Dot"}, "type": "groundtruth/object-detection", "human-annotated": "yes",	"creation-date": "2013-11-18T02:53:27", "job-name": "my job"}}
```

`source-ref` 欄位表示影像的位置。JSON Line 也包含影像上每個物件標記的週框方塊。如需詳細資訊，請參閱[資訊清單檔案中的物件當地語系化](md-create-manifest-file-object-detection.md)。

**將週框方塊指派給影像**

1. 使用 `ListDatasetEntries` 取得現有影像的 JSON Line。對於 `source-ref` 欄位，指定要為其指派影像層級標籤的影像的位置。如需詳細資訊，請參閱[列出資料集條目 (SDK)](md-listing-dataset-entries-sdk.md)。

1. 使用 [資訊清單檔案中的物件當地語系化](md-create-manifest-file-object-detection.md) 中的資訊更新上一個步驟中傳回的 JSON Line。

1. 呼叫 `UpdateDatasetEntries` 以更新影像。如需詳細資訊，請參閱[將更多圖像新增至資料集](md-add-images.md)。

# 偵錯資料集
<a name="debugging-datasets"></a>

在資料集建立期間，可能會發生兩種類型的錯誤 — *終端錯誤*和*非終端錯誤*。終端錯誤可能會停止資料集建立或更新。終端錯誤則不會停止資料集建立或更新。

**Topics**
+ [偵錯終端機資料集錯誤](debugging-datasets-terminal-errors.md)
+ [偵錯非終端資料集錯誤](debugging-datasets-non-terminal-errors.md)

# 偵錯終端機資料集錯誤
<a name="debugging-datasets-terminal-errors"></a>

 終端錯誤有兩種類型：導致資料集建立失敗的檔案錯誤，以及 Amazon Rekognition 自訂標籤從資料集中移除的內容錯誤。如果內容錯誤太多，資料集建立會失敗。

**Topics**
+ [終端檔案錯誤](#debugging-datasets-terminal-file-errors)
+ [終端內容錯誤](#debugging-datasets-terminal-content-errors)

## 終端檔案錯誤
<a name="debugging-datasets-terminal-file-errors"></a>

以下是檔案錯誤。呼叫 `DescribeDataset` 並檢查 `Status` 和 `StatusMessage` 欄位，即可取得檔案錯誤的相關資訊。如需範例程式碼，請參閱 [描述資料集 (SDK)](md-describing-dataset-sdk.md)。
+ [ERROR\$1MANIFEST\$1INACCESSIBLE\$1OR\$1UNSUPPORTED\$1FORMAT](#md-error-status-ERROR_MANIFEST_INACCESSIBLE_OR_UNSUPPORTED_FORMAT)
+ [ERROR\$1MANIFEST\$1SIZE\$1TOO\$1LARGE](#md-error-status-ERROR_MANIFEST_SIZE_TOO_LARGE).
+ [ERROR\$1MANIFEST\$1ROWS\$1EXCEEDS\$1MAXIMUM](#md-error-status-ERROR_MANIFEST_ROWS_EXCEEDS_MAXIMUM)
+ [ERROR\$1INVALID\$1PERMISSIONS\$1MANIFEST\$1S3\$1BUCKET](#md-error-status-ERROR_INVALID_PERMISSIONS_MANIFEST_S3_BUCKET)
+ [ERROR\$1TOO\$1MANY\$1RECORDS\$1IN\$1ERROR](#md-error-status-ERROR_TOO_MANY_RECORDS_IN_ERROR)
+ [ERROR\$1MANIFEST\$1TOO\$1MANY\$1LABELS](#md-error-status-ERROR_MANIFEST_TOO_MANY_LABELS)
+ [ERROR\$1INSUFFICIENT\$1IMAGES\$1PER\$1LABEL\$1FOR\$1DISTRIBUTE](#md-error-status-ERROR_INSUFFICIENT_IMAGES_PER_LABEL_FOR_DISTRIBUTE)

### ERROR\$1MANIFEST\$1INACCESSIBLE\$1OR\$1UNSUPPORTED\$1FORMAT
<a name="md-error-status-ERROR_MANIFEST_INACCESSIBLE_OR_UNSUPPORTED_FORMAT"></a>

#### 錯誤訊息
<a name="md-error-message-ERROR_MANIFEST_INACCESSIBLE_OR_UNSUPPORTED_FORMAT"></a>

清單檔案副檔名或內容無效。

訓練或測試清單檔案沒有副檔名或其內容無效。

**修正錯誤 *ERROR\$1MANIFEST\$1INACCESSIBLE\$1OR\$1UNSUPPORTED\$1FORMAT***
+ 檢查訓練和測試清單檔案中的下列可能原因。
  + 清單檔案缺少副檔名。按照慣例，檔案副檔名為 `.manifest`。
  +  找不到清單檔案的 Amazon S3 儲存貯體或金鑰。

### ERROR\$1MANIFEST\$1SIZE\$1TOO\$1LARGE
<a name="md-error-status-ERROR_MANIFEST_SIZE_TOO_LARGE"></a>

#### 錯誤訊息
<a name="md-error-message-ERROR_MANIFEST_SIZE_TOO_LARGE"></a>

清單檔案大小超過支援的大小上限。

訓練或測試清單檔案大小 (以位元組為單位) 太大。如需詳細資訊，請參閱[Amazon Rekognition 自訂標籤中的指南和配額](limits.md)。清單檔案的 JSON Lines 數目可能少於最大數目，但仍超過檔案大小上限。

您無法使用 Amazon Rekognition 自訂標籤主控台修正錯誤*清單檔案大小超過支援的大小上限*。

**修正錯誤 *ERROR\$1MANIFEST\$1SIZE\$1TOO\$1LARGE***

1. 檢查哪些訓練和測試清單檔案超出檔案大小上限。

1. 減少過大的清單檔案中的 JSON Lines 數目。如需詳細資訊，請參閱[建立清單檔案](md-create-manifest-file.md)。

### ERROR\$1MANIFEST\$1ROWS\$1EXCEEDS\$1MAXIMUM
<a name="md-error-status-ERROR_MANIFEST_ROWS_EXCEEDS_MAXIMUM"></a>

#### 錯誤訊息
<a name="md-error-message-ERROR_MANIFEST_ROWS_EXCEEDS_MAXIMUM"></a>

清單檔案的資料列太多。

#### 其他資訊
<a name="md-error-description-ERROR_MANIFEST_ROWS_EXCEEDS_MAXIMUM"></a>

清單檔案中的 JSON Lines 數目 (影像數目) 大於允許的限制。影像層級模型和物件位置模型的限制不同。如需詳細資訊，請參閱[Amazon Rekognition 自訂標籤中的指南和配額](limits.md)。

JSON Line 錯誤會被驗證，直到 JSON Lines 數目達到 `ERROR_MANIFEST_ROWS_EXCEEDS_MAXIMUM` 限制為止。

您無法使用 Amazon Rekognition 自訂標籤主控台修正錯誤 `ERROR_MANIFEST_ROWS_EXCEEDS_MAXIMUM`。

**修正 `ERROR_MANIFEST_ROWS_EXCEEDS_MAXIMUM`**
+ 減少清單檔案中的 JSON Lines 數目。如需詳細資訊，請參閱[建立清單檔案](md-create-manifest-file.md)。



### ERROR\$1INVALID\$1PERMISSIONS\$1MANIFEST\$1S3\$1BUCKET
<a name="md-error-status-ERROR_INVALID_PERMISSIONS_MANIFEST_S3_BUCKET"></a>

#### 錯誤訊息
<a name="md-error-message-ERROR_INVALID_PERMISSIONS_MANIFEST_S3_BUCKET"></a>

S3 儲存貯體權限不正確。

Amazon Rekognition 自訂標籤不具有一或多個包含訓練和測試清單檔案的儲存貯體的權限。

您無法使用 Amazon Rekognition 自訂標籤主控台修正此錯誤。

**修正錯誤 *ERROR\$1INVALID\$1PERMISSIONS\$1MANIFEST\$1S3\$1BUCKET***
+ 檢查包含訓練和測試清單檔案的儲存貯體的權限。如需詳細資訊，請參閱[步驟 2：設定 Amazon Rekognition 自訂標籤主控台權限](su-console-policy.md)。

### ERROR\$1TOO\$1MANY\$1RECORDS\$1IN\$1ERROR
<a name="md-error-status-ERROR_TOO_MANY_RECORDS_IN_ERROR"></a>

#### 錯誤訊息
<a name="md-error-message-ERROR_TOO_MANY_RECORDS_IN_ERROR"></a>

 清單檔案的終端錯誤太多。

**修正 `ERROR_TOO_MANY_RECORDS_IN_ERROR`**
+ 減少具有終端內容錯誤之 JSON Lines (影像) 的數量。如需詳細資訊，請參閱[終端清單檔案內容錯誤](tm-debugging-aggregate-errors.md)。

您無法使用 Amazon Rekognition 自訂標籤主控台修正此錯誤。

### ERROR\$1MANIFEST\$1TOO\$1MANY\$1LABELS
<a name="md-error-status-ERROR_MANIFEST_TOO_MANY_LABELS"></a>

#### 錯誤訊息
<a name="md-error-message-ERROR_MANIFEST_TOO_MANY_LABELS"></a>

清單檔案的標籤太多。

##### 其他資訊
<a name="md-error-description-ERROR_MANIFEST_TOO_MANY_LABELS"></a>

清單檔案 (資料集) 中的唯一標籤數目超過允許的限制。如果分割訓練資料集以建立測試資料集，則標籤數量會在分割後確定。

**修正 ERROR\$1MANIFEST\$1TOO\$1MANY\$1LABELS (主控台)**
+ 從資料集中移除標籤。如需詳細資訊，請參閱[管理標籤](md-labels.md)。標籤會自動從資料集中的影像和週框方塊中移除。



**修正 ERROR\$1MANIFEST\$1TOO\$1MANY\$1LABELS (JSON Line)**
+ 具有影像層級 JSON Lines 的清單檔案 — 如果影像具有單一標籤，請移除使用所需標籤的影像的 JSON Lines。如果 JSON Line 包含多個標籤，則僅移除所需標籤的 JSON 物件。如需詳細資訊，請參閱[對影像新增多個影像層級標籤](md-create-manifest-file-classification.md#md-dataset-purpose-classification-multiple-labels)。

  具有物件位置 JSON Lines 的清單檔案 — 移除要移除之標籤的週框方塊和相關聯的標籤資訊。針對包含所需標籤的每個 JSON Line 執行此操作。您需要從 `class-map` 陣列和 `objects` 和 `annotations` 陣列中的對應物件移除標籤。如需詳細資訊，請參閱[資訊清單檔案中的物件當地語系化](md-create-manifest-file-object-detection.md)。

### ERROR\$1INSUFFICIENT\$1IMAGES\$1PER\$1LABEL\$1FOR\$1DISTRIBUTE
<a name="md-error-status-ERROR_INSUFFICIENT_IMAGES_PER_LABEL_FOR_DISTRIBUTE"></a>

#### 錯誤訊息
<a name="md-error-message-ERROR_MANIFEST_TOO_MANY_LABELS"></a>

清單檔案沒有足夠的已標記影像來分發資料集。



當 Amazon Rekognition 自訂標籤分割訓練資料集以建立測試資料集時，即會發生資料集分佈。您也可以透過呼叫 `DistributeDatasetEntries` API 來分割資料集。

**修正錯誤 *ERROR\$1MANIFEST\$1TOO\$1MANY\$1LABELS***
+ 將更多已標記影像新增至訓練資料集

## 終端內容錯誤
<a name="debugging-datasets-terminal-content-errors"></a>

以下是終端內容錯誤。在資料集建立期間，會從資料集中移除具有終端內容錯誤的影像。資料集仍可用於訓練。如果內容錯誤太多，資料集/更新會失敗。與資料集作業相關的終端內容錯誤不會顯示在主控台中，也不會從 `DescribeDataset` 或其他 API 傳回。如果您發現資料集缺少影像或註釋，請檢查資料集清單檔案是否有下列問題：
+ JSON Line 的長度太長。長度上限為 100,000 個字元。
+ JSON Line 中缺少 `source-ref` 值。
+ JSON Line 中 `source-ref` 值的格式無效。
+ JSON Line 的內容無效。
+ `source-ref` 欄位會顯示多次的值。影像在資料集中只能被參考一次。

如需 `source-ref` 欄位的相關資訊，請參閱 [建立清單檔案](md-create-manifest-file.md)。

# 偵錯非終端資料集錯誤
<a name="debugging-datasets-non-terminal-errors"></a>

以下是資料集建立或更新期間可能發生的非終端錯誤。這些錯誤可能會使整個 JSON Line 無效，或使 JSON Line 中的註釋失效。如果 JSON Line 出現錯誤，則不會用於訓練。如果 JSON Line 中的註釋出現錯誤，JSON Line 仍會用於訓練，但沒有中斷的註釋。如需 JSON Lines 的詳細資訊，請參閱 [建立清單檔案](md-create-manifest-file.md)。

您可以從主控台並呼叫 `ListDatasetEntries` API 來存取非終端錯誤。如需詳細資訊，請參閱[列出資料集條目 (SDK)](md-listing-dataset-entries-sdk.md)。

訓練期間也會傳回下列錯誤。建議您在訓練模型之前先修正這些錯誤。如需更多詳細資訊，請參閱 [非終端 JSON Line 驗證錯誤](tm-debugging-json-line-errors.md)。
+ [ERROR\$1NO\$1LABEL\$1ATTRIBUTES](tm-debugging-json-line-errors.md#tm-error-ERROR_NO_LABEL_ATTRIBUTES)
+ [ERROR\$1INVALID\$1LABEL\$1ATTRIBUTE\$1FORMAT](tm-debugging-json-line-errors.md#tm-error-ERROR_INVALID_LABEL_ATTRIBUTE_FORMAT)
+ [ERROR\$1INVALID\$1LABEL\$1ATTRIBUTE\$1METADATA\$1FORMAT](tm-debugging-json-line-errors.md#tm-error-ERROR_INVALID_LABEL_ATTRIBUTE_METADATA_FORMAT)
+ [ERROR\$1NO\$1VALID\$1LABEL\$1ATTRIBUTES](tm-debugging-json-line-errors.md#tm-error-ERROR_NO_VALID_LABEL_ATTRIBUTES)
+ [ERROR\$1INVALID\$1BOUNDING\$1BOX](tm-debugging-json-line-errors.md#tm-error-ERROR_INVALID_BOUNDING_BOX)
+ [ERROR\$1INVALID\$1IMAGE\$1DIMENSION](tm-debugging-json-line-errors.md#tm-error-ERROR_INVALID_IMAGE_DIMENSION)
+ [ERROR\$1BOUNDING\$1BOX\$1TOO\$1SMALL](tm-debugging-json-line-errors.md#tm-error-ERROR_BOUNDING_BOX_TOO_SMALL)
+ [ERROR\$1NO\$1VALID\$1ANNOTATIONS](tm-debugging-json-line-errors.md#tm-error-ERROR_NO_VALID_ANNOTATIONS)
+ [ERROR\$1MISSING\$1BOUNDING\$1BOX\$1CONFIDENCE](tm-debugging-json-line-errors.md#tm-error-ERROR_MISSING_BOUNDING_BOX_CONFIDENCE)
+ [ERROR\$1MISSING\$1CLASS\$1MAP\$1ID](tm-debugging-json-line-errors.md#tm-error-ERROR_MISSING_CLASS_MAP_ID)
+ [ERROR\$1TOO\$1MANY\$1BOUNDING\$1BOXES](tm-debugging-json-line-errors.md#tm-error-ERROR_TOO_MANY_BOUNDING_BOXES)
+ [ERROR\$1UNSUPPORTED\$1USE\$1CASE\$1TYPE](tm-debugging-json-line-errors.md#tm-error-ERROR_UNSUPPORTED_USE_CASE_TYPE)
+ [ERROR\$1INVALID\$1LABEL\$1NAME\$1LENGTH](tm-debugging-json-line-errors.md#tm-error-ERROR_INVALID_LABEL_NAME_LENGTH)

## 存取非終端錯誤
<a name="debugging-dataset-access-non-terminal-errors"></a>

您可以使用主控台來找出資料集中的哪些影像具有非終端錯誤。您也可以呼叫，呼叫 `ListDatasetEntries` API 以取得錯誤訊息。如需詳細資訊，請參閱[列出資料集條目 (SDK)](md-listing-dataset-entries-sdk.md)。

**存取非終端錯誤 (主控台)**

1. 開啟 Amazon Rekognition 主控台：[https://console.aws.amazon.com/rekognition/](https://console.aws.amazon.com/rekognition/)。

1. 選擇**使用自訂標籤**。

1. 選擇**開始使用**。

1. 在左側導覽視窗中，選擇**專案**。

1. 在**所有專案**頁面上，選擇您要使用的專案。專案的詳細資訊頁面隨即顯示。

1. 如果您想要檢視訓練資料集中的非終端錯誤，請選擇**訓練**索引標籤。否則，請選擇**測試**索引標籤，以檢視測試資料集中的非終端錯誤。

1. 在資料集圖庫的**標籤**區段中，選擇**錯誤**。資料集圖庫會經過篩選，只顯示發生錯誤的影像。

1. 選擇影像下方的**錯誤**以查看錯誤代碼。使用 [非終端 JSON Line 驗證錯誤](tm-debugging-json-line-errors.md) 中的資訊來修正錯誤。  
![\[錯誤對話方塊顯示「資料集記錄錯誤」下的「ERROR_UNSUPPORTED_USE_CASE_TYPE」和「ERROR_NO_VALID_LABEL_ATTRIBUTES」。\]](http://docs.aws.amazon.com/zh_tw/rekognition/latest/customlabels-dg/images/dataset-non-terminal-error.jpg)