DDFD(Deep Dense Face Detector)是一种基于AlexNet进行微调(finetune)改进的一种深度学习的网络模型。是雅虎公司2015年的作品,并发表在了cvpr,论文名为Multi-view Face Detection Using Deep Convolutional Neural Networks。可以实现基于多角度,遮挡,关照下的人脸检测。是一种unconstrain的人脸检测算法。
传统的人脸检测途径有3种:
(1)基于Cascade级联分类器的人脸检测,例如Viola Jones,NPD(Normalized Pixel Difference)等。
(2)基于DPM(deformable part models)的人脸检测,即将人脸分割成好几个部件进行检测的算法,例如DPM。
(3)基于神经网络的方法,例如,DDFD,RCNN等、
该模型由5个卷积层,3个全连接层组成,在最后一个全连接层直接输出,没有经过SVM分类器处理。网络结构face_full_conv.prototxt如下所示:
从下面左图的人脸检测,可以看出,DDFD对各种姿势有很强的抵抗能力,从右侧的能量图(heat-map),也叫特征图(就像ITTI模型提取的那样),可以看出对于正前方的人脸有着最高的score,而随着偏转角度、姿势的变换越大,score就会越低,但是都可以满足高于周围的背景区域,从而实现多角度,多姿态的人脸检测。
程序github网址https://github.com/watersink/caf_face_detection,模型文件下载地址https://pan.baidu.com/s/1i4Qokhn
由于原作者没有给出其CMakelists,这里贴出我自己的CMakeLists,将其中 cafferoot替换为自己的caffe根目录, opencvroot替换为自己的opencv根目录。cmake_minimum_required (VERSION 2.8)
project (caf_face_detection)
add_executable(caf_face_detection data_transformer.hpp face_detection.cpp face_detection.hpp main.cpp)
include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
if(COMPILER_SUPPORTS_CXX11)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
elseif(COMPILER_SUPPORTS_CXX0X)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
else()
message(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.")
endif()
include_directories ( /cafferoot/include
/usr/local/include
/usr/local/cuda/include
/usr/include)
target_link_libraries(caf_face_detection / cafferoot /build/lib/libcaffe.so
/usr/local/lib/libglog.so.0
/usr/lib/x86_64-linux-gnu/libboost_system.so
/opencvroot /build/lib/libopencv_highgui.so
/ opencvroot /build/lib/libopencv_core.so
/ opencvroot /build/lib/libopencv_imgproc.so
)
运行该程序会发现,在程序的运行过程中,其会自动的跟新face_full_conv2.prototxt,有种增量学习(incremental learning)和在线学习(online learning)的味道,网络结构face_full_conv2.prototxt如下
程序运行效果如下: