论文下载地址:https://arxiv.org/pdf/2005.13243.pdf
代码下载地址:https://gitlab.com/irafm-ai/poly-yolo
论文创新:在YOLOv3的基础上进行了改进,解决了YOLO-v3存在标签重写和anchor分布不均衡问题。同时还增加了基于多边形预测的实例分割算法。改进之后的算法参数量只需要YOLO-v3的60%,速度快了2倍,精度提升了40%,可以进行实时实例分割。
YOLO-v3存在的问题:
1. 标签重写问题:
从下图可以看出YOLO3的标签重写问题。相邻两个框(绿色和红色框)都落在同一个cell中,这就会造成他们经过特征提取,下采样之后,在特征图上是同一个像素点,这样红色的目标就会被抛弃只保留绿色的检测框。从图中可以看出YOLO3存在大量的 标签重写问题。
2. anchor在不同scales的不均衡问题:
由于yolov3采用了三种不同尺度的特征图来进行目标检测,同时使用k-means从数据集中找到了9个不同的检测框尺寸(也就是scales),并将这个9个尺寸均匀分配给三个不同尺度的特征图。虽然作者想通过不同的尺寸来检测不同大小的物体,但是经过统计发现60%的目标都会被分配给中等尺寸的anchor,这样就会造成anchor的scales不均衡问题。
解决办法:
针对标签重写问题,论文采用了高分辨率的特征图,这样标签重写问题就可以有效解决。针对anchor在不同scales的不均衡问题,论文直接将三个不同尺度的特征图变为一张特征图。同时网络增加了SENet结构块引入通道注意力提升精度,同时砍掉之前很重的上采样head网络结构,是网络的参数量减至60%。
论文中使用的特征图大小是1/4分辨率。同时在上采样阶段采用了阶梯式的特征融合,如下图2所示。目的是为了让上采样特征更加的平滑。
实例分割阶段:
这个是poly-yolo一个创新的地方。他并不是传统意义上基于像素点分类的分割算法,而是基于不同顶点构造的多边形分割算法。直白一点就是使用很多顶点来将物体围起来,本质上是一个多边行。
下图就是论文中提出的多边形分割。左边是YOLO3/poly-yolo的bbox的检测结果,中点的黑点是bbox的中心。有图是poly-yolo的实力分割结果,它以中间的黑点为中心,向四周发出扇形,黄色的扇形表示有顶点存在,白色表示没有顶点存在,最后将这些顶点连接在一起就完成了一次实例分割。
(1)
公式1,表示的是YOLOv3的bbox的表示方法。
(2)
公式2,是poly-yolo的bbox和分割顶点的表示方法。其中V表示的分割顶点。
(3)
公式3是分割顶点的坐标,由于采用的是极坐标只需要点到中点的距离和角度就可以。α表示的是顶点到中心点的距离,α的取值是0-1,是将距离/bbox的对角线得到的。β是顶点到中心点的角度,γ是概率值只能取0和1,表示该顶点是否存在。
上面就是poly-yolo的一个多边形分割算法。通过网络不止输出检测框的位置,还会将分割的顶点坐标也输出来。论文中定义的分割顶点的最大数量是30个,也就是说分割的顶点数量<=30。
loss损失函数:
算法的整体损失函数如上图所示。l1表示的是bbox中心点的损失,l2表示的是bbox的尺寸(长和宽)的损失,l3表示的是置信度损失,l4是分类预测损失,l5是分割损失。下面详细介绍一下这些损失函数。
上图是l1bbox中心点的损失函数。H是交叉熵损失函数。,z是一个权重值。
上图是yolov3的原来的l2损失函数,aw和ah表示anchor的长和宽,j表示第j个anchor。
上图是l3的损失函数,q表示的是预测置信度。
上图是l4 类别损失函数。k表示第k个类别概率。
上图l5是实例分割的损失函数。表示的是bbox对角线的长度。
检测结果: