红外行人检测HOG+SVM——HOG学习

在学习HOG特征的时候,发现一片英文文章讲得浅显易懂。因此翻译在这里学习。(文中的图片均来自翻译原文)

原文链接:Histogram of Oriented Gradients

翻译:梯度方向直方图Histogram of Oriented Gradients (HOG)

一次不太成功的项目实战:HOG特征+SVM实现交通标志的检测 这篇博文写的也是相当不错,很有工程性


Histogram of Oriented Gradients系列博客Image recongnition and object detection.

完整的tutorials系列如下:

  1. part1:图像识别——使用传统的计算机视觉方法
  2. part2:HOG直方图
  3. part3:图像识别的例子code
  4. part4a:训练一个更好的eye detector
  5. part4b:使用传统的计算机视觉方法进行目标检测
  6. part5:怎么训练和测试自己的OpenCV Object detector
  7. part6:使用深度学习的图像识别
    1. 神经网络介绍
    2. 理解反馈神经网络
    3. 利用卷积神经网络CNN进行图像识别
  8. part7:深度学习的目标检测

红外行人检测HOG+SVM——HOG学习

1.一次不太成功的项目实战:HOG特征+SVM实现交通标志的检测

  • resize导致扭曲变形,对SVM来说是不利的
  • 正样本需要包含一部分背景信息,有利于提高模型对噪声的鲁棒性
  • 可以扩充样本,镜像等
  • 针对性的选取负样本,有利于模型训练的负样本。
  • SVM惩罚因子C的取值对训练的影响很大
  • 训练集:3474,正样本扩充为原来的2倍,负样本没有扩充。验证集322的accuracy为97.2%。
  • Recall低是漏检导致的,不是分类器导致的。
  • bad case分析
    • 光照不均匀,提取不到背景框
    • 复杂或相似的背景干扰,提取不到背景框
    • 局部遮挡或丢失——在特征提取过程中加入了噪声,主要影响分类器的识别。
    • 多个标志相邻,检测会当成整体,导致漏检和误检。
    • 相似标志或背景的干扰。
    • 小目标检测,resize后的图像往往不能准确的反映小目标的HOG特征(分辨率过低),导致提取的特征很粗糙,不利于分类。

这样候选区域虽然选出来了,但是还需要考虑到一件事,我们找出的候选框大小不一,而我们后面的SVM需要固定长度的特征向量因此在HOG特征提取之前,应把所有的候选区域调整到固定大小(代码中我用的是64×64),这里提供两种解决方案:

  • (1)不管三七二十一,直接将候选区域resize成指定大小,这样做很简单,但是扭曲了原始候选区域的目标信息,不利于SVM的识别(当然,如果用卷积神经网络,这一点问题不是太大,因为卷积神经网络对于物体的扭曲形变有很好的学习能力);
  • (2)提取正方形候选区域,然后resize到指定大小。即对于一个(H×W)的候选框,假设H<W,我们先以长边W围绕候选框中心裁剪出正方形区域,然后再resize,这样做的好处是避免了大部分候选框中目标的扭曲变形。为什么说大部分呢?当某一个候选框在靠近图像边界的时候,如果使用长边裁剪,会出现越界的问题。对于这种情况,我的做法是先沿着边界裁剪出一个矩形区域,再进一步resize成指定大小(细节和代码我会在下面SVM数据集制作上详细介绍)。

SVM分类的数据集创建,构建一个用于分类的数据集。从目标检测的数据集中裁剪出目标区域作为SVM分类的正样本,同时裁剪出其他的区域作为负样本。

(1)对于包含目标的图片,直接根据标签信息裁剪出一个正方形区域(以长边为边长,少数边界情况需要变形),并移除一些不好的样本(size很小的区域)。这里裁剪出的正样本或多或少包含一部分背景信息,这有利于提高模型对噪声的鲁棒性同时也为样本较少的情况下数据扩充(如仿射变换)提供了可能

(2)对于不包含任何目标的图片,通过颜色阈值分割(红色和蓝色)和凸包检测提取一些区域,并裁剪正方形区域(以长边为边长),移除面积较小的区域。与直接随机裁剪相比,这种做法更有针对性,因为在检测提取候选框的时候,很多和交通标志颜色很像的区域会被找出来,直接把这些样本当作负样本对于我们的模型训练很有帮助

 

小目标检测
当目标较小的时候,我们在HOG特征提取之前先进行了resize操作,但resize后的图像往往不能准确的反映小目标的HOG特征(分辨率过低),导致提取的特征很粗糙,不利于分类。