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

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

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

基于COCO的預(yù)訓(xùn)練模型mAP對(duì)應(yīng)關(guān)系

OpenCV學(xué)堂 ? 來(lái)源:OpenCV學(xué)堂 ? 作者:OpenCV學(xué)堂 ? 2022-10-10 11:40 ? 次閱讀

torchvision對(duì)象檢測(cè)介紹

Pytorch1.11版本以上支持Torchvision高版本支持以下對(duì)象檢測(cè)模型的遷移學(xué)習(xí):

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

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

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

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

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

RetinaNet轉(zhuǎn)ONNX

把模型轉(zhuǎn)換為ONNX格式,Pytorch是原生支持的,只需要把通過(guò)torch.onnx.export接口,填上相關(guān)的參數(shù),然后直接運(yùn)行就可以生成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'}}
)
運(yùn)行時(shí)候控制臺(tái)會(huì)有一系列的警告輸出,但是絕對(duì)不影響模型轉(zhuǎn)換,影響不影響精度我還沒(méi)做個(gè)仔細(xì)的對(duì)比。 模型轉(zhuǎn)換之后,可以直接查看模型的輸入與輸出結(jié)構(gòu),圖示如下:

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

RetinaNet的ONNX格式推理

基于Python版本的ONNXRUNTIME完成推理演示,這個(gè)跟我之前寫(xiě)過(guò)一篇文章Faster-RCNN的ONNX推理演示非常相似,大概是去年寫(xiě)的,鏈接在這里: 代碼很簡(jiǎn)單,只有三十幾行,Python就是方便使用,這里最需要注意的是輸入圖像的預(yù)處理必須是RGB格式,需要歸一化到0~1之間。對(duì)得到的三個(gè)輸出層分別解析,就可以獲取到坐標(biāo)(boxes里面包含的實(shí)際坐標(biāo),無(wú)需轉(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)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • C++
    C++
    +關(guān)注

    關(guān)注

    21

    文章

    2090

    瀏覽量

    73410
  • pytorch
    +關(guān)注

    關(guān)注

    2

    文章

    795

    瀏覽量

    13084
  • 訓(xùn)練模型
    +關(guān)注

    關(guān)注

    1

    文章

    35

    瀏覽量

    3794

原文標(biāo)題:TorchVision對(duì)象檢測(cè)RetinaNet推理演示

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

    NLP領(lǐng)域的研究目前由像RoBERTa等經(jīng)過(guò)數(shù)十億個(gè)字符的語(yǔ)料經(jīng)過(guò)預(yù)訓(xùn)練模型匯主導(dǎo)。那么對(duì)于一個(gè)預(yù)訓(xùn)練
    發(fā)表于 03-03 11:21 ?1728次閱讀

    【大語(yǔ)言模型:原理與工程實(shí)踐】大語(yǔ)言模型預(yù)訓(xùn)練

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

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

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

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

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

    基于預(yù)訓(xùn)練模型和長(zhǎng)短期記憶網(wǎng)絡(luò)的深度學(xué)習(xí)模型

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

    2021 OPPO開(kāi)發(fā)者大會(huì):NLP預(yù)訓(xùn)練模型

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

    如何實(shí)現(xiàn)更綠色、經(jīng)濟(jì)的NLP預(yù)訓(xùn)練模型遷移

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

    Multilingual多語(yǔ)言預(yù)訓(xùn)練語(yǔ)言模型的套路

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

    一種基于亂序語(yǔ)言模型預(yù)訓(xùn)練模型-PERT

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

    利用視覺(jué)語(yǔ)言模型對(duì)檢測(cè)器進(jìn)行預(yù)訓(xùn)練

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

    使用 NVIDIA TAO 工具套件和預(yù)訓(xùn)練模型加快 AI 開(kāi)發(fā)

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

    什么是預(yù)訓(xùn)練 AI 模型?

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

    什么是預(yù)訓(xùn)練AI模型?

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

    預(yù)訓(xùn)練模型的基本原理和應(yīng)用

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

    大語(yǔ)言模型預(yù)訓(xùn)練

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