目录
🏆论文下载:paper
🏆代码下载 :code
🏆YOLACT论文解析:YOLACT
🍉🍉1.YOLACT++与YOLACT区别
首先来看下YOLACT++区别于YOLACT的地方是什么?
在backbonde网络中加入可变形卷积(deformable convolutions);
使用更好的anchor尺度和比例对prediction head进行优化;
加入新的mask re-scoring支路。
看下原版的YOLACT的网络结构:
🌷🌷2.摘要
我们为实时(> 30 fps)实例分割提供了一个简单的全卷积模型,该模型在单个Titan Xp上评估的MS COCO上取得了SOTA结果,这比以前的任何最新的方法都快得多。此外,我们仅在一个GPU上训练后即可获得此结果。
我们通过将实例分割分为两个并行的子任务来完成此任务:(1)生成一组原型(prototype) masks,以及(2)预测每个实例的mask 系数。然后,我们通过将原型与模板系数线性组合来生成实例 masks。我们发现,由于此过程不依赖于 repooling,因此此方法可产生非常高质量的masks。
此外,我们分析了 prototype 的 emergent 行为,并显示了它们是完全卷积的。我们还提出了快速NMS,这是对标准NMS的12毫秒快速替代,仅会有点影响性能。最后,通过将可变形(deformable)卷积合并到骨干网络中,使用更好的 anchor 尺度和长宽比优化预测head,并添加新颖的快速 masks 重新评分分支,我们的YOLACT ++模型可以在MS COCO上以33.5 FPS的实现34.1 mAP。
🍋🍋3.创新点
3.1可变形卷积
通过给骨干网络加入可变形卷积,具体实现方式是在resnet的C3-C5过程中,将原始3*3卷积替换成3*3可变形卷积。结果导致mAP提高了1.8,速度慢了8ms。作者认为性能提升的原因有以下几点:
-
通过和目标实例进行对准,使得网络可以处理不同尺度、旋转角度和比例的实例;
-
YOLACT本身没有再采样策略,因而一个更好、更灵活的采样策略更重要。
同时作者发现,在引入可变形卷积时需要选择合适的插入位置才能取得性能的提升。
PS:在 COCO 上,34.1 mAP,速度高达 33.5 FPS!
3.2快速的mask重新计算网络结构
Mask 评分分支由6个具有ReLU非线性的卷积层和1个全局池化层组成。由于没有特征级联,也没有fc层,因此速度开销仅为〜1 ms。
这种结构受到 Mask Scoring R-CNN 的启发,发现模型的分类置信度和预测掩模质量存在差异(即更高质量的掩模分割不一定具有更高的类别置信度)。 因此,为了更好地关联掩模质量的班级信心,掩模评分 R-CNN像Mask R-CNN 添加了一个新模块,用于学习回归预测掩模与其掩模与真实值的IoU。
根据掩模 IoU 重新计算预测掩模具体来说,我们的快速掩模重新评分网络是每个卷积层具有 ReLU 非线性的 6 层 FCN,以及最终的全局池化层。 它以 YOLACT 的裁剪掩膜作为输入预测(阈值化之前)并输出每个对象类别的掩模 IoU。我们通过分类头预测的类别的预测掩码 IoU 与相应的分类置信度之间的乘积来重新评分每个掩码。
3.3优化预测头
YOLACT是基于anchor-base检测器的,因此选择正确的anchor超参数是很重要的,作者尝试了两种策略:
- 保持anchor尺度不变,增加比例数量:[1,1/2,2]到[1,1/2,2,1/3,3]
- 保持比例不变,将每个FPN等级的尺度数量增加3倍
以上两种方法均可以增加anchor数量。
🍇🍇4.结果对比
4.1YOLACT与YOLACT++识别效果对比
4.2YOLACT与YOLACT++精度对比
4.3YOLACT++识别效率对比
🍓🍓5.YOLACT++ configs代码
# ----------------------- YOLACT++ CONFIGS ----------------------- #
yolact_plus_base_config = yolact_base_config.copy({
'name': 'yolact_plus_base',
'backbone': resnet101_dcn_inter3_backbone.copy({
'selected_layers': list(range(1, 4)),
'pred_aspect_ratios': [ [[1, 1/2, 2]] ]*5,
'pred_scales': [[i * 2 ** (j / 3.0) for j in range(3)] for i in [24, 48, 96, 192, 384]],
'use_pixel_scales': True,
'preapply_sqrt': False,
'use_square_anchors': False,
}),
'use_maskiou': True,
'maskiou_net': [(8, 3, {'stride': 2}), (16, 3, {'stride': 2}), (32, 3, {'stride': 2}), (64, 3, {'stride': 2}), (128, 3, {'stride': 2}), (80, 1, {})],
'maskiou_alpha': 25,
'rescore_bbox': False,
'rescore_mask': True,
'remove_small_gt_mask': 5*5,
})
yolact_plus_resnet50_config = yolact_plus_base_config.copy({
'name': 'yolact_plus_resnet50',
'backbone': resnet50_dcnv2_backbone.copy({
'selected_layers': list(range(1, 4)),
'pred_aspect_ratios': [ [[1, 1/2, 2]] ]*5,
'pred_scales': [[i * 2 ** (j / 3.0) for j in range(3)] for i in [24, 48, 96, 192, 384]],
'use_pixel_scales': True,
'preapply_sqrt': False,
'use_square_anchors': False,
}),
})
整理不易,欢迎一键三连!!!
送你们一条美丽的--分割线--
🌷🌷🍀🍀🌾🌾🍓🍓🍂🍂🙋🙋🐸🐸🙋🙋💖💖🍌🍌🔔🔔🍉🍉🍭🍭🍋🍋🍇🍇🏆🏆📸📸⛵⛵⭐⭐🍎🍎👍👍🌷🌷