人群计数
此存储库提供生产就绪版本的人群计数算法。不同的算法通过一组一致的 API 统一。
概览
注意:人群计数场景的所有示例图像均来自 www.unsplash.com。
虽然人群计数模型种类繁多,但需要考虑两个实际问题
- 速度。为了支持近乎实时的报告,模型应运行足够快。
- 人群密度。我们需要为同一台相机同时考虑高密度和低密度场景。大多数人群计数模型都使用高密度数据集进行训练,它们往往不适用于低密度场景。另一方面,Faster-RCNN 等模型在高密度人群中表现不佳,但在低密度人群中表现良好。
基于对我们专有数据集上人群计数模型多个实现的评估,我们将模型缩小到两个选项:来自此仓库的 Multi Column CNN 模型 (MCNN) 和来自此仓库的 OpenPose 模型。这两个模型都满足我们的速度要求。
- 对于高密度人群图像,MCNN 模型提供了良好的结果。
- 对于低密度场景,OpenPose 表现良好。
- 如果事先不知道人群密度,我们使用启发式方法:如果满足以下条件,则使用 MCNN 的预测:OpenPose 预测高于 20 且 MCNN 高于 50。否则,使用 OpenPose 预测。模型的阈值可以根据您的场景进行更改。
设置
依赖项
您需要以下依赖项。
- Python 3
- Tensorflow 1.4.1+
- PyTorch
安装
递归克隆仓库并安装库。
git clone --recursive git@github.com:microsoft/ComputerVision.git
cd ComputerVision/contrib/crowd_counting/
pip install -r requirements.txt
然后下载在 Shanghai Tech A 数据集上训练的 MCNN 模型,并将其保存在克隆仓库的 crowdcounting/data/models/ 文件夹下。该模型的链接可在此仓库的测试部分找到。
测试
下面是如何运行演示应用程序并使用本地图像调用服务。
python crowdcounting/demo/app-start.py -p crowdcounting/data/models/mcnn_shtechA_660.h5
curl -H "Content-type: application/octet-stream" -X POST http://0.0.0.0:5000/score --data-binary @/path/to/image.jpg
性能
下面我们报告了我们自己数据集上的平均绝对误差。
人群密度 | MCNN | OpenPose | 路由器 |
---|---|---|---|
低 | 51.95 | 0.56 | 0.63 |
高 | 151.11 | 442.15 | 195.93 |
示例
教程可在 crowdcounting/examples 文件夹中找到。
Docker 镜像
可以使用以下命令构建和运行演示的 docker 镜像
nvidia-docker build -t crowd-counting:mcnn-openpose-gpu
nvidia-docker run -d -p 5000:5000 crowd-counting:mcnn-openpose-gpu
然后,在浏览器中输入 url 0.0.0.0:5000 即可尝试演示。