1.简介
旷世研究院在CVPR2020上发表的论文《Detection in Crowded Scenes: One Proposal, Multiple Predictions》,提出了一种非常简单而有效的基于提议的对象检测器,它是专门为拥挤实例检测而设计的。
其源论文及开源代码参考实现。代码分为Pytorch版本和旷世天元(megengine)版本,此处仅介绍Pytorch版本(github上star数量高自有其道理,别问我是怎么知道的)。下面就介绍如何在自己电脑上跑通该算法。
2.环境搭建
Github上已明确了需要的环境依赖:
- Requirements:
* python 3.6.8, pytorch 1.5.0, torchvision 0.6.0, cuda 10.1
很简单,但实际配置还是有些坑。一一踩完后(T_T)将步骤总结如下(首先确保电脑支持cuda!):
## 1.建立Anaconda环境
* 用anaconda装,不把本机python环境搞坏了
* 从anaconda历史版本库https://repo.anaconda.com/archive/
* 下载Anaconda3-5.2.0-Linux-x86_64.sh
* ./Anaconda3-5.2.0-Linux-x86_64.sh安装
## 2.更改源
* 修改成清华镜像源,加快后续依赖项的下载速度,参考下方网址: https://mirror.tuna.tsinghua.edu.cn/help/anaconda/
* 修改下载的timeout,避免网络时好时坏的情况下容易下载失败
conda config --set remote_read_timeout_secs 600.0
## 3.创建detect环境
cd CrowdDet
source ~/anaconda3/bin/activate 进入anaconda环境,命令行左侧显示(base)
conda create -n detect python==3.6.8 创建detect环境
conda activate detect 命令行左侧显示(detect)
### tips:
conda env list --显示已安装的conda环境
conda remove * --移除某环境
source activate detect --从新终端直接进入detect环境
## 4.安装依赖
conda install pytorch==1.5.0 torchvision==0.6.0 cudatoolkit=10.1 -c pytorch
conda install --channel https://conda.anaconda.org/menpo opencv
### tips:
conda clean --packages --tarballs --删除缓存包重新下载
找个网好的地方下载
这样就将环境配置好了,下一步就是跑通给的例程。
3.运行例程
首先下载项目到本地:
git clone https://github.com/Purkialo/CrowdDet.git
虽然github上的例程步骤是:(1)trainging,(2)testing,(3)inference。但对于急于验证算法效果的童鞋来说最希望的还是直接进行inference(至少我是),毕竟已经提供了训练好的网络权重:
下面就来介绍如何直接进行inference:
(1)先把权重文件下载到本地(由于是存放在Google driver,因此需要连接vpn才能下载…)。可以只下载其中的部分权重,比如我就只下了效果最好——即AP/JI越大效果越好,MR越小越好,具体含义参见论文的 rcnn_emd_refine_mge.pth(已上传到csdn,点击即可下载)和相对较差的rcnn_fpn_baseline.pth进行比较。
(2)权重下载完毕后,根据CrowdDet/tools/inference.py文件的内容,建立相关文件路径:
cd CrowdDet/model/rcnn_emd_refine/
mkdir outputs && cd outputs
mkdir model_dump
将rcnn_emd_refine_mge.pth放置到model_dump文件夹下,并重命名为dump-40.pth。
(3)准备一张测试图片,比如我将图片7.jpg如下放在和inference.py同一文件夹下
接着运行
##进入CrowdDet/tools/文件夹下开启新终端
source activate detect #进入conda环境(终端左侧显示detect)
python inference.py -md rcnn_emd_refine -r 40 -i 7.jpg
稍等运行片刻,没有报错的话(应该没有)就成功了,此时在文件夹下生成了一个outputs/文件夹,进入后发现有一张图片也叫7.jpg,啪的一下点开,喔!原来是检测结果:
类似的,也可以对另一个效果较差的权重文件rcnn_fpn_baseline.pth进行验证,得到的结果如下:
我们可以找一下有什么区别。不难看出,对于有遮挡的密集人群场景,对应论文提出的最优方法的权重文件rcnn_emd_refine_mge.pth检测效果确实要好不少。
至此就把算法的inference例程跑通了,舒服~
总结
配置环境虽然会问题很多,但也能逐渐理解各个部分是如何相关联。另外一点就是未必要完全按照官方给定的指南(README.md)按部就班,可以根据自己的需求进行调整进度。希望大家也有所收获!