0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于COCO的预训练模型mAP对应关系

OpenCV学堂 来源:OpenCV学堂 作者:OpenCV学堂 2022-10-10 11:40 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

torchvision对象检测介绍

Pytorch1.11版本以上支持Torchvision高版本支持以下对象检测模型的迁移学习:

- Faster-RCNN
- Mask-RCNN
- FCOS
- RetinaNet
- SSD
- KeyPointsRCNN
其中基于COCO的预训练模型mAP对应关系如下:

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

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

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

最近一段时间本人已经全部亲测,都可以转换为ONNX格式模型,都可以支持ONNXRUNTIME框架的Python版本与C++版本推理,本文以RetinaNet为例,演示了从模型下载到导出ONNX格式,然后基于ONNXRUNTIME推理的整个流程。

RetinaNet转ONNX

把模型转换为ONNX格式,Pytorch是原生支持的,只需要把通过torch.onnx.export接口,填上相关的参数,然后直接运行就可以生成ONNX模型文件。相关的转换代码如下:

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'}}
)
运行时候控制台会有一系列的警告输出,但是绝对不影响模型转换,影响不影响精度我还没做个仔细的对比。 模型转换之后,可以直接查看模型的输入与输出结构,图示如下:

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

RetinaNet的ONNX格式推理

基于Python版本的ONNXRUNTIME完成推理演示,这个跟我之前写过一篇文章Faster-RCNN的ONNX推理演示非常相似,大概是去年写的,链接在这里: 代码很简单,只有三十几行,Python就是方便使用,这里最需要注意的是输入图像的预处理必须是RGB格式,需要归一化到0~1之间。对得到的三个输出层分别解析,就可以获取到坐标(boxes里面包含的实际坐标,无需转换),推理部分的代码如下:

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()

审核编辑:彭静

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C++
    C++
    +关注

    关注

    22

    文章

    2122

    浏览量

    76718
  • pytorch
    +关注

    关注

    2

    文章

    813

    浏览量

    14708
  • 训练模型
    +关注

    关注

    1

    文章

    37

    浏览量

    4048

原文标题:TorchVision对象检测RetinaNet推理演示

文章出处:【微信号:CVSCHOOL,微信公众号:OpenCV学堂】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    基于不同量级训练数据的RoBERTa模型分析

    NLP领域的研究目前由像RoBERTa等经过数十亿个字符的语料经过训练模型汇主导。那么对于一个训练
    发表于 03-03 11:21 2600次阅读

    【大语言模型:原理与工程实践】大语言模型训练

    大语言模型的核心特点在于其庞大的参数量,这赋予了模型强大的学习容量,使其无需依赖微调即可适应各种下游任务,而更倾向于培养通用的处理能力。然而,随着学习容量的增加,对训练数据的需求也相
    发表于 05-07 17:10

    在不使用任何额外数据的情况下,COCO数据集上物体检测结果为50.9 AP的方法

    实验中,我们发现当只使用 COCO 数据集时,从头开始训练模型性能是能够匹配训练模型的性能。
    的头像 发表于 11-24 10:42 9075次阅读
    在不使用任何额外数据的情况下,<b class='flag-5'>COCO</b>数据集上物体检测结果为50.9 AP的方法

    小米在训练模型的探索与优化

    导读:训练模型在NLP大放异彩,并开启了训练-微调的NLP范式时代。由于工业领域相关业务的复杂性,以及工业应用对推理性能的要求,大规模
    的头像 发表于 12-31 10:17 3550次阅读
    小米在<b class='flag-5'>预</b><b class='flag-5'>训练</b><b class='flag-5'>模型</b>的探索与优化

    基于训练模型和长短期记忆网络的深度学习模型

    作为模型的初始化词向量。但是,随机词向量存在不具备语乂和语法信息的缺点;训练词向量存在¨一词-乂”的缺点,无法为模型提供具备上下文依赖的词向量。针对该问题,提岀了一种基于
    发表于 04-20 14:29 19次下载
    基于<b class='flag-5'>预</b><b class='flag-5'>训练</b><b class='flag-5'>模型</b>和长短期记忆网络的深度学习<b class='flag-5'>模型</b>

    2021 OPPO开发者大会:NLP训练模型

    2021 OPPO开发者大会:NLP训练模型 2021 OPPO开发者大会上介绍了融合知识的NLP训练
    的头像 发表于 10-27 14:18 2059次阅读
    2021 OPPO开发者大会:NLP<b class='flag-5'>预</b><b class='flag-5'>训练</b>大<b class='flag-5'>模型</b>

    如何实现更绿色、经济的NLP训练模型迁移

    NLP中,训练模型Finetune是一种非常常见的解决问题的范式。利用在海量文本上训练得到的Bert、GPT等
    的头像 发表于 03-21 15:33 2766次阅读

    Multilingual多语言训练语言模型的套路

    Facebook在Crosslingual language model pretraining(NIPS 2019)一文中提出XLM训练多语言模型,整体思路基于BERT,并提出了针对多语言
    的头像 发表于 05-05 15:23 3815次阅读

    一种基于乱序语言模型训练模型-PERT

    由于乱序语言模型不使用[MASK]标记,减轻了训练任务与微调任务之间的gap,并由于预测空间大小为输入序列长度,使得计算效率高于掩码语言模型。PERT
    的头像 发表于 05-10 15:01 2101次阅读

    利用视觉语言模型对检测器进行训练

    训练通常被用于自然语言处理以及计算机视觉领域,以增强主干网络的特征提取能力,达到加速训练和提高模型泛化性能的目的。该方法亦可以用于场景文本检测当中,如最早的使用ImageNet
    的头像 发表于 08-08 15:33 2041次阅读

    使用 NVIDIA TAO 工具套件和训练模型加快 AI 开发

    NVIDIA 发布了 TAO 工具套件 4.0 。该工具套件通过全新的 AutoML 功能、与第三方 MLOPs 服务的集成以及新的训练视觉 AI 模型提高开发者的生产力。该工具套件的企业版现在
    的头像 发表于 12-15 19:40 1697次阅读

    什么是训练 AI 模型

    训练 AI 模型是为了完成特定任务而在大型数据集上训练的深度学习模型。这些模型既可以直接使用,
    的头像 发表于 04-04 01:45 2261次阅读

    什么是训练AI模型

    训练 AI 模型是为了完成特定任务而在大型数据集上训练的深度学习模型。这些模型既可以直接使用,
    的头像 发表于 05-25 17:10 1759次阅读

    训练模型的基本原理和应用

    训练模型(Pre-trained Model)是深度学习和机器学习领域中的一个重要概念,尤其是在自然语言处理(NLP)和计算机视觉(CV)等领域中得到了广泛应用。
    的头像 发表于 07-03 18:20 5378次阅读

    大语言模型训练

    能力,逐渐成为NLP领域的研究热点。大语言模型训练是这一技术发展的关键步骤,它通过在海量无标签数据上进行训练,使模型学习到语言的通用知识
    的头像 发表于 07-11 10:11 1440次阅读