fast算法
A. 目标检测算法(R-CNN,fast R-CNN,faster R-CNN,yolo,SSD,yoloV2,yoloV3)
深度学习目前已经应用到了各个领域,应用场景大体分为三类:物体识别,目标检测,自然语言处理。 目标检测可以理解为是物体识别和物体定位的综合 ,不仅仅要识别出物体属于哪个分类,更重要的是得到物体在图片中的具体位置。
2014年R-CNN算法被提出,基本奠定了two-stage方式在目标检测领域的应用。它的算法结构如下图
算法步骤如下:
R-CNN较传统的目标检测算法获得了50%的性能提升,在使用VGG-16模型作为物体识别模型情况下,在voc2007数据集上可以取得66%的准确率,已经算还不错的一个成绩了。其最大的问题是速度很慢,内存占用量很大,主要原因有两个
针对R-CNN的部分问题,2015年微软提出了Fast R-CNN算法,它主要优化了两个问题。
R-CNN和fast R-CNN均存在一个问题,那就是 由选择性搜索来生成候选框,这个算法很慢 。而且R-CNN中生成的2000个左右的候选框全部需要经过一次卷积神经网络,也就是需要经过2000次左右的CNN网络,这个是十分耗时的(fast R-CNN已经做了改进,只需要对整图经过一次CNN网络)。这也是导致这两个算法检测速度较慢的最主要原因。
faster R-CNN 针对这个问题, 提出了RPN网络来进行候选框的获取,从而摆脱了选择性搜索算法,也只需要一次卷积层操作,从而大大提高了识别速度 。这个算法十分复杂,我们会详细分析。它的基本结构如下图
主要分为四个步骤:
使用VGG-16卷积模型的网络结构:
卷积层采用的VGG-16模型,先将PxQ的原始图片,缩放裁剪为MxN的图片,然后经过13个conv-relu层,其中会穿插4个max-pooling层。所有的卷积的kernel都是3x3的,padding为1,stride为1。pooling层kernel为2x2, padding为0,stride为2。
MxN的图片,经过卷积层后,变为了(M/16) x (N/16)的feature map了。
faster R-CNN抛弃了R-CNN中的选择性搜索(selective search)方法,使用RPN层来生成候选框,能极大的提升候选框的生成速度。RPN层先经过3x3的卷积运算,然后分为两路。一路用来判断候选框是前景还是背景,它先reshape成一维向量,然后softmax来判断是前景还是背景,然后reshape恢复为二维feature map。另一路用来确定候选框的位置,通过bounding box regression实现,后面再详细讲。两路计算结束后,挑选出前景候选框(因为物体在前景中),并利用计算得到的候选框位置,得到我们感兴趣的特征子图proposal。
卷积层提取原始图像信息,得到了256个feature map,经过RPN层的3x3卷积后,仍然为256个feature map。但是每个点融合了周围3x3的空间信息。对每个feature map上的一个点,生成k个anchor(k默认为9)。anchor分为前景和背景两类(我们先不去管它具体是飞机还是汽车,只用区分它是前景还是背景即可)。anchor有[x,y,w,h]四个坐标偏移量,x,y表示中心点坐标,w和h表示宽度和高度。这样,对于feature map上的每个点,就得到了k个大小形状各不相同的选区region。
对于生成的anchors,我们首先要判断它是前景还是背景。由于感兴趣的物体位于前景中,故经过这一步之后,我们就可以舍弃背景anchors了。大部分的anchors都是属于背景,故这一步可以筛选掉很多无用的anchor,从而减少全连接层的计算量。
对于经过了3x3的卷积后得到的256个feature map,先经过1x1的卷积,变换为18个feature map。然后reshape为一维向量,经过softmax判断是前景还是背景。此处reshape的唯一作用就是让数据可以进行softmax计算。然后输出识别得到的前景anchors。
另一路用来确定候选框的位置,也就是anchors的[x,y,w,h]坐标值。如下图所示,红色代表我们当前的选区,绿色代表真实的选区。虽然我们当前的选取能够大概框选出飞机,但离绿色的真实位置和形状还是有很大差别,故需要对生成的anchors进行调整。这个过程我们称为bounding box regression。
假设红色框的坐标为[x,y,w,h], 绿色框,也就是目标框的坐标为[Gx, Gy,Gw,Gh], 我们要建立一个变换,使得[x,y,w,h]能够变为[Gx, Gy,Gw,Gh]。最简单的思路是,先做平移,使得中心点接近,然后进行缩放,使得w和h接近。如下:
我们要学习的就是dx dy dw dh这四个变换。由于是线性变换,我们可以用线性回归来建模。设定loss和优化方法后,就可以利用深度学习进行训练,并得到模型了。对于空间位置loss,我们一般采用均方差算法,而不是交叉熵(交叉熵使用在分类预测中)。优化方法可以采用自适应梯度下降算法Adam。
得到了前景anchors,并确定了他们的位置和形状后,我们就可以输出前景的特征子图proposal了。步骤如下:
1,得到前景anchors和他们的[x y w h]坐标。
2,按照anchors为前景的不同概率,从大到小排序,选取前pre_nms_topN个anchors,比如前6000个
3,剔除非常小的anchors。
4,通过NMS非极大值抑制,从anchors中找出置信度较高的。这个主要是为了解决选取交叠问题。首先计算每一个选区面积,然后根据他们在softmax中的score(也就是是否为前景的概率)进行排序,将score最大的选区放入队列中。接下来,计算其余选区与当前最大score选区的IOU(IOU为两box交集面积除以两box并集面积,它衡量了两个box之间重叠程度)。去除IOU大于设定阈值的选区。这样就解决了选区重叠问题。
5,选取前post_nms_topN个结果作为最终选区proposal进行输出,比如300个。
经过这一步之后,物体定位应该就基本结束了,剩下的就是物体识别了。
和fast R-CNN中类似,这一层主要解决之前得到的proposal大小形状各不相同,导致没法做全连接。全连接计算只能对确定的shape进行运算,故必须使proposal大小形状变为相同。通过裁剪和缩放的手段,可以解决这个问题,但会带来信息丢失和图片形变问题。我们使用ROI pooling可以有效的解决这个问题。
ROI pooling中,如果目标输出为MxN,则在水平和竖直方向上,将输入proposal划分为MxN份,每一份取最大值,从而得到MxN的输出特征图。
ROI Pooling层后的特征图,通过全连接层与softmax,就可以计算属于哪个具体类别,比如人,狗,飞机,并可以得到cls_prob概率向量。同时再次利用bounding box regression精细调整proposal位置,得到bbox_pred,用于回归更加精确的目标检测框。
这样就完成了faster R-CNN的整个过程了。算法还是相当复杂的,对于每个细节需要反复理解。faster R-CNN使用resNet101模型作为卷积层,在voc2012数据集上可以达到83.8%的准确率,超过yolo ssd和yoloV2。其最大的问题是速度偏慢,每秒只能处理5帧,达不到实时性要求。
针对于two-stage目标检测算法普遍存在的运算速度慢的缺点, yolo创造性的提出了one-stage。也就是将物体分类和物体定位在一个步骤中完成。 yolo直接在输出层回归bounding box的位置和bounding box所属类别,从而实现one-stage。通过这种方式, yolo可实现45帧每秒的运算速度,完全能满足实时性要求 (达到24帧每秒,人眼就认为是连续的)。它的网络结构如下图:
主要分为三个部分:卷积层,目标检测层,NMS筛选层。
采用Google inceptionV1网络,对应到上图中的第一个阶段,共20层。这一层主要是进行特征提取,从而提高模型泛化能力。但作者对inceptionV1进行了改造,他没有使用inception mole结构,而是用一个1x1的卷积,并联一个3x3的卷积来替代。(可以认为只使用了inception mole中的一个分支,应该是为了简化网络结构)
先经过4个卷积层和2个全连接层,最后生成7x7x30的输出。先经过4个卷积层的目的是为了提高模型泛化能力。yolo将一副448x448的原图分割成了7x7个网格,每个网格要预测两个bounding box的坐标(x,y,w,h)和box内包含物体的置信度confidence,以及物体属于20类别中每一类的概率(yolo的训练数据为voc2012,它是一个20分类的数据集)。所以一个网格对应的参数为(4x2+2+20) = 30。如下图
其中前一项表示有无人工标记的物体落入了网格内,如果有则为1,否则为0。第二项代表bounding box和真实标记的box之间的重合度。它等于两个box面积交集,除以面积并集。值越大则box越接近真实位置。
分类信息: yolo的目标训练集为voc2012,它是一个20分类的目标检测数据集 。常用目标检测数据集如下表:
| Name | # Images (trainval) | # Classes | Last updated |
| --------------- | ------------------- | --------- | ------------ |
| ImageNet | 450k | 200 | 2015 |
| COCO | 120K | 90 | 2014 |
| Pascal VOC | 12k | 20 | 2012 |
| Oxford-IIIT Pet | 7K | 37 | 2012 |
| KITTI Vision | 7K | 3 | |
每个网格还需要预测它属于20分类中每一个类别的概率。分类信息是针对每个网格的,而不是bounding box。故只需要20个,而不是40个。而confidence则是针对bounding box的,它只表示box内是否有物体,而不需要预测物体是20分类中的哪一个,故只需要2个参数。虽然分类信息和confidence都是概率,但表达含义完全不同。
筛选层是为了在多个结果中(多个bounding box)筛选出最合适的几个,这个方法和faster R-CNN 中基本相同。都是先过滤掉score低于阈值的box,对剩下的box进行NMS非极大值抑制,去除掉重叠度比较高的box(NMS具体算法可以回顾上面faster R-CNN小节)。这样就得到了最终的最合适的几个box和他们的类别。
yolo的损失函数包含三部分,位置误差,confidence误差,分类误差。具体公式如下:
误差均采用了均方差算法,其实我认为,位置误差应该采用均方差算法,而分类误差应该采用交叉熵。由于物体位置只有4个参数,而类别有20个参数,他们的累加和不同。如果赋予相同的权重,显然不合理。故yolo中位置误差权重为5,类别误差权重为1。由于我们不是特别关心不包含物体的bounding box,故赋予不包含物体的box的置信度confidence误差的权重为0.5,包含物体的权重则为1。
Faster R-CNN准确率mAP较高,漏检率recall较低,但速度较慢。而yolo则相反,速度快,但准确率和漏检率不尽人意。SSD综合了他们的优缺点,对输入300x300的图像,在voc2007数据集上test,能够达到58 帧每秒( Titan X 的 GPU ),72.1%的mAP。
SSD网络结构如下图:
和yolo一样,也分为三部分:卷积层,目标检测层和NMS筛选层
SSD论文采用了VGG16的基础网络,其实这也是几乎所有目标检测神经网络的惯用方法。先用一个CNN网络来提取特征,然后再进行后续的目标定位和目标分类识别。
这一层由5个卷积层和一个平均池化层组成。去掉了最后的全连接层。SSD认为目标检测中的物体,只与周围信息相关,它的感受野不是全局的,故没必要也不应该做全连接。SSD的特点如下。
每一个卷积层,都会输出不同大小感受野的feature map。在这些不同尺度的feature map上,进行目标位置和类别的训练和预测,从而达到 多尺度检测 的目的,可以克服yolo对于宽高比不常见的物体,识别准确率较低的问题。而yolo中,只在最后一个卷积层上做目标位置和类别的训练和预测。这是SSD相对于yolo能提高准确率的一个关键所在。
如上所示,在每个卷积层上都会进行目标检测和分类,最后由NMS进行筛选,输出最终的结果。多尺度feature map上做目标检测,就相当于多了很多宽高比例的bounding box,可以大大提高泛化能力。
和faster R-CNN相似,SSD也提出了anchor的概念。卷积输出的feature map,每个点对应为原图的一个区域的中心点。以这个点为中心,构造出6个宽高比例不同,大小不同的anchor(SSD中称为default box)。每个anchor对应4个位置参数(x,y,w,h)和21个类别概率(voc训练集为20分类问题,在加上anchor是否为背景,共21分类)。如下图所示:
另外,在训练阶段,SSD将正负样本比例定位1:3。训练集给定了输入图像以及每个物体的真实区域(ground true box),将default box和真实box最接近的选为正样本。然后在剩下的default box中选择任意一个与真实box IOU大于0.5的,作为正样本。而其他的则作为负样本。由于绝大部分的box为负样本,会导致正负失衡,故根据每个box类别概率排序,使正负比例保持在1:3。SSD认为这个策略提高了4%的准确率
另外,SSD采用了数据增强。生成与目标物体真实box间IOU为0.1 0.3 0.5 0.7 0.9的patch,随机选取这些patch参与训练,并对他们进行随机水平翻转等操作。SSD认为这个策略提高了8.8%的准确率。
和yolo的筛选层基本一致,同样先过滤掉类别概率低于阈值的default box,再采用NMS非极大值抑制,筛掉重叠度较高的。只不过SSD综合了各个不同feature map上的目标检测输出的default box。
SSD基本已经可以满足我们手机端上实时物体检测需求了,TensorFlow在Android上的目标检测官方模型ssd_mobilenet_v1_android_export.pb,就是通过SSD算法实现的。它的基础卷积网络采用的是mobileNet,适合在终端上部署和运行。
针对yolo准确率不高,容易漏检,对长宽比不常见物体效果差等问题,结合SSD的特点,提出了yoloV2。它主要还是采用了yolo的网络结构,在其基础上做了一些优化和改进,如下
网络采用DarkNet-19:19层,里面包含了大量3x3卷积,同时借鉴inceptionV1,加入1x1卷积核全局平均池化层。结构如下
yolo和yoloV2只能识别20类物体,为了优化这个问题,提出了yolo9000,可以识别9000类物体。它在yoloV2基础上,进行了imageNet和coco的联合训练。这种方式充分利用imageNet可以识别1000类物体和coco可以进行目标位置检测的优点。当使用imageNet训练时,只更新物体分类相关的参数。而使用coco时,则更新全部所有参数。
YOLOv3可以说出来直接吊打一切图像检测算法。比同期的DSSD(反卷积SSD), FPN(feature pyramid networks)准确率更高或相仿,速度是其1/3.。
YOLOv3的改动主要有如下几点:
不过如果要求更精准的预测边框,采用COCO AP做评估标准的话,YOLO3在精确率上的表现就弱了一些。如下图所示。
当前目标检测模型算法也是层出不穷。在two-stage领域, 2017年Facebook提出了mask R-CNN 。CMU也提出了A-Fast-RCNN 算法,将对抗学习引入到目标检测领域。Face++也提出了Light-Head R-CNN,主要探讨了 R-CNN 如何在物体检测中平衡精确度和速度。
one-stage领域也是百花齐放,2017年首尔大学提出 R-SSD 算法,主要解决小尺寸物体检测效果差的问题。清华大学提出了 RON 算法,结合 two stage 名的方法和 one stage 方法的优势,更加关注多尺度对象定位和负空间样本挖掘问题。
目标检测领域的深度学习算法,需要进行目标定位和物体识别,算法相对来说还是很复杂的。当前各种新算法也是层不出穷,但模型之间有很强的延续性,大部分模型算法都是借鉴了前人的思想,站在巨人的肩膀上。我们需要知道经典模型的特点,这些tricks是为了解决什么问题,以及为什么解决了这些问题。这样才能举一反三,万变不离其宗。综合下来,目标检测领域主要的难点如下:
一文读懂目标检测AI算法:R-CNN,faster R-CNN,yolo,SSD,yoloV2
从YOLOv1到v3的进化之路
SSD-Tensorflow超详细解析【一】:加载模型对图片进行测试 https://blog.csdn.net/k87974/article/details/80606407
YOLO https://pjreddie.com/darknet/yolo/ https://github.com/pjreddie/darknet
C#项目参考:https://github.com/AlturosDestinations/Alturos.Yolo
项目实践贴个图。
B. OpenCV-Python教程:38.FAST角点检测算法
理论
我们看到了一些特征检测算法,他们很多都不错,但是从实时应用的角度看,他们都不够快,一个最好的例子是SLAM(同步定位与地图创建)移动机器人没有足够的计算能力。
作为解决方案,FAST(加速切片测试特征)算法被提出,Edward Rosten和Tom Drummond 2006年在他们的论文“Machine learning for high-speed corner detection”提出,并在2010年最后修订,算法的基本大意如下:
使用FAST进行特征检测
1.选择一个图像里的像素p用来识别是不是一个兴趣点,它的强度是Ip
2.选择一个合适的阈值t
3.在要测试的像素周围找16个像素的圆
4.现在如果存在一个在圆内(16像素的)的n个连续像素集合,他们都比Ip + t要亮,或者都比Ip - t 要暗(用白虚线显示),那p就是角, n取12。
5.用一个高速测试来排除大量非角。这个测试只检查1,9,5和13位置的像素(首先1和9会测试是否他们太亮或者太暗,如果是,再检查5和13)。如果p是角,那么至少3个都比Ip+t要亮或者比Ip-t要暗,如果不是这样,那么p不可能是角。这个检测器展现了高性能,但是有几个缺陷:
·当n< 12时不能拒绝很多备选点
·像素的选择不是可选的,因为它的效率依赖问题和角的分布。
·高速测试的结果被丢弃了
·会检测出多个爱挨在一起的特征
机器学习角点检测
1.选择一组图像进行训练(最好从目标应用范围内)
2.运行FAST算法来对每个图像进行特征点查找
3.对每个特征点,存下周围的16个像素作为向量。所有图像做完以后得到特征向量P。
4.这16个像素里的每个像素(设为x)可以有下面的三个状态:
5.根据这些状态,特征向量P被分成3个子集,Pd, Ps, Pb.
6.定义个新的布尔变量Kp,如果p是角就是真反之为假。
7.使用ID3算法(决策树分类)来查询每个子集,对于每个true类用变量Kp,它选择x来得出一个备选像素是否是角的信息。
8.对所有子集迭代直到为0
9.创建的决策树用来对其他图形做fast检测
非极大值抑制
在临近位置检测多个兴趣点是另一个问题,可以使用非极大值抑制来解决。
1.计算一个分数函数,V是所有检测到的特征点,V是p和16个围着的像素值得绝对差。
2.计算两个相邻关键点的V值
3.丢掉V值低的那个
总结:
它比其他存在的角点算法要快几倍
但是它对高噪点情况来说不健壮,依赖阈值
OpenCV里的FAST特征检测
它和其他OpenCV里的特征检测类似,如果你愿意,你可以指定阈值,是否使用非极大值抑制,要用的邻居等。
对于邻居,定义了三个标志位, cv2.FAST_FEATURE_DETECTOR_TYPE_5_8, cv2.FAST_FEATURE_DETECTOR_TYPE_7_12和cv2.FAST_FEATURE_DETECTOR_TYPE_9_16.
看结果,第一个图像显示了使用了非极大值抑制的FAST,第二个是没有使用非极大值抑制的。
END
C. fast的副词有哪些
fast有形容词与副词来指运动的物体或运行的速度,quickly只能作为副词来强调立刻行动毫不迟疑毫不耽搁。
一、fast词汇分析
音标:英[fɑːst]美[fæst]
释义:
adj. 快速的,迅速的;紧的,稳袭仔固的
adv. 迅速地;紧紧地;彻底地
vi. 禁食,斋戒
n. 斋戒;绝食
短语
as fast as和…一样快
fast growth快速生长
fast response快速响应
fast algorithm快速算法
拓展双语例句
1、These apples are maturing fast.
这些苹果正在快速成熟。
2、They fast on certain days.
他们在某些天斋戒。
3、The fast bowlers were brought on again after the interval.
在休息后快速投球手再次被要求出场投球。
二、quickly词汇分析
音标:英['kwɪklɪ]美['kwɪkli]
释义:迅速地;很快地
短语
answer quickly抢答字母组
quickly erase快速抹除
sit quickly安静地坐
拓展双语例句
1、I have done the errands quickly.
我很快干完了这些差事。
2、The dough would sour quickly in such weather.
在这种天气生面团会很快发酵。
3、If we do the work turn and turn about, we can finish it quickly.
如果我亩滚们轮换着做这个工作,迅禅余我们能很快地把它完成。
D. Fast SLAM算法的核心思想是什么
FastSLAM算法的核心思想是:
SLAM(),也称为CML(),即时定位与地图构建,或并发建图与定位。
问题可以描述为:将一个机器人放入未知环境中的未知位置,是否有办法让机器人一边逐步描绘出此环境完全的地图,同时一边决定机器人应该往哪个方向行进。例如扫地机器人就是一个很典型的SLAM问题,所谓完全的地图(aconsistentmap)是指不受障碍行进到房间可进入的每个角落。SLAM最早由Smith、Self和Cheeseman于1988年提出。由于其重要的理论与应用价值,被很多学者认为是实现真正全自主移动机器人的关键。
E. fast和quick的区别是什么
1,词性上面的区别。态含
fast既是形容词,也是副词。quick是形容词,它的副词形式是quickly。
2,强调重点不同。
fast强调速度快,强调的是“速度”。
比如:一辆汽车行驶的非常快(It's a very fast car),一个人跑的非常快(He runs very fast)。在此时,我们需要用fast来形容。
3,发音不同。
quickly
音标:英['kwɪklɪ]美['kwɪkli]
fast
音标:英[fɑːst]美[fæst]
(5)fast算法扩展阅读:
fast,quick的其他释义,短语,例枝闭饥句:
fast的其他意思:
vi. 禁食,斋戒
n. 斋戒;绝食
短语:
as fast as和…一样快
fast growth快速生长
fast response快速响应
fast algorithm快速算法
例句:
1,These apples are maturing fast.
这些苹果正在快速成熟。
2,They fast on certain days.
他们在某些天斋戒。
3,The fast bowlers were brought on again after the interval.
在休息后快速投球手再次被要求出场投球。
quick的其他释义:无
短语:
answer quickly抢答字母组
quickly erase快速抹除
sit quickly安静地坐
例句:
1,I have done the errands quickly.
我很快干完了这些差事。
2,The dough would sour quickly in such weather.
在这种天气生面团会很快发酵。
3,If we do the work turn and turn about, we can finish it quickly.
如果我们轮换着做这个工作,我们能很快地把它完成。
F. fast-ed中e代表
在fast-ed中,困蚂者e代表的是汪薯“欧几里得距离物绝”(Euclidean Distance)或称为“L2范数”,它是常见的两个点之间距离的度量方式。
G. R-CNN, Fast R-CNN, Faster R-CNN, YOLO:目标检测算法总结
参饥晌巧考链接
以下是文中涉及的算法的谨旦最原始的文章:
一个最直接的解决办法是从图中取不同的感兴趣区域,然后对这些区域用CNN进行分类,检测这些区域中是否有物体的存在。
但是待检测物体可能存在于图片的不同位置而且有不同的长宽比例。所以以上方法需要选取量非常大的区域并需要非常大的计算量。
因此,R-CNN, Fast R-CNN, Faster R-CNN, YOLO被开发去又快又准地找物体。
为了解决上述提到的有大量区域被选择的问题, Ross Girshick et al 提出了一种方法:用了选择性搜索烂键从图片提取了2000个区域,这些区域被称为”region proposals“。
用这种办法,我们不需要去分类巨大数量的区域了,我们只需要去处理2000个区域。这2000个区域是用如下的选择性搜索算法(selective search algorithm)来找到的:
这篇文章 介绍了更多关于选择性搜索算法(selective search algorithm)的内容。
RCNN步骤:
R-CNN存在的问题:
Fast R-CNN的几个改进:
The same author of the previous paper(R-CNN) solved some of the drawbacks of R-CNN to build a faster object detection algorithm and it was called Fast R-CNN. The approach is similar to the R-CNN algorithm.
Fast R-CNN更快的原因是:
Fast R-CNN更快:
From the above graphs, you can infer that Fast R-CNN is significantly faster in training and testing sessions over R-CNN. When you look at the performance of Fast R-CNN ring testing time, including region proposals slows down the algorithm significantly when compared to not using region proposals. Therefore, region proposals become bottlenecks in Fast R-CNN algorithm affecting its performance.
上面两个算法的缺点:
selective search耗时
Both of the above algorithms(R-CNN & Fast R-CNN) uses selective search to find out the region proposals . Selective search is a slow and time-consuming process affecting the performance of the network.
Faster R-CNN的改进:
不用selective search去找region proposals;
用network去找region proposals;
Therefore, Shaoqing Ren et al . came up with an object detection algorithm that eliminates the selective search algorithm and lets the network learn the region proposals .
Faster R-CNN的步骤:
时间上的对比:
Faster R-CNN最快并且能用作实时目标检测
之前几种算法的缺点:
产生region的时候没有纵览整幅图。其实图的某些部分有更高的可能性包含物体。
All of the previous object detection algorithms use regions to localize the object within the image. The network does not look at the complete image. Instead, parts of the image which have high probabilities of containing the object .
YOLO的思想:
用一个单独的网络去预测bounding boxes和bounding boxes中存在物体的概率
YOLO or You Only Look Once is an object detection algorithm much different from the region based algorithms seen above.
In YOLO, a single convolutional network predicts (1) the bounding boxes and (2)the class probabilities for these boxes.
YOLO的具体步骤:
How YOLO works is that:
YOLO的优缺点:
H. 计算机视觉——典型的目标检测算法(Fast R-CNN算法)(五)
【嵌牛导读】目标检测在现实中的应用很广泛,我们需要检测数字图像中的物体位置以及类别,它需要我们构建一个模型,模型的输入一张图片,模型的输出需要圈出图片中所有物体的位置以及物体所属的类别。在深度学习浪潮到来之前,目标检测精度的进步十分缓慢,靠传统依靠手工特征的方法来提高精度已是相当困难的事。而ImageNet分类大赛出现的卷积神经网络(CNN)——AlexNet所展现的强大性能,吸引着学者们将CNN迁移到了其他的任务,这也包括着目标检测任务,近年来,出现了很多目标检测算法。
【嵌牛鼻子】计算机视觉
【嵌牛提问】如何理解目标检测算法——Fast R-CNN
【嵌牛正文】
为克服SPP-Net 存衡基在的问题,2015 年Girshick 等提出基于边界框和多任务损失分类的Fast R-CNN[31]算法。该算法将SPP 层简化,设计出单尺度的ROI Pooling 池化层结构;将整张图像的候选区域采样成固定大小,生成特征图后作SVD分解,通过RoI Pooling层得到Softmax的分类得分和BoundingBox 外接矩形框的窗口回归两个向量;用Softmax 代替SVM 提出多任务损失函数思想,将深度网络和SVM分类两个阶段整合,即将分类问题和边框回归问题进行合并。
算法详解:
Fast R-CNN的流程图如下,网络有两个输入: 图像和对应的region proposal 。其中region proposal由selective search方法得到,没有表示在流程图中。对每个类别都训练一个回归器,且只有非背景的region proposal才需要进行回归。
ROI pooling:ROI Pooling的作用是对不同大小的region proposal,从最后卷积层输出的feature map提取大小固定的feature map。简单讲可以看做是SPPNet的简化版本,因为全连接层的输入需要尺寸大小一样,所以不能直接将不同大小的region proposal映射到feature map作为输出,需要做尺寸变换。在文章中,VGG16网络使用搭中H=W=7的参数,即将一个h*w的region proposal分割成H*W大小的网格,然后知拦山将这个region proposal映射到最后一个卷积层输出的feature map,最后计算每个网格里的最大值作为该网格的输出,所以不管ROI pooling之前的feature map大小是多少,ROI pooling后得到的feature map大小都是H*W。
因此可以看出Fast RCNN主要有3个改进:1、卷积不再是对每个region proposal进行,而是直接对整张图像,这样减少了很多重复计算。原来RCNN是对每个region proposal分别做卷积,因为一张图像中有2000左右的region proposal,肯定相互之间的重叠率很高,因此产生重复计算。2、用ROI pooling进行特征的尺寸变换,因为全连接层的输入要求尺寸大小一样,因此不能直接把region proposal作为输入。3、将regressor放进网络一起训练,每个类别对应一个regressor,同时用softmax代替原来的SVM分类器。
在实际训练中,每个mini-batch包含2张图像和128个region proposal(或者叫ROI),也就是每张图像有64个ROI。然后从这些ROI中挑选约25%的ROI,这些ROI和ground truth的IOU值都大于0.5。另外只采用随机水平翻转的方式增加数据集。
测试的时候则每张图像大约2000个ROI。
损失函数的定义是将分类的loss和回归的loss整合在一起,其中分类采用log loss,即对真实分类(下图中的pu)的概率取负log,而回归的loss和R-CNN基本一样。分类层输出K+1维,表示K个类和1个背景类。
这是回归的loss,其中t^u表示预测的结果,u表示类别。v表示真实的结果,即bounding box regression target。
采用SVD分解改进全连接层。如果是一个普通的分类网络,那么全连接层的计算应该远不及卷积层的计算,但是针对object detection,Fast RCNN在ROI pooling后每个region proposal都要经过几个全连接层,这使得全连接层的计算占网络的计算将近一半,如下图,所以作者采用SVD来简化全连接层的计算。另一篇博客链接讲的R-FCN网络则是对这个全连接层计算优化的新的算法。
稍微总结下训练和测试的结构,如下面两个图,对算法的理解会更清晰。
test结构图在ROI Pooling层是怎么输出的画得比较容易理解。
I. fasterrcnn为什么比fastrcnn快
Fast R-CNN和Faster R-CNN都是目标检测算法。Fast R-CNN是在RCNN和SPPnet的基础上提出的,而Faster R-CNN则是在Fast R-CNN的基础上提出的,使得目标检测的速度更快,同时保持了较高的检测精度。
Fast R-CNN之所以比RCNN和SPPnet快,是因为它引入了ROI池化层,将多个候选框中的特征图映射到固定大小的特征图上,从而使得共培祥享卷积层的特征提取可以被多个候选框共享,从而减少了重复计算,提局中销高了计算效率。
Faster R-CNN之所以比Fast R-CNN快,是因为它引入了RPN网络,用来生成候选框,而不是像Fast R-CNN一样使用选择性搜索。RPN网络可以共享卷积特征,并且在训练时可以端到端地进行优化,从而加速和简化了目标检测的流程。
总之,Fast R-CNN和Faster R-CNN都是在RCNN、SPPnet的基础上不断优化而来,它们引入了ROI池化层和RPN网络,使得目标检测的速度和精度都得到了提高。其中,Faster R-CNN比Fast R-CNN快的原因是因为它引入了RPN网络,用来生成候选框并共享卷积特征。桐游
J. quick和fast的区别是什么
quick和fast的区别:
1、表意不同。
quick表示人的速度快,而fast既可以表示物体的速度快,也可以表示人的速度快。
2、读音不同。
fast读音:英 [fɑ:st];quick读音:英 [kwɪk]
3、强调的事物不同。
fast多指运动物体速度"快"。强调物体运动的方式, 既能用作形容词,又能用作副词。而quick多指动作雹明发生或完成得很迅速、敏捷。强调动作的短暂性, 强调动作迅速发生并完成。
(10)fast算法扩展阅读岁灶
quick的词性:
quickly是副词,也表示即刻行动,毫不迟延,指动作在较短的时间内或较近的将来即可发生或完成。如:He quickly picks up the paper on the ground.(他很快地拾起地上的纸张)。
双乎肆扮语例句
1、These apples are maturing fast.
这些苹果正在快速成熟。
2、They fast on certain days.
他们在某些天斋戒。
3、The fast bowlers were brought on again after the interval.
在休息后快速投球手再次被要求出场投球。
示例词组:
1、answer quickly (抢答字母组 )。
2、quickly erase (快速抹除)。
3、sit quickly (安静地坐)。
短语
1、as fast as和…一样快
2、fast growth快速生长
3、fast response快速响应
4、fast algorithm快速算法