0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于COCO的預訓練模型mAP對應關(guān)系

OpenCV學堂 ? 來源:OpenCV學堂 ? 作者:OpenCV學堂 ? 2022-10-10 11:40 ? 次閱讀

torchvision對象檢測介紹

Pytorch1.11版本以上支持Torchvision高版本支持以下對象檢測模型的遷移學習:

- Faster-RCNN
- Mask-RCNN
- FCOS
- RetinaNet
- SSD
- KeyPointsRCNN
其中基于COCO的預訓練模型mAP對應關(guān)系如下:

30633a16-4844-11ed-a3b6-dac502259ad0.png

3081bbf8-4844-11ed-a3b6-dac502259ad0.png

3093bad8-4844-11ed-a3b6-dac502259ad0.png

最近一段時間本人已經(jīng)全部親測,都可以轉(zhuǎn)換為ONNX格式模型,都可以支持ONNXRUNTIME框架的Python版本與C++版本推理,本文以RetinaNet為例,演示了從模型下載到導出ONNX格式,然后基于ONNXRUNTIME推理的整個流程。

RetinaNet轉(zhuǎn)ONNX

把模型轉(zhuǎn)換為ONNX格式,Pytorch是原生支持的,只需要把通過torch.onnx.export接口,填上相關(guān)的參數(shù),然后直接運行就可以生成ONNX模型文件。相關(guān)的轉(zhuǎn)換代碼如下:

model=tv.models.detection.retinanet_resnet50_fpn(pretrained=True)
dummy_input=torch.randn(1,3,1333,800)
model.eval()
model(dummy_input)
im=torch.zeros(1,3,1333,800).to("cpu")
torch.onnx.export(model,im,
"retinanet_resnet50_fpn.onnx",
verbose=False,
opset_version=11,
training=torch.onnx.TrainingMode.EVAL,
do_constant_folding=True,
input_names=['input'],
output_names=['output'],
dynamic_axes={'input':{0:'batch',2:'height',3:'width'}}
)
運行時候控制臺會有一系列的警告輸出,但是絕對不影響模型轉(zhuǎn)換,影響不影響精度我還沒做個仔細的對比。 模型轉(zhuǎn)換之后,可以直接查看模型的輸入與輸出結(jié)構(gòu),圖示如下:

30af0734-4844-11ed-a3b6-dac502259ad0.png

RetinaNet的ONNX格式推理

基于Python版本的ONNXRUNTIME完成推理演示,這個跟我之前寫過一篇文章Faster-RCNN的ONNX推理演示非常相似,大概是去年寫的,鏈接在這里: 代碼很簡單,只有三十幾行,Python就是方便使用,這里最需要注意的是輸入圖像的預處理必須是RGB格式,需要歸一化到0~1之間。對得到的三個輸出層分別解析,就可以獲取到坐標(boxes里面包含的實際坐標,無需轉(zhuǎn)換),推理部分的代碼如下:

importonnxruntimeasort
importcv2ascv
importnumpyasnp
importtorchvision


coco_names={'0':'background','1':'person','2':'bicycle','3':'car','4':'motorcycle','5':'airplane','6':'bus',
'7':'train','8':'truck','9':'boat','10':'trafficlight','11':'firehydrant','13':'stopsign',
'14':'parkingmeter','15':'bench','16':'bird','17':'cat','18':'dog','19':'horse','20':'sheep',
'21':'cow','22':'elephant','23':'bear','24':'zebra','25':'giraffe','27':'backpack',
'28':'umbrella','31':'handbag','32':'tie','33':'suitcase','34':'frisbee','35':'skis',
'36':'snowboard','37':'sportsball','38':'kite','39':'baseballbat','40':'baseballglove',
'41':'skateboard','42':'surfboard','43':'tennisracket','44':'bottle','46':'wineglass',
'47':'cup','48':'fork','49':'knife','50':'spoon','51':'bowl','52':'banana','53':'apple',
'54':'sandwich','55':'orange','56':'broccoli','57':'carrot','58':'hotdog','59':'pizza',
'60':'donut','61':'cake','62':'chair','63':'couch','64':'pottedplant','65':'bed',
'67':'diningtable','70':'toilet','72':'tv','73':'laptop','74':'mouse','75':'remote',
'76':'keyboard','77':'cellphone','78':'microwave','79':'oven','80':'toaster','81':'sink',
'82':'refrigerator','84':'book','85':'clock','86':'vase','87':'scissors','88':'teddybear',
'89':'hairdrier','90':'toothbrush'}

transform=torchvision.transforms.Compose([torchvision.transforms.ToTensor()])

sess_options=ort.SessionOptions()
src=cv.imread("D:/images/mmc.png")
cv.namedWindow("Retina-NetDetectionDemo",cv.WINDOW_AUTOSIZE)
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)
#(N,4)dimensionalarraycontainingtheabsolutebounding-box
boxes=ort_outs[0]
scores=ort_outs[1]
labels=ort_outs[2]
print(boxes.shape,boxes.dtype,labels.shape,labels.dtype,scores.shape,scores.dtype)

index=0
forx1,y1,x2,y2inboxes:
ifscores[index]>0.65:
cv.rectangle(src,(np.int32(x1),np.int32(y1)),
(np.int32(x2),np.int32(y2)),(140,199,0),2,8,0)
label_id=labels[index]
label_txt=coco_names[str(label_id)]
cv.putText(src,label_txt,(np.int32(x1),np.int32(y1)),cv.FONT_HERSHEY_SIMPLEX,0.75,(0,0,255),1)
index+=1
cv.imshow("Retina-NetDetectionDemo",src)
cv.imwrite("D:/mmc_result.png",src)
cv.waitKey(0)
cv.destroyAllWindows()

審核編輯:彭靜

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • C++
    C++
    +關(guān)注

    關(guān)注

    21

    文章

    2085

    瀏覽量

    73301
  • pytorch
    +關(guān)注

    關(guān)注

    2

    文章

    794

    瀏覽量

    13009
  • 訓練模型
    +關(guān)注

    關(guān)注

    1

    文章

    35

    瀏覽量

    3781

原文標題:TorchVision對象檢測RetinaNet推理演示

文章出處:【微信號:CVSCHOOL,微信公眾號:OpenCV學堂】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    基于不同量級訓練數(shù)據(jù)的RoBERTa模型分析

    NLP領(lǐng)域的研究目前由像RoBERTa等經(jīng)過數(shù)十億個字符的語料經(jīng)過訓練模型匯主導。那么對于一個訓練
    發(fā)表于 03-03 11:21 ?1689次閱讀

    【大語言模型:原理與工程實踐】大語言模型訓練

    大語言模型的核心特點在于其龐大的參數(shù)量,這賦予了模型強大的學習容量,使其無需依賴微調(diào)即可適應各種下游任務,而更傾向于培養(yǎng)通用的處理能力。然而,隨著學習容量的增加,對訓練數(shù)據(jù)的需求也相
    發(fā)表于 05-07 17:10

    在不使用任何額外數(shù)據(jù)的情況下,COCO數(shù)據(jù)集上物體檢測結(jié)果為50.9 AP的方法

    實驗中,我們發(fā)現(xiàn)當只使用 COCO 數(shù)據(jù)集時,從頭開始訓練模型性能是能夠匹配訓練模型的性能。
    的頭像 發(fā)表于 11-24 10:42 ?8290次閱讀
    在不使用任何額外數(shù)據(jù)的情況下,<b class='flag-5'>COCO</b>數(shù)據(jù)集上物體檢測結(jié)果為50.9 AP的方法

    小米在訓練模型的探索與優(yōu)化

    導讀:訓練模型在NLP大放異彩,并開啟了訓練-微調(diào)的NLP范式時代。由于工業(yè)領(lǐng)域相關(guān)業(yè)務的復雜性,以及工業(yè)應用對推理性能的要求,大規(guī)模
    的頭像 發(fā)表于 12-31 10:17 ?2475次閱讀
    小米在<b class='flag-5'>預</b><b class='flag-5'>訓練</b><b class='flag-5'>模型</b>的探索與優(yōu)化

    基于訓練模型和長短期記憶網(wǎng)絡的深度學習模型

    作為模型的初始化詞向量。但是,隨機詞向量存在不具備語乂和語法信息的缺點;訓練詞向量存在¨一詞-乂”的缺點,無法為模型提供具備上下文依賴的詞向量。針對該問題,提岀了一種基于
    發(fā)表于 04-20 14:29 ?19次下載
    基于<b class='flag-5'>預</b><b class='flag-5'>訓練</b><b class='flag-5'>模型</b>和長短期記憶網(wǎng)絡的深度學習<b class='flag-5'>模型</b>

    2021 OPPO開發(fā)者大會:NLP訓練模型

    2021 OPPO開發(fā)者大會:NLP訓練模型 2021 OPPO開發(fā)者大會上介紹了融合知識的NLP訓練
    的頭像 發(fā)表于 10-27 14:18 ?1661次閱讀
    2021 OPPO開發(fā)者大會:NLP<b class='flag-5'>預</b><b class='flag-5'>訓練</b>大<b class='flag-5'>模型</b>

    如何實現(xiàn)更綠色、經(jīng)濟的NLP訓練模型遷移

    NLP中,訓練模型Finetune是一種非常常見的解決問題的范式。利用在海量文本上訓練得到的Bert、GPT等
    的頭像 發(fā)表于 03-21 15:33 ?2095次閱讀

    Multilingual多語言訓練語言模型的套路

    Facebook在Crosslingual language model pretraining(NIPS 2019)一文中提出XLM訓練多語言模型,整體思路基于BERT,并提出了針對多語言
    的頭像 發(fā)表于 05-05 15:23 ?2815次閱讀

    一種基于亂序語言模型訓練模型-PERT

    由于亂序語言模型不使用[MASK]標記,減輕了訓練任務與微調(diào)任務之間的gap,并由于預測空間大小為輸入序列長度,使得計算效率高于掩碼語言模型。PERT
    的頭像 發(fā)表于 05-10 15:01 ?1421次閱讀

    利用視覺語言模型對檢測器進行訓練

    訓練通常被用于自然語言處理以及計算機視覺領(lǐng)域,以增強主干網(wǎng)絡的特征提取能力,達到加速訓練和提高模型泛化性能的目的。該方法亦可以用于場景文本檢測當中,如最早的使用ImageNet
    的頭像 發(fā)表于 08-08 15:33 ?1252次閱讀

    使用 NVIDIA TAO 工具套件和訓練模型加快 AI 開發(fā)

    NVIDIA 發(fā)布了 TAO 工具套件 4.0 。該工具套件通過全新的 AutoML 功能、與第三方 MLOPs 服務的集成以及新的訓練視覺 AI 模型提高開發(fā)者的生產(chǎn)力。該工具套件的企業(yè)版現(xiàn)在
    的頭像 發(fā)表于 12-15 19:40 ?905次閱讀

    什么是訓練 AI 模型?

    訓練 AI 模型是為了完成特定任務而在大型數(shù)據(jù)集上訓練的深度學習模型。這些模型既可以直接使用,
    的頭像 發(fā)表于 04-04 01:45 ?1302次閱讀

    什么是訓練AI模型

    訓練 AI 模型是為了完成特定任務而在大型數(shù)據(jù)集上訓練的深度學習模型。這些模型既可以直接使用,
    的頭像 發(fā)表于 05-25 17:10 ?881次閱讀

    訓練模型的基本原理和應用

    訓練模型(Pre-trained Model)是深度學習和機器學習領(lǐng)域中的一個重要概念,尤其是在自然語言處理(NLP)和計算機視覺(CV)等領(lǐng)域中得到了廣泛應用。
    的頭像 發(fā)表于 07-03 18:20 ?1426次閱讀

    大語言模型訓練

    能力,逐漸成為NLP領(lǐng)域的研究熱點。大語言模型訓練是這一技術(shù)發(fā)展的關(guān)鍵步驟,它通過在海量無標簽數(shù)據(jù)上進行訓練,使模型學習到語言的通用知識
    的頭像 發(fā)表于 07-11 10:11 ?249次閱讀