[论文笔记]CVPR2017_Joint Detection and Identification Feature Learning for Person Search

Title: Joint Detection and Identification Feature Learning for Person Search;

  • aXiv上该论文的第一个版本题目是 End-to-End Deep Learning for Person Search

Authors: Tong Xiao1* ; Shuang Li1* ; Bochao Wang2 ; Liang Lin2;  Xiaogang Wang1

Affilations: 1.The Chinese University of Hong Kong; 2.Sun Yat-Sen University

Paper Code

第一遍看的时候看的是第一个版本,只简单地扫了一眼结构图,觉得就是对faster r-cnn做了小修,而且没有OIM loss,觉得创新性一般。然后发现好几篇后来的文章都用了OIM loss,回过头来再细看文章才发现文章有很多有意思的地方。惭愧!


Motivation

person re-id问题往往是用已经cropped的行人图像块进行检索,判断query和gallary中的图像是否是同一个identity。这里面存在几个问题:

  ①现实中检索都是直接从原始场景图像中实现,而不是利用detection之后的cropped image;

  ②很多数据集都是手动标注的框,实际上detector的检测精度以及是否存在漏检都会对行人重识别的结果造成影响。

因此,作者提出端到端的person search思想,将detection和re-id问题融在一起。

模型

  • 网络的输入是整张图像;
  • pedestrian proposal net:输入经过ResNet-50的第一个部分(conv1-conv4_3)之后输出1024d的feature maps(大小是原输入的1/16);类似于RPN,该feature map先经过一个$512\times3\times3$的卷积,得到的特征每个位置的9个anchors分别送入一个softmax classifier(person/non-person)和linear layer(bbox regression);bbox经过NMS,得到128个final proposals;
  • identification net:每个proposal经过ROI pooling得到$1024\times14\times14$的特征,然后送入ResNet-50的第二个部分(conv4_4-conv5_3),经过一个GAP(global average pooling)得到一个1024维的feature map;这个1024 feature map一分为三:①softmax二分类;②linear regression位置回归;③映射成一个256维、l2 normalized的子控件,实际上是一个FC层,得到256d的id-feat,inference阶段id-feat用来计算consine similarity,training阶段用来计算OIM loss。

Online Instance Matching Loss(OIM LOSS)

注意是用所有final proposals的256d id-feat计算OIM loss。

训练集中有$L$个labeled identities,赋予他们class-id(1到$L$);也有许多unlabeled identities;还有许多背景和错误信息。OIM只考虑前两种。

做法:

  • 对于labeled identities: 记mini-batch中的一个labeled identity为$x\in\mathbb{R}^D$,$D$是特征维度。线下计算和存储一个lookup table(LUT)$V\in\mathbb{R}^{D \times L}$,里面存储着所有labeled identities的id-feat。
    • 前向阶段,用$V^Tx$计算mini-batch中的样本和所有labeled identities之间的余弦相似性。
    • 后向阶段,如果目标的class-id是$t$,那么用$v_t \leftarrow \gamma v_t+(1-\gamma)x$更新LUT的第$t$列,其中$r\in[0,1]$不明白为什么这么更新
  • 对于unlabeled identities,由于数量不等,作者用了一个循环队列来存储$U\in\mathbb{R}^{D \times Q}$,$Q$是队列空间大小。同样用$U^Tx$来计算mini-batch中样本和队列中unlabeled identities的余弦相似性。每次循环,将新的feature vector push,pop一个旧的,保证队列大小不变。
  • 基于上述结构,$x$被认作class-id $i$的概率用softmax函数计算

  • 同样,被认作第$i$个unlabeled identity的概率是

  • OIM objective是最大化log似然的期望

  • 求导是

为什么不用softmax loss直接分类?

  • 一是类别太多,而每类的正样本太少,使得训练很难
  • 二是无法利用unlabeled identities,因为他们没有标签

Dataset

作者提出了新的person search的数据集,包含street view和视频截图,即CUHK-SYSY

Evaluation Protocols and Metrics

person search很自然地继承了detection和re-ID的评价指标,cumulative matching characteristics (CMC top-K) 和mean averaged precision (mAP)。这里要注意和person re-id中这两个指标的异同。

CMC

原文:a matching is counted if there is at least one of the top-K predicted bounding boxes overlaps with the ground truths with intersection-over-union (IoU) greater or equal to 0.5.

这里相对好理解,对于输出的bbox,与GT的IoU>0.5的算作candidates,然后和re-id一样计算top K中 是否包含,包含则算做匹配上。对于误检或者漏检不管。

mAP

原文:(MAP)is inspired from the object detection tasks. We follow the ILSVRC object detection criterion [29] to judge the correctness of predicted bounding boxes. An averaged precision (AP) is calculated for each query based on the precision-recall curve, and then we average the APs across all the queries to get the final result.

这个和reid的mAP应该有较大区别;应该是对每个query相当于一类,求detection的AP

转载于:https://www.cnblogs.com/xiaoaoran/p/11125791.html

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

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

相关文章

.NetCore如何使用ImageSharp进行图片的生成

ImageSharp是对NetCore平台扩展的一个图像处理方案,以往网上的案例多以生成文字及画出简单图形、验证码等方式进行探讨和实践。 今天我分享一下所在公司项目的实际应用案例,导出微信二维码图片,圆形头像等等。 一、源码获取 Git项目地址&…

vue2工程

vue当然可以使用script标签引入,不需任何依赖即可按照vue的语法进行使用。但中大型商用项目中,还是建议使用工程化方式使用vue,vue提供了官方脚手架vue-cli,可以快速构建vue项目,脚手架会帮助开发者创建好建议的工程目…

【GamePlay】入门篇

【GamePlay】入门篇 游戏性编程是指通过一系列游戏系统将游戏想法变成现实的过程。 本次的简例以NPC设计为主。 通常在进行脚本设计前,对NPC的属性进行基本的添加和设定,诸如动画系统、物理系统等等。 1.动画系统 添加Animator组件,绑定骨骼。…

HttpHttps

http协议与https Http 客户端发送一个HTTP请求到服务器的请求消息包括以下格式: **请求行(request line)、请求头部(header)、空行 和请求数据四个部分组成。** Get请求例子,使用Charles抓取的request&…

vue2使用axios post跳坑,封装成模块

终于将vue-resource替换成axios了,其中像application/x-www-form-urlencoded发送的头信息以及返回的response结果这两点都需要注意一下。 其实https://github.com/mzabriskie/axios也有说明的。因为我在vue-resource中使用了Vue.http.options.emulateJSON true;&am…

并发与多线程

并发 并发(concurrency)是指CPU在某个时间段内交替处理多任务的能力。每个CPU不可能只顾着执行某个进程,而让其他进程一直等待被执行。所以,CPU把可执行时间均分成若干份,每个进程执行一份或多份时间后,记录…

synchronize原理

synchronized的三种应用方式 一. 修饰实例方法,作用于当前实例加锁,进入同步代码前要获得当前实例的锁。 二. 修饰静态方法,作用于当前类对象加锁,进入同步代码前要获得当前类对象的锁。 三. 修饰代码块,指定加锁对象&…

不能修改“System Roots”钥匙串

iOS mac添加证书 不能修改“System Roots”钥匙串错误 如图: 解决方式: 打开钥匙串---登录---,直接把证书拖过来 然后,查看--我的证书,里面,找到证书,即可

未来产品的设计

Donald A. Norman继《情感化设计》之后,又一设计精品力作: 未来产品的设计样章试读及本书预定:http://www.china-pub.com/195642市场价 :¥39.00 会员价 : ¥29.25(75折) 【作  者】(美)Donald…

css之字体图标

SVG与字体图标 SVG图片是矢量图片,不会随着图片的伸缩而影响质量,通常把只有一种颜色的图标做成SVG,通过SVG生成字体图标,放到项目中使用。 https://icomoon.io/是一个比较快捷的生成字体图标的线上工具,进入主页后&…

研发阶段模拟接口数据

因为在vue-cli工程中需要创建很多.vue文件,我们希望创建vue文件和创建html、css、js文件一样右键即可选择创建,并且创建的文件中可预先写好模板代码。 webstorm-Preferences打开选项界面 选择File and Code Templates,点击绿色加号 填…

真实项目中 ThreadLocal 的妙用

一、什么是 ThreadLocal ThreadLocal 提供了线程的局部变量,每个线程都可以通过 set() 和 get() 来对这个局部变量进行操作,但不会和其他线程的局部变量冲突,实现了线程间的据隔离。 简单讲:一个获取用户的请求线程 A,…

css之flex布局

flex布局是css3中的重要布局方式,称为“弹性布局”,每次想到它主要是遇到元素垂直居中、元素宽高自适应的问题,这些问题在flex中都能过简单设置就解决,它更像是原生APP中的布局操作,布局不必写N多的盒模型代码来实现&a…

javascript对URL中的参数进行简单加密处理

javascript的api本来就支持Base64,因此我们可以很方便的来进行编码和解码。 var encodeData window.btoa("namexiaoming&age10")//编码 var decodeData window.atob(encodeData)//解码。 下面来个具体的例子来说明如何对url中参数进行转码&#xff…

HTML元素title里面如何换行

在调试代码的时候我就遇到一个问题,HTML元素title里面通常只显示一行,那我想要他换行,就是多行显示,如何实现?JS代码里面比如Alert里面又该如何换行? 经过我的一番实验 要实现这种效果有几种方法&#xff0…

div内图片和文字水平垂直居中

大小不固定的图片、多行文字的水平垂直居中 本文综述 想必写css的都知道如何让单行文字在高度固定的容器内垂直居中,但是您知道或者想过让行数不固定的文字在高度固定的容器内垂直居中呢?本文将会告诉你如何实现多行文字的垂直居中显示。 关于图片垂直居…

敏友的【敏捷个人】有感(3): 有感于“敏捷个人”讨论与练习

2010年我对个人管理进行了自己的一些思考,在2011年提出敏捷个人概念,并且在线上、线下进行了多次交流,在一些大会上也做过分享。现在,已经有很 多IT和非IT的敏友们知道并在践行敏捷个人,帮助自己更快的成长。我收到大家…

jQuery编写插件

引言: 在项目中不同页面经常要用到已经写好的交互,比如弹窗,比如下拉菜单,比如选项卡,比如删除... 此时如果每次都把代码copy一份无疑是一件比较麻烦并且无趣的事情,而且个人认为有些low了,我们…

webstorm中nodejs代码提示

preferences->languages&frameworks->Node.js and Npm中选择一个本地的node版本 preferences->languages&frameworks->JavaScript->Libraries 勾选node.js Core 回到代码

Array.prototype.slice.call(arguments)

Array.prototype.slice.call(arguments)能将具有length属性的对象转成数组,除了IE下的节点集合(因为ie下的dom对象是以com对象的形式实现的,js对象与com对象不能进行转换)如:1 var a{length:2,0:first,1:second}; 2 Ar…