上周五就要发的,拖........拖.......拖到现在,文中有不准确的地方,欢迎批评指正。
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表征力越强。

CVPR2014: DeepID解读的更多相关文章

  1. FaceBook CVPR2014: DeepFace解读

      DeepFace是Facebook在2014年的CVPR上提出来的,后续出现的DeepID和FaceNet也都体现DeepFace的身影,可以说DeepFace是CNN在人脸识别的奠基之作,目前深 ...

  2. Object Detection · RCNN论文解读

    转载请注明作者:梦里茶 Object Detection,顾名思义就是从图像中检测出目标对象,具体而言是找到对象的位置,常见的数据集是PASCAL VOC系列.2010年-2012年,Object D ...

  3. SDWebImage源码解读之SDWebImageDownloaderOperation

    第七篇 前言 本篇文章主要讲解下载操作的相关知识,SDWebImageDownloaderOperation的主要任务是把一张图片从服务器下载到内存中.下载数据并不难,如何对下载这一系列的任务进行设计 ...

  4. SDWebImage源码解读 之 NSData+ImageContentType

    第一篇 前言 从今天开始,我将开启一段源码解读的旅途了.在这里先暂时不透露具体解读的源码到底是哪些?因为也可能随着解读的进行会更改计划.但能够肯定的是,这一系列之中肯定会有Swift版本的代码. 说说 ...

  5. SDWebImage源码解读 之 UIImage+GIF

    第二篇 前言 本篇是和GIF相关的一个UIImage的分类.主要提供了三个方法: + (UIImage *)sd_animatedGIFNamed:(NSString *)name ----- 根据名 ...

  6. SDWebImage源码解读 之 SDWebImageCompat

    第三篇 前言 本篇主要解读SDWebImage的配置文件.正如compat的定义,该配置文件主要是兼容Apple的其他设备.也许我们真实的开发平台只有一个,但考虑各个平台的兼容性,对于框架有着很重要的 ...

  7. SDWebImage源码解读_之SDWebImageDecoder

    第四篇 前言 首先,我们要弄明白一个问题? 为什么要对UIImage进行解码呢?难道不能直接使用吗? 其实不解码也是可以使用的,假如说我们通过imageNamed:来加载image,系统默认会在主线程 ...

  8. SDWebImage源码解读之SDWebImageCache(上)

    第五篇 前言 本篇主要讲解图片缓存类的知识,虽然只涉及了图片方面的缓存的设计,但思想同样适用于别的方面的设计.在架构上来说,缓存算是存储设计的一部分.我们把各种不同的存储内容按照功能进行切割后,图片缓 ...

  9. SDWebImage源码解读之SDWebImageCache(下)

    第六篇 前言 我们在SDWebImageCache(上)中了解了这个缓存类大概的功能是什么?那么接下来就要看看这些功能是如何实现的? 再次强调,不管是图片的缓存还是其他各种不同形式的缓存,在原理上都极 ...

随机推荐

  1. 003 centos7中关闭防火墙

    在centos7中,防火墙有了新的变化.下面是常用的几个命令. 1.查看状态 systemctl status firewalld 2.关闭防火墙 systemctl stop firewalld.s ...

  2. SSH SCP 远程密钥登录配置和服务器间的文件传输

    目录 ssh ssh是什么 ssh安装 使用ssh登录远程主机 退出登录 使用ssh执行单条指令 密钥验证 详细操作 scp rsync sftp 进阶 ssh ssh是什么 ssh (Secure ...

  3. flutter DateTime日期&时间选择器

    import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; import 'dart:async'; class ...

  4. Flutter Wrap 组件实现流布局

    Wrap 可以实现流布局,单行的 Wrap 跟 Row 表现几乎一致,单列的 Wrap 则跟 Row 表 现几乎一致.但 Row 与 Column 都是单行单列的,Wrap 则突破了这个限制,main ...

  5. 【DataBase】H2 DateBase的拓展使用

    连接模式 支持以下连接模式: 嵌入模式(使用JDBC的本地连接) 服务器模式(使用JDBC或ODBC over TCP / IP进行远程连接) 混合模式(同时本地和远程连接) 嵌入模式 在嵌入模式下, ...

  6. Linux记录-批量安装zabbix(转载)

    同一文件夹下建立pwd.txt,格式如下: ip username password ip username password #!/bin/bash cat pwd.txt | while read ...

  7. PngOptimizer PNG压缩工具

    好用,非常好用,速度快. 把图片拖入即可,同文件夹备份替换压缩. 点击下载

  8. Ubuntu18使用netplan设置多网口绑定

    Ubuntu18使用netplan设置网络参考:https://www.cnblogs.com/minseo/p/11325384.html 修改配置文件 /etc/netplan/50-cloud- ...

  9. python扫描器-sqlalchemy入库操作

    学习 [Python]Flask系列-数据库笔记 实践 #!/usr/bin/env python # -*- coding: utf-8 -*- from sqlalchemy import cre ...

  10. C# .NET UDP 形式调用 graylog,gelf

    -- 发送: GelfLogModel m = new GelfLogModel(); m.version = "1.1"; m.host = "128.0.14.39& ...