前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Pytoorch轻松学 – RetinaNet自定义对象检测

Pytoorch轻松学 – RetinaNet自定义对象检测

作者头像
OpenCV学堂
发布2023-11-15 17:28:46
1520
发布2023-11-15 17:28:46
举报
文章被收录于专栏:贾志刚-OpenCV学堂

点击上方蓝字关注我们

微信公众号:OpenCV学堂 关注获取更多计算机视觉与深度学习知识

RetinaNet网络介绍

2017发布,实现了一阶段网络首次在精度方面超过二阶段网络的经典网络,作者最大的一个创新就是在训练损失函数方面,论文比较了CE、BCE、以及论文提出感知损失函数(FL),最后说明感知损失可以有效解决一阶段网络训练中的样本不平衡现象,从而取得更佳的训练效果。论文中提出的感知损失函数如下:

最终RetinaNet网络结构如下:

数据集准备与制作

自己百度收集了一个无人机与飞鸟的数据集,其中训练集270张图像,测试集26张图像。

使用labelImg工具完成标注,工具下载地址:

代码语言:javascript
复制
https://gitee.com/opencv_ai/opencv_tutorial_data/tree/master/tools

三:模型训练

制作好数据集之后,模型训练就成为一件很简单事情,基于OpenMV工具软件,零代码即可实现模型训练。运行下面界面如下:

总计训练了25个轮次以后,发现效果已经是相当的不错了,直接导出ONNX格式RetinaNet模型文件。

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

代码语言:javascript
复制
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工具软件,可以实现一键零代码推理演示,效果如下:

推荐阅读

YOLOv8修改+注意力模块 训练与部署

普通PC上CPU运行YOLOv5推理 400+FPS

Ubuntu系统下编译OpenCV4.8源码记录

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-11-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 OpenCV学堂 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档