级联人脸检测--A Convolutional Neural Network Cascade for Face Detection

A Convolutional Neural Network Cascade for Face Detection CVPR2015

https://github.com/anson0910/CNN_face_detection https://github.com/mks0601/A-Convolutional-Neural-Network-Cascade-for-Face-Detection https://github.com/IggyShone/fast_face_detector

本文早期使用级联CNN网络进行人脸检测代表性文献,在速度和精度上效果和以前算法相比都有所提升。 缺点:各个CNN trained sequentially, 不是 end-to-end, which may not be desirable

最早最经典的级联人脸检测算法是 Viola-Jones face detector,使用了 Haar feature,这个检测器对于正面的人脸效果还是不错的。但是对于实际应用环境中人脸姿态的变化,人脸表情的多样性,光照的多样性,使其检测性能降低很多。 究其原因主要还是 Haar feature 过于简单了。

后来很多学者就对 Viola-Jones face detector 提出改进,使用更先进的特征,虽然先进特征的计算量增加了,但是相应级联的层数也减少了,所以总体上计算量可能减少了,精度提高了。所以我们认为将更先进的特征应用于人脸检测效果应该更好。考虑到CNN特征的计算量很大,所以我们使用级联CNN来进行人脸检测。

3.1. Overall framework 我们的思路大致如下:首先使用一个小型网络 12-net 对图像进行全局搜索人脸候选区域,检测区域是 12×12图像块,搜索步长是4个像素,可以快速排除90%的非人脸区域,使用非极大值抑制排除一些重叠区域,再对剩下的候选区域使用一个小网络 12-calibration-net 进行人脸矩形框微调,包括位置和尺度。微调后再使用一个中型网络 24-net 对微调后的人脸候选区进行二分类,检测区域是 24×24 图像块,再排除90%的非人脸区域,再对剩下的候选区域使用一个中型网络 24-calibration-net 进行人脸矩形框微调,包括位置和尺度,使用非极大值抑制排除一些重叠区域,微调后再使用一个大型网络 48-net 对微调后的人脸候选区进行二分类,检测区域是 48×48 图像块,非极大值抑制,最后用 48-calibration-net 进行人脸矩形框微调 输出结果。

检测示意图:

3.2. CNN structure

三个人脸二分类CNN网络结构

三个人脸矩形框矫正CNN网络结构

矫正效果示意图:

有无多尺度检测对比

AFW dataset

FDDB

The proposed detector is very fast, achieving 14 FPS for typical VGA images on CPU and can be accelerated to 100 FPS on GPU

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏alexqdjay

HashMap 多线程下死循环分析及JDK8修复

1.1K4
来自专栏xingoo, 一个梦想做发明家的程序员

AOV网络拓扑排序

这个算法,主要是为输出一个无环图的拓扑序列 算法思想: 主要依赖一个栈,用来存放没有入度的节点,每次读取栈顶元素,并将栈顶元素的后继节点入度减一,如果再次出现入...

1975
来自专栏拭心的安卓进阶之路

Java 集合深入理解(6):AbstractList

今天心情比天蓝,来学学 AbstractList 吧! ? 什么是 AbstractList ? AbstractList 继承自 AbstractCollec...

20910
来自专栏xingoo, 一个梦想做发明家的程序员

Spark踩坑——java.lang.AbstractMethodError

百度了一下说是版本不一致导致的。于是重新检查各个jar包,发现spark-sql-kafka的版本是2.2,而spark的版本是2.3,修改spark-sql-...

1260
来自专栏ml

朴素贝叶斯分类器(离散型)算法实现(一)

1. 贝叶斯定理:        (1)   P(A^B) = P(A|B)P(B) = P(B|A)P(A)   由(1)得    P(A|B) = P(B|...

3597
来自专栏java闲聊

JDK1.8 ArrayList 源码解析

当运行 ArrayList<Integer> list = new ArrayList<>() ; ,因为它没有指定初始容量,所以它调用的是它的无参构造

1242
来自专栏MelonTeam专栏

ArrayList源码完全分析

导语: 这里分析的ArrayList是使用的JDK1.8里面的类,AndroidSDK里面的ArrayList基本和这个一样。 分析的方式是逐个API进行解析 ...

4729
来自专栏Phoenix的Android之旅

Java 集合 Vector

List有三种实现,ArrayList, LinkedList, Vector, 它们的区别在于, ArrayList是非线程安全的, Vector则是线程安全...

692
来自专栏聊聊技术

原 初学图论-Kahn拓扑排序算法(Kah

2998
来自专栏xingoo, 一个梦想做发明家的程序员

20120918-向量实现《数据结构与算法分析》

#include <iostream> #include <list> #include <string> #include <vector> #include...

1856

扫码关注云+社区