热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

RCNN中的SVM理解

参考自:(二)目标检测算法之R-CNN-胖白白-博客园(cnblogs.com)(1条消息)R-CNN算法学习(步骤三:SVM分类)_Dlog的博客-CSDN博客_rcnnsvmS

参考自:(二)目标检测算法之R-CNN - 胖白白 - 博客园 (cnblogs.com)

(1条消息) R-CNN算法学习(步骤三:SVM分类)_Dlog的博客-CSDN博客_rcnn svm

        SVM是一个二分类器,针对固定类别,比如猫,理想情况下,输入一个n维的特征向量,输出是0表示该物体不是猫,输出为1表示该物体是猫。在训练一个SVM时首先要准备好多训练样本,这些训练样本分为两个部分,输出为1的属于正样本,输出为0的表示负样本。利用这些样本训练完一个SVM二分类器后,输入一个检测数据,输出的是一个0-1之间的数,表示该检测数据是猫的概率大小值。

        在R-CNN中,训练其中的SVM时,首先要知道的时针对每个要分类的类别都要单独训练一个SVM,也就是如果我们要R-CNN网络实现20个类别的分类检测,需要训练20个SVM。

SVM训练样本分类规则问题?

        其次SVM训练之前,需要准备训练所需要的正样本和负样本,这里就涉及到了设为正负样本的规则问题。我们知道只有当我们知道只有当bounding box把整个猫猫都包含在内,那才叫正样本;如果bounding box 没有包含到猫猫,那么我们就可以把它当做负样本。但问题是当我们的检测窗口只有部分包含物体,那该怎么定义正负样本呢?作者测试了IOU阈值各种方案数值0,0.1,0.2,0.3,0.4,0.5。最后通过训练发现,如果选择IOU阈值为0.3效果最好,即当重叠度小于0.3的时候,我们就把它标注为负样本。(此处的IOU阈值,比如阈值0.3,是指当前bounding box与整个猫猫都包含的bounding box交叉部分占两个bounding box的并集的百分比是0.3)(此处SVM的训练数据中,IOU阈值小于0.3的被划为负样本,而检测框真值,就是图像中真正的bounding box(即IOU=1)被划为每个类别的正样本,IOU阈值在0.3-1之间的样本此阶段被忽略,不使用)理解来源自论文附录B

R-CNN中SVM训练情况?

        我们通过5个卷积层后接2个全连接层CNN提取2000的预选框的4096维的特征向量(即每个预选框截取的图像对应一个4096维特征向量,每张训练图像的2000个预选框,卷积网络的输出就是2000*4096维的矩阵)。后面接SVM进行二分类,假设检测N个类别,那么会提供20个不同类别的SVM分类器,每个分类器都会对2000个候选区域的特征向量分别判断一次,这样得出[2000, 20]的得分矩阵。计算情况如下图:

        针对一张图像,R-CNN中SVM阶段的输出是2000*20的矩阵(前提是在一张图像取2000个预选区域,且网络要分为20个类别)

        也就是每个SVM分类器要做的是判断2000个预选框区域属于某个类别的概率。

R-CNN论文理解(2)_lyychlj的博客-CSDN博客

R-CNN论文理解:

问题一:微调阶段和SVM阶段阈值不同的原因?

        微调阶段是由于CNN对小样本容易过拟合,需要大量训练数据,故对IoU限制宽松:Ground Truth+与Ground Truth相交IoU>0.5的建议框为正样本,否则为负样本;
        SVM这种机制是由于其适用于小样本训练,故对样本IoU限制严格(负样本和正样本的限制都更加严格了):Ground Truth为正样本,与Ground Truth相交IoU<0.3的建议框为负样本。

问题二:为什么微调之后,训练SVM呢?简单地将最后一层微调网络(21路Softmax回归分类器)作为对象检测器不是更加简洁么?

        因为微调时和训练SVM时所采用的正负样本阈值不同,微调阶段正样本定义并不强调精准的位置,而SVM正样本只有Ground Truth;并且微调阶段的负样本是随机抽样的,而SVM的负样本是经过hard negative mining方法筛选的,是更加严格的负样本;导致在采用SoftMax会使PSACAL VOC 2007测试集上mAP从54.2%降低到50.9%。(IoU大于0.5就作为正样本会导致网络定位准确度的下降,故使用了SVM来做检测,全部使用ground-truth样本作为正样本,且使用非正样本的,且IoU大于0.3的“hard negatives”,提高了定位的准确度。

问题三:可以不进行特定样本下的微调吗?可以直接采用AlexNet CNN网络的特征进行SVM训练吗?

        微调阶段只调fc6、fc7层的权值参数。前面5层卷积层的权值参数不动。
        文中设计了没有进行微调的对比实验,分别就AlexNet CNN网络的pool5、fc6、fc7层进行特征提取,输入SVM进行训练,这相当于把AlexNet CNN网络当做万精油使用,类似HOG、SIFT等做特征提取一样,不针对特征任务。实验结果发现f6层提取的特征比f7层的mAP还高,pool5层提取的特征与f6、f7层相比mAP差不多;
        在PASCAL VOC 2007数据集上采取了微调后fc6、fc7层特征较pool5层特征用于SVM训练提升mAP十分明显;
        由此作者得出结论:不针对特定任务进行微调,而将CNN当成特征提取器,pool5层得到的特征是基础特征,类似于HOG、SIFT,类似于只学习到了人脸共性特征;从fc6和fc7等全连接层中所学习到的特征是针对特征任务特定样本的特征,类似于学习到了分类性别分类年龄的个性特征。        概括来说:前面CNN卷积层是用来提取基础特征的,而后面的全连接层是用来提取针对特定任务特定样本的特定综合特征,所以微调环节对特定分类任务非常有必要,前期预训练环节使用非常大的且种类繁多的数据集使得CNN卷积环节对基础特征的提取更加具有多样性,也更加稳定(就是可以最大程度的提取出图像中全部的基础特征)并且大量的数据也可以防止过拟合。

问题四:针对SVM训练阶段,由于训练数据太大,难以装进内存问题?

        我们选择了标准的hard negative mining method

        难负例挖掘算法,用途就是正负例数量不均衡,而负例分散代表性又不够的问题,hard negative就是每次把那些顽固的棘手的错误,再送回去继续练,练到你的成绩不再提升为止.这一个过程就叫做’hard negative mining’

问题五:可视化部分(论文3.1)

        根据我们想要了解,想要可视化的某一层的特征,想知道这一层学到了什么东西,可视化环节的策略是根据这一层得到的特征结果反推至原始图像上的所对应的部位区域,利用这个部位区域所展示的内容来显示这一层学到了原图片的什么东西什么特征,也就是这一层更关注原始图像的哪些特征。

       

具体步骤:

        直接可视化第一层filters非常容易理解,它们主要捕获方向性边缘和对比色。难以理解的是后面的层。Zeiler and Fergus提出了一种可视化的很棒的反卷积办法。我们则使用了一种简单的非参数化方法,直接展示网络学到的东西。这个想法是单一输出网络中一个特定单元(特征),然后把它当做一个正确类别的物体检测器来使用。
        方法是这样的,先计算所有抽取出来的推荐区域(大约1000万),计算每个区域所导致的对应单元的激活值,然后按激活值对这些区域进行排序,然后进行最大值抑制,最后展示分值最高的若干个区域。这个方法让被选中的单元在遇到他想激活的输入时“自己说话”。我们避免平均化是为了看到不同的视觉模式和深入观察单元计算出来的不变性。
        我们可视化了第五层的池化层pool5,是卷积网络的最后一层,feature_map(卷积核和特征数的总称)的大小是6 x 6 x 256 = 9216维。忽略边界效应,每个pool5单元拥有195×195的感受野,输入是227×227。pool5中间的单元,几乎是一个全局视角,而边缘的单元有较小的带裁切的支持。
理解1:也就是pool5的输出一共有256个特征,针对每一个特征,有6*6个单元,每个单元对应与输入的227*227的感受野是195*195,所以6*6个单元的中间单元几乎是原图227*227的全局视角,边缘单元有带剪裁的部分,此处可以忽略,在附录D中选取的就是pool5输出特征图每个通道上的(3,3)位置的单元
        论文图4的每一行显示了对于一个pool5单元的最高16个激活区域情况,这个实例来自于VOC 2007上我们调优的CNN,这里只展示了256个单元中的6个(附录D包含更多)。我们看看这些单元都学到了什么。第二行,有一个单元看到狗和斑点的时候就会激活,第三行对应红斑点,还有人脸,当然还有一些抽象的模式,比如文字和带窗户的三角结构。这个网络似乎学到了一些类别调优相关的特征,这些特征都是形状、纹理、颜色和材质特性的分布式表示。而后续的fc6层则对这些丰富的特征建立大量的组合来表达各种不同的事物。

        (理解2:此步就是针对所有抽取出来的每张图2000个预选框区域,所有图像共1000万个预选框区域,计算每个区域所导致的选定pool5层单元的激活值,按照激活值对这些区域进行排序,使用非极大值抑制算法,展示激活值最高的16个区域,图3展示了256个特征中6个特征的每个特征16个激活值最高的区域

        (理解3:此处的非极大值抑制的具体使用是,比如此处排序的是1000万个预选框区域的激活值,先选择激活值最大的预选框a,然后在剩下的预选框中,将与预选框a的IOU交并比大于一定阈值的预选框剔除,并将预选框a保存下来,然后在剩下的所有预选框中继续选择激活值最大的预选框b,并在剩下的预选框中,将与预选框b的IOU交并比大于一定阈值的预选框剔除,并将预选框b保存下来,以此往复,找到所有被保留下来的预选框。此处是展示前16个被保留下来的预选框区域

        (理解4:说实在的非极大值抑制就是在同一图像同一物体周边的多个重复的预选框,选出最优的那一个,剔除,但可视化这里,最优的选取根据想是可视化单元的激活值大小

        如果要转载,请标明出处,love you。


推荐阅读
  • Visualizing and Understanding Convolutional Networks(ZFNet网络)论文阅读笔记
    VisualizingandUnderstandingConvolutionalNetworksZFNet网络架构论文阅读笔记2022.4.4论文地址https:arxiv ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • 机器学习之数据均衡算法种类大全+Python代码一文详解
    目录前言一、为什么要做数据均衡?二、数据场景1.大数据分布不均衡2.小数据分布不均衡三、均衡算法类型1.过采样2.欠采样3.组合采样四、算法具体种类1 ... [详细]
  • 开源真香 离线识别率高 Python 人脸识别系统
    本文主要介绍关于python,人工智能,计算机视觉的知识点,对【开源真香离线识别率高Python人脸识别系统】和【】有兴趣的朋友可以看下由【000X000】投稿的技术文章,希望该技术和经验能帮到 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • Explain如何助力SQL语句的优化及其分析方法
    本文介绍了Explain如何助力SQL语句的优化以及分析方法。Explain是一个数据库SQL语句的模拟器,通过对SQL语句的模拟返回一个性能分析表,从而帮助工程师了解程序运行缓慢的原因。文章还介绍了Explain运行方法以及如何分析Explain表格中各个字段的含义。MySQL 5.5开始支持Explain功能,但仅限于select语句,而MySQL 5.7逐渐支持对update、delete和insert语句的模拟和分析。 ... [详细]
  • 如何使用Python从工程图图像中提取底部的方法?
    本文介绍了使用Python从工程图图像中提取底部的方法。首先将输入图片转换为灰度图像,并进行高斯模糊和阈值处理。然后通过填充潜在的轮廓以及使用轮廓逼近和矩形核进行过滤,去除非矩形轮廓。最后通过查找轮廓并使用轮廓近似、宽高比和轮廓区域进行过滤,隔离所需的底部轮廓,并使用Numpy切片提取底部模板部分。 ... [详细]
  • 抽空写了一个ICON图标的转换程序
    抽空写了一个ICON图标的转换程序,支持png\jpe\bmp格式到ico的转换。具体的程序就在下面,如果看的人多,过两天再把思路写一下。 ... [详细]
  • 花瓣|目标值_Compose 动画边学边做夏日彩虹
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Compose动画边学边做-夏日彩虹相关的知识,希望对你有一定的参考价值。引言Comp ... [详细]
  • 支持向量机训练集多少个_25道题检测你对支持向量机算法的掌握程度
    介绍在我们学习机器算法的时候,可以将机器学习算法视为包含刀枪剑戟斧钺钩叉的一个军械库。你可以使用各种各样的兵器,但你要明白这些兵器是需要在合适的时间合理 ... [详细]
  • 提供:ZStack云计算原创2016-12-26张鑫讲师介绍张鑫ZStack总架构师、联合创始人《系统虚拟化》主要作者,曾任职Intel开源软件技术中心 ... [详细]
author-avatar
加乘ACCA财务英语教室_438
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有