2017发布,实现了一阶段网络首次在精度方面超过二阶段网络的经典网络,作者最大的一个创新就是在训练损失函数方面,论文比较了CE、BCE、以及论文提出感知损失函数(FL),最后说明感知损失可以有效解决一阶段网络训练中的样本不平衡现象,从而取得更佳的训练效果。论文中提出的感知损失函数如下:
最终RetinaNet网络结构如下:
数据集准备与制作
自己百度收集了一个无人机与飞鸟的数据集,其中训练集270张图像,测试集26张图像。
使用labelImg工具完成标注,工具下载地址:
https://gitee.com/opencv_ai/opencv_tutorial_data/tree/master/tools
三:模型训练
制作好数据集之后,模型训练就成为一件很简单事情,基于OpenMV工具软件,零代码即可实现模型训练。运行下面界面如下:总计训练了25个轮次以后,发现效果已经是相当的不错了,直接导出ONNX格式RetinaNet模型文件。 把模型转换为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'}}
)
运行时候控制台会有一系列的警告输出,但是绝对不影响模型转换,影响不影响精度我还没做个仔细的对比。
模型转换之后,可以直接查看模型的输入与输出结构,图示如下:
推理运行
推理部分的代码很简单,只有三十几行,Python就是方便使用,这里最需要注意的是输入图像的预处理必须是RGB格式,需要归一化到0~1之间。对得到的三个输出层分别解析,就可以获取到坐标(boxes里面包含的实际坐标,无需转换)。基于OpenMV工具软件,可以实现一键零代码推理演示,效果如下:
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
网络
+关注
关注
14文章
7517浏览量
88627 -
无人机
+关注
关注
228文章
10340浏览量
179631 -
数据集
+关注
关注
4文章
1205浏览量
24644
原文标题:Pytoorch轻松学 – RetinaNet自定义对象检测
文章出处:【微信号:CVSCHOOL,微信公众号:OpenCV学堂】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
SOPC中自定义外设和自定义指令性能分析
SOPC中自定义外设和自定义指令性能分析
NiosII是一个建立在FPGA上的嵌入式软核处理器,灵活性很强。作为体现NiosII灵活性精髓的两个最主要方面,自
发表于 03-29 15:12
•1599次阅读
苹果新版Reality Converter应用可自定义3D对象
苹果在今日向开发人员通报了新版Reality Converter应用的发布,该程序旨在协助用户在Mac上转换、查看和自定义USDZ 3D对象。
自定义视图组件教程案例
自定义组件 1.自定义组件-particles(粒子效果) 2.自定义组件- pulse(脉冲button效果) 3.自定义组件-progress(progress效果) 4.
发表于 04-08 10:48
•14次下载
自定义算子开发
一个完整的自定义算子应用过程包括注册算子、算子实现、含自定义算子模型转换和运行含自定义op模型四个阶段。在大多数情况下,您的模型应该可以通过使用hb_mapper工具完成转换并顺利部署到地平线芯片上……
评论