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

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