SSD的改进版之DSSD
前言DSSD全称为Deconvolutional Single Shot Detector,即在SSD算法的前面加了一个反卷积单词,这是CVPR 2017的一篇文章,主要是对SSD进行了一个改进。 DSSD算法的贡献这篇论文的主要贡献是在常用的目标检测算法中加入了上下文信息。换句话说,常规的目标检测算法一般都是在一个(YOLO,Faster-RCNN)或者多个特征图上进行检测(SSD),但是各个特征层之间的信息并没有有效的结合以及利用,DSSD的贡献正是解决了这一点。 出发点我们知道SSD最明显的缺点就是对小目标不够鲁棒,原因是什么呢?我们知道SSD为了解决小目标检测的思路是在尽量多的特征层上进行检测,来更好的匹配小目标,因为分辨率越大的特征图小目标的空间信息就保留得越多。但是,这样做有个问题,那就是浅层提取的特征图表达能力不够强,也即是说浅层特征图中每个格子也可以判断这个格子中包含的是哪一个类,但是不够那么确定。具体来说有可能出现 框对了,但是分类出错或者置信度不够好或者将背景误认为目标等等,也就是说SSD同样还是存在误检和漏检的情况。这种情况对于小目标场景出现的概率更大,因此SSD ...
ICCV 2019 TridentNet(三叉戟网络,刷新COCO纪录,已开源)
前言这是一篇图森科技在ICCV 2019的目标检测论文《Scale-Aware Trident Networks for Object Detection》,简称TridentNet,中文翻译为三叉戟网络。 背景我们知道在目标检测任务中,尺度变化一直是很关键的问题。针对尺度变化问题,也有很多的方案被提出,如Figure 1所示: 其中 (a)图表示多尺度图像金字塔网络,直接对图像进行不同尺度的缩放。 (b)是FPN网络,借鉴了金字塔结构将分辨率信息和语义信息相结合,克服不同层,不同尺度带来的问题。 这两种方法的目的都是让模型对尺寸不同的目标具有不同的感受野。除此之外还有SNIP,SNIP主要包含了两个改进点: 1、为了减少domain-shift,在梯度回传的时候只将和预训练模型所基于的训练数据尺寸相应的ROI的梯度进行回传。 2、借鉴了多尺度训练思想,引入图像金字塔来处理数据集中不同尺寸的数据。虽然图像金字塔的效率比较低,但通过对原图不同比例的缩放,充分利用了模型的表征能力。相比之下,FPN产生多层次的特征,但也牺牲了不同尺度下的特征一致性。 总结一下就是,图像金字塔虽然慢但是精度 ...
CNN结构无痛涨点技巧:ACNet
前言CNN的结构创新在这两年已经变得相对很少了,同时要做出有影响力并且Solid的工作也变得越来越难,最近CNN结构方面的创新主要包含两个方面: 网络结构搜索,以Google Brain的EfficientNet为代表作。 获取更好的特征表达,主要是将特征复用,特征细化做得更加极致,以HRNet,Res2Net等为代表作。 本文要介绍的是ICCV 2019的一个新CNN架构ACNet(全称为Asymmetric Convolution Net),因此这篇文章的目的是讲清楚ACNet的原理并总结它的核心思想,另外借助作者开源的Pytorch代码端来加深理解。 介绍ACNet的切入点为获取更好的特征表达,但和其它方法最大的区别在于它没有带来额外的超参数,而且在推理阶段没有增加计算量,这是十分具有吸引力的。 在正式介绍ACNet之前,首先来明确一下关于卷积计算的一个等式,这个等式表达的意思就是「对于输入特征图$I$,先进行$K^{(1)}$和$I$卷积,$K^{(2)}$和$I$卷积后再对结果进行相加,与先进行$K^{(1)}$和$K^{(2)}$的逐点相加后再和$I$进行卷积得到的结 ...
AlexeyAB DarkNet Dropout层代码详解
前言本次解析src/dropout.h和src/dropout.c两个文件,也即是Dropout层。 Dropout在CNN中使用Dropout分成训练和测试两个阶段,在训练阶段,Dropout以一定的概率$p$随机丢弃一部分神经元节点,即这部分神经元节点不参与计算,如下图所示。 在训练时,每个神经元有概率$p$的可能性被保留下来,即Dropout的丢弃概率为$1-p$。在测试阶段,每个神经元都是存在的,权重参数$w$要乘以$p$成为$pw$。为什么测试阶段要乘以$p$呢? 考虑第一个隐藏层的一个神经元在Dropout之前的输出是$x$,那么Dropout之后的期望值为$E=px+(1-p)0$,在测试时该神经元总是激活的,为了保持同样的输出期望值并使得下一层也得到同样的结果,需要调整$x->px$。其中$p$是Bernoulli分布(0-1分布)中值为1的概率。示意图如下: Inverted Dropout在训练的时候由于舍弃一些神经元,因此在测试的时候需要在激活的结果中乘上因子$p$进行缩放,但是这样需要对测试的代码进行修改并增加了测试时的运算量,十分影响测试时的性能。通 ...
CVPR 2017 ResNeXt(ResNet进化版)
前言传统的卷积神经网络在提高性能时都是加深和加宽网络,但随着超参数数量的增加(如通道数,卷积核大小等)网络变得非常难调,且网络的计算开销和网络结构设计也变得越来越难。此外这些大模型针对性比较强,即在特定数据集上表现好的网络放到新数据集上就需要修改很多的参数才能工作良好,因此可扩展性比较一般。针对上述问题,Saining Xie, Ross Girshick, Kaiming He在CVPR2017上提出了ResNeXt。 贡献 网络结构更加简单和模块化。 大量减少了需要手动调节的超参数,扩展性更强。 和ResNet相比,相同的参数个数,结果更好。具体来说,一个101层的ResNeXt网络和200层的ResNet准确度差不多,但是计算量只有后者的一半。 方法网络结构ResNeXt的网络结构如Table1所示: Table 1的左边网络为ResNet-50,Table 1的右边网络为ResNeXt-50,括号代表残差块,括号外面的数字代表残差块的堆叠次数,而C代表的ResNeXt引入的卷积分组数,同时可以看到这两个网络的FLOPs基本一致,也即是说模型复杂度一致。那ResNeXt有什么 ...
不需要预训练模型的目标检测算法DSOD
前言DSOD(Deeply Supervised Object Detectors)是ICCV 2017的一篇文章,它表达了一个非常有意思的东西。这篇论文不是从目标检测的高mAP值或者速度更快出发,而是从另外一个角度切入来说明fine-tune后的检测模型和直接训练的检测模型的差距其实是可以减少的,也即是说一些检测模型可以摆脱fine-tune这一过程,并且相比于fine-tune训练出来的模型效果并不会变差。 介绍DSOD这一算法是在SSD的基础上进行的改进,可以简单的看成: DSOD=SSD+DenseNet 作者在论文中提到他也实验了从0开始训练Region Proposal Based的检测算法比如Faster RCNN,R-FCN等,但这些模型很难收敛。而One-Stage的目标检测算法比如SSD却可以收敛,虽然效果很一般,因此最后作者使用SSD作为了这篇论文接下来讨论的BaseLine。 然后本文基于SSD改进的DSOD在VOC2007 trainval和2012 trainval数据集上训练模型,然后在VOC2007 testset上测试的表现(77.7%mAP)超过 ...
图像分类算法优化技巧
前言这篇论文的全名是:Bag of Tricks for Image Classification with Convolutional Neural Networks。这篇论文是亚马逊团队对CNN网络调优的经验总结,实验基本是在分类网络实验上做的。目前,论文的复现结果都可以在GluonCV找到,地址为:https://github.com/dmlc/gluon-cv。 成果下面的Table1展示了本文的一系列Tricks被用在ResNet50网络做分类任务上获得的结果。 可以看到使用本文的技巧,Top1准确率从75.3%提升到了79.29%。所以这一系列技巧还是非常给力的,接下来我们就一起来探索探索。 BaseLine既然涉及到调参,那么第一步就得有一个BaseLine的结果作为参考,这一BaseLine并非直接截取之前对应的论文的结果,而是作者基于GluonCV复现的。关于复现的细节作者在论文2.1节中说的很清楚,包括数据预处理的方式和顺序,网络层的初始化方法,迭代次数,学习率变化策略等等。 下面的Table2展示了作者复现的ResNet-50,Inception-V3,Mobi ...
目标检测算法优化技巧
简介目标检测模型相比于分类模型的研究相比,更缺少普遍性,并且网络结构和优化目标更加复杂。 本文主要是基于Faster R-CNN和YOLOv3来探索目标检测网络的调整策略。这些策略不会改变模型的结构,也不会引入额外的计算代价。通过使用这些trick,可以比SOTA提高最多5个百分点。 19年由亚马逊团队发表的《Bag of Freebies for Training Object Detection Neural Networks》。在使用了trick后,Faster R-CNN能提高1-2个百分点,而YOLOv3则提高了5个百分点。 Trickmixupmixup也是图片分类中的一个非常有效的trick, 具体流程如下图所示: 简单来讲就是将两张图片通过不同的比例进行融合,同时图片对应的one-hot编码也以相同的比例相乘,从而构造出新的数据集。本质上,mixup在成对样本及其标签的凸组合(convex combinations)上训练神经网络,可以规范神经网络,增强训练样本之间的线性表达。其优点是: 改善了网络模型的泛化能力 减少对错误标签的记忆 增加对抗样本的鲁棒性 稳定 ...
CVPR 2018 Cascade R-CNN
前言Cascade R-CNN这个算法是CVPR 2018提出的,通过级联多个检测网络达到不断优化预测结果的目的。但是和普通的级联检测器不同,Cascade R-CNN的多个检测网络是基于不同的IOU阈值进而确定不同的正负样本训练出来的,在COCO数据集上Cascade R-CNN取得了非常出色的结果,并且也成为了当前目标检测比赛中的有力Trick。 简单回顾R-CNN结构 首先,以经典的Faster R-CNN为例。整个网络可以分为两个阶段,training阶段和inference阶段,如上图所示。 training阶段,RPN网络提出了2000左右的proposals,这些proposals被送入到Fast R-CNN结构中,在Fast R-CNN结构中,首先计算每个proposal和gt之间的iou,通过人为的设定一个IoU阈值(通常为0.5),把这些Proposals分为正样本(前景)和负样本(背景),并对这些正负样本采样,使得他们之间的比例尽量满足(1:3,二者总数量通常为128),之后这些proposals(128个)被送入到Roi Pooling,最后进行类别分类和 ...
windows和ubuntu双系统修改默认启动项
问题描述安装完ubuntu系统后,打开电脑到选择系统的界面我们发现默认的是ubuntu系统,如果你是经常要进入windows系统的,你手动选择第三个windows启动项就行,但是,假设你按了电源键之后就去搞其他事情了,那默认就进入ubuntu系统了,这个时候你还要再关机重开或者重启,非常麻烦;或者你跟我一样是个强迫症,不管怎么样都要让它默认windows系统,下面就教你怎么做。 更改/etc/default/grub文件:打开终端,输入:1sudo gedit /etc/default/grub回车,即可打开文件,如图,鼠标所示位置即为默认优先启动项的序号,ubuntu为0,windows为2,默认是0,改为2即可设置优先启动项为windows(如果在修改文件内容的时候因为是只读文件需要权限才能修改,终端输入:sudo chmod +x /etc/default/grub回车即可) 以上,更改默认启动项的目标完成,下面再拓展一点东西: 如图光标处为启动界面等待选择的时间,默认为10,可改小一点,比如8,单位是秒 修改好之后点保存,命令行输入:1sudo update-grub回车, ...