本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
電腦視覺模型
計算機視覺模型是經過訓練以檢測圖像中的對象的軟件程序。模型通過訓練首先分析這些對象的圖像來學會識別一組對象。電腦視覺模型會將影像做為輸入,並輸出其偵測到的物件的相關資訊,例如物件類型及其位置。AWS 全景支援使用 Apache MXNet 和PyTorch建置的電腦視覺模型。TensorFlow
注意
如需已透過 AWS Panorama 測試的預先建置模型清單,請參閱模型相容性
在程式碼中使用模型
模型會傳回一或多個結果,其中可包含偵測到之類別、位置資訊及其他資料的機率。下列範例顯示如何針對影像串流執行推論,並將模型的輸出傳送至處理函數。
範例 application.py — 推論
def process_media(self, stream): """Runs inference on a frame of video.""" image_data = preprocess(stream.image,self.MODEL_DIM) logger.debug('Image data: {}'.format(image_data)) # Run inference inference_start = time.time()
inference_results = self.call({"data":image_data}, self.MODEL_NODE)
# Log metrics inference_time = (time.time() - inference_start) * 1000 if inference_time > self.inference_time_max: self.inference_time_max = inference_time self.inference_time_ms += inference_time # Process results (classification)self.process_results(inference_results, stream)
下列範例顯示處理基本分類模型結果的函數。示例模型返回概率的數組,這是結果數組中的第一個也是唯一的值。
範例 application.py — 處理結果
def process_results(self, inference_results, stream): """Processes output tensors from a computer vision model and annotates a video frame.""" if inference_results is None: logger.warning("Inference results are None.") return max_results = 5 logger.debug('Inference results: {}'.format(inference_results)) class_tuple = inference_results[0] enum_vals = [(i, val) for i, val in enumerate(class_tuple[0])] sorted_vals = sorted(enum_vals, key=lambda tup: tup[1]) top_k = sorted_vals[::-1][:max_results] indexes = [tup[0] for tup in top_k] for j in range(max_results): label = 'Class [%s], with probability %.3f.'% (self.classes[indexes[j]], class_tuple[0][indexes[j]]) stream.add_label(label, 0.1, 0.1 + 0.1*j)
應用程式程式碼會尋找機率最高的值,並將它們對應至初始化期間載入的資源檔案中的標籤。
建立自訂模型
您可以使用在中建置的模型PyTorch、Apache MXNet 和 AWS 全景應用程式TensorFlow中。除了在中建置和訓練模型SageMaker,您可以使用訓練有素的模型,或使用支援的架構建立和訓練自己的模型,然後將其匯出到本機環境或 Amazon EC2 中。
注意
如需 SageMaker Neo 支援的架構版本和檔案格式的詳細資訊,請參閱 Amazon SageMaker 開發人員指南中的支援架構。
本指南的儲存庫提供範例應用程式,以TensorFlowSavedModel
格式示範 Keras 模型的此工作流程。它使用 TensorFlow 2,並且可以在虛擬環境或 Docker 容器中本地運行。範例應用程式還包括用於在 Amazon EC2 執行個體上建立模型的範本和指令碼。
![自訂模型範例應用](images/sample-custom-model.png)
AWS 全景使用 SageMaker Neo 編譯模型,以便在 AWS 全景設備上使用。對於每個框架,請使用 SageMakerNeo 支持的格式,並將模型打包到.tar.gz
歸檔中。
如需詳細資訊,請參閱 Amazon SageMaker 開發人員指南中的使用 Neo 編譯和部署模型。
封裝模型
一個模型包包括一個描述符,包配置和模型歸檔。就像在應用程式映像套件中一樣,套件組態會告訴 AWS 全景服務,模型和描述元存放在 Amazon S3 中的位置。
範例 套件 /123456789012-擠壓器 _ 比爾托 -1.0/ 描述符
{ "mlModelDescriptor": { "envelopeVersion": "2021-01-01", "framework": "PYTORCH", "frameworkVersion": "1.8", "precisionMode": "FP16", "inputs": [ { "name": "data", "shape": [ 1, 3, 224, 224 ] } ] } }
注意
僅指定框架版本的主要和次要版本。如需支援PyTorch的 Apache MXNet 和TensorFlow版本的清單,請參閱支援的架構。
若要匯入模型,請使用 AWS 全景應用程式 CLI import-raw-model
命令。如果您對模型或其描述符進行任何更改,則必須重新運行此命令以更新應用程序的資產。如需詳細資訊,請參閱變更電腦視覺模型。
如需描述元檔案的 JSON 結構描述,請參閱資產
訓練模型
訓練模型時,請使用來自目標環境或與目標環境非常類似的測試環境中的影像。請考慮下列可能會影響模型效能的因素:
-
照明 — 主體反射的光量決定了模型必須分析多少細節。使用光線充足的主體影像訓練的模型,在低光源或背光環境下可能無法正常運作。
-
解析度 — 模型的輸入大小通常以方形長寬比為 224 到 512 像素寬的解析度固定。在將視訊影格傳遞給模型之前,您可以縮小或裁剪它以符合所需的大小。
-
影像失真 — 相機的焦距和鏡頭形狀可能會導致影像遠離畫面中心的失真。相機的位置也決定了主體的哪些功能是可見的。例如,配備廣角鏡頭的頭頂攝影機會在畫面中央顯示主體的頂部,而當主體偏離中心時,主體側面的傾斜視圖則會顯示出來。
若要解決這些問題,您可以在將影像傳送至模型之前預先處理影像,並在反映真實環境中變化的各種影像上訓練模型。如果模型需要在照明情況下操作,並且需要使用各種相機,則需要更多資料進行訓練。除了收集更多圖像之外,您還可以通過創建偏斜或具有不同照明的現有圖像的變化來獲得更多訓練數據。