一、实验内容
- 利用特征训练一个分类器(SVM)
- 按照sliding window思想编写代码,提取HOG并生成候选框;
- 使用分类器进行分类(Scoring each proposal)
- 编写非极大值抑制算法,去除一些置信度较低的候选框, 得到预测结果,实现人脸检测。
- 对实验结果进行分析。
二、实验原理
2.1 图片的HOG特征
概念:HOG,方向梯度直方图,是常用的一种目标检测的特征描述子。
提取流程:检测窗口、归一化图像、计算梯度、统计直方图、梯度直方图归一化、得到HOG特征向量。
检测窗口:HOG的检测窗口称为window,每个window包括几个块block,每个块是由细胞cell组成的,具体如下图所示:

图 1 HOG检测窗口的划分
黑色表示窗口的划分,蓝色表示块的划分,黄色表示细胞的划分。其中每个cell静止不动计算每个像素的方向梯度,block和window滑窗移动,实现不同区域的检测。
归一化图像:这一步的目的是减少光照因素影响,将整个图像进行一个归一化,分为Gamma空间和颜色空间归一化,可以避免在图像的纹理强度中,局部的表层曝光贡献度的比重较大的情况。其中gamma值可以根据效果修改,代码中默认为0.5。
计算梯度:计算图像的水平和竖直方向的梯度,并根据横纵坐标的梯度,计算整体梯度方向,可以参考平面直角坐标系中斜率的计算。代码中可以使用Sobel算子进行卷积计算,再得到tan值。
构建梯度直方图:梯度直方图是在cell层级进行构建的,横坐标的区间称为bins,若bins为9,则将180°等分为9个区间,每个区间横跨20°,先判断像素点梯度方向所属的区间,再根据像素点的梯度值和方向大小进行加权统计,可用线性加权、平方根等各种加权方法。
直方图归一化:在block一层,对每个cell进行颜色、亮度的归一化,去掉光影、阴影的影响。
得到特征向量:通过滑窗,将提取到的HOG特征首尾相连,形成一个大的一维向量,就是最后得到的特征向量。
2.2 非极大值抑制(NMS)
概念:NMS,非极大值抑制,原理是找到所有局部最大值,并抑制非局部最大值。
目标检测推理的过程中会产生很多的候选检测框,很多检测框都是检测同一个目标,导致候选框之间的重叠部分过多,这时使用非极大值抑制可以找出局部最优的框,去掉重复部分。
算法流程:根据置信度得分进行排序、选择置信度最高的候选框加入到最终结果列表,并在候选框中删除、计算所有边界框的面积、计算置信度边界框与其余边界框的IoU、删除大于阈值的候选框,直至候选集为空。
IoU:交并比,计算两个边框交集和并集的比值,可参考下图:

图 2 IoU计算示意图
PS:图片来自博客:目标检测之 IoU_黑暗星球的博客-CSDN博客_目标检测iou
三、实验结果与分析
3.1 实验流程与结果数据
使用HOG特征+SVM分类器进行人脸检测。
流程为:构建负例数据集、提取图像HOG特征、训练SVM分类器、人脸检测。
3.1.1 构建负例数据集
实验使用的数据集是RAF-DB的子集,有原图、人脸裁剪图、检测边界框,但无负例图片,需要使用原图和边界框log文件构建非人脸图片,核心代码如下:
- def build_neg_img(original_folder, box_folder, output_folder):
- mkdir(output_folder)
- for filename in tqdm(os.listdir(original_folder)):
- original_img = cv2.imread(original_folder + "\\" + filename)
- axis_list = get_box(box_folder, filename)
- # 设边界框的左上角为M点,右下角为N点,图片的原点位于左上角,x轴向右为正方向,y轴向下为正方向
- Mx = axis_list[0]
- My = axis_list[1]
- Nx = axis_list[2]
- Ny = axis_list[3]
- box_width = Nx - Mx
- box_height = Ny - My
- # 与人脸边界框错开构建负例图像,左上角起始点为K
- if Mx - box_width >= 0:
- # 在边界框左侧框选同样大小的负例框
- Kx = Mx - box_width
- Ky = My
- elif My - box_height >= 0:
- # 在边界框上方选同样大小的负例框
- Kx = Mx
- Ky = My - box_height
- else:

本文介绍了一个使用HOG特征和SVM进行人脸检测的实验。实验包括构建负例数据集、提取HOG特征、训练SVM分类器以及进行非极大值抑制(NMS)以检测人脸。实验分析了NMS和置信度最大值两种策略的结果,对于单个人脸识别,NMS可能不尽如人意,但适合多人脸识别;而置信度最大值策略在单个人脸识别上效果好,但在多人脸场景下可能出现遗漏。
4460

被折叠的 条评论
为什么被折叠?



