faceDetection对比实验
来源:互联网 发布:访问网站出现 php探针 编辑:程序博客网 时间:2024/06/07 12:57
对比实验
FDDB数据集概述
初探人脸检测,纵有多种deeplearning方法,工程限制,还是采用了最原始的方法。
速度上来说,首先深大教授的libfacedetection方法是最快的,其次dlib、再次opencv。
在我自己检测到的速度对比来看:
----------dlib------------avg: 0.0943026041667 ssum: 181.061 s------libfacedetection------avg: 0.00707299270073 ssum: 13.566 s----------opencv----------avg: 0.180855949896 ssum: 346.52 s
对于三种算法的对比实验,我采用了国际上广泛使用的数据集FDDB(homepage:http://vis-www.cs.umass.edu/fddb/)
在evaluation的readme中,官方指出了检测结果需要输出的格式:
...<image name i><number of faces in this image =im><face i1><face i2>...<face im>...
Face的检测结果支持两种格式,矩形和椭圆形:
4 a. Rectangular regions Each face region is represented as: <left_x top_y width height detection_score> 4 b. Elliptical regions Each face region is represented as: <major_axis_radius minor_axis_radius angle center_x center_y detection_score>.
其中,除了检测到的感兴趣区域的一些基本信息,还需要的一项指标为detection_score
.数据的标注中,detection_score
均为1。
Dlib
查阅dlib的文档,发现python端口有直接输出分数的接口。在FDDB数据集上跑了一遍,发现得到的结果中的分数并不在(0,1)之间,并且出现了负数。筛选掉负数之后,得到:
maxScore = 3.9349198495200minScore = 0.0018603195987avgScore = 1.5157489330250
于是对所有的分数进行归一化处理:
得到最终的分数。
OpenCV
opencv中,并没有直接的detection_score的参数,外网上提到的也不多。有人提到将opencv人脸检测函数detectMultimScale还有一个重载函数:
void CascadeClassifier::detectMultiScale(InputArray image, vector<Rect>& objects, vector<int>& numDetections, double scaleFactor=1.1, int minNeighbors=3, int flags=0, Size minSize=Size(), Size maxSize=Size())void CascadeClassifier::detectMultiScale(InputArray image, std::vector<Rect>& objects, std::vector<int>& rejectLevels, std::vector<double>& levelWeights, double scaleFactor=1.1, int minNeighbors=3, int flags=0, Size minSize=Size(), Size maxSize=Size(), bool outputRejectLevels=false )
直接暴力调用,将结果输出并且可视化,得到:
看起来和分数很像了。联系opencv中人脸检测算法采用的Adaboost方法训练出来的分类器,可以知道最终得到的分类器是一个级联分类器,如下图所示。
图片从从第一个分类器开始,当第一个分类器判断为True(是人脸),则送入下一个分类器,否则直接判断为不是人脸。通过一层一层分类器的判断,成功通过最后一个level的候选窗口才是正确的人脸。所以在函数参数中,rejectLevel表示被拒绝的层数,采用rejectLevel中最后一个level的levelWeight作为检测分数,还是有一定的道理。但是采用haarcascade模型得到的分数一般都很大,最后两层的输出基本在80~120以内,和dlib的分数相比差太多。并且在检测过程中如何进行筛选,每个level所采用的threshold到底是多少有待思考,我直接打开xml文件,文件描述的stagethreshold都在1~10之间,和得到的levelweight相差太大,还是有点找不到答案。
- faceDetection对比实验
- facedetection
- android4.0 FaceDetection笔记
- android4.0 FaceDetection笔记 .
- seetaface FaceDetection模块
- 人脸检测源码facedetection
- 电磁波和声波对比实验
- 数据库性能对比测试实验
- 对facedetection程序的理解 --转载
- 使用FaceDetection进行人脸识别
- opencv(一)调试opencv中的facedetection
- 算法与笨办法对比实验
- 重现unladen-swallow的性能对比实验
- sizeof与strlen对比小实验。。
- 实验:分区别对比普通表
- PostgreSQL和MySQL的性能对比实验
- 几种字符串匹配算法性能简单实验对比
- 判断字符串为空方法性能对比实验
- android:imeOptions属性详解以及无效处理
- HDU 1394:Minimum Inversion Number
- IT之路-进制、运算符、控制语句-ZCSDN.2017.7.13
- (52)多个生产者多个消费者出现的问题,解决方式synchronized方法和Lock方法
- JackSon将json串转成List<Object>,异常com.fasterxml.jackson.databind.JsonMappingException
- faceDetection对比实验
- 关于File.ReadAllText Method (String)
- Spring学习之AOP基础
- 使一个布局中的所有事件失效
- DC-4: 循环结构
- CSS基础知识一
- POJ 3159 Candies 笔记
- 离散傅里叶变换
- 51nod 1453 抽彩球 (思维+排列组合)