影像分類-MXNet - Amazon SageMaker

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

影像分類-MXNet

Amazon 影 SageMaker 像分類演算法是支援多標籤分類的受監督學習演算法。它會取得一個影像做為輸入和輸出,並將一或多個標籤指派給該影像。該演算法所使用的卷積神經網路能夠從頭開始訓練,亦可透過遷移學習進行訓練,相當適合大量訓練影像無法使用的狀況

Amazon SageMaker 圖像分類算法的推薦輸入格式是阿帕奇 MXNet RecordIO。但您亦可使用 .jpg 或 .png 格式的原始影像。如需有效率資料準備與載入機器學習系統的粗略概觀,請參閱此討論

注意

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

如需卷積網路的詳細資訊,請參閱:

影像分類演算法的輸入/輸出介面

SageMaker 影像分類演算法同時支援 Recoredio (application/x-recordio) 和影像 (image/png、、和application/x-image) 內容類型image/jpeg,以便在檔案模式下進行訓練,並支援 RecordIO (application/x-recordio) 內容類型,以便在管道模式下進行訓練。但是,您也可以利用擴增資訊清單格式,使用影像檔案 (image/pngimage/jpegapplication/x-image) 在管道模式中訓練,而無須建立 RecordIO 檔案。

檔案模式和管道模式支援分散式訓練。在管道模式中使用 RecordIO 內容類型時,您必須將 S3DataSourceFullyReplicated 設定為 S3DataDistributionType。該演算法可支援完全複寫的模型,其中您的資料會被複製到每台機器上。

演算法則針對推論支援 image/pngimage/jpegapplication/x-image

以 RecordIO 格式進行訓練

若您是採用 RecordIO 格式進行訓練,請將 trainvalidation 通道指定為 InputDataConfig 請求的 CreateTrainingJob 參數值。然後,在 .rec 通道中指定一個 RecordIO (train) 檔案,且 validation 通道中亦要指定一個 RecordIO 檔案。請接著將兩個通道的內容類型設定為 application/x-recordio

以影像格式進行訓練

若您是採用影像格式進行訓練,則請將 trainvalidationtrain_lstvalidation_lst 通道指定為 InputDataConfig 請求的 CreateTrainingJob 參數值。然後,分別為 .jpg.png 通道指定個別的影像資料 (trainvalidation 檔案);並在每個 .lsttrain_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_dogs3://<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_layersimage_shapenum_classes 輸入參數相同的設定。這些參數會定義網路架構。對於預先訓練的模型檔案,請使用由輸出的壓縮模型加工品 (以 .tar.gz 格式)。 SageMaker您可以針對輸入資料使用 RecordIO 或影像格式。

使用影像分類演算法進行推論

您可以將產生的模型進行託管以取得推論,並支援以 .jpg.png content-type 呈現的編碼 image/png, image/jpegapplication/x-image 影像格式。輸入影像會自動調整大小。輸出是以JSON格式編碼的所有類別的概率值,或以 L JSONines 文字格式進行批次轉換。影像分類模型會針對每個要求處理單一影像,因此只會輸出JSON或 L JSON ines 格式的一行。以下是「行」格式響應JSON的實例:

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影像分類模型。如需如何建立及存取可用來執行中範例的 Jupyter 筆記本執行個體的指示 SageMaker,請參閱。Amazon SageMaker Notebook 執行個體建立筆記本執行個體並開啟之後,請選取 [SageMaker範例] 索引標籤以查看所有 SageMaker 範例的清單。範例影像分類筆記本位於 Amazon 演算法簡介區段中。若要開啟筆記本,請按一下其使用標籤,然後選取建立複本