转载: https://zhuanlan.zhihu.com/p/54334986

http://haha-strong.com/2019/07/25/20190725-TridentNet/

开源代码:https://github.com/TuSimple/simpledet/tree/master/models/tridentnet

Facebook detectron2 官方收录:https://github.com/facebookresearch/detectron2/tree/master/projects/TridentNet

算法思路

将网路backbone最后一个改成三个不同卷积率的卷积层并联,实现对不同尺度特征的提取。
如下图所示:

motivation

对于一个backbone net而言有几个因素会影响他们的性能,下采样率、网络深度以及感受野。前面两个因素已经有人研究过了,对于目标检测中的感受野的影响还没有人专门对此进行研究。本文通过对网的最后一个backbone中的卷积层改变卷积的空洞率以实现输出特征的感受野的调整。实验证明,不同的感受野对不同尺度目标的检测有着不同的影响,大的感受野对尺度较大的目标检测性能较好,小的感受野对小目标的检测性能较好。

做法

作者提出的网络框架如下图所示:

如上图所示,作者在特征提取的最后一层增加了一个多分支的卷积层,用来提取不同尺度的特征信息。为了减少网络参数量这几个网络共享参数,便于网络的优化,在这里作者通过实验验证当采用三个不同卷积空洞率时网络的性能最佳。实验结果如下图所示:

Figure 3: A trident block constructed from a bottleneck residual block.

同时,作者也通过实验证明将TridentNet添加在最后一层对网络的性能提升是最佳的:

facebook/detectron2中TridentNet快速版本就是将ResNet50中的res4中某个卷积替换为TridentConv即可,并且这里TridentConv中不同空洞率的卷积最后是通过concat后输出,也就是可以无缝替换到ResNet结构中:

Scale-aware training Scheme

最后一个设计则是借鉴SNIP,为了避免receptive field和scale不匹配的情况,TridentNet对于每一个branch只训练一定范围内尺度样本,避免极端scale的物体对于性能的影响,根据ground truth box的宽w和高h,对每个分支branch i 选择proposal 的ROI的最大最小尺度为:li和ui。

性能

上图所示,是该算法与现有算法的性能比较。这些算法都采用相同的网络backbone,ResNet-101.
与采用多层特征融合的SSD算法相比,本算法性能提升10个点左右。
与Fastr-RCNN相比,本算法较之有8个点的性能提升。
同时,多分支不同空洞率和可行变卷积的联合使用可以将网络的性能比提升6个点左右。表明不同感受野的应用有助于算法对不同目标的检测。

总结一下

TridentNet在原始的backbone上做了三点变化:第一点是构造了不同receptive field的parallel multi-branch,第二点是对于trident block中每一个branch的weight是share的。第三点是对于每个branch,训练和测试都只负责一定尺度范围内的样本,也就是所谓的scale-aware。这三点在任何一个深度学习框架中都是非常容易实现的。

目标检测 - TridentNet的更多相关文章

  1. AI佳作解读系列(五) - 目标检测二十年技术综述

    计算机视觉中的目标检测,因其在真实世界的大量应用需求,比如自动驾驶.视频监控.机器人视觉等,而被研究学者广泛关注.   上周四,arXiv新出一篇目标检测文献<Object Detection ...

  2. 基于COCO数据集验证的目标检测算法天梯排行榜

    基于COCO数据集验证的目标检测算法天梯排行榜 AP50 Rank Model box AP AP50 Paper Code Result Year Tags 1 SwinV2-G (HTC++) 6 ...

  3. 目标检测方法——SSD

    SSD论文阅读(Wei Liu--[ECCV2016]SSD Single Shot MultiBox Detector) 目录 作者及相关链接 文章的选择原因 方法概括 方法细节 相关背景补充 实验 ...

  4. 目标检测方法总结(R-CNN系列)

    目标检测方法系列--R-CNN, SPP, Fast R-CNN, Faster R-CNN, YOLO, SSD 目录 相关背景 从传统方法到R-CNN 从R-CNN到SPP Fast R-CNN ...

  5. #Deep Learning回顾#之基于深度学习的目标检测(阅读小结)

    原文链接:https://www.52ml.net/20287.html 这篇博文主要讲了深度学习在目标检测中的发展. 博文首先介绍了传统的目标检测算法过程: 传统的目标检测一般使用滑动窗口的框架,主 ...

  6. 目标检测的图像特征提取之(一)HOG特征(转载)

    目标检测的图像特征提取之(一)HOG特征 zouxy09@qq.com http://blog.csdn.net/zouxy09 1.HOG特征: 方向梯度直方图(Histogram of Orien ...

  7. (转) 技术揭秘:海康威视PASCAL VOC2012目标检测权威评测夺冠之道

    技术揭秘:海康威视PASCAL VOC2012目标检测权威评测夺冠之道 原创 2016-09-21 钟巧勇 深度学习大讲堂 点击上方“深度学习大讲堂”可订阅哦!深度学习大讲堂是高质量原创内容平台,邀请 ...

  8. 目标检测--Rich feature hierarchies for accurate object detection and semantic segmentation(CVPR 2014)

    Rich feature hierarchies for accurate object detection and semantic segmentation 作者: Ross Girshick J ...

  9. Adaboost原理及目标检测中的应用

    Adaboost原理及目标检测中的应用 whowhoha@outlook.com Adaboost原理 Adaboost(AdaptiveBoosting)是一种迭代算法,通过对训练集不断训练弱分类器 ...

随机推荐

  1. RT-Thread--线程管理

    线程管理的功能特点 RT-Thread系统中线程是调度的最小单位: 线程分为:系统线程和用户线程,系统线程是由 RT-Thread 内核创建的线程,用户线程是由应用程序创建的线程,这两类线程都会从内核 ...

  2. sql 发生死锁

    SELECT request_session_id spid , OBJECT_NAME(resource_associated_entity_id) tableName FROM sys.dm_tr ...

  3. 复杂sql书写方法

    给你一个复杂sql连接不同的表,多个嵌套查询条件等的语句时,你是非常的胆怯由于对语法的不熟悉以及没有经验和自信,现在我们来学习一下如何写复杂的sql,我们把它分解为很多小的步骤进行 一.集中最后的输出 ...

  4. net.exe和net1.exe的区别&联系.

    system32文件夹下有一个net.exe和net1.exe,一般做渗透的时候,很多情况下管理员只知道删除net.exe而遗漏net1.exe,导致我们能继续do evil..... 一直没弄明白它 ...

  5. Python基础之异常

    一.摘要 Python使用被称为异常 的特殊对象来管理程序执行期间发生的错误.每当发生让Python不知所措的错误时,它都会创建一个异常对象.如果你编写了处理该异常的代码,程序将继续运行:如果你未对异 ...

  6. throttle(节流函数) 与 debounce(防抖动函数)理解与实现

    我们会对一些触发频率较高的事件进行监听,(如:resize scroll keyup事件) 如果在回调里执行高性能消耗的操作(如反复操作dom, 发起ajax请求等),反复触发时会使得性能消耗提高,浏 ...

  7. 记一次k8s服务504 timeout

    线上服务做集群扩容,调整了节点机器配置,在升级完毕之后,发现某些时候请求较慢,或者直接504 timeout 超时,必现情况,点击几次都是,且并没有代表性. 1.检查istio 日志是否有504 的日 ...

  8. The websites related Laravel 相关网站(内容将不断更新)

    https://laraveldaily.com/ 文章内容质量很高

  9. Hihocoder #1333 : 平衡树·Splay2

    1333 : 平衡树·Splay2 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho:好麻烦啊~ 小Hi:小Ho你在干嘛呢? 小Ho:我在干活啊!前几天老师让我帮忙 ...

  10. alarm函数

    alarm函数 设置定时器(闹钟).在指定seconds后,内核会给当前进程发送14)SIGALRM信号.进程收到该信号,默认动作终止. 每个进程都有且只有唯一个定时器. unsigned int a ...