本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
影像分類-MXNet
Amazon 影 SageMaker 像分類演算法是支援多標籤分類的受監督學習演算法。它會取得一個影像做為輸入和輸出,並將一或多個標籤指派給該影像。該演算法所使用的卷積神經網路能夠從頭開始訓練,亦可透過遷移學習進行訓練,相當適合大量訓練影像無法使用的狀況
Amazon SageMaker 圖像分類算法的推薦輸入格式是阿帕奇 MXNet RecordIO
注意
為了與現有深度學習架構保持更好的互通性,這與其他 Amazon SageMaker 演算法常用的原型資料格式不同。
如需卷積網路的詳細資訊,請參閱:
-
圖像識別深度殘留學習
何凱明等,2016 計算機視覺和模式識別IEEE會議
影像分類演算法的輸入/輸出介面
SageMaker 影像分類演算法同時支援 Recoredio (application/x-recordio
) 和影像 (image/png
、、和application/x-image
) 內容類型image/jpeg
,以便在檔案模式下進行訓練,並支援 RecordIO (application/x-recordio
) 內容類型,以便在管道模式下進行訓練。但是,您也可以利用擴增資訊清單格式,使用影像檔案 (image/png
、image/jpeg
和 application/x-image
) 在管道模式中訓練,而無須建立 RecordIO 檔案。
檔案模式和管道模式支援分散式訓練。在管道模式中使用 RecordIO 內容類型時,您必須將 S3DataSource
的 FullyReplicated
設定為 S3DataDistributionType
。該演算法可支援完全複寫的模型,其中您的資料會被複製到每台機器上。
演算法則針對推論支援 image/png
、image/jpeg
和 application/x-image
。
以 RecordIO 格式進行訓練
若您是採用 RecordIO 格式進行訓練,請將 train
與 validation
通道指定為 InputDataConfig
請求的 CreateTrainingJob
參數值。然後,在 .rec
通道中指定一個 RecordIO (train
) 檔案,且 validation
通道中亦要指定一個 RecordIO 檔案。請接著將兩個通道的內容類型設定為 application/x-recordio
。
以影像格式進行訓練
若您是採用影像格式進行訓練,則請將 train
、validation
、train_lst
與 validation_lst
通道指定為 InputDataConfig
請求的 CreateTrainingJob
參數值。然後,分別為 .jpg
與 .png
通道指定個別的影像資料 (train
或 validation
檔案);並在每個 .lst
與 train_lst
通道中指定一個 validation_lst
檔案。請接著將所有四個通道的內容類型設定為 application/x-image
。
注意
SageMaker 從不同的通道分別讀取訓練和驗證資料,因此您必須將訓練和驗證資料儲存在不同的資料夾中。
.lst
檔案屬於標籤分隔檔案,且其中的三個欄位將包含影像檔案清單。第一個欄位會指定影像索引,第二個欄位會指定影像的類別標籤索引,而第三個欄位則是指定影像檔案的相對路徑。第一個欄位中的影像索引在所有影像之間,不得重複。類別標籤索引組為連續編號,且應從 0 開始進行編號。例如,cat 類別的編號為 0,dog 類別的編號即為 1,其他類別則依此類推。
以下是 .lst
檔案的範例:
5 1 your_image_directory/train_img_dog1.jpg
1000 0 your_image_directory/train_img_cat1.jpg
22 1 your_image_directory/train_img_dog2.jpg
舉例來說,假設您將訓練影像存放於 s3://<your_bucket>/train/class_dog
、s3://<your_bucket>/train/class_cat
等,則請將 train
通道的路徑指定為 s3://<your_bucket>/train
,其為資料的最上層目錄。而在 .lst
檔案中,請找到 train_image_dog1.jpg
類別目錄中名為 class_dog
的個別檔案,並將其相對路徑指定為 class_dog/train_image_dog1.jpg
。您亦可以將一個子目錄下的所有影像檔案存放於 train
目錄中。在這種情況下,請將該子目錄做為相對路徑。例如:s3://<your_bucket>/train/your_image_directory
。
以擴增的資訊清單影像格式進行訓練
擴增的資訊清單格式可讓您在管道模式中使用影像檔案進行訓練,而無需建立 RecordIO 檔案。您需要為 CreateTrainingJob
請求的 InputDataConfig
參數值指定訓練和驗證通道。雖然使用該格式,但仍需產生包含影像清單及其對應註釋的 S3 資訊清單檔案。資訊清單檔案格式應採用 L JSONines'source-ref'
標籤指定,指向影像的 S3 位置。註釋則會在 "AttributeNames"
參數值底下提供,如 CreateTrainingJob
請求中所指定。它也可以在 metadata
標籤底下包含額外的中繼資料,但演算法會忽略這些內容。在下列範例中,"AttributeNames"
包含在影像和註釋參考 ["source-ref", "class"]
的清單中。第一個影像的對應標籤值是 "0"
,而第二個影像的對應標籤值則是 “1”
:
{"source-ref":"s3://image/filename1.jpg", "class":"0"} {"source-ref":"s3://image/filename2.jpg", "class":"1", "class-metadata": {"class-name": "cat", "type" : "groundtruth/image-classification"}}
訓練 ImageClassification 演算法時,輸入檔案"AttributeNames"
中的順序很重要。它會以特定的順序來接受排在管道中的資料,image
會排在第一個,接著是 label
。所以這個例子中的 AttributeNames "" "source-ref"
首先提供,然後是"class"
。使用 ImageClassification 演算法與增強資訊清單時,RecordWrapperType
參數的值必須是"RecordIO"
。
透過指定值JSON陣列,也支援多標籤訓練。num_classes
超參數必須設定為符合類別總數。有兩種有效的標籤格式:multi-hot 及 class-id。
在 multi-hot 格式中,每個標籤是所有類別的multi-hot 編碼向量,其中每個類的值為 0 或 1。在下列範例中,有三種類別。第一個影像的類別標籤為 0 及 2,而第二個影像的類別標籤僅為 2:
{"image-ref": "s3://amzn-s3-demo-bucket/sample01/image1.jpg", "class": "[1, 0, 1]"} {"image-ref": "s3://amzn-s3-demo-bucket/sample02/image2.jpg", "class": "[0, 0, 1]"}
在 class-id 格式中,每個標籤是類別 ID 的清單,來自 [0, num_classes
),其適用於資料點。上述範例外觀會如下所示:
{"image-ref": "s3://amzn-s3-demo-bucket/sample01/image1.jpg", "class": "[0, 2]"} {"image-ref": "s3://amzn-s3-demo-bucket/sample02/image2.jpg", "class": "[2]"}
多熱格式是預設值,但可以使用label-format
參數在內容類型中明確設定:"application/x-recordio;
label-format=multi-hot".
class-id 格式 (輸出的格式) 必須明確設定 GroundTruth:"application/x-recordio;
label-format=class-id".
如需擴增資訊清單檔案的詳細資訊,請參閱訓練任務的增強型清單檔案。
增量訓練
您也可以使用先前訓練過的模型中的人工因素來植入新模型的訓練 SageMaker。當您想要使用相同或類似資料訓練新模型時,增量訓練可節省訓練時間。 SageMaker 影像分類模型只能與中 SageMaker訓練的另一個內建影像分類模型一起植入。
若要使用預先訓練模型,請在 CreateTrainingJob
請求中,於 InputDataConfig
參數內指定 ChannelName
為 "model"。將模型通道的 ContentType
設為 application/x-sagemaker-model
。您上傳至模型通道新模型和預先訓練模型的輸入超參數,必須擁有與 num_layers
、image_shape
和 num_classes
輸入參數相同的設定。這些參數會定義網路架構。對於預先訓練的模型檔案,請使用由輸出的壓縮模型加工品 (以 .tar.gz 格式)。 SageMaker您可以針對輸入資料使用 RecordIO 或影像格式。
使用影像分類演算法進行推論
您可以將產生的模型進行託管以取得推論,並支援以 .jpg
和 .png
content-type 呈現的編碼 image/png,
image/jpeg
和 application/x-image
影像格式。輸入影像會自動調整大小。輸出是以JSON格式編碼的所有類別的概率值,或以 L JSONines 文字格式
accept: application/jsonlines {"prediction": [prob_0, prob_1, prob_2, prob_3, ...]}
如需訓練與推論的詳細資訊,請參考簡介中參考的影像分類範例筆記本執行個體。
EC2映像分類演算法的執行個體建議
針對影像分類,我們可支援 P2、P3、G4dn 和 G5 執行個體。我們建議使用記憶GPU體較多的執行個體進行大批次規模的訓練。您也可以在多機器GPU和多機器設定上執行演算法,以進行分散式訓練。CPU(例如 C4) 和 GPU (P2、P3、G4dn 或 G5) 執行個體都可用於推論。
影像分類範例筆記本
如需使用 SageMaker 映像分類演算法的範例筆記本,請參閱透過 SageMaker 管線建置和註冊MXNet影像分類模型