论文阅读(3)--SPDA-CNN: Unifying Semantic Part Detection and Abstraction for Fine-grained Recognition

这篇文章是来自罗格斯大学的Han Zhang等人的工作。由题目可知与上一篇文章一样,本文的作者也关注到了富有语义的局部(利用Part,Part,Part,重要事情强调三遍),作者不满足于CUB-2011数据库提供的head和body的定位结果,提出了small semantic parts 生成的方法

论文中使用的网络分为两个子网络,一个用于检测,一个用于分类。检测子网络采用一个新的自顶向下的方法生成用于检测的细小的语义局部候选(small semantic part candidates),而分类子网络采用一个新的part layers,该层主要是从由检测子网络检测得到的局部提取特征,然后用于分类。最后将两个子网络都整合到成一个端到端的网络,可以提供检测,定位多个语句局部以及对整个物体的识别功能。整个网络系统如下图所示

这里写图片描述

下面具体介绍这两个子网络的细节实现。

1. 检测子网络

1.1 Geometrically-constrained Top-down Region Proposals for Small Semantic Parts

首先是需要检测出细小的语义局部,论文是提出一种几何限制的自顶向下的区域建议方法。这种方法类似于K-最近邻方法。

这个方法首先是计算在一个矩形框内的物体的HOG特征,并用HOG来表示该物体的大致全局形状,然后基于这个特征,对于给定的图片,从训练集中跳出K个最近的邻居(也就是K张图片),对这些图片的特定的局部区域会根据给定的测试图片来调整尺寸大小。这里论文还提出可以根据两种形式的先验信息来得到最终的part region proposals,第一种比较强的是考虑到部件(part)的类标签以及其几何形状限制,这样最后得到的部件总数是N=km,而每个部件的proposals则是k个,k就是KNN方法找出来的K张图片数量,而m则是表示每张图片的部件(part)数量;第二种则是相对弱的信息,不考虑类标签,这种情况下,单个部件的proposals数量就等于部件的总数,也就是N=km

最终得到的数量会比传统的生成region proposals的要少一个数量级。

1.2 Fast RCNN based Part Detection

得到上一步的part region proposals后,就使用[1]的方法来回归每一个part region proposal,并且分配一个部件的标签。对于每个物体,有m个部件,则将会有(m+1)个输出,包括m个部件的标签以及表示背景标签的0值。每一个输出都包括一个回归的bounding box–b,一个自信度得分s[0,1]。并且如[1]所介绍的,会训练部件分类器和part regressor。这里需要好好看看[1]这篇论文才能更好了解。

对所有的part region proposals的分类都是并行的,并且对于分类结果的判定,作者认为每个部件在一个测试图片中应该最多只有一次检测,应该每个部件应该选择拥有最高自信度得分的bounding box,同时会剔除得分低于阈值的,也就是对应的部件是实际不存在的,论文中对鸟类的检测中,腿部这个部件就是这种情况。


2. 分类子网络

分类子网络对传统的CNN网络结构中增加了3个新的网络层,分别是semantic part RoI pooling layerpart-based fully connected layer(pfc)concatenation fully connected layer(cfc)

semantic part RoI pooling layer:这一层的作用是从检测子网络中检测得到的语义部件提取特征,并根据一个预定义好的顺序重新组织这些特征。

part-based fully connected layer(pfc):这一层主要是将属于同一部件的连接在一起,以便获得mid-level part-specific features,也就是中层的特定部件特征。

concatenation fully connected layer(cfc):这一层则是将pfc层的结果连接在一起,也就是连接所有的部件,从而得到一个完整的网络,可以同时训练所有的部件。

2.1 Semantic Part RoI Pooling Layer

传统的pooling层主要是用于增加平移不变性以及减少网络的空间大小,即可以降低内存的使用。但是不是所有特征图中的特征都有用于分类的。

论文提出的新的pooling层是可以将pooling运算只使用在物体的有语义的部件上的。

首先,每个部件区域会分成H×W(论文中给出的也就是3*3,文章开头给出的图中有标明大小)大小的子窗口,然后在这些子窗口上执行max-pooling运算,对于没有出现在语义部件的特征则抛弃。

然后,不同部件的经过pooling操作的特征会根据一个预定好的顺序排列(论文中给出鸟类部件的顺序)。

2.2 Part-based Fully Connected Layer

这一个新的全连接层中每个节点只会连接同一种部件中的特征,目的是得到一个中级的部件信息,可以连接低级的图像特征和高级的全局信息,同时也比传统的全连接层的参数更少。

2.3 Concatenation Fully Connected Layer

之前很多基于部件的CNN方法都是为每个部件训练单独的网络,然后再使用SVM来对联合起来的特征向量进行分类。而论文则提出这个新的全连接层来建立一个完整的网络来处理不同的部件。这样做的好处是可以将分类的误差传播回所有的部件,从而在训练的时候可以更新部件的权重。


3 Unifying Two Sub-networks

这里介绍如何将两个子网络联合在一起形成一个统一的网络。

作者是参考了[2]的做法——使用交替优化的方法,分为3个步骤。

第一步,分别使用ImageNet的预训练模型分别微调两个子网络,在这一步中,分类子网络中使用的是oracle的部件标注,而不是部件检测的结果,同时,这一步,两个子网络有着不同的卷积层。

第二步,使用分类子网络的前n个卷积层代替检测子网络中的对应卷积层,然后微调检测子网络中其他独立的网络层,这里n是一个超参数,需要根据最终统一网络的性能和效率来进行调试。

最后一步,则使用来自检测子网络的检测结果对分类子网络进行微调,除了共享的卷积层外,即第二步选择的前n个卷积层不用进行微调。因此,两个子网络将拥有相同的卷积层,并最终变成一个统一的网络。


4 小结

总的来说,文章作者基于鸟的形状特性,在Proposal生成阶段构造了几何限制条件,并基于此提出了一种Part Detection的方法。而Parts在鸟类Fine-Grained分类问题上对结果的提高有明显帮助。作者将Part Detection和Classification结合成一个End-to-End的结构,同时进行训练与测试,取得了优异的结果。

这篇论文也是将重点放到特定部件上,不过其用的数据库中是有提供bounding box的标注的,相比上一篇看的论文的自动检测部件方法,这里的检测网络和分类网络,如果对于没有任何bounding box的标注的数据库的话,可能就会需要人工标注了,工作量就相对比较大了。不过,这也说明了使用部件来进行精细图像分类是目前比较热门的一个方向,确实可以好好往这方面想想,还有什么可以改进的。


其他参考论文:

[1] Fast RCNN
[2] Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/409012.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从流水中倒推算出销量为多某值的日期

SELECT rq,spid,chkshl, (SELECT SUM(chkshl) AS chkshl FROM spls_ck WHERE T.plh < plh and spidSPH00009425 having SUM(chkshl)<10 ) AS chkshl FROM spls_ck T where spidSPH00009425 order by plh desc 转载于:https://www.cnblogs.com/bingyuw/archive/2013/03/29…

egg.js java 生产数据_eggjs中,自动从数据库直接生成model.

eggjs中,自动从数据库直接生成model.使用sequelize-auto可以自动生成models直接上命令就可以搞定了# 安装必要的库npm install -g sequelize-auto# MySQL/MariaDB 数据库安装对应的库,其他数据库请看文档npm install -g mysql# 从命令行生成modelssequelize-auto -o ./database…

论文阅读(4)--Part-Stacked CNN for Fine-Grained Visual Categorization

这篇文章是来自悉尼科技大学Shaoli Huang等人的工作&#xff0c;与前两篇文章的出发点类似&#xff0c;本篇文章也是在Parts上寻找Fine-Grained的线索&#xff0c;但与前两篇文章相比&#xff0c;在框架中人工的参与更少。同其它Fine-Grained分类任务相似&#xff0c;这篇文章也…

java组件自适应窗口大小_java swing 窗口和控件自适应大小

本文记录java开发CS结构时怎么自适应屏幕大小以及控件跟随frame大小变化大小、位置和字体大小需要注意&#xff1a;1、代码必须放置在其构造方法中。如&#xff1a;我的frame1是我frame.java的名&#xff0c;则代码放置在方法“public Frame1() ”中。2、放在控件初始化后的地方…

剑指offer--二维数组的查找

记录《剑指offer》上的算法题。完整的代码例子可以在我的Github 题目&#xff1a;在一个二维数组中&#xff0c;每一行按照从左到右递增的顺序排序&#xff0c;每一列都按照从上到下递增的顺序排。请完成一个函数&#xff0c;输入这样的一个二维数组和一个整数&#xff0c;判断…

仙元天下试玩感受

仙元天下是安讯网洛旗下的游戏&#xff0c;在官网注册账号的时候就遇到了问题&#xff0c;注册页面无法打开&#xff0c;服务器网址错误&#xff0c;只有返回到官网首页进行快捷注册。 画面2D&#xff0c;有自动打怪&#xff0c;画面感一般&#xff0c;反应比较迟钝&#xff0c…

剑指offer--替换空格

记录《剑指offer》上的算法题。完整的代码例子可以在我的Github。 这是一道有关字符串的问题。首先在C/C中&#xff0c;会把常量字符串放到单独的一个内存区域中&#xff0c;当几个指针赋值给相同的常量字符串时&#xff0c;它们实际上会指向相同的内存地址&#xff1b;但如果…

java打开word文件名乱码怎么解决_Word文档乱码怎么办?解决Word文档乱码的几种常见方法...

最近Word经常出现问题&#xff0c;双击打开后就弹出“文件转换”的对话框&#xff0c;让选择装载此文件时要使用的编码&#xff0c;选择了简体中文&#xff0c;打开文档后还是乱码&#xff0c;遇到这种情况我们应该怎么办呢?解决方法一&#xff1a;把原来的文档另存为*.rtf格式…

剑指offer--从尾到头打印链表

记录来自《剑指offer》的算法题目 链表应该是面试时被提及最频繁的数据结构&#xff0c;它的结构简单&#xff0c;由若干个结点连接成链状结构&#xff0c;其创建、插入结点、删除结点等操作都只需要20行左右的代码就能实现&#xff0c;其代码量比较适合面试。 假设单链表的结…

java序列化表单同步请求_Ajax serialize() 表单进行序列化方式上传文件

通过传统的 form 表单提交的方式上传文件上传文件&#xff1a;不过传统的 form 表单提交会导致页面刷新&#xff0c;但是在有些情况下&#xff0c;我们不希望页面被刷新&#xff0c;这种时候我们都是使用 Ajax 的方式进行请求的。使用 serialize() 对 form 表单进行序列化提交$…

Linux下Nginx的安装和简单管理

nginx下载 http://nginx.org/download/ http://www.2cto.com/os/201206/136381.html转载于:https://www.cnblogs.com/jphp/archive/2013/04/01/2993403.html

谈 数学之美 和 看见

两本书本来是没有什么交集的。 而对于我而言,交集可能是我最近这两本书都买了。闲暇的时间还是会翻一翻的。看见这本书是今天中午到的。发现现在的当当比以前在书的保养上比以前好像好了一点。几本书都是给包住了,防止弄坏了拐角。 两本书我都很喜欢,今天到的书也是立刻就读了起…

剑指offer--用两个栈实现队列

记录《剑指offer》上的算法题。 题目描述如下&#xff1a; 用两个栈实现一个队列&#xff0c;队列的声明如下&#xff0c;请实现它的两个函数appendTail和deleteHead&#xff0c;分别完成在队列尾部插入结点和在队列头部删除结点的功能。 队列的声明如下&#xff1a; templat…