人脸检测——UnitBox
本次介绍一篇来自旷视科技的人脸检测文章:
《2016 ACM MM UnitBox: An Advanced Object Detection Network》.
代码应该是不会放出来了,但好在实现比较简单。(插播一句,论文里面说速度可以达到12fps,我有点慌,大家看看科学不)
—————————— 分割线 ——————————
Introduction
目标检测可以视作两个任务:目标定位 + 视觉识别。
基于深度学习的目标检测大致又可以分为三个部分:
(1)Region Proposal
这一步主要是为了寻找人脸候选区域,常见的方法有Selective Search、 EdgeBoxes 和stages of cascade detectors。这一步往往是算法的瓶颈所在,与性能和速度关联紧密。
(2)Recognition and Categorization
这一步就是为了对窗口进行分类,二分类(人脸非人脸),或者多分类(多目标检测)。
(3)Bounding Box Regression
进一步调整检测框,使之更加精准。(可以看做由粗到细的refine过程)
对比两种方法:
Faster R-CNN: 使用region proposal network(RPN)来预测框,但是由于anchor box的尺寸和长宽比都是预先设定的,因此很难处理大的形状变化,特别是小的目标。
Densebox: 直接预测当前点与ground truth的四条边的距离,并且使用L2 Loss。但是为了检测不同尺度的目标,Densebox使用了图像金字塔,所以计算量很大。
上述两种方法都使用了L2_Loss,这也就意味着把四个坐标当成了独立变量,这显然是与实际不符的,这也是为什么框不准的原因。
因此
为了方便灵活灵活地处理各种角度的目标,作者提出了一种新的IOU_Loss,将四个回归值当做一个整体来处理,不仅提高了准确率而且加速了收敛。
—————————— 分割线 ——————————
IOU Loss Layer
这部分就进入正题了,首先说明一下,预测的四个值并不是人脸框的坐标,而是坐标差值,如下图:
从上图出发,我们来认识几点:
L2 Loss Layer
L2 Loss可以看做是欧氏距离,很明显这里面四个坐标是被当做独立变量来优化的。这可能导致下面的问题:
左边的人脸框明显比右边的要准一点,但是脸太大,则导致loss最终反而比右边的大,然后我们就去惩罚这个loss,结果最后检测器对小人脸效果就不好了。
IOU Loss Layer:Forward
IOU Loss的定义在第一张图里面其实已经给出来了,这里给出计算一整个人脸的Loss的流程图:
补充说明:
(1)UnitBox是一个端到端的网络,即输出和输入尺寸一致(后面会讲),因此上面是在循环计算每一个像素的loss;
(2)在输出四个坐标的前一层是一个ReLU层,以此来保证四个预测距离都是正值;
(3)\(IOU \in [0,1]\),因此可以直接忽略bounding box的尺度问题。因此UnitBox可以在多尺度上训练而直接在但尺度上测试。
IOU Loss Layer:Backward
这一部分正常求导即可,有兴趣可以自己导一下,或者参看原文。这里直接给出最后的导数定义:
由上式可以看出,IOU Loss的目的就是使重叠区域越大越好。
—————————— 分割线 ——————————
UnitBox Network
网络结构如下图:
使用VGG-16模型finetune,只不过去掉了全连接层,然后又搞成了带有两个分支的全卷积网络:一个分支是pixel级别的bounding box差值坐标,一个是分类得分。
显然输入应该有3个:原始图片,分类得分图(来描述一个像素是否落入ground truth),包围框误差坐标图(来描述与ground truth四条边的距离)
上图中的虚线表示线性插值和crop操作,以保证输出和输入大小一致。
分类得分使用的是sigmoid交叉熵loss,该loss既可以和IOU Loss分开训练也可以联合训练。
如何最终定位人脸:
选定一定阈值,用一个椭圆在分类得分图上框出一个人脸,,然后选择中心坐标,找到其对应的bounding box。
—————————— 分割线 ——————————
Experiments
使用汤晓鸥的WiderFace数据集,这个数据集比较难。
结论:收敛更快,对尺度更鲁棒。
人脸检测——UnitBox相关推荐
- 自然场景人脸检测技术实践
一. 背景 人脸检测技术是通过人工智能分析的方法自动返回图片中的人脸坐标位置和尺寸大小,是人脸智能分析应用的核心组成部分,具有广泛的学术研究价值和业务应用价值,比如人脸识别.人脸属性分析(年龄估计.性 ...
- 尺度不变人脸检测:Group Sampling
点击我爱计算机视觉标星,更快获取CVML新技术 CV君:前几天发布了目标检测中的不平衡问题综述,引起了不少朋友的关注.在检测领域由于数据和算法都较复杂,不平衡问题很多.本文研究的是针对人脸检测中正负样 ...
- 人脸检测江湖的那些事儿——从旷视说起
点击我爱计算机视觉标星,更快获取CVML新技术 本文来自知乎Face++ Detection组专栏,52CV获作者王剑锋授权转载. https://zhuanlan.zhihu.com/c_10659 ...
- 选择性细化网络用于高性能人脸检测
人脸检测 人脸检测是自动人脸识别系统中的一个关键环节.早期的人脸识别研究主要针对具有较强约束条件的人脸图象(如无背景的图象),往往假设人脸位置一直或者容易获得,因此人脸检测问题并未受到重视. 随着电 ...
- OpenCV+python:人脸检测
1,人脸检测简介 人脸检测的模型主要有两类,一类是知识模型,根据眼睛.嘴.鼻子的相对位置或面部不同部位的颜色深度差异来检测人脸,另一类是统计模型,把海量的人脸数据转换成二维像素矩阵,从统计的观点出发构 ...
- 使用Python,OpenCV和Haar级联进行人脸检测——轻量级的人脸检测器
使用Python,OpenCV和Haar级联进行人脸检测--轻量级的人脸检测器 1. 效果图 2. 原理 2.1 项目结构 2.2 [haarcascade_frontalface_default.x ...
- opencvmediapipe 人脸检测+摄像头实时
文章目录 单张人脸关键点检测 单张图像人脸检测 摄像头实时关键点检测 单张人脸关键点检测 定义可视化图像函数 导入三维人脸关键点检测模型 导入可视化函数和可视化样式 读取图像 将图像模型输入,获取预测 ...
- opencv算法+人脸检测
文章目录 ORB算法 视频读写 图像人脸识别 摄像头实时人脸检测 ORB算法 orb算法结合了Fast和Brief算法,提出了构造金字塔,为Fast特征点添加了方向,从而使得关键点具有了尺度不变性和旋 ...
- 基于YOLO的密集人脸检测(课程设计)
基于YOLO的密集人脸检测(课程设计) 数据集+代码下载地址:下载地址 实现的功能 添加关键点检测分支,使用wing loss Installation Clone and install 使用src ...
- Matlab人脸检测算法详解
这是一个Matlab人脸检测算法详解 前言 人脸检测结果 算法详解 源代码解析 所调用函数解析 bwlabel(BW,n) regionprops rectangle 总结 前言 目前主流的人脸检测与 ...
最新文章
- Linux环境编程--waitpid与fork与execlp
- 济南python工资一般多少钱-济南Python人工智能编程
- tomcat7.0.8的高级应用-apr1.4.2安装
- Tomcat9.0.46 下载地址
- 镜像电流源特点_9000大型地网变频大电流接地特性测量系统介绍
- Intel Edision入门
- UbbCode用正则替换指定格式的输入实现想要的输出
- Oracle用户和模式的区别
- 设计模式七:Adapter(适配器)——类对象结构型模式
- python算术平方根_Python 平方根
- php dth网络节点,基于 DHT 网络的磁力链接和BT种子的搜索引擎架构
- 澳大利亚每日电价和需求文本数据(2015-2020)
- vue 中deep使用
- AMESim锂离子电池包电化学机理模型
- Java中LinkedList详解
- Threejs系列--10游戏开发--沙漠赛车游戏【基础事件处理器】
- javafx 实现绘图板
- AngularJs ng-repeat重复项异常解决方案
- echarts最常绘制的图形
- Jmeter多线程并发和压测结果分析