人脸检测项目实战的目的:检测到人脸框
1.数据源制作
数据获取
-
benchmark
是一个行业的基准,里面包含很多数据库、论文、源码和结果(经典论文)。
facedetection benchmark:WIDER Face、FDDB等。 -
优秀论文
通常实验阶段都会介绍它所使用的数据集,公开数据集可以下载。申请数据集时候,最好使用学校的,以edu结尾的邮箱。 -
论坛或者交流社区
例如,thinkface。 -
数据量
越大越好,至少以万为单位。下载包含有人脸的原始数据,标注保存的格式:
路径/***.jpg 40,60,250,300
实战项目是一个二分类项目,第一类是人脸,第二类是非人脸(只要不是人脸都可以)
- 对于正样本的制作:
对于原始数据,根据标注的坐标和OpenCV把人脸裁剪出来,完成正样本的制作。在完成裁剪之后,需要人工地对数据进行检查,如果存在问题,要对数据进行数据清洗。 - 对于负样本的制作
在原始数据上进行一个随机地裁剪,设定IOU(Intersection over Union)< 0.3 为一个负样本,但是这种方法可能存在将人脸数据裁剪成负样本,所以可以另外寻找不包含人脸的图像数据来制作负样本。
制作LMDB数据源
(一种Caffe支持的用于分类的数据源)
- 制作LMDB准备:
- 将制作的人脸正样本数据分成两部分,一部分用于训练,一部分用于验证,通常训练样本个数远远大于验证样本个数;负样本数据也按照同样的方式分成两部分。分好的数据分别放于train和val文件夹下,train文件夹包含0和1两个子文件夹,分别放置用于训练的负样本和正样本,val文件夹下放置验证集。
- 将数据分好之后,我们还需要写两个txt文档(脚本实现),train.txt和val.txt,对应作为训练集和验证集的标签。
- 制作LMDB数据源,用caffe提供的脚本文件进行制作。
#!/usr/bin/env sh
# Create the face_48 lmdb inputs
# N.B. set the path to the face_48 train + val data dirs
EXAMPLE=/home/×××/face_detect
DATA=/home/×××/face_detect
TOOLS=/home/×××/caffe/build/tools
TRAIN_DATA_ROOT=/home/×××/face_detect/train/
VAL_DATA_ROOT=/home/×××/face_detect/val/
# Set RESIZE=true to resize the images to 60 x 60. Leave as false if images have
# already been resized using another tool.
RESIZE=true
if $RESIZE; then
RESIZE_HEIGHT=227
RESIZE_WIDTH=227
else
RESIZE_HEIGHT=0
RESIZE_WIDTH=0
fi
if [ ! -d "$TRAIN_DATA_ROOT" ]; then
echo "Error: TRAIN_DATA_ROOT is not a path to a directory: $TRAIN_DATA_ROOT"
echo "Set the TRAIN_DATA_ROOT variable in create_face_48.sh to the path" \
"where the face_48 training data is stored."
exit 1
fi
if [ ! -d "$VAL_DATA_ROOT" ]; then
echo "Error: VAL_DATA_ROOT is not a path to a directory: $VAL_DATA_ROOT"
echo "Set the VAL_DATA_ROOT variable in create_face_48.sh to the path" \
"where the face_48 validation data is stored."
exit 1
fi
echo "Creating train lmdb..."
GLOG_logtostderr=1 $TOOLS/convert_imageset \
--resize_height=$RESIZE_HEIGHT \
--resize_width=$RESIZE_WIDTH \
--shuffle \
$TRAIN_DATA_ROOT \
$DATA/train.txt \
$EXAMPLE/face_train_lmdb
echo "Creating val lmdb..."
GLOG_logtostderr=1 $TOOLS/convert_imageset \
--resize_height=$RESIZE_HEIGHT \
--resize_width=$RESIZE_WIDTH \
--shuffle \
$VAL_DATA_ROOT \
$DATA/val.txt \
$EXAMPLE/face_val_lmdb
echo "Done."
Status API Training Shop Blog About
执行脚本文件,完成人脸LMDB数据源的制作。