HOG与LBP:记一次对误检测的处理

背景

半月前我们的应用成功部署了。部署后发现检测模型在室外夜间环境下,极易产生误检测(False Positive),将各种稀奇古怪的东西(后文有图)识别为人体,深度学习的unreasonable也可见一斑。

这种误检测非常影响应用效果,因此必须想办法解决。一开始的设想是采用误报的样本去训练模型,但误报样本不能完全排除没有人在里面,仍需要人工标注才行。而我们应用面向的使用者不是很能胜任特别负载的操作。

于是开始将目光转向传统CV方法。之前从未接触过传统CV,但也知道有多种特征描述子descriptor,应用到了许多方面,如行人检测、人脸检测等。那么将误检测的detection截取出来,用某种描述子提取出它的特征加入特征库。后续的所有深度学习模型检测出的box都用这个描述子提取特征,与误检测特征库中的所有特征计算距离,如果小于一个阈值,就可以判断该box是误检测,丢弃即可。

要达到我们的目的,这个描述子必须能有足够的区分度,同时运行速度也要很快(部署设备性能压榨到极致了,过多的计算需求会拖慢整个系统的检测效率)。总之,需要进行一定程度的测试验证才行。

样本介绍

Alt text

负样本是指那些不是人,但被目标检测模型(YOLOv3)识别为人的图片。使用模型再跑了一次监控视频,将负样本切割出来得到的。它们有的很稳定,达到数百张(如上图)。有的就只有几张甚至1张。一类负样本之间存在一定的差别,主要是因检测模型给出的限位框在不断变化导致的。4个误检测集的样本见下图,几乎都是夜间产生的(1是傍晚)。3、4是同一个地点不同日期的误检测,可以看出有些许不同(天气和蜘蛛网)。
Alt text

正样本使用了VOC2007图集中的行人图像,近10000万张。

第一次尝试:LBP(Local Binary Patterns) 局部二值模式

首先发现的是LBP特征,这里就不详细阐述该特征算法了,它是根据每个像素点与周围8个点的明度大小比较结果编码,作为该点的值。再计算直方图并归一化作为整个样本的特征。此外还有改进版本CircleLBP,对半径R内的圆形中进行采样,提升了对不同尺度的纹理特征的适应性,以及灰度和旋转不变性。对$16\times16$的样本,原版计算需要2.6ms,而CLBP需要26ms,性能不能满足需求,故采用BasicLBP进行试验。

Alt text

使用BLBP提取了1号负样本的特征和正样本集的特征,计算了负样本内部的BLBP特征欧式距离,以及一个负样本与正样本的特征欧氏距离。

负样本内部BLPB欧式距离直方图如下:
Alt text

负样本与VOC的BLPB欧式距离直方图如下:
Alt text

可以看出LBP特征区分度用来区分误检测和正确检测是不够的,如果想让负样本的检测召回率达到100%,距离阈值需设为119,这个距离会误伤20~30%的正确检测。而如果想让检测准确率高,距离阈值需设为20左右,这样召回率就只有百分之二十多了。故LBP特征无法胜任我们的需求。

HOG(Histogram of Gradient) 方向梯度直方图

HOG网上资料很多就不详述了。其实CV方向的深度学习论文中,经常提到这一特征。也是因为见得太多了所以一开始没有选择它(爱好新奇?)。LBP失败后,决定使用这个特征。网上都讲HOG较慢,LBP较快。但我们的需求只需要对深度模型检测出的小patch提特征。经测试对$64\times64$的图片提取HOG特征只需2ms,能满足我们的性能要求。

另外,处理深度模型的误检测实际上面临三种区分情况:a.负样本与正样本的区分度,b.同一类负样本间的区分度,c.不同负样本间的区分度。a够大b够低,我们才能用来筛选误检测;c较低,能使学到的特征有泛化性,减少用户反馈次数。我们需要综合以上三个区分度,选择合适的距离阈值。

首先是正负样本间的测试,5类负样本与正样本集HOG特征欧式距离直方图如下:
Alt text

可以看出距离分布的方差小了很多,除了负样本1与正样本相似度较高,距离较小之外,其它几个使用1.34的距离阈值,就能使误伤率降低到1%以下。

接下来测试同一类样本间的距离,需要这个值足够小,才能使用户反馈一种误检测后,后续的误检测都能被找到,且不影响正样本的检测。负样本1、3、4类内部HOG特征欧式距离直方图(2、5类只有1个样本)如下:
Alt text

从上图能看出,同一类负样本间的距离是足够小的,阈值设为1.15即可达到100%的召回率。说明HOG特征是能用到本项目,解决深度模型误检测的问题。

还需要测试的是不同类负样本的距离,下图是负样本1、3、5中的一个样本到负样本集4的距离分布:

Alt text

可以看出来HOG在不同负样本间泛化性是不行的,4和1、3间的距离,没法在保证不误伤太多的正样本前提下,把1和3揪出来。不过和5的距离是足够的(使用1.29的阈值能达到100%的召回),这说明HOG特征能泛化同一地点的误检测的一定范围内的天气和视野内物体变化。

最终部署采用了1.3的阈值。期待实际效果,后续也许会考虑加入坐标,应该能更好的解决这个问题。

总结

其实如果了解这两种特征在传统CV中的应用,也许我就不需要测试LBP了。测试后才了解到LBP常用于人脸检测,而HOG常用于人体检测。还是知识不够啊!