CVPR2014: DeepID解读

上周五就要发的,拖........拖.......拖到现在,文中有不准确的地方,欢迎批评指正。
DeepID是一种特征提取的算法,由港中文汤晓鸥团队于2014年提出,发表于CVPR2014。其应用领域是人脸识别的子领域——人脸验证,就是判断两张图片是不是同一个人。之前的人脸验证任务主要的方法是使用过完备的(over-complete)低层次特征,结合浅层的机器学习模型进行的。过去的方法常常是将人脸提取出几万乃至几百万的特征,然后将特征进行降维,再计算两个特征的相似度,本文提出一种使用深度学习提取人脸深层次特征(称之为DeepID)的方法。DeepID特征由人脸分类任务学习得到,此特征可以用于人脸验证中,最终在LFW数据集上取得了97.45%的成绩。
一、网络架构
DeepFace的架构并不复杂,层数也不深。网络架构由4个卷积层 + 1个全连接层构成。
二、从实现过程,理解网络
(一)做patch
1.截区域
按照人脸特征点的分布,在1张输入图片上取10个区域,如下图所示:
2.数据增强
(1)将每个区域,resize成3中不同尺度的pic,如下图所示:
(2)将图像进行水平翻转
(3)提取灰度图
(4)patches总量
经过前3步的数据增强,此时的1张image,产生了10 * 3 * 2 * 2 = 120个区域,将每1个区域与其水平翻转的区域,送入网络,进行特征提取。此步共训练60个神经网络。输出160*2维的DeepID
3.增加patches效果
由下图可见,增加patches数量后,网络性能,相对于只用了1整张image的原始结构,提升明显,感觉就是数据增强的原因。
(二)过ConvNets
以1个区域的输入为例,如果区域是长方形,则resize成39*31,如果如果区域是正方形,则resize成31*31,假设本次输入的区域是长方形,喂入网络,如上图所示。
图片经过4层卷积,第3层,和第4层的feature map分别是3*2*60,和2*1*80维。将最后2层的feature map分别过全连接层,concatenate成1个160维的vector
Concatenate方式:在同一维度上叠加
不同hierarchy的Feature map叠加在一起,分类器可以看到多尺度的图像。想当于联系了上下文,网络性能更好。
DeepID自身的分类错误率在40%到60%之间震荡,虽然较高,但DeepID是用来学特征的,并不需要要关注自身分类错误率
将上文160维的vector送入soft-max进行分类,输出10000分类的结果。60个网络,各自对应各自预测的cls结果,如下图所示:
三、利用DeepID做verification
本来以为做完cls,这个paper就可以结束了,然鹅,看了paper后面密密麻麻的2张,才意识到这个paper是关于verification的,之所以要做cls,主要是多分类的训练,可以提高ConvNet的提取特征的能力,终其目的,还是为了拿到提取的特征,做其关心的verification
(一)用前面训练好的网络,对2张图片做verification
每张照片,根据是否水平翻转,分为2组,每组有60个patches(10个区域,每个区域3个size,每个size有RGB和Grey2种模式)
将每1个区域与其水平翻转对应的部分,联合要对比的图片的同一个区域,组着在一起,送入网络,进行特征提取。此步调用了60个神经网络。
每张输入的160维vector,即为那个区域的identity,可视化160维的数据如下,可以看出相同人脸的identity相似度高,不同人脸的identity区别较大。
1张image经过网络,输出120(60个patches,每个patch里2张图)*160=19200维vector,以此vector表征人脸的identity。
将2张face的identity,送入joint Bayesian,判断是否为同1个人。
下面介绍一下classifier里面的joint Bayesian分类器
(二)Joint Bayesian
(1)经典Bayesian Face
在介绍joint Bayesian之前,先看一下joint Bayesian出现之前,业界广泛使用的经典Bayesian Face,算法描述如下
但是经典bayesian从2维投射到1维时,会丧失一些分区信息,导致在2维平面上可分的目标,在1维平面上变得不可区分。
从上图中可以看到,2-D的数据通过差分x-y映射到1-D上。O附近的点交错在一起, 使得在O附近的Class-1 和Class-2 无法区分开来。这就是经典Bayesian Face的缺陷
(2)joint Bayesian
针对经典Bayesian Face出现的问题,中科大,港中文以及亚研院的4位同学,在孙剑的指导下于2012年提出来joint Bayesian方法
(三)神经网络分类器
14年,当时的verification sota 分类器还是joint Bayesian,神经网络成绩一般,作者试了这2种方法后,选择了性能更优的joint Bayesian
四、网络成绩
DeepID相对于传统的PCA方法,表征能力进一步增强
DeepID在LFW数据集上取得了97.45%的准确率,相比于DeepFace的97.35%,获得了进一步的提高。ROC曲线如下:
五、数据指标
简单的介绍下ROC,以前看的时候没有仔细去弄明白这个指标,最近看好多paper上都有这个东西,查阅了资料,总结如下
ROC全名叫receiver operating characteristic curve,中文译为:接收者操作特征曲线,用以说明二分类器在识别阈值变化时的诊断能力。
ROC将伪阳性率(FPR)定义为 X 轴,真阳性率(TPR)定义为 Y 轴。绘图方法如下
(一)统计样本分类score
将一系列样本,按照positive可能性得分,进行排序
(二)计算真阳率和假阳率
以score作为阈值,依次对排好序的样本进行判断,score > threshold, 则判定为Positive, 否则判为Negative,每一个threshold计算1次真阳率和假阳率,做出这个20个样本的真阳率-假阳率对应图。
(三)ROC曲线优势
为什么要使用ROC呢?因为ROC曲线有个很好的特性:当测试集中的正负样本的分布变换的时候,ROC曲线能够保持不变。在实际的数据集中经常会出现样本类不平衡,即正负样本比例差距较大,而且测试数据中的正负样本也可能随着时间变化。下图是ROC曲线和Presision-Recall曲线的对比。
(a)和(c)为Roc曲线,(b)和(d)为Precision-Recall曲线。(a)和(b)展示的是分类其在原始测试集(正负样本分布平衡)的结果,(c)(d)是将测试集中负样本的数量增加到原来的10倍后,分类器的结果,可以明显的看出,ROC曲线基本保持原貌,而Precision-Recall曲线变化较大。
六、小结
分类数提高,可以学到表征力更强的identity
用更多的分类来训练网络,测试的error rate持续降低。一开始还疑惑DeepID初衷是做verification,为什么一开始要用softmax做cls,其实原因到这里就明了了,分类越多,学到的160维的identity表征力越强。

转载于:https://www.cnblogs.com/jiangshaoyin/p/10895927.html

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

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

相关文章

成大事必备9种能力 9种手段 9种心态(图)

成大事必备9种能力 1、摆正心态,敢于面对现实 对于那些不停地抱怨现实恶劣的人来说,不能称心如意的现实,就如同生活的牢笼,既束缚手脚,又束缚身心,因此常屈从于现实的压力,成为懦弱者;而那些…

解决:A component required a bean of type ‘javax.jms.Queue‘ that could not be found.

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 1. 情景描述:只是想简单写个 ActiveMQ 的小样,启动服务却报错: Error starting ApplicationContext…

【计算机视觉】OpenCV篇(3) - 图像几何变换(仿射变换/透视变换)

图像的几何变换从原理上看主要包括两种:基于23矩阵的仿射变换(平移、缩放、旋转和翻转等)、基于33矩阵的透视变换。 仿射变换基本的图像变换就是二维坐标的变换:从一种二维坐标(x,y)到另一种二维坐标(u,v)的线性变换: …

OpenCL 与 CUDA

根据网站资料,简单地汇编一下CUDA与OpenCL的区别。如有错误请指出。 题外话: 美国Sandia国家实验室一项模拟测试证明:由于存储机制和内存带宽的限制,16核、32核甚至64核处理器对于超级计算机来说,不仅不能带来性能提升…

Eclipse4JavaEE安装SpringBoot

第一步:下载SpringBoot SpringBoot官网下载链接 第二步:在Eclipse里进行安装 打开Eclipse,菜单栏Help -》Install New Software,进入下图界面,点击Add 设置Name和Location,Name看自己喜好,Locat…

从零开始玩转 logback、完整配置详解

官网地址:https://logback.qos.ch/manual/index.html 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 概述 LogBack是一个日志框架,它与Log4j可以说是同出一源&a…

ActiveMQ_Windows版本的安装部署

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 1, 保证电脑上安装了jdk6以上版本的java,并配置了好环境变量 ; 2, 官方下载地址:http://activemq.a…

如何将markdown转换为wxml

话说我要为技术博客写一个小程序版,我的博客解决方案是 hexo github-page,格式当然是技术控们喜欢的 markdown 了 。但小程序使用的却是独有的模版语言 WXML。我总不能把之前的文章手动转换成小程序的 wxml 格式吧,而网上也没完善的转换库&a…

巧妙喝水打败多种疾病

喝水,我们每天都会做的一件事,殊不知,喝水得当能打败多种疾病问题! 方法/步骤 一、很多人都听说过早晨喝一杯水对身体有好处,有人喝盐水?有人喝蜂蜜水?还有人为了美白喝柠檬水?到底喝什么水最好呢?人体经过了一宿的代谢&…

git 几个commit点合并成一个commit点

在用git做版本控制器的时候,经常会遇到以下情况: 1、在做1个功能的时候,你自己觉得代码没问题了,就本地commit,然后提交代码,在gitlab上发起和并请求,老大看完之后,觉得你还有修改的…

深入浅出 消息队列 ActiveMQ

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 一、 概述与介绍 ActiveMQ 是Apache出品,最流行的、功能强大的即时通讯和集成模式的开源服务器。ActiveMQ 是一个完全支持JM…

2018-2019 ACM-ICPC Nordic Collegiate Programming Contest (NCPC 2018) - 4.28

赛后补了几道 赛中我就写了两个... A - Altruistic AmphibiansGym - 101933A 看了眼榜没几个人做。就没看。 最后发现就是一个DP(但是我觉得复杂度有点迷) 题意:$n$只青蛙有参数$l,w,h$分别表示弹跳力,体重,身高&#…

消息队列技术介绍 : ActiveMQ、RabbitMQ、ZeroMQ、Kafka、MetaMQ、RocketMQ

一、 消息队列概述 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 消息队列中间件是分布式系统中重要的组件,主要解决应用耦合、异步消息、流量削锋等问题。实现高性能、高可…

python爬虫学习之页面登陆

爬虫学习的一点心得 登陆主要有3种方法:使用selenium,cookies,模拟表单登陆 个人对于一般情况使用cookies登陆 可以实现一次手动,长期自动,可以绕过登陆(登陆的相关信息密码,账号等会存于cookie…

消息队列 应用场景 解析

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 另外腾讯云-云社区还有一文不允许转载,但内容挺好的:https://cloud.tencent.com/developer/article/1006035 分布…

利用memcached实现CAS单点登录集群部署

前言:利用memcached实现CAS单点登录集群部署 负载均衡:将接口请求的有状态性变成无状态性。是我们在实现负载均衡时必要要解决的问题。以应用接口的session状态为例,一般解决方法都是将session数据和应用进行剥离,session数据统一…

分布式开放消息系统 ( RocketMQ ) 的原理与实践

分布式消息系统作为实现分布式系统可扩展、可伸缩性的关键组件,需要具有高吞吐量、高可用等特点。而谈到消息系统的设计,就回避不了两个问题: 消息的顺序问题消息的重复问题RocketMQ作为阿里开源的一款高性能、高吞吐量的消息中间件&#xff…

数据结构02-链表

说明:由于该数据结构是由java并且是原生实现,所以与C有一些出入,不过原理是相同的 1.链表的定义 为了表示线性表元素a与a1的逻辑关系,存储数据时,除了存储元素本身的信息之外,还存储了直接后继元素的位置信…

洛谷P2347 砝码称重 某一年noip提高组原题

可以转化为01背包求方案数的问题&#xff0c;dp数组f[][]表示第几个砝码能称出的重量,可压缩至一维 转移方程为f(i,j)f(i-1,j-w[i]) 当前我们可以称出的重量必定是由之前的砝码重量转移过来的 #include<bits/stdc.h> using namespace std; const int N550; const int max…

linux 下载、安装 maven

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 创建maven的文件夹并下载maven的tar包到此文件夹中 //进入一个目录 cd /usr/local//创建一个文件夹 mkdir maven//下载maven的tar包…