深度学习在计算机视觉领域取得了巨大成功,在分类、检测甚至跟踪任务上都有了巨大的进步,可以产生实时的高质量预测,但高速的实例分割的发展却落后于目标检测的进步。在目标检测领域,我们已经拥有了高效的SSD和YOLO,但实例分割领域对于模型表现更多的重视、使得网络的速度进展缓慢。
SSD和YOLO的加速主要通过移除Faster R-CNN这类网络的第二个阶段,通过单阶段来提升速度,并通过其他的手段来弥补精度的下降。但实例分割的难度远大于目标检测,这样的方法不能简单的拓展到实例分割中。先进的实例分割算法强烈依赖于特征的定位来预测mask,通过将特定区域的特征进行“池化”后输入到mask预测器中,这种串行的运行的方法难以加速。虽然也有像FCIS等单阶段的方法,但他们却需要较为复杂的后处理操作,难以保证实时性。
为了解决这个问题、提高实例分割的速度,研究人员提出了一种快速、单阶段的实例分割模型YOLACT,在单个Titan Xp上实现了30帧以上的实例分割速度,并在MS COCO上实现了约30mAP的表现。这种方法抛弃了先前方法中的定位步骤,将实例分割分为了两个并行的任务:一方面在整幅图像上生成一系列mask原型,另一方面为每个实例预测出一系列线性叠加系数。随后对于图中的每个实例,基于线性叠加系数对原型mask进行组合并利用预测框进行剪切实现最后的实例输出。在此过程中,网络学会了如何定位不同位置、颜色和语义实例的mask。
此外,由于mask原型的预测不依赖于类别的数量,这一模型学习到如何组合mask原型的表示可以被所用类别所共享。这种表示的学习使得原型空间可以表示图像中不同的位置、定位实例、检测边缘和编码位置敏感信息,并对这些结果进行有效组合。
YOLACT通过并行的计算架构和轻量化的组合过程加速了实例分割的过程,在单阶段检测基础网络上仅仅添加了少量的计算,使得它可以轻松达到30fps。
YOLACT预测的mask由于充分利用了图像空间的信息,不受特征池化的影响,对于大物体预测有着明显的提升。而这种基于mask原型和mask系数的思想可以移植到很多先进的目标检测架构上,实现快速精确的实例分割。
具体实现
先前的实例分割主要在提升精度上下功夫,Mask-RCNN是两阶段方法的代表,而单阶段的方法主要基于位置敏感图池化来实现实例分割,这些计算极大的限制了模型运行的速度。而目前的实时实例分割方法要么在精度上无法与先进的实例分割方法比拟,要么所面对的分割情形较为简单。
在这篇文章的工作中,研究人员通过在现有的单阶段目标检测网络上加上mask预测分支,但去除了精确的定位步骤(eg feature repooling)。在模型中一个分支利用FCN来产生一系列不依赖与实例的原型mask,第二个分支则是在目标检测模块后加上了预测mask系数的结构(每个 anchor),用于编码实例在原型空间中的表示。
研究人员首先利用FCN实现了对于原型mask的预测。在基础网络特征层后添加了输出为k通道的Protonet,它将生成k个独立的mask原型。为了保证生成原型mask的稳定,研究人员选用了基础网络中更深层的特征图,这还有益于提高原型mask的分辨率,对于提高mask的质量和小物体的效果有着重要的作用。
对于mask系数的预测,研究人员对现有的单阶段目标检测网络进行了改造,为每个anchor添加了k个预测,并利用tanh对k个系数进行操作提高稳定性。
最后对生成的mask原型和系数进行线性组合即可得到最终的mask。
值得一提的是,研究人员还在这一工作中实现了一种快速非极大值抑制方法Fast NMS,比传统的方法提高了11-16ms的速度。通过基于GPU实现的批量排序算法和IoU计算实现了加速,并利用矩阵运算和阈值找到每类需要保留的检测结果。最后,研究人员还使用了语义分割损失在训练中补偿FastNMS带来的下降(0.1-0.3mAP),通过在基础网络P3上添加1*1卷积,和sigmoid激活实现了0.4mAP的提升。
下表显示了YOLACT在不同基础网络与输入图像尺寸上的表现,可以看到在保持较高mAP时实现了较快的速度。
FastNMS算法只会造成算法表现轻微的下降,但在速度上有较大的提升:
让我们再来围观一下网络的表现,对于重叠的物体表现依旧优异:
目前这一代码已经开源,可以在下面的地址中找到:code:https://github.com/dbolya/yolact它基于Pytorch 1.0.1实现,并依赖于一些额外的python包:
# Cython needs to be installed before pycocotoolspip install cython opencv-python pillow pycocotools matplotlib
直接将代码下载到本地即可开始调试:
git clone https://github.com/dbolya/yolact.gitcd yolact
现在就可以开始进行训练或者测试了,当然测试之前需要先下载coco数据集
# Train setsh data/scripts/COCO.sh# Test setsh data/scripts/COCO.sh
# Display qualitative results on the specified image.python eval.py --trained_model=weights/yolact_base_54_800000.pth --score_threshold=0.3 --top_k=100 --image=my_image.png# Display qualitative results on the specified image.python eval.py --trained_model=weights/yolact_base_54_800000.pth --score_threshold=0.3 --top_k=100 --image=input_image.png:output_image.png# Process a whole folder of images.python eval.py --trained_model=weights/yolact_base_54_800000.pth --score_threshold=0.3 --top_k=100 --images=path/to/input/folder:path/to/output/folder
愉快的开始分割吧!
-
图像
+关注
关注
2文章
1083浏览量
40449 -
计算机视觉
+关注
关注
8文章
1698浏览量
45965 -
深度学习
+关注
关注
73文章
5497浏览量
121094
原文标题:实例分割太慢怎么破?戴维斯分校提出实时分割框架YOLACT突破速度边界
文章出处:【微信号:thejiangmen,微信公众号:将门创投】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论