点击上方“计算机视觉工坊”,选择“星标”

干货第一时间送达

作者丨Edison_G

来源丨计算机视觉研究院

论文地址:https://arxiv.org/pdf/2005.13243.pdf

源代码:https://gitlab.com/irafm-ai/poly-yolo

YOLOv3改进版来了!与YOLOv3相比,Poly-YOLO的训练参数只有其60%,但mAP却提高了40%!并提出更轻量的Poly-YOLO Lite。

一、背景

目标检测是一个过程,其中包含感兴趣对象的所有重要区域都被限制而忽略背景。通常,目标以一个框为边界,框用其左上角的空间坐标及其宽度和高度表示。这种方法的缺点是对于形状复杂的物体,边界框还包括背景,由于边界框没有紧紧包裹物体,背景会占据很大一部分区域。这种行为会降低应用在边界框上的分类器的性能,或者可能无法满足精确检测的要求。为了避免这个问题,Faster R-CNN或RetinaNet等经典检测器被修改为Mask R-CNN或RetinaMask的版本。这些方法还可以推断实例分割,即边界框中的每个像素都被分类为对象/背景类。这些方法的局限性在于它们的计算速度,它们无法在非高层硬件上达到实时性能。

我们关注的问题是创建一个具有实例分割和中层显卡实时处理能力的精确检测器。

二、前言

Poly-Yolo实例分割案例

目标检测模型可以分为两组,两级和一级检测器。两级检测器将过程拆分如下。在第一阶段,提出感兴趣的区域(RoI),在随后的阶段,在这些候选的区域内进行边界框回归和分类。一级检测器一次预测边界框及其类别。两级检测器在定位和分类精度方面通常更精确,但在处理方面比一级检测器慢。这两种类型都包含用于特征提取的主干网络和用于分类和回归的头部网络。通常,主干是一些SOTA网络,例如ResNet或ResNext,在ImageNet或OpenImages上进行了预训练。尽管如此,一些方法 也从头开始尝试训练。

今天分享的框架提出了性能更好的YOLOv3新版本,并扩展了名为Poly-YOLO。Poly-YOLO建立在YOLOv3的原始思想的基础上,并消除了它的两个弱点:标签重写anchor分配不平衡

Poly-YOLO使用stairstep上采样通过hypercolumn技术聚合轻型SE-Darknet-53主干网中的特征来减少问题,并产生高分辨率的单尺度输出。与YOLOv3相比:Poly-YOLO的可训练参数只有60%,但mAP却提高了40%。更少参数和更低输出分辨率的Poly-YOLO  Lite,具有与YOLOv3相同的精度,但体积小三倍,速度快两倍,更适用于嵌入式设备。

今天主要就是说怎么解决Yolov3两大问题。

左图说明了输入图像上的 YOLO 网格,黄点表示检测到的对象的中心。右图说明了检测结果。

第一个问题:标签重写

标签重写是指由于yolo特有的网格负责预测bbox的特点,可能会出现两个物体分配给了同一个anchor,导致仅仅有一个物体被保留负责预测,另一个物体被当做背景忽略了。当输入分辨率越小,物体越密集,物体的wh大小非常接近时候,标签重写现象比较严重。如上图所示,红色表示被重写的bbox,可以看出27个物体有10个被重写了。

具体来说,以416 *416大小的图像为例,在图像分辨率随着卷积下降到13 * 13的特征图大小时,这时候特征图一个像素点的对应是32*32大小的图像patch。而YOLOV3在训练时候,如果出现相同两个目标的中心位于同一个cell,且分配给同一个anchor,那么前面一个目标就会被后面目标重写,也就是说两个目标由于中心距离太近以至于在特征图上将采样成为同一个像素点的时候,这时候其中有个目标会被重写而无法进行到训练当中。

这种现象在coco数据上不明显的原因是bbox分布比较均匀,不同大小物体会分配到不同预测层,标签重写概率比较低。但是在很多实际应用中,比如工业界的特定元件检测时候,物体排布非常紧密,且大小几乎一致,此时就可能会出现标签重写问题了,作者论文指出在Cityscapes数据上该现象也比较明显。

第二个问题:Anchor分配不均衡

yolo系列采用kmean算法聚类得到特定要求的9个anchor,并且以每三个为一组,用于大输出图(检测小物体),中等输出图和小输出图层(检测大物体)的默认anchor。可以看出不同大小的物体会被这三组anchor分配到不同预测层进行预测。

但是这种kmean算法得出的结果是有问题的,在实际项目中也发现了。前面说过大部分特定场景的目标检测数据集,并不是和coco自然场景一样,啥尺度都有,实际项目中大部分物体都是差不多大的,或者说仅仅有特定的几种尺度,此时采用kmean这一套流程就会出现:几乎一样大的物体被强制分到不同层去预测,这个训练方式对网络来说非常奇怪,因为物体和物体之间wh可能就差了一点点,居然强制分层预测,这明显不合理。本文作者生成的仿真数据其实也是这个特点。

作者指出,kmean这种设置,仅仅在:M ∼ U(0, r)情况下采用合理的。其中r是输入图片分辨率,例如416。该式子的意思是物体的大小分布是满足边界为0到r的均匀分布,也就是说在416x416图片上,各种大小尺度的bbox都会存在的情况下,kmean做法是合理的。但是可能大部分场景都是:M ∼ N (0.5r, r),即均值为0.5r,标准差为r的物体分布,如果按照默认的kmean算法对anchor的计算策略,那么由于大部分物体都是中等尺寸物体,会出现其余两个分支没有得到很好训练,或者说根本就没有训练,浪费网络。

三、新框架及解决方法

对于标签重写问题,只能通过要么增加输入图片分辨率大小;要么增加输出特征图大小实现。本文的做法是增加输出特征图大小。

原始的yolov3,输入大小是输出特征图的8/16和32倍,通过上述数据可以发现标签重写比例蛮高的。而通过增加输出特征图大小后可以显著降低重写比例。

对于kmean聚类带来的问题,有两种解决办法:

  1. kmean聚类流程不变,但是要避免出现小物体被分配到小输出特征图上面训练和大物体被分配到大输出特征图上面训练问题,具体就是首先基于网络输出层感受野,定义三个大概范围尺度,然后设置两道阈值,强行将三个尺度离散化分开;然后对bbox进行单独三次聚类,每次聚类都是在前面指定的范围内选择特定的bbox进行,而不是作用于整个数据集。主要是保证kmean仅仅作用于特定bbox大小访问内即可,就可以避免上面问题了。但是缺点也非常明显,如果物体大小都差不多,那么几乎仅仅有一个输出层有物体分配预测,其余两个尺度在那里空跑,浪费资源。

  2. 就只有一个输出层,所有物体都是在这个层预测即可。可以避免kmean聚类问题,但是为了防止标签重写,故把输出分辨率调高,此时就完美了。作者实际上采用的是1/4尺度输出,属于高分辨率输出,重写概率很低。

根据上图可以发现:

(1) 网络方面,为了减少参数量,首先减少了通道数目,同时为了提高性能,引入了SE单元来加强特征

(2) 和yolov3的最大区别是输出层是一个,但是也采用了多尺度融合方式

(3) neck部分提出了hypercolumn+stairstep上采样操作

左边是标准的hypercolumn操作,右边是作者提出的。实验表明右边的方式更好,因为loss更低。

通过上述参数设置,作者设计的neck和head较轻,共有37.1M的参数,显著低于YOLOv3的61.5M,Poly-YOLO比YOLOv3的精度更高,在可训练参数减少40%的情况下,mAP精度大概也提高了40%。同时为了进一步提速,作者还设计了lite版本,参数仅仅16.5M,精度和yolov3接近。

四、实验及可视化

左:矩形网格,取自YOLOv3。目标边界框以其中心为中心的单元格预测其边界框坐标。 右图:Poly-YOLO中用于检测多边形顶点的基于圆形扇区的网格。 网格的中心与目标边界框的中心重合。 然后每个圆形扇区负责检测特定顶点的极坐标。 不存在顶点的扇区应产生等于零的置信度。

矩形检测和多边形检测对比

本文仅做学术分享,如有侵权,请联系删文。

干货下载与学习

后台回复:巴塞罗自治大学课件,即可下载国外大学沉淀数年3D Vison精品课件

后台回复:计算机视觉书籍,即可下载3D视觉领域经典书籍pdf

后台回复:3D视觉课程,即可学习3D视觉领域精品课程

计算机视觉工坊精品课程官网:3dcver.com

1.面向自动驾驶领域的多传感器数据融合技术

2.面向自动驾驶领域的3D点云目标检测全栈学习路线!(单模态+多模态/数据+代码)
3.彻底搞透视觉三维重建:原理剖析、代码讲解、及优化改进
4.国内首个面向工业级实战的点云处理课程
5.激光-视觉-IMU-GPS融合SLAM算法梳理和代码讲解
6.彻底搞懂视觉-惯性SLAM:基于VINS-Fusion正式开课啦
7.彻底搞懂基于LOAM框架的3D激光SLAM: 源码剖析到算法优化
8.彻底剖析室内、室外激光SLAM关键算法原理、代码和实战(cartographer+LOAM +LIO-SAM)

9.从零搭建一套结构光3D重建系统[理论+源码+实践]

10.单目深度估计方法:算法梳理与代码实现

11.自动驾驶中的深度学习模型部署实战

12.相机模型与标定(单目+双目+鱼眼)

13.重磅!四旋翼飞行器:算法与实战

14.ROS2从入门到精通:理论与实战

15.国内首个3D缺陷检测教程:理论、源码与实战

重磅!计算机视觉工坊-学习交流群已成立

扫码添加小助手微信,可申请加入3D视觉工坊-学术论文写作与投稿 微信交流群,旨在交流顶会、顶刊、SCI、EI等写作与投稿事宜。

同时也可申请加入我们的细分方向交流群,目前主要有ORB-SLAM系列源码学习、3D视觉CV&深度学习SLAM三维重建点云后处理自动驾驶、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、深度估计、学术交流、求职交流等微信群,请扫描下面微信号加群,备注:”研究方向+学校/公司+昵称“,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进去相关微信群。原创投稿也请联系。

▲长按加微信群或投稿

▲长按关注公众号

3D视觉从入门到精通知识星球:针对3D视觉领域的视频课程(三维重建系列、三维点云系列、结构光系列、手眼标定、相机标定、激光/视觉SLAM自动驾驶等)、知识点汇总、入门进阶学习路线、最新paper分享、疑问解答五个方面进行深耕,更有各类大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打造成集技术与就业为一体的铁杆粉丝聚集区,近4000星球成员为创造更好的AI世界共同进步,知识星球入口:

学习3D视觉核心技术,扫描查看介绍,3天内无条件退款

圈里有高质量教程资料、答疑解惑、助你高效解决问题

觉得有用,麻烦给个赞和在看~  

Poly-YOLO:更快,更精确的检测(主要解决Yolov3两大问题,附源代码)相关推荐

  1. 56.4 AP!超越YOLOv4,更快更强的CenterNet2来了!

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 代码:https://github.com/xingyizhou/CenterNet2 论文:http ...

  2. YOLOv5全面解析教程③:更快更好的边界框回归损失

    作者|Fengwen.BBuf 边界框回归是目标检测的关键步骤,在现有方法中,虽然被广泛用于边界框回归,但它不是针对评估指标量身定制的,即 Intersection over Union (IoU). ...

  3. 极智Paper | YOLOv7 更高 更快 更强

      欢迎关注我的公众号 [极智视界],获取我的更多笔记分享   大家好,我是极智视界,本文解读一下 更高.更快.更强的 YOLOv7:Trainable bag-of-freebies sets ne ...

  4. 评论回复功能 asp.net_一键抠图 更快 更强!六月新版 PS 2020 21.2 新增功能测试报告...

    一键抠图 更快 更强!六月新版 PS 2020 21.2 新增功能测试报告! 紫枫前几天发布了 Adobe Photoshop 2020 21.2.0.225 最新版本,今天来说说这个版本的新增功能. ...

  5. 使用现场总线更快更远

    使用现场总线更快更远 Going faster and further with Fieldbus PROCENTEC等行业专家表示,基于RS-485的现场总线技术(PROFIBUS®)和工业以太网( ...

  6. 更快更安全,HTTPS 优化总结

    在网站升级到 HTTPS 之后,我们还可以有很多玩意可以折腾,优化 HTTPS,让它更快更安全.这里是一篇 HTTPS 优化的总结,也包含问题的解决方法,不过不仅仅包括 HTTPS 的优化,也包含 H ...

  7. 清华大学丁霄汉:深度网络重参数化——让你的模型更快更强

    不到现场,照样看最干货的学术报告! 嗨,大家好.这里是学术报告专栏,读芯术小编不定期挑选并亲自跑会,为大家奉献科技领域最优秀的学术报告,为同学们记录报告干货,并想方设法搞到一手的PPT和现场视频--足 ...

  8. 实用的it知识学习_怎样能更快更好的学习好书法?分享一些比较实用的理论知识...

    如何能更快更高效的学习书法?首先了解一些书法理论知识是很有必要的!它能让你在学习书法的过程中不至于迷茫 !能助你更快学好书法! 一.书论在实践中产生 我们大部分人都觉得学习书法可以没有理论,但不可无技 ...

  9. msdn安装后怎么用_Win10不好用?安装官方版精简Win10后,运行比win7更快更流畅

    尽管不想承认,确实是大白菜的电脑配置有点旧了,导致从win7升级最新版win10系统后,电脑是100个不好用!!! 虽然,非常怀念使用win7系统时,那种操作的流畅度,那种运行的速度~ 但是,大白菜和 ...

最新文章

  1. php 解决方案,php优化解决方案
  2. 查找二叉树中出现次数最多的数 Find Mode in Binary Search Tree
  3. yarn 切换 设置 镜像 源
  4. oracle中的listener.ora和tnsnames.ora
  5. UA MATH575B 数值分析下 计算统计物理例题1
  6. java8和9兼容吗_甲骨文限制 Java 9 到 Java 8 的向后兼容性
  7. mysql目录树_MySQL B+树目录及索引优化_mysql
  8. sql server 比较大小
  9. java序列化与反序列化总结
  10. 【PDF提取内容重命名】咕嘎批量PDF批量提取PDF识别重命名,如何批量读取pdf内容并重命名,根据pdf内容修改文件名称,如何提取pdf标题为文件名,用电子发票为例教你操作方法
  11. java日文_怎么用java编写个应用程序,让其输出日文表
  12. 光学图像、SAR图像等区别
  13. 论坛勋章动态特效制作流程
  14. Polygon与以太坊通信机制研究
  15. 响应函数 handlers
  16. 12面魔方公式图解法_魔方小站三级12面魔方教程拍个视频
  17. 再次出现用户净流失,大失颜面的中国移动推出超低价套餐争取用户
  18. 微信小程序消息订阅超详细流程步骤
  19. 微信运动服务器多久同步一次,微信运动多久更新一次步数(微信运动刷新时间表)...
  20. Markdown写作规范

热门文章

  1. unity3d 混淆
  2. 使用Arthas热更新时,lombok注解导致mc命令编译失败
  3. C#简单音乐播放器(三)
  4. 这个横行霸道的美食,也是中秋节的一大特色,我用Python爬取京东1546条大闸蟹商品数据带大家看看
  5. redis配置文件样例(二)
  6. 上海科技大学计算机浙江分数线,2018上海科技大学录取分数线
  7. PCB 多层板为什么都是偶数层?
  8. linux 1000 ask(转)
  9. 从《货殖列传》中学习炒股
  10. 轻松打造自己的Cheat Engine