【深度学习 SS】Selective Search原理剖析_深度学习中的ss 问题指的是什么-程序员宅基地

技术标签: SS  深度学习/机器学习  深度学习【理论+实践】  

参考:https://www.cnblogs.com/zhao441354231/p/5941190.html
学习RCNN时对SS工作原理比较好奇,搜索网上资料,大意如下:

项目地址http://disi.unitn.it/~uijlings/MyHomepage/index.php#page=projects1

这是一篇2013年发表的文章,应该是下面2011年ICCV会议论文的扩展:

Van, de Sande, Koen E A, et al. "Segmentation as selective search for object recognition. " IEEE International Conference on Computer Vision, ICCV 2011, Barcelona, Spain, November 2011:1879-1886.

1 介绍

如何定位一张图像上的目标(比如"牛")? 处理的流程可以是这样的:

第一步: 将图像划分成很多的小区域(regions);

第二步: 判定每个区域是属于"牛"的还是"非牛",将属于"牛"的区域进行合并,就定位到牛了!

解释:

第一步解释: 如何将图像划分成很多的小区域? 划分的方式应该有很多种,比如: 1)等间距划分grid cell,这样划分出来的区域每个区域的大小相同,但是每个区域里面包含的像素分布不均匀,随机性大;同时,不能满足目标多尺度的要求(当然,可以用不同的尺度划分grid cell,这称为Exhaustive Search, 计算复杂度太大)! 2)使用边缘保持超像素划分; 3)使用本文提出的Selective Search(SS)的方法来找到最可能的候选区域;

其实这一步可以看做是对图像的过分割,都是过分割,本文SS方法的过人之处在于预先划分的区域什么大小的都有(满足目标多尺度的要求),而且对过分割的区域还有一个合并的过程(区域的层次聚类),最后剩下的都是那些最可能的候选区域,然后在这些已经过滤了一遍的区域上进行后续的识别等处理,这样的话,将会大大减小候选区域的数目,提供了算法的速度.

下面放一张图说明目标的多尺度:

第二步解释: 第一步中先生成,后合并得到了那些最可能的候选区域,这一步将对每个区域进行判别,也就是判别每个区域到底是"牛"还是"非牛"! 流程的话,无非是在每个区域上提取特征,然后训练一个分类器(Kernel SVM);

2 训练和测试流程图

2.1 本文模型训练流程图

下面我将按照自己的理解一步一步地对此训练流程图进行讲解: 这个流程图我认为应该分成四个部分:

第一部分: 训练集构造

负样本: 给定一张训练图像 --> 形成原始的过分割区域 --> 使用本文SS方法对区域进行融合,形成一系列最可能的候选区域 --> 计算每个候选区域与真实标记区域GT之间的重合度,如果区域A与GT的重合度在20-50%之间,而且A与其他的任何一个已生成的负样本之间的重合度不大于70%,则A被采纳为负样本,否则丢弃A,继续判别下一个区域;

正样本: 就是那些手工标记的GT区域作为正样本;

(问题1: 会不会负样本很多而正样本很少? 从而出现类不均衡问题)

下图展示了区域合并的过程: 对于此图而言,正样本是两个绿色框框圈出来的区域;负样本为蓝色框框圈出来的区域;正样本是人手工标记的,负样本是SS方法得到的!

第二部分: 提取每个正/负样本(都是一个个不同大小的区域)的特征

第一部分中将正样本区域和负样本区域都提取出来了,现在就需要提取每个区域的特征了.本文主要采用了两种特征: HOG特征 + bag-of-words特征,同时辅助性地增加了SIFT,two colour SIFT,Extended OpponentSIFT,RGB-SIFT这四种特征,这样特征加起来的维度达到了惊人的360,000.

(问题2:每个区域的大小都是不相同的,如何保证提取到的每个区域的特征向量维度相同?)

第三部分: 分类器

第二部分中,每个区域的特征提取出来了,真实类别标签也知道,那这就是一个2分类问题;分类器这里采用了带有Histogram Intersection Kernel的SVM分类器进行分类;这里没有对分类器本身做什么改进,我们可能会质疑一下他这种分类器的选择是否对这种场合是最好的,其他的没什么好讲的.

(问题3:选这种分类器的原因是不是它适用于处理高维度数据?)

第四部分: 反馈

第三部分将分类器训练好了,训练好了就完了吗? NO! 现在流行一种反馈机制,SVM训练完成了,将得到每个训练图像每个候选区域的软分类结果(每个区域都会得到一个属于正样本的概率),一般如果概率大于0.5将被认为是目标,否则被认为是非目标,如果完全分类正确,所有的正样本的SVM输出概率都大于0.5,所有负样本的SVM输出概率都小于0.5,但是最常见的情况是有一部分的负样本的输入概率也是大于0.5的,我们会错误地将这样样本认为是目标,这些样本就称之为"False Positives".

我们这里就是想把这些"False Positives"收集起来,以刚才训练得到的SVM的权值作为其初始权值,对SVM进行二次训练,经过二次训练的SVM的分类准确度一般会有一定的提升;

2.2 测试过程

测试的过程基本和训练过程相同: 首先用SS方法得到测试图像上候选区域 --> 然后提取每个区域的特征向量 --> 送入已训练好的SVM进行软分类 --> 将这些区域按照概率值进行排序 --> 把概率值小于0.5的区域去除 --> 对那些概率值大于0.5的,计算每个区域与比它分数更高的区域之间的重叠程度,如果重叠程度大于30%,则把这个区域也去除了 --> 最后剩下的区域为目标区域.

(问题4:重叠程度如何计算,如果计算A与B之间的重叠程度,分子是A与B的交集,分母是A还是B?)

总结

1. 本文最大的卖点在于它的Selective Search策略,这个策略其实是借助了层次聚类的思想(可以搜索了解一下"层次聚类算法"),将层次聚类的思想应用到区域的合并上面;作者给出了SS的计算过程:

总体思路:假设现在图像上有n个预分割的区域,表示为R={R1, R2, ..., Rn}, 计算每个region与它相邻region(注意是相邻的区域)的相似度,这样会得到一个n*n的相似度矩阵(同一个区域之间和一个区域与不相邻区域之间的相似度可设为NaN),从矩阵中找出最大相似度值对应的两个区域,将这两个区域合二为一,这时候图像上还剩下n-1个区域; 重复上面的过程(只需要计算新的区域与它相邻区域的新相似度,其他的不用重复计算),重复一次,区域的总数目就少1,知道最后所有的区域都合并称为了同一个区域(即此过程进行了n-1次,区域总数目最后变成了1).算法的流程图如下图所示:

2. 除了SS这个卖点之外, 本文还用较大的篇幅讲述了"Diversification Strategies(多样化策略)"这个东西,在我看来,这就是一个模型选择问题,讲不讲都没有多大的关系.我认为,面对一个具体的问题,有很多的超参需要调节.何为超参?我认为超参从小到大应该分成三类:

第一类: 一个既定模型里面可以调节的参数.比如在CNN里面有学习率,卷积核尺寸,卷积maps数目等等参数,面对不同的问题,这些参数的设置可能是不相同的,不同的参数带来不同的结果,因此我们需要对这些参数进行调节;再比如本文SS算法里面的相似度度量,度量方法不止一种,你可能需要面对实际的任务对其进行实验调整.

第二类: 一个既定模型里面可以调节的模块.比如说本文的模型,它采用了SVM分类器,你可以把它换成其他的分类器;提取了HOG等特征,你也可以把它换成深度特征;利用了RGB图像,你也可以把RGB转化到其他的色彩空间进行;采用这种初始区域初始化方法,当然也可以换成其他的,只要最适合你的任务就行.

第三类: 模型方法超参.比如同样是解决目标检测问题,本文的方法算是一种,但是还有千千万万种其他的不同的目标检测算法,从这个角度来说,模型方法整体上可以看做是一种超参,当然,在实际进行中我们可能只专注于自己的算法,对这个超参的调节表现在实验部分对不同方法之间的对比.

原文"3.2 Diversification Strategies"这一节提供了调参的一些思路,分析了不同颜色空间各通道的特点,这有利于我们在面对自己的实际任务时明白要尝试的方向.还有就是给出了SS算法里面相似度度量的几种方法,比如颜色相似度,纹理相似度,尺寸相似度,填充相似度,作者肯定没有对所有的相似度进行穷举,也没有说哪种相似度适合哪种任务,我觉得更重要的还是一种思路的借鉴,提供了一种思路和思考方向,我觉得这篇论文的价值就达到了.

3. 计算速度

相比于以往的对图像上的区域进行穷举的方法,本文SS方法只生产一小部分的最可能的候选区域,这样对后续的处理以及整体计算有效性确实有所提高.但是我认为对每个区域都要提取高达36万维度的特征向量,这可能是本文算法最耗时的地方,如此高纬度的特征向量是否有必要?(给人的感觉就是一股脑把那些典型的手工特征HOG,SIFT不管好坏都提取出来了)

本文难念有一些误解或者不当之处, 敬请留言指教, 谢谢!

参考文献:

[1]Selective Search for Object Recognition: http://blog.csdn.net/charwing/article/details/27180421

[2]Selective Search for Object Recognition解读: http://blog.csdn.net/mao_kun/article/details/50576003

[3]MATLAB源代码SelectiveSearchCodeIJCV.zip: https://pan.baidu.com/s/1bncWrQR

[4]官网:https://ivi.fnwi.uva.nl/isis/publications/bibtexbrowser.php?key=UijlingsIJCV2013&bib=all.bib

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/c20081052/article/details/80020200

智能推荐

golang的一些学习笔记_golang func (s student) inita(-程序员宅基地

文章浏览阅读96次。注释以后就使用行注释,而不用块注释API网站https://studygolang.com/pkgdoc变量golang变量如果没有赋初值,默认会给零值数据类型:函数,管道,接口(这几个还是比较特殊的)整数类型:默认是int类型,可以通过fmt.printf(“%t”,a) 打印出来具体的类型。字符串:字符串一旦赋值了,就不能再改变了city := “beijing”city[0] = ‘a’ // 这样是不行的数据类型转化例如var int64 a = int_golang func (s student) inita(

职场中上级如何和下级面谈-程序员宅基地

文章浏览阅读1k次。这段时间在和同事们面谈,目的了解下同事们的情况,解答些疑问,听一些他们对团队公司的建议等等,这种面对面、一对一的面谈,会收到很好的效果。如果你也是一名管理者,那么你如何组织这次面谈,以达..._管理者上级对下级面聊

ElasticSearch教程——汇总篇_elasticsearch汇总打包-程序员宅基地

文章浏览阅读185次。环境搭建篇ElasticSearch教程——安装ElasticSearch教程——安装Head插件ElasticSearch教程——安装IK分词器插件ElasticSearch教程——安装Kibana基础操作ElasticSearch教程——Kibana简单操作ESElasticSearch教程——批量处理(mget和bulk)ElasticSearch教程——k..._elasticsearch汇总打包

spark foreachPartition 把df 数据插入到mysql_sourcedf.foreachpartition(partitionofrecords 什么时候写-程序员宅基地

文章浏览阅读7.1k次。package com.waitingfyimport java.sql.{Connection, DriverManager, PreparedStatement}import org.apache.spark.sql.SparkSessionimport org.apache.spark.sql.functions._import scala.collection.mutable..._sourcedf.foreachpartition(partitionofrecords 什么时候写到mysql

收集struts2各种版本下载地址_struct2全版本-程序员宅基地

文章浏览阅读3.6k次。struts-2.2.1.1:http://www.motorlogy.com/apachemirror//struts/binaries/struts-2.2.1.1-all.zip_struct2全版本

MySQL的distinct:去重_mysql去重distinct-程序员宅基地

文章浏览阅读1.6w次,点赞2次,收藏3次。SELECT * FROM `name`;-- 查询出三条 去除了重复的select distinct name from name;-- 会查询出五条 其实是distinct(name,id)select distinct name,id from name;-- 报错 distinct必须放在头部select id,DISTINCT name from name;..._mysql去重distinct

随便推点

redis+spring例子-程序员宅基地

文章浏览阅读80次。一、Redis了解1.1、Redis介绍:redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set –有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性..._redis spring 案例

浅谈木马的ASP收信方式-程序员宅基地

文章浏览阅读3.1k次。声明: 我写这篇文章的目的,完全是出于个人学习研究的目的,请读者不要借此干坏事,由此引发的一切事件责任与本人无关。 网上有铺天该地的木马,其中很多用的就是ASP收信方式,稍微懂点网页编程的人,做一个用来接收用户信息的网页,不是一件难事。难的是客户端程序的编写,现在用邮箱收信,已经被360和其它杀毒软件给无情地拦截了,相信网页收信方_asp收信

为Eclipse安装安卓开发插件ADT_eclipse怎么安装安卓插件-程序员宅基地

文章浏览阅读2.3w次,点赞2次,收藏3次。ADT下载地址:http://dl.google.com/android/ADT-20.0.3.zip有关ADT的介绍及安装环境要求:http://developer.android.com/tools/sdk/eclipse-adt.html我安装ADT前的环境为 Win7+JDK 1.6+Eclipse 4.2 ADT是Eclipse用来开发Android应用程序_eclipse怎么安装安卓插件

基于U-Net图像分割的划痕缺陷分割(课程设计)_划痕分割-程序员宅基地

文章浏览阅读1.7w次,点赞2次,收藏8次。基于U-Net的划痕缺陷分割(课程设计)论文:**U-Net:ConvolutionalNetworksforBiomedicalImageSegmentation**https://arxiv.org/abs/1505.04597基于Pytorch的代码和数据集下载地址:下载地址运行结果:..._划痕分割

Github精选:本周10大热门项目_每周发布github热门项目的叫什么-程序员宅基地

文章浏览阅读3.3k次。LSGO软件技术团队 每周六,盘点本周 Github 上最热门的项目,通过这份榜单能够反映出程序员关注的热点项目。由于 Github 是全球最大的开源代码库也是开源精神的集中体现地,这里是所有人的宝藏,希望这份榜单能够让大家受益。Top01Windows Terminal网址:https://github.com/microsoft/Terminal截图:简介:Windows Te..._每周发布github热门项目的叫什么

leetcode每日一题2013. 检测正方形 哈希表的双重映射简单题 剩下的就是数学功底了~-程序员宅基地

文章浏览阅读354次。本篇内容:leetcode每日一题2013. 检测正方形 哈希表的双重映射简单题 剩下的就是数学功底了~ 文章专栏:leetcode每日一题《打卡日常》 最近更新:2022年1月25日 《剑指offer》 ——字符串的简单应用(简单)字符串拼接 与替换 的加深印象个人简介:一只二本院校在读的大三程序猿,本着注重基础,打卡算法,分享技术作为个人的经验总结性的博文博主,虽然可能有时会犯懒,但是还是会坚持下去的,如果你很喜欢博文的话,建议看下面一行~(疯狂暗示QwQ)

推荐文章

热门文章

相关标签