【论文阅读】Illuminating Pedestrians via Simultaneous Detection Segmentation

论文来源

  • ICCV2017
  • arXiv report
  • github代码(caffe-matlab)

本文的主要问题是行人检测。作者探讨了如何将语义分割应用在行人检测上,提高检测率,同时也不损坏检测效率。作者提出了一种语义融合网络(segmentation infusion networks)去促进在语义分割与行人检测上的联合监督。其中行人检测为主要任务,语义分割主要起到了矫正,指导共享层的特征生成。作者在题目中提到了照亮行人。其实主要指的是通过语义分割的监督,可以使得生成的feature更聚焦在行人上,从而便于下游的行人检测。

另外本文比较好的贡献在于对网络的设置很合适,也就是说语义分割层的设置恰到好处。因此就算使用弱标注的语义信息也足以提升性能。

背景介绍

行人检测试计算机视觉中的核心问题,主要方法有两种:目标检测语义分割。这两种方法高度关联,但有各自的优缺点。比如目标检测可以定位不同的物体,但是很少能给出物体的边界。而语义分割虽然能逐像素地定位物体的边界,但是很难区别同类。

自然我们希望来自一个任务的知识能使得另一任务变得容易些。这在一研究的目标检测中已经得到了实现。那么在行人检测中却研究地很少。部分原因是在传统的行人数据集中缺乏逐像素的标注

例如我们来看传统的几个数据集.

  • Caltech
    image
  • KITTI
  • KITTI数据集简介与使用
    此数据集为摄像机视野内的运动物体提供一个3D边框标注(使用激光雷达的坐标系)。该数据集的标注一共分为8个类别:’Car’, ’Van’, ’Truck’, ’Pedestrian’, ’Person (sit- ting)’, ’Cyclist’, ’Tram’ 和’Misc’ (e.g., Trailers, Segways)。

以上两个数据集,仅仅提供了行人的bounding box,没有提供语义信息。

  • COCO

    本数据集是一般的目标检测数据集,可以从图上看出它提供了丰富的标签,既有位置信息,也有语义信息。

  • Cityscapes

此数据集提供了详细的城市语义标注,当然也包含了行人的语义标注。此数据集的主要意图就是促进语义分割在行人检测上的应用。这也是本文的core所在。

Simultaneous Detection & Segmentation

有两种方式来研究同时的检测与分割。一种是同时促进两种任务。例如我们广知的Instance-aware segmentation .
其实上面的图d就是典型的这类任务,它不同与以往的语义分割,而是在语义分割的基础上还要求把同类的分开。其实就是分割+检测。

第二种就是使用语义分割作为强线索明显地提高目标检测。其实很早,我读过人脸加测与人脸特征点的一篇文章,

《Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks

这篇文章就是以人脸特征点检测来促进人脸检测的。其实人识别人脸往往就是识别人的五官来进行人脸检测。那么在目标检测中,语义信息往往提供了很强大的特征来促进检测,并且可以抑制背景的干扰。但有些工作要求先有一个单独的分割网络才能进行检测。我们的框架克服了这个缺点,可以将语义信息融合到shared feature maps,最后在准确性和性能上都有了提升。

方法解析在这里插入图片描述

上面是整个网络结构,包含了两阶段。第一阶段使用rpn网络提出行人检测候选框与给出初步的分值。第二阶段进一步地挖掘了hard sample,给出了对应的细化分数.由于rpn已经预测行人的位置足够准确了,因此第二步只是单纯的分类,没有bounding box的回归。而且两个网络的预测分数进行了叠加,作为最后的分类分数。

下面我们仔细阐述一下其中的道理。

RPN

RPN来源自Fatser rcnn,用来propose a set of bounding with associated confidence scores around pedestrains.
rpn网络在某个feature map的每一点处分别枚举出一定比例与尺度的anchor box,相当于在一个池化的图像空间的一个滑动窗口。每一个proposal box i都对应一个anchor(指scale与aspect ratio)与图像空间的一个位置。

如图,rpn采用VGG-16的conv1-5作为backbone(提特征),然后接了两个分层,一个层叫segementation infusion layer,另一个就是传统的proposal layer,带有两个输出层分别用于分类与bounding box回归。

从网络结构上看到,上面的segmentation infusion layer的ground truth 是两个白色小方块做成的mask,其实就是标注的行人检测的bouding box的内部。然后经过两个分层的联合训练,最终CONV1-5输出的feature map明显凸显了行人,即照亮了行人。

此rpn的目标函数如下:

在这里插入图片描述

LcL_cLc代表分类的损失,采用softmax logistic loss over two classes。(行人vs 背景)。此处将一个box识别为行人的法则是IoU>=0.5.

Lr是回归损失。使用Lr(ti,ti^)=R(ti−ti^)L_r(t_i,\hat{t_i})=R(t_i-\hat{t_i})Lr(ti,ti^)=R(titi^),R代表鲁棒的L1损失。其中bounding box的偏移信息被定义成在x,y与在w,h上的偏移量,即t=[tx,ty,tw,th]t=[t_x,t_y,t_w,t_h]t=[tx,ty,tw,th].

Ls是语义分割的损失。后面阐述。

实验中,λc=λs=1,λr=5\lambda_c=\lambda_s=1,\lambda_r=5λc=λs=1,λr=5,显然这里突出了回归的重要性,因为回归只有一次,而分类与语义分割就显得没那么重要。

BCN(Binary Classfication Network)

BCN主要完成在RPN提出的proposal的行人识别。作为一般的目标检测,一般采用faster rcnn后端的识别部分即可。但是根据《Is faster rcnn doing well for pedestrian detection?》,faster rcnn的后端反而会degrade pedestrian detection accuracy。因此这里选择使用VGG-16构建一个单独的识别网络。

这个网络主要在于识别RPN遗忘的hard example。提高那些遮挡、变形等行人的分数,从而可以将其检测出来。
当然了,此部分仍然增加了语义信息,提高识别率。

此部分的目标函数如下:
在这里插入图片描述
其中主要特点如下:

  1. LcL_cLc指的是分类损失,其中这里cic_ici是第i个proposal的类别标签,而ci^\hat{c_i}ci^则融合了来自RPN与BCN的分数。

具体说来,对于第i个Proposal,给定RPN的预测两类分数为{c^i0r,c^i1r}\left \{ \hat{c}_{i0}^r, \hat{c}_{i1}^r \right \}{c^i0r,c^i1r},BCN的分数为{c^i0b,c^i1b}\left \{ \hat{c}_{i0}^b, \hat{c}_{i1}^b \right \}{c^i0b,c^i1b},则融合后的分数为:
在这里插入图片描述

这里重点说一下,他这里给出的融合分数到底有何技巧?正如下面一章【问题1】提出的,这里为什么要这样取分数?而且这里的分类损失又是什么呢?

我们先来看看一般,如RPN中的分类损失怎么计算,实际上是使用softmax-logistic loss,也就是先计算softmax得分,再求label对应的logistic似然损失,最后令其最小化。

那么我们这里呢,肯定也是使用似然损失,那么如何计算label对应的分数呢?是不是也是使用softmax呢?

我们观测这里给出的c^i\hat{c}_ic^i ,其实就是softmax的形式。而这里原始的分数就是RPN+BCN之和。

而且这里省略了一个分数,即预测其为背景的分数,即1−c^i1-\hat{c}_i1c^i
2. 设置了cost-sensitive的权重wiw_iwi,用来优先检测大的行人。其中wi=1+hihw_i=1+\frac{h_i}{h}wi=1+hhi,其中hih_ihi为第i个proposal 的高,h为预计算的平均高。
3. 采取了更加严格的labeling policy,要求 a proposal to have IoU > 0.7 with a ground truth pedestrian box to be considered pedestrian (ci = 1), and otherwise background (ci = 0).

Simultaneous Detection & Segmentation

无论在RPN还是在BCN,都集合了融合layer.The segmentation infusion layer旨在输出两个mask揭示行人与背景分割的可能性 .这里选择使用仅仅一个layer和一个1x1的核,以至于尽可能高地施加影响到共享的层,从而驱使网络去直接融合语义特征到shared feature map。

Ls是一个在两类(行人vs 背景)的softmax logistic loss,应用于每一个位置i,同时也引入了cost-sensitive weight 即wiw_iwi.

在这里插入图片描述

这里SiS_iSi可以取所有行人的bounding box内的所有区域标注为1,其他区域为0. 也就是weak segmentation ground truth masks。这就是很大的优势,不再需要严格的标注信息。

这样做是可行的,因为我们将会融合层放在了conv5后面,此时图像已经经过了多层降采样。也就是基于box的标注与基于pixel的标注已经基本相同了。

那么具体怎么计算LsL_sLs呢?文中提到使用softmax logistic loss。那么这里的i应该指的bounding box的序号。因为有一个权重wiw_iwi的存在(我猜测)。

Ls(Si,S^i)L_s(S_i,\hat{S}_i)Ls(Si,S^i)应该针对每一个bounding box内的像素计算。使用infusion layer获取每一个像素的预测值(行人VS背景),那么我们就可以计算每一个像素点的二分类分数,对于bounding box内的像素点,取行人的预测分数,进而计算似然损失,并将其加起来,作为最后的LsL_sLs。而对于bounding box以外的区域,则取背景的预测分数,进而计算似然损失。也加起来,作为一个LsL_sLs

留下一个疑问,对于非盒子区域的S,如何计算权重呢?或者是不是不再需要权重了??

实验设计

实验设计其实就是两方面,一方面与baseline进行比较,一方面解释上述网络设计的可行性,也就是ablation study.

如下图,作者进行了 weak segmentation supervision,proposal padding, cost-sensitive weighting, and stricter supervision以及stage-wise fusion的研究。
这里写图片描述
对于weak segmentation supervision,proposal padding, cost-sensitive weighting, and stricter supervision,作者分别切除了每一部分,分别计算RPN,BCN以及Fusion的miss rate.

  • 这里RPN很明白,可以直接输入图片,禁掉了 weak segmentation supervision,进而检测行人,计算miss rate。
  • BCN呢?输入是什么?在原文中,BCN直接输入的是proposal裁剪测图像。这里应该还是如此,只不过禁掉了 weak segmentation supervisio,但是RPN中正常,不要禁掉weak segmentation supervision。
  • Fusion则全部禁掉weak segmentation supervision.

对于最后一行的SDS-RCNN,BCN则还是需要以RPN为输入,只不过分数不再融合,直接计算其分类得分,从而检测行人。而Fusion则融合RPN与BCN的分数。

问题

  1. BCN(Binary Classfication Network)的分数融合机制是否是最优的,文中提到:
    这里写图片描述
    也即是说两个网络进行了互补机制,一句话概括就是好上加好,优中选优
    具体说来,当RPN网络预测某个proposal为行人的分数很高,而BCN网络也如此,则显然,最后预测行人的分数会很高。相反对于一些hard example,可能RPN预测地很低,而BCN预测地很高,则最终的结果如何呢?这实际上取决于二者分数的综合效果,其实就是两者的和,如果行人分数的和大于背景分数的和,则最终预测行人的分数就很高。反之,则可能还是背景。这也说明,只有BCN预测hard example的能力足够强,才能形成互补机制。对于一些模棱两可的example,即使BCN预测其为行人的分数较高,但如果不是足够高,则最终也不能将其判为行人,这实际上就减轻了false positive的压力。
  2. softmax logistic loss??

参考 softmax logistic loss详解

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

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

相关文章

Python ORM框架之 Peewee入门

之前在学Django时,发现它的模型层非常好用,把对数据库的操作映射成对类、对象的操作,避免了我们直接写在Web项目中SQL语句,当时想,如果这个模型层可以独立出来使用就好了,那我们平台操作数据库也可以这么玩…

天联高级版客户端_金万维天联高级版服务器安装配置全流程以及客户端登录流程...

今天下午,有一个使用千江软件的用户,他想实现千江软件的异地访问,经过他朋友也是金万维天联高级版的客户的介绍,推荐我们帮他安装天联高级版,从而实现千江软件的异地访问,千江软件本地访问界面如下&#xf…

[C#]async和await刨根问底

上一篇随笔留下了几个问题没能解决: 调用IAsyncStateMachine.MoveNext方法的线程何时发起的? lambda的执行为何先于MoveNext方法? 后执行的MoveNext方法做了些什么事情? 那么今天就来尝试解决它们吧~PS: 本文中部分代码来自上一篇…

Spring中Bean的定义继承

以下内容引用自http://wiki.jikexueyuan.com/project/spring/bean-definition-inheritance.html: Bean定义继承 bean定义可以包含很多的配置信息,包括构造函数的参数,属性值,容器的具体信息例如初始化方法,静态工厂方法…

由Google Protocol Buffer的小例子引起的g++编译问题

问题 学习 Google Protocol Buffer 的使用和原理时&#xff0c;提供了一个小例子&#xff0c;讲述了protobuf的使用方法。 假如已经有了如下文件&#xff1a; 其中writer.cpp如下&#xff1a;#include "lm.helloworld.pb.h" #include<iostream> #include<…

UVALive 5903 Piece it together(二分图匹配)

给你一个n*m的矩阵&#xff0c;每个点为B或W或.。然后你有一种碎片。碎片可以旋转&#xff0c;问可否用这种碎片精确覆盖矩阵。N,M<500 WB 《碎片 W 题目一看&#xff0c;感觉是精确覆盖&#xff08;最近被覆盖洗脑了&#xff09;&#xff0c;但是仔细分析可以知道&#xf…

springcloud(五):熔断监控Hystrix Dashboard和Turbine

Hystrix-dashboard是一款针对Hystrix进行实时监控的工具&#xff0c;通过Hystrix Dashboard我们可以在直观地看到各Hystrix Command的请求响应时间, 请求成功率等数据。但是只使用Hystrix Dashboard的话, 你只能看到单个应用内的服务信息, 这明显不够. 我们需要一个工具能让我们…

位运算问题

位运算 位运算是把数字用二进制表示之后&#xff0c;对每一位上0或者1的运算。 理解位运算的第一步是理解二进制。二进制是指数字的每一位都是0或者1.比如十进制的2转化为二进制之后就是10。在程序员的圈子里有一个流传了很久的笑话&#xff0c;说世界上有10种人&#xff0c;一…

conda环境管理介绍

我们可以使用conda 来切换不同的环境&#xff0c;主要的用法如下&#xff1a; 1. 创建环境 # 指定python版本为2.7&#xff0c;注意至少需要指定python版本或者要安装的包 # 后一种情况下&#xff0c;自动安装最新python版本conda create -n env_name python2.7# 同时安装必…

unable to execute dex: multiple dex files Cocos2dxAccelerometer

原文转载&#xff1a;http://discuss.cocos2d-x.org/t/conversion-to-dalvik-format-failed-unable-to-execute-dex-multiple-dex-files-define-lorg-cocos2dx-lib-cocos2dxaccelerometer/6652/4 用cocos2dx2.2.3没问题&#xff0c;用了3.1.1出现这个问题。确实够蛋疼。还要有这…

mysql自增_面试官:为什么 MySQL 的自增主键不单调也不连续?

为什么这么设计(Why’s THE Design)是一系列关于计算机领域中程序设计决策的文章&#xff0c;我们在这个系列的每一篇文章中都会提出一个具体的问题并从不同的角度讨论这种设计的优缺点、对具体实现造成的影响。如果你有想要了解的问题&#xff0c;可以在文章下面留言。当我们在…

使用过滤统计信息解决基数预估错误

基数预估是SQL Server里一颗隐藏的宝石。一般而言&#xff0c;基数预估指的是&#xff0c;在查询编译期间&#xff0c;查询优化器尝试找出在执行计划里从各个运算符平均返回的行数。这个估计用来驱动计划本身生成并选择正确的计划运算符——例如像Nested Loop, Merge Join,还是…

C# 委托链、多路广播委托

委托链、多路广播委托&#xff1a;也就是把多个委托链接在一起,我们把链接了多个方法的委托称为委托链或多路广播委托 例&#xff1a; 1 class HelloWorld2 {3 //定义委托类型4 delegate void DelegationChain();5 static void Main(string[] args)6 …

openssl 生成证书_使用证书和私钥导出P12格式个人证书!

【OpenSSL】使用证书和私钥导出P12格式个人证书1, 产生CA证书1.1, 生成ca的私钥openssl genrsa -out cakey.pem 20481.2, 生成ca的自签名证书请求openssl req -new -key cakey.pem -subj "/CNExample Root CA" -out cacsr.pem1.3, 自签名ca的证书openssl x509 -req -…

Faster RCNN minibatch.py解读

minibatch.py 的功能是&#xff1a; Compute minibatch blobs for training a Fast R-CNN network. 与roidb不同的是&#xff0c; minibatch中存储的并不是完整的整张图像图像&#xff0c;而是从图像经过转换后得到的四维blob以及从图像中截取的proposals&#xff0c;以及与之对…

oracle精简版_使用Entity Framework Core访问数据库(Oracle篇)

前言哇。。看看时间 真的很久很久没写博客了 将近一年了。最近一直在忙各种家中事务和公司的新框架 终于抽出时间来更新一波了。本篇主要讲一下关于Entity Framework Core访问oracle数据库的采坑。。强调一下&#xff0c;本篇文章发布之前 关于Entity Framework Core访问oracl…

java String部分源码解析

String类型的成员变量 /** String的属性值 */ private final char value[];/** The offset is the first index of the storage that is used. *//**数组被使用的开始位置**/private final int offset;/** The count is the number of characters in the String. *//**String中…

javascript之闭包理解以及应用场景

1 function fn(){2 var a 0;3 return function (){4 return a;5 } 6 }如上所示&#xff0c;上面第一个return返回的就是一个闭包&#xff0c;那么本质上说闭包就是一个函数。那么返回这个函数有什么用呢&#xff1f;那是因为这个函数可以调用到它外部的a…

faster rcnn学习之rpn、fast rcnn数据准备说明

在上文《 faster-rcnn系列学习之准备数据》,我们已经介绍了imdb与roidb的一些情况&#xff0c;下面我们准备再继续说一下rpn阶段和fast rcnn阶段的数据准备整个处理流程。 由于这两个阶段的数据准备有些重合&#xff0c;所以放在一起说明。 我们并行地从train_rpn与train_fas…

sql server规范

常见的字段类型选择 1.字符类型建议采用varchar/nvarchar数据类型2.金额货币建议采用money数据类型3.科学计数建议采用numeric数据类型4.自增长标识建议采用bigint数据类型 (数据量一大&#xff0c;用int类型就装不下&#xff0c;那以后改造就麻烦了)5.时间类型建议采用为dat…