本文介绍 PolyYolo开源!Yolo也能做实例分割,检测mAP提升40%!

PolyYolo开源!Yolo也能做实例分割,检测mAP提升40%!

This article was original written by Jin Tian, welcome re-post, first come with https://jinfagang.github.io . but please keep this copyright info, thanks, any question could be asked via wechat: jintianiloveu

就在刚刚,PolyYolo宣布开源,在原版的YoloV3的基础上mAP提升超40%,并且,最重要的是,它通过Yolo实现了实例分割,速度可以达到realtime。

我们可以先看看它的效果:

可以看到,效果还是非常不错的,尤其是在这种场景下,行人和交通灯都属于比较难检测的物体,这个方法完美的解决了在yolo基础上添加实例分割的问题!

原文摘要:我们提出了一个新的YOLO版本,它扩展了带有实例分割的Poly-YOLO。 Poly-YOLO建立在YOLOv3的原始思想的基础上,并消除了它的两个弱点:大量重写的标签和无效的锚点分配。 Poly-YOLO通过使用阶梯式上采样通过超列技术聚合SE-Darknet-53主干中的特征,从而减少了重写标签的数量,并产生了高分辨率的单标度输出。与YOLOv3相比,Poly-YOLO仅具有60%的可训练参数,但相对mAP却提高了40%。我们还展示了具有更少参数和更低输出分辨率的Poly-YOLO lite。它具有与YOLOv3相同的精度,但它的体积小三倍,速度快两倍,因此适用于嵌入式设备。最后,Poly-YOLO使用边界多边形执行实例分割。训练网络以检测在极坐标网格上定义的尺寸无关的多边形。预测每个多边形的顶点时会充满信心,因此Poly-YOLO会生成具有不同数量顶点的多边形。

Yolov3存在的问题

yolov3存在的问题主要是两个,一个是label重写问题,以及anchor的不均衡问题,这可以通过一个图来很直观的理解:

如上图所示,当两个相邻的框的center落在同一个cell的时候,其中一个框可能会被另外一个框重写。这种重写的问题最终导致检测器根本不会用他们来训练。当你训练的Yolo系列检测器有一个类别无法被检测出来的时候,多半是因为它被重写了. 而解决这个问题的关键还是在于Yolo的网格设计方式。

而第二个问题来自于anchor在不同scale的数目不均衡问题。PolyYolo里面解决这个问题的方式也很简单直白,直接把三个尺度去掉,改用更高分辨率的特征输入,同时引入一个SE模块,使得特征被多尺度的学习,更换掉Yolo里面很重的head,改用一个轻量级的更高分辨率的block,最终我们实现了减少了60%的参数量,但是精度却提高了40%。

PolyYolo的多边形实例分割

PY里面的分割思想,其实也很简单,用的是类似于极坐标变换的方式来进行的,这样带来的好处是不会有太大的显存,同时输出的方式不是mask的掩码,可以让整个网络跑的更快,更加轻量。

最后结果显示,模型的输出效果非常不错!

如果大家相对这篇论文有进一步的品读,欢迎关注我们的公众号,期待我们的源码解读,同时也可以通过公众号后台添加小助手微信加入我们的社群交流!