FCHD: A fast and accurate head detector快速准确的人头检测代码预测出来的边界框位置不准确的解决方法

算法简介

人头检测在视频监控中非常重要,而公交车、商场或者大型场馆的拥挤人群计数则是其重要应用场景。

算法思想

作者称拥挤人群计数目前主要有两种实现路径:

1.使用回归的算法思路,直接根据图像回归出拥挤人群密度热图,它的缺点是只能得到场景整体的一个拥挤指数,不能获知人群个体的具体位置,而且这种方法对图像分辨率很敏感。

2.使用目标检测的方法,比如直接使用Faster RCNN检测人,检测后数目标为“人”的个数。这种方法的缺点是在人物相互遮挡的情况下往往性能较差,而人群越拥挤相互遮挡的可能性越大,导致算法使用受限。

该文作者希望设计更有针对性的精准的人头检测,实现更加精准的人群计数。

论文地址:https://arxiv.org/abs/1809.08766v1
代码地址:https://github.com/aditya-vora/FCHD-Fully-Convolutional-Head-Detector

错误展示

使用论文《FCHD: A fast and accurate head detector 》提供的代码进行人头识别,代码的部署过程很简单,但是就是最后预测出来的效果有错误。

在运行head_detector_demo.py的时候,出来的结果如下图所示,每一个人头都能够预测出来,检测窗口基本上能够对应人物头部,但是窗口位置偏移距离比较远。
在这里插入图片描述

解决方法

打开head_detector_demo.py文件
大约在28行的位置上做出如下修改:

f.convert('RGB')
img_raw = f.copy()
# img_raw = np.asarray(f, dtype=np.uint8)
img = np.asarray(f, dtype=np.float32)
_, H, W = img.shape
img = img.transpose((2,0,1))
img = preprocess(img)
_, o_H, o_W = img.shape
scale = o_H / H
img_raw = img_raw.resize((o_W, o_H), Image.ANTIALIAS)
return img, img_raw, scale

在大约54行的位置上,做出如下修改:

for i in range(pred_bboxes_.shape[0]):
ymin, xmin, ymax, xmax = pred_bboxes_[i,:]
# utils.draw_bounding_box_on_image_array(img_raw, ymin, xmin, ymax, xmax)
utils.draw_bounding_box_on_image(img_raw, ymin, xmin, ymax, xmax)

将代码修改之后,再次运行head_detector_demo.py文件,可以看到出来的图已经正确了,如下图:
在这里插入图片描述

参考链接:https://github.com/aditya-vora/FCHD-Fully-Convolutional-Head-Detector/issues/8

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章