ybxiong168
一、图片输入层面 基于以上结论,采用多尺度训练过程中,要在避免那些极小的和极大的(多尺度后)带来的不好的影响时,考虑保证目标有足够的多样性。所以在进行多尺度训练过程中,将每种输入尺度下,不满足要求的proposal以及anchor忽略。论文中使用了三种尺度如图所示,比一般的多尺度训练的尺度跨度要大。 二、 Neck部分(采用金字塔结构改进方案的) 一般意义的FPN网络结构是最右边似的结构,而本文中采用的结构则是 该方法首先无疑是增加了计算量,优点就是最终输出的每一层的特征不是一个线性的变换(应该想表述的说不是从一层特征直接到另一层特征),而是使用共享的多层特征。最终相比RetinaNet提升一个点左右吧,效果一般。VisDrone2020检测的冠军团队采用了这个结构 该文章利用多个TUM模块试图更充分构建的特征金字塔的网络结构,靠前的TUM提供浅层特征,中间的TUM提供中间层特征,靠后的TUM提供深层特征,通过这种方式能够多次将深层浅层特征融合,参数量多了。和RetinaNet对比可以看到,512输入,都不采用multi-scale推理,mAP由33提升到,小目标精度也提升了一点;以参数量和计算量堆砌的精度提升,不是好方法。 文章认为不同层的重要程度应该和目标的绝对尺度分布有关系,所以在FPN自上而下融合的时候,加入了一个尺度因子用来平衡金字塔不同层的重要性。个人感觉意义不大,实际提升也不明显。 三、 Head部分的改进方案 在VisDrones上的冠军方案和若干其他方案都采用了这种“双头部”的方案。soft-NMS似乎可以提升几个点。 四、 小目标目前检测不好,主要原因不是小,应该是小且和背景接近,对比度不高。所以可以借鉴伪装物体检测的思路;
空气精灵
一个经典例子是存在一个测试集合,测试集合只有大雁和飞机两种图片组成,假设你的分类系统最终的目的是:能取出测试集中所有飞机的图片,而不是大雁的图片。然后就可以定义: 要得到Precision-Recall曲线(以下简称PR)曲线,首先要对检测模型的预测结果按照目标置信度降序排列。然后给定一个rank值,Recall和Precision仅在置信度高于该rank值的预测结果中计算,改变rank值会相应的改变Recall值和Precision值。这里选择了11个不同的rank值,也就得到了11组Precision和Recall值,然后AP值即定义为在这11个Recall下Precision值的平均值,其可以表征整个PR曲线下方的面积。即: 还有另外一种插值的计算方法,即对于某个Recall值r,Precision取所有Recall值大于r中的最大值,这样保证了PR曲线是单调递减的,避免曲线出现摇摆。另外需要注意的一点是在2010年后计算AP值时是取了所有的数据点,而不仅仅只是11个Recall值。我们在计算出AP之后,对所有类别求平均之后就是mAP值了,也是当前目标检测用的最多的评判标准。
头头的奋斗
论文原文:
YOLO(you only look once)是继RCNN、faster-RCNN之后,又一里程碑式的目标检测算法。yolo在保持不错的准确度的情况下,解决了当时基于深度学习的检测中的痛点---速度问题。下图是各目标检测系统的检测性能对比:
如果说faster-RCNN是真正实现了完全基于深度学习的端到端的检测,那么yolo则是更进一步,将 目标区域预测 与 目标类别判断 整合到单个神经网络模型中。各检测算法结构见下图:
每个网格要预测B个bounding box,每个bounding box除了要回归自身的位置之外,还要附带预测一个confidence值。这个confidence代表了所预测的box中含有object的置信度和这个box预测的有多准两重信息,其值是这样计算的:
其中如果有object落在一个grid cell里,第一项取1,否则取0。第二项是预测的bounding box和实际的groundtruth之间的IoU值。
每个bounding box要预测(x, y, w, h)和confidence共5个值,每个网格还要预测一个类别信息,记为C类。即SxS个网格,每个网格除了要预测B个bounding box外,还要预测C个categories。输出就是S x S x (5*B+C)的一个tensor。(注意:class信息是针对每个网格的,即一个网格只预测一组类别而不管里面有多少个bounding box,而confidence信息是针对每个bounding box的。)
举例说明: 在PASCAL VOC中,图像输入为448x448,取S=7,B=2,一共有20个类别(C=20)。则输出就是7x7x30的一个tensor。整个网络结构如下图所示:
在test的时候,每个网格预测的class信息和bounding box预测的confidence信息相乘,就得到每个bounding box的class-specific confidence score:
等式左边第一项就是每个网格预测的类别信息,第二三项就是每个bounding box预测的confidence。这个乘积即encode了预测的box属于某一类的概率,也有该box准确度的信息。
得到每个box的class-specific confidence score以后,设置阈值,滤掉得分低的boxes,对保留的boxes进行NMS(非极大值抑制non-maximum suppresssion)处理,就得到最终的检测结果。
1、每个grid因为预测两个bounding box有30维(30=2*5+20),这30维中,8维是回归box的坐标,2维是box的confidence,还有20维是类别。其中坐标的x,y用bounding box相对grid的offset归一化到0-1之间,w,h除以图像的width和height也归一化到0-1之间。
2、对不同大小的box预测中,相比于大box预测偏一点,小box预测偏一点肯定更不能被忍受的。而sum-square error loss中对同样的偏移loss是一样。为了缓和这个问题,作者用了一个比较取巧的办法,就是将box的width和height取平方根代替原本的height和width。这个参考下面的图很容易理解,小box的横轴值较小,发生偏移时,反应到y轴上相比大box要大。其实就是让算法对小box预测的偏移更加敏感。
3、一个网格预测多个box,希望的是每个box predictor专门负责预测某个object。具体做法就是看当前预测的box与ground truth box中哪个IoU大,就负责哪个。这种做法称作box predictor的specialization。
4、损失函数公式见下图:
在实现中,最主要的就是怎么设计损失函数,坐标(x,y,w,h),confidence,classification 让这个三个方面得到很好的平衡。简单的全部采用sum-squared error loss来做这件事会有以下不足:
解决方法:
只有当某个网格中有object的时候才对classification error进行惩罚。只有当某个box predictor对某个ground truth box负责的时候,才会对box的coordinate error进行惩罚,而对哪个ground truth box负责就看其预测值和ground truth box的IoU是不是在那个cell的所有box中最大。
作者采用ImageNet 1000-class 数据集来预训练卷积层。预训练阶段,采用网络中的前20卷积层,外加average-pooling层和全连接层。模型训练了一周,获得了top-5 accuracy为(ImageNet2012 validation set),与GoogleNet模型准确率相当。
然后,将模型转换为检测模型。作者向预训练模型中加入了4个卷积层和两层全连接层,提高了模型输入分辨率(224×224->448×448)。顶层预测类别概率和bounding box协调值。bounding box的宽和高通过输入图像宽和高归一化到0-1区间。顶层采用linear activation,其它层使用 leaky rectified linear。
作者采用sum-squared error为目标函数来优化,增加bounding box loss权重,减少置信度权重,实验中,设定为\lambda _{coord} =5 and\lambda _{noobj}= 。
作者在PASCAL VOC2007和PASCAL VOC2012数据集上进行了训练和测试。训练135轮,batch size为64,动量为,学习速率延迟为。Learning schedule为:第一轮,学习速率从缓慢增加到(因为如果初始为高学习速率,会导致模型发散);保持速率到75轮;然后在后30轮中,下降到;最后30轮,学习速率为。
作者还采用了dropout和 data augmentation来预防过拟合。dropout值为;data augmentation包括:random scaling,translation,adjust exposure和saturation。
YOLO模型相对于之前的物体检测方法有多个优点:
1、 YOLO检测物体非常快
因为没有复杂的检测流程,只需要将图像输入到神经网络就可以得到检测结果,YOLO可以非常快的完成物体检测任务。标准版本的YOLO在Titan X 的 GPU 上能达到45 FPS。更快的Fast YOLO检测速度可以达到155 FPS。而且,YOLO的mAP是之前其他实时物体检测系统的两倍以上。
2、 YOLO可以很好的避免背景错误,产生false positives
不像其他物体检测系统使用了滑窗或region proposal,分类器只能得到图像的局部信息。YOLO在训练和测试时都能够看到一整张图像的信息,因此YOLO在检测物体时能很好的利用上下文信息,从而不容易在背景上预测出错误的物体信息。和Fast-R-CNN相比,YOLO的背景错误不到Fast-R-CNN的一半。
3、 YOLO可以学到物体的泛化特征
当YOLO在自然图像上做训练,在艺术作品上做测试时,YOLO表现的性能比DPM、R-CNN等之前的物体检测系统要好很多。因为YOLO可以学习到高度泛化的特征,从而迁移到其他领域。
尽管YOLO有这些优点,它也有一些缺点:
1、YOLO的物体检测精度低于其他state-of-the-art的物体检测系统。
2、YOLO容易产生物体的定位错误。
3、YOLO对小物体的检测效果不好(尤其是密集的小物体,因为一个栅格只能预测2个物体)。
人生是一条漫长的小径,目标像一只萤火虫照亮着我前进,尽管它离我很远很远,可是我依然能够看见它散发出来的光芒。因为,我坚信:每一个人都有自己的目标,包括一切生物。
一、图片输入层面
改参数名,改接口名,调换一些调换顺序无关的代码,多改一点应该可以逃过检测
根据GB3469-83《文献类型与文献载体代码》规定,以单字母标识: M——专著(含古籍中的史、志论著) J——期刊文章 C——论文集 文献标识码(Docume
文献标识码及参考文献类型标识码 文献标识码一般指文献标志码。 文献标志码(Document code)国家新闻出版署1992年发布并试行了《中国学术期刊(光盘版