Perceptual Generative Adversarial Networks for Small Object Detection
详解 小目标检测的一个常用思路是提升图片输入分辨率,来增强小目标的分辨率和生成高分辨率的特征图,但这会导致训练和验证极度费时。 本文提出的PGAN方法对小目标生成高分辨率特征表示,使小目标的特征表示与大目标特征表示类似。 生成器网络通过较前层提取细粒度特征将小目标分辨率较低的特征转换为分辨率较高的特征。 判别器网络不仅用于生成小目标高分辨表示,同时证明带感知损失的生成高分辨率特征对检测准确率是有帮助的。 生成器网络被训练欺骗辨别器通过产生最像大目标表征的小目标,同时提升检测准确率。 辨别器被训练用于提升正确从实际大目标中分辨出生成的高分辨率表征,同时将定位准确率反馈给生成器。 小目标检测典型应用领域:交通标志检测、行人检测 perception branch(感知分支)首先利用仅包含大目标的图片进行训练,然后利用仅包含小目标的图片进行训练,generator network 被训练用于对小目标生成高分辨率的类似大目标的表征。adversarial branch被训练用于区分生成的小目标高分辨率表征与实际大目标的原始表征。 generator 从底层提取细粒度特征,放入深度残差网络 ...
An Analysis of Scale Invariance in Object Detection – SNIP
动机概括而言,这篇文章从COCO数据集开始分析,认为目前目标检测算法的难点在于数据集中object的尺寸分布较大,尤其对于小目标的检测效果也有待提高,因此提出Scale Normalization for Image Pyramids (SNIP)算法来解决这个问题。 作者将数据集按照图像中目标的尺寸/图像尺寸进行排序,在ImageNet数据集中,这个倍数的中位数差不多0.554,而在COCO数据集中,这个数是0.106。如Figure1中两条线标出的Median点所示。Figure1是关于ImageNet和COCO数据集中object尺寸和图像尺寸的倍数关系曲线,横坐标表示object的尺寸/图像尺寸的值,纵坐标表示占比。也就是说在COCO数据集中,大部分的object面积只有图像面积的1%以下,这说明在COCO数据集中小目标占比要比ImageNet数据集大。另外,从Figure1中的COCO曲线可以看出,第90%的倍数(0.472)差不多是第10%的倍数(0.106)的20倍!这说明在COCO数据集中的object尺寸变化范围非常大。 那么这种差异会带来什么影响呢?因为在目标检测 ...
回归损失函数:L1 loss, L2 loss以及Smooth L1 Loss的对比
前言总结对比下$L_{1}$损失函数,$L_{2}$损失函数以及损$SmoothL_{1}$失函数的优缺点。 均方误差MSE ($L_{2}$ Loss)均方误差(Mean Square Error,MSE)是模型预测值$f(x)$与真实样本值$y$之间差值平方的平均值,其公式如下 M S E=\frac{\sum_{i=1}^{n}\left(f_{x_{i}}-y_{i}\right)^{2}}{n}其中,$\boldsymbol{y}_{i}$和$f\left(x_{i}\right)$分别表示第$i$个样本的真实值及其对应的预测值,$n$为样本的个数。 忽略下标$i$ ,设$n=1$,以$f(x)−y$为横轴,MSE的值为纵轴,得到函数的图形如下: MSE的函数曲线光滑、连续,处处可导,便于使用梯度下降算法,是一种常用的损失函数。 而且,随着误差的减小,梯度也在减小,这有利于收敛,即使使用固定的学习速率,也能较快的收敛到最小值。 当$y$和$f(x)$也就是真实值和预测值的差值大于1时,会放大误差;而当差值小于1时,则会缩小误差,这是平方运算决定的。MSE对于较大的误差(& ...
解决Pycharm大量占用C盘问题
前言在使用 PyCharm 时会在 C:\Users\.PyCharm<版本号> 下创建一大堆文件,里边包括了配置信息,项目缓存信息等。随着pycharm的使用,这个文件夹越来越大,占用着系统内存,好不霸道!要为了解决Pycharm大量占用C盘问题,需要把一些配置信息搬迁到指定位置。 通过 PyCharm 修改在启动 PyCharm 后选择 Help -> Edit Custom Properties 的选项,弹出: 选择 Create ,之后在文件中添加以下内容,即你需要迁移到的路径: 123idea.config.path=D:/Program Files/.PyCharm<版本号>/configidea.system.path=D:/Program Files/.PyCharm<版本号>/systemidea.plugins.path=D:/Program Files/.PyCharm<版本号>/config/plugins 保存并关闭 PyCharm 之后,将原文件夹下的 C:\Users\.PyCharm<版本号& ...
解决远程screen后,虚拟环境中的包丢了(如torch, tensorflow)
解决方法1、在进入screen之前不要激活虚拟环境,待进入screen后再激活所需的虚拟环境。 2、出现如下错误时:1ImportError: libcudart.so.10.0: cannot open shared object file...解决方式:1sudo ldconfig /usr/local/cuda-10.0/lib64
两阶段实时检测网络ThunderNet
前言ThunderNet是旷视和国防科技大学合作提出的目标检测模型,目标是在计算力受限的平台进行实时目标检测。需要关注的地方主要就是提出的两个特征增强模块CEM和SAM,其设计理念和应用的方法都非常值得借鉴。 介绍在移动端的实时目标检测是一个极为重要并且有挑战性的视觉问题。很多基于CNN的检测器都有巨大的计算量,所以在计算受限的场景下难以进行实时推理。论文提出了一个轻量级的两阶段的检测方法-ThunderNet。 在backbone部分,分析了以往的轻量级backbone的不足并提出了一个专门用于目标检测的轻量级基础网络-SNet。 在detection部分,提出一个有效的RPN和检测头。其中涉及到两个特征增强模块: Context Enhancement Module(CEM) 用于整合局部和全局特征。 Spatial Attention Module(SAM)引入RPN前后背景信息用以优化特征分布。 对目标输入分辨率、Backbone、检测头三个部分进行了平衡。 最终ThunderNet可以在ARM设备上达到24.1fps的速度,精度和速度上超过了很多一阶段检测器。 ...
SSD代码解析
前言本篇文章是在SSD算法原理解析的基础上做的代码解析,今天要解析的SSD源码来自于github一个非常火的Pytorch实现,已经有3K+星,地址为:https://github.com/amdegroot/ssd.pytorch/ 网络结构为了比较好的对应SSD的结构来看代码,我们首先放出SSD的网络结构,如下图所示: 可以看到原始的SSD网络是以VGG-16作Backbone(骨干网络)的。为了更加清晰看到相比于VGG16,SSD的网络使用了哪些变化,带有特征图维度信息的更清晰的骨干网络和VGG16的对比图如下: 源码解析OK,现在我们就要开始从源码剖析SSD了 。主要弄清楚三个方面,网络结构的搭建,Anchor还有损失函数,就算是理解这个源码了。 网络搭建从上面的图中我们可以清晰的看到在以VGG16做骨干网络时,在conv5后丢弃了VGG16中的全连接层改为了1024 x 3 x 3和1024 x 1 x 1 的卷积层。其中conv4-1卷积层前面的maxpooling层的ceil_model=True,使得输出特征图长宽为38 x 38。还有conv5-3后面的一层max ...
Feature Pyramid Network
前言FPN全称是Feature Pyramid Network, 也就是特征金字塔网络,主要是针对图像中目标的多尺度的这个特点提出的,多尺度在目标检测中非常常见,而且对应不同的问题应该设计不同的FPN。FPN是Facebook于2017年提出的用于目标检测的模块化结构,但FPN在很多计算机视觉任务中都有使用,比如姿态估计、语义分割等领域。 FPN 在深度学习兴起以前,很多传统方法都会使用到图像金字塔。图像金字塔如上图所示,就是将图片resize到不同的大小,然后分别得到对应大小的特征,然后进行预测。这种方法虽然可以一定程度上解决多尺度的问题,但是很明显,带来的计算量也非常大。 上图是使用单个feature map进行检测,这种结构在17年的时候是很多人在使用的结构,比如YOLOv1、YOLOv2、Faster R-CNN中使用的就是这种架构。直接使用这种架构导致预测层的特征尺度比较单一,对小目标检测效果比较差。ps: YOLOv2中使用了multi-scale training的方式一定程度上缓解了尺度单一的问题,能够让模型适应更多输入尺度。 上图进行了在不同大小的featu ...
自适应空间特征融合 (ASFF)
前言这是2019年的一篇论文 《Learning Spatial Fusion for Single-Shot Object Detection》,这篇论文主要是因为其提出的 自适应空间特征融合 (ASFF)被大家所熟知。金字塔特征表示法(FPN)是解决目标检测尺度变化挑战的常用方法。但是,对于基于FPN的单级检测器来说,不同特征尺度之间的不一致是其主要限制。因此这篇论文提出了一种新的数据驱动的金字塔特征融合方式,称之为自适应空间特征融合(ASFF)。它学习了在空间上过滤冲突信息以抑制梯度反传的时候不一致的方法,从而改善了特征的比例不变性,并且推理开销降低。借助ASFF策略和可靠的YOLOV3 BaseLine,在COCO数据集上实现了45FPS/42.4%AP以及29FPS/43.9%AP。下面先放一张论文的结果图。 一个更强的YOLOV3基准这篇文章之所以取得这么好的效果不仅仅是因为它提出的ASFF这种特征自适应融合方式,论文在YOLOV3的基础上集百家之长,构建了一个非常强的YOLOV3 BaseLine,这个BaseLine在MSCOCO上的mAP就达到了38.8%。相比 ...
SSD算法的改进版Rainbow SSD
前言这是BMVC 2017的一个SSD的改进算法R-SSD。这里先看一下SSD的网络结构图吧。 带有特征图维度信息的更清晰的骨干网络和VGG16的对比图如下: 出发点一般来说,深度神经网络的特征图数量越多,我们获得的性能一般会更好。但是这并不一定代表着简单的增加特征图的数量就能使得效果变好,这一点在实验部分有说明。这篇论文在SSD的基础上并没有改变BackBone网络,即还是应用稍加修改的VGG16为BackBone。这篇论文的贡献是提出了新的特征融合方式来提升了SSD的效果,这一改进使得SSD可以充分利用特征,虽然速度稍慢于原始的SSD算法,但mAP却获得了较大的提升。 介绍传统的SSD算法通过不同层的特征来做检测,使得其对尺度变化有较好的鲁棒性,在速度和精度的Trade-Off上也做得比较好,但是SSD有2个明显的问题: 在SSD中,不同层的特征图都是独立作为分类网络的输入,因此容易出现相同物体被不同大小的框同时检测出来的情况。 对小目标的检测效果比较差,当然这也是大多数目标检测算法的通病了。 因此,这篇算法也主要从这两点出发来改进传统的SSD算法。首先,本文利用分类网络增 ...