物件偵測 - MXNet - Amazon SageMaker

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

物件偵測 - MXNet

Amazon SageMaker 物件偵測 - MXNet演算法會使用單一深度神經網路偵測影像中的物件並加以分類。這是一個受監督的學習演算法,可將影像做為輸入,並識別影像場景內的所有物件執行個體。物件會分類為指定集合中的其中一個類別,並具有該類別所屬的可信度分數。矩形邊界框會指出它在影像中的位置和比例尺。它使用單一拍攝多盒偵測器 (SSD) 架構,並支援兩個基礎網路: VGGResNet。網路可以從頭開始訓練,也可以使用資料集上預先訓練的模型進行訓練ImageNet

物件偵測演算法的輸入/輸出介面

SageMaker 物件偵測演算法支援 RecordIO (application/x-recordio) 和映像 (image/jpeg、 和 application/x-image) 內容類型,以在檔案模式下進行訓練image/png,並支援 RecordIO (application/x-recordio) 在管道模式下進行訓練。但是,您也可以透過使用擴增資訊清單格式,使用影像檔案 (image/pngimage/jpegapplication/x-image) 來在管道模式中訓練,而無須建立 RecordIO 檔案。Amazon SageMaker 物件偵測演算法的建議輸入格式為 Apache MXNet RecordIO 。但您亦可使用 .jpg 或 .png 格式的原始影像。至於推論方面,該演算法僅支援 application/x-image

注意

為了維持與現有深度學習架構更好的互通性,這與其他 Amazon SageMaker 演算法常用的 protobuf 資料格式不同。

如需資料格式的詳細資訊,請參閱物件偵測範例筆記本

以 RecordIO 格式進行訓練

若您是採用 RecordIO 格式進行訓練,請將 train 和 validation 通道指定為 CreateTrainingJob 請求的 InputDataConfig 參數值。在訓練通道中指定一個 RecordIO (.rec) 檔案,並在驗證通道中指定一個 RecordIO 檔案。請接著將兩個通道的內容類型設定為 application/x-recordio。如需 RecordIO 檔案的產生方法範例,請參閱物件偵測範例筆記本。您也可以使用 MXNetGluonCV 中的工具,為熱門資料集產生 RecordIO 檔案,例如內容中的PASCAL視覺化物件類別和常見物件 ()。 COCO

以影像格式進行訓練

若您是採用影像格式進行訓練,請將 trainvalidationtrain_annotationvalidation_annotation 通道指定為 CreateTrainingJob 請求的 InputDataConfig 參數值。為訓練和驗證通道指定個別的影像資料 (.jpg 或 .png) 檔案。對於註釋資料,您可以使用 JSON 格式。在 train_annotationvalidation_annotation 通道中指定對應的 .json 檔案。根據影像類型,將所有四個通道的內容類型設為 image/pngimage/jpeg。當您的資料集包含 .jpg 和 .png 影像時,您也可以使用 application/x-image 內容類型。以下是 .json 檔案的範例。

{ "file": "your_image_directory/sample_image1.jpg", "image_size": [ { "width": 500, "height": 400, "depth": 3 } ], "annotations": [ { "class_id": 0, "left": 111, "top": 134, "width": 61, "height": 128 }, { "class_id": 0, "left": 161, "top": 250, "width": 79, "height": 143 }, { "class_id": 1, "left": 101, "top": 185, "width": 42, "height": 130 } ], "categories": [ { "class_id": 0, "name": "dog" }, { "class_id": 1, "name": "cat" } ] }

每個影像都需要 .json 檔案以用於註釋,而 .json 檔案必須與對應的影像同名。上述 .json 檔案名稱應該是 "sample_image1.json"。在註釋 .json 檔案中有四個屬性。"file" 屬性指定影像檔案的相對路徑。例如,如果您的訓練映像和對應的 .json 檔案存放在 s3://your_bucket/train/sample_image 和 s3://your_bucket/train_annotation,將訓練和 train_annotation 頻道的路徑指定為 s3://your_bucket/train 和 s3://your_bucket/train_annotation。

在 .json 檔案中,名為 sample_image1.jpg 影像的相對路徑應為 sample_image/sample_image1.jpg。此 "image_size" 屬性指定整體影像的維度。 SageMaker 物件偵測演算法目前僅支援 3 通道映像。"annotations" 屬性指定影像內物件的類別和邊界框。每個物件都是由 "class_id" 索引和四個邊界框座標 ("left""top""width""height") 來註釋。"left" (x 軸) 和 "top" (y 軸) 值代表邊界框的左上角。"width" (x 軸) 和 "height" (y 軸) 值代表邊界框的維度。原點 (0, 0) 是整個影像的左上角。如果您的一個影像內有多個物件,則所有註釋都應該包含在單一 .json 檔案中。"categories" 屬性可存放類別索引和類別名稱之間的映射。類別索引應為連續編號,且應從 0 開始進行編號。"categories" 屬性是註釋 .json 檔案的選用屬性。

以擴增的資訊清單影像格式進行訓練

擴增的資訊清單格式可讓您在管道模式中使用影像檔案進行訓練,而無需建立 RecordIO 檔案。您需要為 CreateTrainingJob 請求的 InputDataConfig 參數值指定訓練和驗證通道。雖然使用該格式,但仍需產生包含影像清單及其對應註釋的 S3 資訊清單檔案。資訊清單檔案格式應該是JSON行格式,其中每行代表一個範例。影像會使用 'source-ref' 標籤指定,指向影像的 S3 位置。註釋則會在 "AttributeNames" 參數值底下提供,如 CreateTrainingJob 請求中所指定。它也可以在 metadata 標籤底下包含額外的中繼資料,但演算法會忽略這些內容。在下列範例中,"AttributeNames 包含在清單 ["source-ref", "bounding-box"] 中:

{"source-ref": "s3://your_bucket/image1.jpg", "bounding-box":{"image_size":[{ "width": 500, "height": 400, "depth":3}], "annotations":[{"class_id": 0, "left": 111, "top": 134, "width": 61, "height": 128}, {"class_id": 5, "left": 161, "top": 250, "width": 80, "height": 50}]}, "bounding-box-metadata":{"class-map":{"0": "dog", "5": "horse"}, "type": "groundtruth/object-detection"}} {"source-ref": "s3://your_bucket/image2.jpg", "bounding-box":{"image_size":[{ "width": 400, "height": 300, "depth":3}], "annotations":[{"class_id": 1, "left": 100, "top": 120, "width": 43, "height": 78}]}, "bounding-box-metadata":{"class-map":{"1": "cat"}, "type": "groundtruth/object-detection"}}

輸入檔中 "AttributeNames" 的順序在訓練物件偵測演算法時是很重要的。它會以特定的順序來接受排在管道中的資料,image 會排在第一個,接著是 annotations。因此,此範例中的「AttributeNames」會"source-ref"先提供,後面接著 "bounding-box"。當使用物件偵測與擴增資訊清單搭配時,必須將參數 RecordWrapperType 的值設定為 "RecordIO"

如需擴增資訊清單檔案的詳細資訊,請參閱訓練任務的增強型清單檔案

增量訓練

您也可以使用您先前使用 訓練的模型成品,來植入新模型的訓練 SageMaker。當您想要使用相同或類似的資料訓練新模型時,增量訓練可節省訓練時間。 SageMaker 物件偵測模型只能透過在 中訓練的另一個內建物件偵測模型植入 SageMaker。

若要使用預先訓練模型,請在 CreateTrainingJob 請求中,於 InputDataConfig 參數內指定 ChannelName 為 "model"。將模型通道的 ContentType 設為 application/x-sagemaker-model。您上傳至模型通道之新模型和預先訓練模型的輸入超參數,必須擁有與 base_networknum_classes 輸入參數相同的設定。這些參數會定義網路架構。對於預先訓練的模型檔案,請使用 輸出的壓縮模型成品 (.tar.gz 格式) SageMaker。您可以針對輸入資料使用 RecordIO 或影像格式。

如需增量訓練的詳細資訊及其使用方式說明,請參閱在 Amazon 使用增量培訓 SageMaker

EC2 物件偵測演算法的執行個體建議

物件偵測演算法支援 P2, P3, G4dn和 G5 GPU執行個體系列。我們建議您使用具有更多記憶體的GPU執行個體進行大型批次大小的訓練。您可以在分散式訓練的多GPU機器和虛擬機器設定上執行物件偵測演算法。

您可以使用 CPU(例如 C5 和 M5) 和 GPU(例如 P3 和 G4dn執行個體進行推論。

物件偵測範例筆記本

對於示範如何使用 SageMaker 物件偵測演算法在 上訓練和託管模型的範例筆記本

使用單一拍攝多盒偵測器演算法的 Caltech Birds (CUB 200 2011) 資料集,請參閱 Amazon SageMaker Object Detection for Bird Species。如需如何建立和存取可用於在 中執行範例的 Jupyter 筆記本執行個體的說明 SageMaker,請參閱 Amazon SageMaker Notebook 執行個體。建立並開啟筆記本執行個體後,請選取SageMaker 範例索引標籤以查看所有 SageMaker 範例的清單。使用物件偵測演算法的物件偵測範例筆記本位於 Amazon 演算法簡介一節。若要開啟筆記本,請按一下其使用 標籤,然後選取建立複本

如需 Amazon SageMaker 物件偵測演算法的詳細資訊,請參閱下列部落格文章: