参考链接:https://blog.csdn.net/hahabeibei123456789/article/details/94720745
来自霍尼韦尔的资深数据科学家Aditya Vora分享了一种快速精准的人头检测(head detector)算法并开源了代码。
先来看下检测视频截图:
人头检测在安防监控中是比较常用的功能,而公交车、商场或者大型场馆的拥挤人群计数的精准性也非常重要。
传统的算法原理
作者称拥挤人群计数目前主要有两种实现路径:
1.运用回归的算法思绪,直接依据图像回归出拥堵人群密度热图,它的缺陷是只能得到场景整体的一个拥堵指数,不能获知人群个体的详细位置,而且这种办法对图像分辨率很敏感。
2.运用目的检测的办法,比方直接运用Faster RCNN检测人,检测后数目的为“人”的个数。这种办法的缺陷是在人物互相遮挡的状况下常常性能较差,而人群越拥堵互相遮挡的可能性越大,招致算法运用受限。
该文作者希望设计更有针对性的精准的人头检测,完成愈加精准的人群计数。
作者创新的两点,轻量级人头检测网络和anchors尺度的选择。
算法的网络架构:
从上图可知,网络的前半局部是VGG16特征提取网络,经过一次卷积,然后分开分别运用1*1卷积进入Regression head(用于回归人头的位置信息)和Classification head(用于分类能否为人头)。
在检测网络中,anchors是很重要的概念,是一组预定义的包围框,在对象检测系统中预测尺度和位移。作者以为普通目的辨认中anchors的尺度定义过大,应该依据“有效感受野”(effective receptive field)的思想,减小尺度(直观上“人头”目的比“人体”目的也要小)。
实验结果
作者在BRAINWASH数据库上做了实验,打败了三个基线算法,并取得了与最好结果算法“可比较“的性能。
提出的算法比较快,使用Quadro M1000M显卡(仅有512 CUDA核心)速度达到5fps,使用Jetson TX2(仅有256 CUDA核心)速度1.6fps。相比以往算法更加适合于嵌入式边缘计算平台。
以上内容都来自参考链接。
先去GitHub上找到FCHD:
第一个是原版,第二个是翻译版,本人擅长中文。。。
下载源码(文末有分享)。
本工程是官方工程的python3版本,重构了部分代码,并训练得到了一个效果不错的模型。
论文地址:https://arxiv.org/abs/1809.08766
官方工程地址:https://github.com/aditya-vora/FCHD-Fully-Convolutional-Head-Detector
安装
- Clone
git clone https://github.com/embracesource-cv-com/FCHD.git
- 安装依赖
cd FCHD pip install -r requirements.txt
安装可能会遇到问题,一般解决方案有:
1)去掉版本号
2)换源
3)建议使用python3 64位版本,不要使用32位!
4)哪个依赖有问题 就通过命令安装
作者成功较多的命令:
python -m pip install -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com XXX
XXX为所需依赖。
数据配置
(文末有分享所需文件)。
- 在此处下载Brainwash数据集,caffe预训练模型,以及人头检测模型
- 将预训练模型vgg16_caffe.pth放到./checkpoints/pre_trained目录下
- 将检测模型checkpoint_best.pth放到./checkpoints目录下
- 将brainwash数据集放到/home/dataset/fchd_datas目录下
当然你可以自定义各个路径,然后在config.py中修改相应的配置
class Config(object):
DATASET_DIR = r'X:\workspace\python\FCHD-master\home\dataset\fchd_datas\brainwash'
TRAIN_ANNOTS_FILE = r'X:\workspace\python\FCHD-master\home\dataset\fchd_datas\brainwash\brainwash_train.idl'
VAL_ANNOTS_FILE = r'X:\workspace\python\FCHD-master\home\dataset\fchd_datas\brainwash\brainwash_val.idl'
CAFFE_PRETRAIN = True
CAFFE_PRETRAIN_PATH = './checkpoints/pre_trained/vgg16_caffe.pth'
RPN_NMS_THRESH = 0.7
RPN_TRAIN_PRE_NMS_TOP_N = 12000
RPN_TRAIN_POST_NMS_TOP_N = 300
RPN_TEST_PRE_NMS_TOP_N = 6000
RPN_TEST_POST_NMS_TOP_N = 300
RPN_MIN_SIZE = 16
ANCHOR_BASE_SIZE = 16
ANCHOR_RATIOS = [1]
ANCHOR_SCALES = [2, 4]
EPOCHS = 15
PRINT_LOG = True
PLOT_INTERVAL = 2
VISDOM_ENV = 'fchd'
MODEL_DIR = './checkpoints'
BEST_MODEL_PATH = './checkpoints/checkpoint_best.pth'
cfg = Config()
代码还是简单的。
先训练:
- 打开可视化工具visdom:
python -m visdom.server
- 开始训练:
python train.py
train.py的时候会报错:
AssertionError: Torch not compiled with CUDA enabled
这是torch依赖安装版本错误。
CPU直接安装CPU版本即可,CDUA需要安装CUXXX版本。
下载地址:https://download.pytorch.org/whl/torch_stable.html
也可以通过官网:https://pytorch.org/get-started/locally/
正确的控制台输出:
(venv) X:\workspace\python\FCHD-master>python train.py
[INFO] Load datasets.
Training set size:10461, Verification set size:493
Setting up a new session...
[INFO] Start training...
X:\workspace\python\FCHD-master\networks\detector.py:30: UserWarning: Implicit dimension cho
ice for softmax has been deprecated. Change the call to include dim=X as an argument.
probs = F.softmax(torch.from_numpy(rois_scores))
[INFO] Epoch 1 of 15.
Validate average accuracy: 0.865
[INFO] Epoch 2 of 15.
Validate average accuracy: 0.803
[INFO] Epoch 3 of 15.
Validate average accuracy: 0.771
[INFO] Epoch 4 of 15.
Validate average accuracy: 0.842
[INFO] Epoch 5 of 15.
Validate average accuracy: 0.796
[INFO] Epoch 6 of 15.
可视化:
预测
在工程root目录下执行:
python predict.py -p [path of image]
检测效果
百度云:
链接:https://pan.baidu.com/s/1xZJ6wvQyo9WLgWErlmhhaA
提取码:3bw9
复制这段内容后打开百度网盘手机App,操作更方便哦