前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >深度学习 selectivesearch算法理解

深度学习 selectivesearch算法理解

作者头像
企鹅号小编
发布2018-01-08 11:02:42
7990
发布2018-01-08 11:02:42
举报
文章被收录于专栏:人工智能人工智能人工智能

采用selectivesearch算法产生的region proposal

Object Detection,即物体检测,是计算机视觉领域中的经典任务之一。给定一幅图像,使之能够定位物体、并判断该物体的类别(比如是只猫还是狗)。所以,解决这个问题,很重要的一点就是要准确地找到物体的位置,否则即便有再好的判别器,也事倍功半。传统的算法在做region proposal时,多采用滑动窗口方法,虽然涵盖面广,却生成了许多无用的图像块,耗费大量的计算,速度也很慢。那么有没有一种算法,既可以产生能够覆盖目标区域的region,又可以减少region的数量呢?答案是肯定的,那就是接下来将要介绍的selectivesearch算法了。

我们先通过应用,来认识该算法。在linux环境下,可以通过pip install selectivesearch命令安装算法包,使用python导入便可以直接使用该算法了,具体来说:

其中,img是我们输入的原始图片;img_lab是在原图RGB三通道的基础上增加了一个通道,该通道标注了对应像素的类别;regions是个list,包含了所有proposal region的信息,每个region是个字典,其中的keys为rect、size、label。rect对应的value存放的是region的坐标和宽高(x, y, w ,h),而size指的是该区域中属于该label的像素个数,而不是区域的大小。弄明白这些后,我们就可以使用该函数获得我们想要的一些数据了。

好奇的你是否已经开始产生疑问:那selective_search函数中的参数各代表什么呢?

做图像分割,最终的目的是希望把同一类别(即相似)的元素或者区域合并到一起,不同的元素或者区域分割开来,而Felzenszwalb算法正是基于图论进行图像分割的。所以,了解该算法,需要我们掌握基本的图论知识,比如无向图、树、最小生成树,但不必深究各种细节。

‌ Felzenszwalb算法把图像中的像素点看做是一个个结点,像素点之间的不相似度作为边的权重,通过将相似的像素聚合到一起,产生同一区域(表现为最小生成树)。那么对于已经生成好的两个相邻区域A和B,算法又是如何判断它们是否可以合并的呢?对于A和B两个区域,取其类内的结点之间的边的权重最大值Wa和Wb,然后取两区域(类间)连接的边中权重最小值Wab,如果Wab比Wa和Wb都要小,则满足两个区域合并的要求。可是,对于一开始单元素区域,类内无边,权重无限小,类间最小权重肯定是无法满足要求的,这样子从一开始就会导致每个元素都“各自为政”。所以,函数中的scale参数就是用来解决这个问题。在计算类内最大权重时,需要额外增加一个偏置scale/c,其中的c就是区域中像素个数,一开始c=1,随着区域增加,偏置的作用也会相应减小。函数的另一个参数min_size,是用来合并像素个数过小的区域,如果区域像素个数少于min_size,则与最相似区域合并。在做这些工作前,为了减少图像不平滑的问题,作者先是用了高斯滤波处理图像,sigma就是高斯核的大小。

好了,关于selectivesearch算法就到这里了,个人感觉根据不同大小的输入图像,参数值的选取还是很需要经验的。

如有阐释不对之处,烦请指正。

本文来自企鹅号 - 全球大搜罗媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文来自企鹅号 - 全球大搜罗媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档