Deeplabv3
Torchvision框架中在語義分割上支持的是Deeplabv3語義分割模型,而且支持不同的backbone替換,這些backbone替換包括MobileNetv3、ResNet50、ResNet101。其中MobileNetv3版本訓練數據集是COCO子集,類別跟Pascal VOC的20個類別保持一致。這里以它為例,演示一下從模型導出ONNX到推理的全過程。ONNX格式導出
首先需要把pytorch的模型導出為onnx格式版本,用下面的腳本就好啦:
model=tv.models.segmentation.deeplabv3_mobilenet_v3_large(pretrained=True)
dummy_input=torch.randn(1,3,320,320)
model.eval()
model(dummy_input)
im=torch.zeros(1,3,320,320).to("cpu")
torch.onnx.export(model,im,
"deeplabv3_mobilenet.onnx",
verbose=False,
opset_version=11,
training=torch.onnx.TrainingMode.EVAL,
do_constant_folding=True,
input_names=['input'],
output_names=['out','aux'],
dynamic_axes={'input':{0:'batch',2:'height',3:'width'}}
)
模型的輸入與輸出結構如下:其中out就是我們要解析的語義分割預測結果,input表示支持動態輸入格式為NCHW
推理測試
模型推理對圖像有個預處理,要求如下:
transform = torchvision.transforms.Compose([
torchvision.transforms.ToTensor(),
torchvision.transforms.Normalize(mean=[0.485, 0.456, 0.406],
std=[0.229, 0.224, 0.225])
])
意思是轉換為0~1之間的浮點數,然后減去均值除以方差。
剩下部分的代碼就比較簡單,初始化onnx推理實例,然后完成推理,對結果完成解析,輸出推理結果,完整的代碼如下:
transform=torchvision.transforms.Compose([
torchvision.transforms.ToTensor(),
torchvision.transforms.Normalize(mean=[0.485,0.456,0.406],
std=[0.229,0.224,0.225])
])
sess_options=ort.SessionOptions()
#Belowisforoptimizingperformance
sess_options.intra_op_num_threads=24
#sess_options.execution_mode=ort.ExecutionMode.ORT_PARALLEL
sess_options.graph_optimization_level=ort.GraphOptimizationLevel.ORT_ENABLE_ALL
ort_session=ort.InferenceSession("deeplabv3_mobilenet.onnx",providers=['CUDAExecutionProvider'],sess_options=sess_options)
#src=cv.imread("D:/images/messi_player.jpg")
src=cv.imread("D:/images/master.jpg")
image=cv.cvtColor(src,cv.COLOR_BGR2RGB)
blob=transform(image)
c,h,w=blob.shape
input_x=blob.view(1,c,h,w)
defto_numpy(tensor):
returntensor.detach().cpu().numpy()iftensor.requires_gradelsetensor.cpu().numpy()
#computeONNXRuntimeoutputprediction
ort_inputs={ort_session.get_inputs()[0].name:to_numpy(input_x)}
ort_outs=ort_session.run(None,ort_inputs)
t1=ort_outs[0]
t2=ort_outs[1]
labels=np.argmax(np.squeeze(t1,0),axis=0)
print(labels.dtype,labels.shape)
red_map=np.zeros_like(labels).astype(np.uint8)
green_map=np.zeros_like(labels).astype(np.uint8)
blue_map=np.zeros_like(labels).astype(np.uint8)
forlabel_numinrange(0,len(label_color_map)):
index=labels==label_num
red_map[index]=np.array(label_color_map)[label_num,0]
green_map[index]=np.array(label_color_map)[label_num,1]
blue_map[index]=np.array(label_color_map)[label_num,2]
segmentation_map=np.stack([blue_map,green_map,red_map],axis=2)
cv.addWeighted(src,0.8,segmentation_map,0.2,0,src)
cv.imshow("deeplabv3",src)
cv.waitKey(0)
cv.destroyAllWindows()
運行結果如下:
審核編輯 :李倩
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
數據集
+關注
關注
4文章
1208瀏覽量
24690 -
pytorch
+關注
關注
2文章
808瀏覽量
13201
原文標題:輕松學Pytorch之Deeplabv3推理
文章出處:【微信號:CVSCHOOL,微信公眾號:OpenCV學堂】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
利用Arm Kleidi技術實現PyTorch優化
PyTorch 是一個廣泛應用的開源機器學習 (ML) 庫。近年來,Arm 與合作伙伴通力協作,持續改進 PyTorch 的推理性能。本文將詳細介紹如何利用 Arm Kleidi 技術提升 Arm
vLLM項目加入PyTorch生態系統,引領LLM推理新紀元
近日,vLLM項目宣布正式成為PyTorch生態系統的一部分,標志著該項目與PyTorch的合作進入了一個全新的階段。本文將從以下幾個方面進行介紹,特別提醒:安裝方案在第四個部分,可選擇性閱讀
Arm KleidiAI助力提升PyTorch上LLM推理性能
生成式人工智能 (AI) 正在科技領域發揮關鍵作用,許多企業已經開始將大語言模型 (LLM) 集成到云端和邊緣側的應用中。生成式 AI 的引入也使得許多框架和庫得以發展。其中,PyTorch 作為
手冊上新 |迅為RK3568開發板NPU例程測試
測試
6.1 deeplabv3語義分割
6.2 lite_transformer
6.3 LPRNet車牌識別
6.4 mobilenet圖像分類
6.5 PPOCR-Rec文字識別
6.6
發表于 10-23 14:06
手冊上新 |迅為RK3568開發板NPU例程測試
測試
6.1 deeplabv3語義分割
6.2 lite_transformer
6.3 LPRNet車牌識別
6.4 mobilenet圖像分類
6.5 PPOCR-Rec文字識別
6.6
發表于 08-12 11:03
pytorch怎么在pycharm中運行
第一部分:PyTorch和PyCharm的安裝 1.1 安裝PyTorch PyTorch是一個開源的機器學習庫,用于構建和訓練神經網絡。要在PyCharm中使用PyTorch,首先需
pycharm如何調用pytorch
引言 PyTorch是一個開源的機器學習庫,廣泛用于計算機視覺、自然語言處理等領域。PyCharm是一個流行的Python集成開發環境(IDE),提供了代碼編輯、調試、測試等功能。將PyTorch
迅為RK3568手冊上新 | RK3568開發板NPU例程測試
deeplabv3語義分割
6.2 lite_transformer
6.3 LPRNet車牌識別
6.4 mobilenet圖像分類
6.5 PPOCR-Rec文字識別
6.6 PPOCR-Det語義分割
發表于 07-12 14:44
pytorch如何訓練自己的數據
本文將詳細介紹如何使用PyTorch框架來訓練自己的數據。我們將從數據準備、模型構建、訓練過程、評估和測試等方面進行講解。 環境搭建 首先,我們需要安裝PyTorch。可以通過訪問PyTorch官網
PyTorch的介紹與使用案例
PyTorch是一個基于Python的開源機器學習庫,它主要面向深度學習和科學計算領域。PyTorch由Meta Platforms(原Facebook)的人工智能研究團隊開發,并逐漸發展成為深度
tensorflow和pytorch哪個更簡單?
PyTorch更簡單。選擇TensorFlow還是PyTorch取決于您的具體需求和偏好。如果您需要一個易于使用、靈活且具有強大社區支持的框架,PyTorch可能是一個更好的選擇。如果您需要一個在
如何使用PyTorch建立網絡模型
PyTorch是一個基于Python的開源機器學習庫,因其易用性、靈活性和強大的動態圖特性,在深度學習領域得到了廣泛應用。本文將從PyTorch的基本概念、網絡模型構建、優化方法、實際應用等多個方面,深入探討使用PyTorch建
請問電腦端Pytorch訓練的模型如何轉化為能在ESP32S3平臺運行的模型?
由題目,
電腦端Pytorch訓練的模型如何轉化為能在ESP32S3平臺運行的模型?
如何把這個Pytorch模型燒錄到ESP32S3上去?
發表于 06-27 06:06
大模型推理顯卡選購指南:4090顯卡為何成為不二之選
開發者非常關注的話題。 現在市面上加速卡型號多如牛毛,但說到適用大模型推理的顯卡,那4090顯卡絕對是現階段“推理王卡”般的存在。論性能不如H100,論價格不如3090,看似平平無奇的4090顯卡為何能在眾多競爭者中脫穎而出,成為大模型
評論