ECCV 2018 RFBNet,在检测中调感受野
前言看了不少的目标检测论文了,个人认为多数论文的出发点就两个,一是感受野,二是特征融合。此外,解决数据不平衡和轻量化也是另外两个重要的方向。今天为大家科普一篇ECCV 2018的一篇目标检测网络RFBNet就是从感受野角度来改善了SSD检测器,论文全名为:Receptive Field Block Net for Accurate and Fast Object Detection 。这篇论文主要的贡献点主要是在SSD网络中提出了一个Receptive Field Block (RFB) 模块,RFB模块主要是在Inception的基础上加入了空洞卷积层从而有效的增大了感受野。另外,RFB模块是嵌在SSD上的,所以检测的速度比较快,精度比SSD更高。 RFB模块RFB模块的效果示意图如图所示,其中虚线部分就是指RFB模块。 RFB模块主要有两个特点: RFB模块有多个分支,每个分支的第一层都由特定大小卷积核的卷积核构成,例如图上的1 x 1, 3 x 3,5 x 5。 RFB模块引入了空洞卷积,主要作用是为了增加感受野,空洞卷积之前是应用在分割网络DeepLab中,这里将其应用 ...
RetinaNet(引入Focal Loss)
前言今天来介绍一下目标检测算法中RetinaNet,这篇论文是CVPR2018的作品,Kaiming He大神也是作者之一,同时这篇论文提出的Focal Loss也对工程上训练更好的目标检测模型做出了很大贡献,论文地址为:https://arxiv.org/pdf/1708.02002.pdf 研究背景前面介绍了一些One-Stage目标检测算法和Two-Stage目标检测算法,这些算法在精度和速度上都各有特点,现在画个图总结一下之前介绍的各种算法的速度和精度: 可以看到One-Stage算法的精度相对于Two_Stage偏低,然后作者把这种问题的原因归结于正负类别不平衡(简单难分类别不平衡)。因此论文通过重新设计标准的交叉熵损失来解决这种难易样本不平衡的问题,即文章的核心Focal Loss。结合了Focal Loss的One-Stage的目标检测器被称为RetinaNet,该检测器在COCO数据集上MAP值可以和FPN(特征金字塔目标检测器)和MaskRCNN接近。 一些问题什么是hard/esay postive/negtive example网上找到一张图解释在目标检测任 ...
Ubuntu下screen的使用
背景系统管理员经常需要SSH或者telent远程登录到linux服务器,经常运行一些需要很长时间才能完成的任务,比如系统备份、ftp 传输等等。通常情况下我们都是为每一个这样的任务开一个远程终端窗口,因为它们执行的时间太长了。必须等待它们执行完毕,在此期间不能关掉窗口或者断开连接,否则这个任务就会被杀掉,一切半途而废了。 简介GNU Screen是一款由GNU计划开发的用于命令行终端切换的自由软件。用户可以通过该软件同时连接多个本地或远程的命令行会话,并在其间自由切换。 GNU Screen可以看作是窗口管理器的命令行界面版本。它提供了统一的管理多个会话的界面和相应的功能。 我们可以使用screen命令,来让保证退出ssh之后程序继续在后台跑。 安装首先可以先查看是否安装screen,通过命令1screen -ls若出现 12The program 'screen' is currently not installed. You can install it by typing:sudo apt install screen 说明尚未安装,按照提示,通过命令,安装s ...
卷积神经网络参数设置,提高泛化能力
卷积神经网络的参数设置这个举个例子来说是最好的,因为直接说会抽象一些,在网上找了一个caffe-ssd的参数设置配置文件solver.prototxt,内容如下: 1234567891011121314151617181920212223242526train_net:"train.prototxt"test_net:"test.prototxt"test_iter: 299test_interval: 200base_lr: 0.01display: 20max_iter: 6720lr_policy: "step"gamma: 0.1power: 0.75momentum: 0.9weight_decay: 0.0001snapshot: 224snapshot_prefix: "snapshot"solver_mode: GPUdevice_id:0debug_info:falsesnapshot_after_train:truetest_initialization:falseaverage_los ...
NIPS 2016 R-FCN(来自微软何凯明团队)
前言R-FCN全称为Region-based Fully Convolutional Networks,是由微软的何凯明团队在NIPS 2016上提出来的,仍然是双阶段的目标检检测算法。论文地址和官方开源代码见文后。 背景R-FCN论文的发表时间比YOLO,SSD出来的都晚一些,并且这个算法更像是针对Faster-RCNN的一种改进,并且扔属于two-stage算法。那个R-FCN具体要解决什么问题呢?我们不妨先来看看R-FCN之前的典型的two-stage算法分别是在解决什么? rcnn证明cnn具有良好的特征提取能力,也是第一个将cnn用来做目标检测任务的算法。 fast-rcnn提出ROI-Pooling将需要应用到多个候选框的骨干CNN网络进行共享,加快速度的同时也提升了准确率。 faster-rcnn解决了候选框搜索耗时过多的问题,提出RPN全卷积网络用于学习提取候选框,速度更快且精度更高。 而Faster-RCNN的一个缺点在于在ROI Pooling之后全是全连接层,从而将ROI Pooling之后的特征图映射为分类和回归两个任务。而越来越多的基础CNN架构如Goo ...
如何减少卷积层计算量,使用宽卷积的好处及转置卷积中的棋盘效应
如何减少卷积层计算量?减少卷积层的计算量主要有以下几种方法: 使用池化操作。在卷积层前使用池化操作降低特征图分辨率。 使用堆叠的小卷积核代替大卷积核。VGG16中使用2个3 x 3卷积代替一个5 x 5卷积。 使用深度可分离卷积。将原始的$K \times K \times C$的卷积核分成$K \times K \times 1$和$1 \times 1 \times C$两部分操作。 应用1 x 1卷积。将1 x 1卷积(假设通道数为$C_2$)直接应用在某个卷积层(假设维度为$K \times K \times C_{1}$)之前 使用宽卷积的好处?所谓宽卷积就是指在卷积操作时填充方式为same方式。而与之对应的窄卷积就是指在卷积操作时填充方式为valid方式。same方式的填充通常使用0填充的方式对卷积核不满足整除条件的输入特征图进行补全,使得卷积层的输出维度和输入维度一致。valid方式的填充就是不进行任何填充,在输入特征边缘位置若不足以进行卷积操作,则对边缘信息进行舍弃,因此在步长为1的情况下该填充方式的卷积层输出特征维度可能会略小于输入特征的维度。我们可以发现宽 ...
卷积层有哪些参数及常用卷积核类型盘点
卷积核的基本参数卷积神经网络的核心操作就是卷积层,这里以caffe框架为例子来介绍一下卷积核都有哪些基本的参数。下面先上一段代码,是caffe的卷积层的配置文件: 1234567891011121314151617181920212223layer { name: "conv1" type: "Convolution" bottom: "data" top: "conv1" param { lr_mult: 1 } param { lr_mult: 2 } convolution_param { num_output: 20 kernel_size: 5 stride: 1 weight_filler { type: "xavier" } bias_filler { type: "constant&quo ...
深度学习中的batch大小对学习效果的影响
谈谈深度学习中的Batch_SizeBatch_Size(批尺寸)是机器学习中一个重要参数,涉及诸多矛盾,下面逐一展开。 首先,为什么需要有 Batch_Size 这个参数?Batch 的选择,首先决定的是下降的方向。如果数据集比较小,完全可以采用全数据集 ( Full Batch Learning )的形式,这样做至少有 2 个好处:其一,由全数据集确定的方向能够更好地代表样本总体,从而更准确地朝向极值所在的方向。其二,由于不同权重的梯度值差别巨大,因此选取一个全局的学习率很困难。 Full Batch Learning 可以使用 Rprop 只基于梯度符号并且针对性单独更新各权值。 对于更大的数据集,以上 2 个好处又变成了 2 个坏处:其一,随着数据集的海量增长和内存限制,一次性载入所有的数据进来变得越来越不可行。其二,以 Rprop 的方式迭代,会由于各个 Batch 之间的采样差异性,各次梯度修正值相互抵消,无法修正。这才有了后来 RMSProp 的妥协方案。 既然 Full Batch Learning 并不适用大数据集,那么走向另一个极端怎么样?所谓另一个极端,就是每次只 ...
盘点不同类型的池化层、1x1卷积的作用和卷积核是否一定越大越好?
池化层的不同类型池化通常也被称为下采样(Downsampling),一般是用在卷积层之后,通过池化来降低卷积层输出特征图的维度,有效减少网络参数的同时还可以防止过拟合现象。池化层实际上真正起作用的地方在于他的非线性映射能力和可以保持一定量的平移不变性的能力。这个能力是因为在一个图像区域有用的特征很有可能在另一个区域同样有用。因此,为了描述一个大分辨率的图像特征,一个直观的方法就是对大分辨率图像中的不同位置的特征进行聚合统计。具体来说,常见池化的方法有以下几种: 标准池化 重叠池化 空间金字塔池化 接下来我们就仔细介绍一下每种池化。 标准池化通常包括最大池化(MaxPooling)和平均池化(AveragePooling)。以最大池化为例,池化核尺寸为2 x 2,池化步长为2,可以看到特征图中的每一个像素点只会参与一次特征提取工作。这个过程可以用下图表示: 重叠池化操作和标准池化相同,但唯一不同地方在于滑动步长stride小于池化核的尺寸k,可以想象到这样的话特征图中的某些区域会参与到多次特征提取工作,最后得到的特征表达能力更强。这个过程可以表示为下图: 空间金字塔池化这种池化是 ...
NMS后处理相关
介绍非极大值抑制(Non-Maximum Suppression,NMS),顾名思义就是抑制不是极大值的元素。在目标检测任务,例如行人检测中,滑动窗口经过特征提取和分类器识别后,每个窗口都会得到一个分数。但滑动窗口会导致很多窗口和其它窗口存在包含大部分交叉的情况。这个时候就需要用到NMS来选取那些邻域里分数最高,同时抑制那些分数低的窗口。 原理在目标检测任务中,定义最后的候选框集合为$B$,每个候选框对应的置信度是$S$,IOU阈值设为$T$,然后NMS的算法过程可以表示如下: 选择具有最大score的候选框$M$ 将$M$从集合$B$中移除并加入到最终的检测结果$D$中 将$B$中剩余检测框中和$M$的交并比(IOU)大于阈值$T$的框从$B$中移除 重复上面的步骤,直到$B$为空 代码实现rgb大神实现Faster-RCNN中的单类别物体nms代码解释如下: 1234567891011121314151617181920212223242526272829303132333435363738394041424344 -------------------------- ...