本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
物件偵測 - MXNet
Amazon SageMaker 物件偵測 - MXNet演算法會使用單一深度神經網路偵測影像中的物件並加以分類。這是一個受監督的學習演算法,可將影像做為輸入,並識別影像場景內的所有物件執行個體。物件會分類為指定集合中的其中一個類別,並具有該類別所屬的可信度分數。矩形邊界框會指出它在影像中的位置和比例尺。它使用單一拍攝多盒偵測器 (SSD)
物件偵測演算法的輸入/輸出介面
SageMaker 物件偵測演算法支援 RecordIO (application/x-recordio
) 和映像 (image/jpeg
、 和 application/x-image
) 內容類型,以在檔案模式下進行訓練image/png
,並支援 RecordIO (application/x-recordio
) 在管道模式下進行訓練。但是,您也可以透過使用擴增資訊清單格式,使用影像檔案 (image/png
、image/jpeg
和 application/x-image
) 來在管道模式中訓練,而無須建立 RecordIO 檔案。Amazon SageMaker 物件偵測演算法的建議輸入格式為 Apache MXNet RecordIO application/x-image
。
注意
為了維持與現有深度學習架構更好的互通性,這與其他 Amazon SageMaker 演算法常用的 protobuf 資料格式不同。
如需資料格式的詳細資訊,請參閱物件偵測範例筆記本。
以 RecordIO 格式進行訓練
若您是採用 RecordIO 格式進行訓練,請將 train 和 validation 通道指定為 CreateTrainingJob
請求的 InputDataConfig
參數值。在訓練通道中指定一個 RecordIO (.rec) 檔案,並在驗證通道中指定一個 RecordIO 檔案。請接著將兩個通道的內容類型設定為 application/x-recordio
。如需 RecordIO 檔案的產生方法範例,請參閱物件偵測範例筆記本。您也可以使用 MXNetGluonCV
以影像格式進行訓練
若您是採用影像格式進行訓練,請將 train
、validation
、train_annotation
與 validation_annotation
通道指定為 CreateTrainingJob
請求的 InputDataConfig
參數值。為訓練和驗證通道指定個別的影像資料 (.jpg 或 .png) 檔案。對於註釋資料,您可以使用 JSON 格式。在 train_annotation
和 validation_annotation
通道中指定對應的 .json 檔案。根據影像類型,將所有四個通道的內容類型設為 image/png
或 image/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_network
和 num_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 物件偵測演算法的詳細資訊,請參閱下列部落格文章: