Crowd Counting 人群计数 [MCNN] 复现过程记录
作者:互联网
目录
- 一、开发环境
- 二、论文代码Github
- 三、操作步骤
- 后话:第一次复现的论文,16年的CVPR。过程肯定有所不足,在这个过程中借鉴了很多博客的解决办法。当然这个记录会有很多纰漏和不足,如果朋友们有什么问题或者建议可以和我发邮件讨论,谢谢大家。734140820@qq.com
一、开发环境
- windows10
- Anaconda3-2020.02 下载链接,注意安装时添加PATH路径
- python3.7 (Anaconda自带有,可以不单独安装)
- CUDA10.2 下载链接,注意选择local版本
- Pytorch1.5 官网获取下载命令行(Stable(1.5),Windows,Conda,Python,10.2)注意换成清华源
- Pycharm 下载链接,注意选择community版本
- Matlab2017a 下载安装教程链接
二、论文代码Github
三、操作步骤
导入项目
1. 通过Git或者网页下载器下载代码(二选一)
第一个箭头:获取git链接,通过git下载;
第二个箭头:通过网页下载器下载
2. 解压代码,import进PyCharm
数据准备
1.下载数据集ShanghaiTech
百度网盘: http://pan.baidu.com/s/1nuAYslz
下载之后会有两个文件:
2.创建目录
以项目所在的目录为ROOT目录,建立ROOT/data/original/shanghaitech/
3.把数据集文件 “part_A_final” 放在 ROOT/data/original/shanghaitech/
4.把数据集文件 “part_B_final” 放在 ROOT/data/original/shanghaitech/
好的,到这里为止,准备工作已经做得差不多了。接下来尝试训练数据集和测试模型了。
测试模型
1.下载预训练模型
为了方便大家快速上手,节约训练模型的时间。论文代码链接下面的备注直接给出了已经训练好了的模型。
我尝试下载,但是失败了。在csdn中检索到了付费资源,这里给出链接。大家可以尝试某宝的CSDN下载服务。
在项目中创建目录ROOT/final_models,将下载好的预训练模型放入其中:
2.通过matlab创建测试数据的ground_truth文件
通过matlab打开文件ROOT/data_preparation/create_gt_test_set_shtech.m
这一步的操作,是把数据集中的图片送入matlab,创建测试数据的ground_truth文件(保存到test_data下一级)。
3.在pycharm中准备运行test.py()
- 将test.py中save_output值修改为true
- 右键运行test.py
4.解决各种报错问题(每解决一个问题,就再次运行test.py)
-
错误0:需要在anaconda下载一个包opencv
-
解决0:之后代码中的import cv才不会报错
-
错误1:print无小括号
-
解决1:print之后的内容放在小括号中(之后相同的错误如法炮制)
-
错误2:找不到名为network的模块
-
解决2:这个地方是路径的问题,在报错模块前加上路径
-
错误3:再次遇到print的问题
-
解决3:找到对应文件data_loader.py,参照【解决1】进行修改
-
错误4:数据格式问题
-
解决4:cv2.resize内的参数是要求为整数,而python3中的’/’(除法),最后的结果自动转为浮点数
所以使用’//'运算 -
错误5:没有找到as_matrix属性
-
解决5:老版本的pandas才有as_matrix属性,替换成values
-
错误6:又出现一个新老版本差异的问题
-
解决6:volatile已经无效,去掉括号内最后这个参数,并且在上面加上with torch.no_grad():
5.成功调通了测试代码,并输出正确的评估值
训练模型
上面的内容是下载别人已经训练好的模型,进行预测。接下来我们自己手把手对模型进行训练。
1.创建训练和验证集的ground truth相关文件
- 在matlab中打开ROOT/data_preparation/create_training_set_shtech.m
- 同样的,'A’运行一次,'B’运行一次
2.运行train.py文件(每解决一个问题,就重新运行一次train.py文件)
3.一系列问题的出现和解决 - 问题1:由于路径,没有找到模块的问题
- 解决1:和之前类似
- 问题2:新老版本属性差异
- 解决2:maxint改成maxsize
- 问题3:关于range返回类型和list不匹配的问题
- 解决3:range() 返回的是“range object”,而不是实际的list 值。需要进行强转操作。网上很多朋友不知道在哪里进行强转,不是在random.py进行操作,而是data_loader.py。我试出来的。
- 问题4:新老版本产生的索引问题
- 解决4:loss.data[0]改成loss.item()
4.代码运行成功,在不断训练模型了(激动!!!)
5.代码中修改训练参数
后话:第一次复现的论文,16年的CVPR。过程肯定有所不足,在这个过程中借鉴了很多博客的解决办法。当然这个记录会有很多纰漏和不足,如果朋友们有什么问题或者建议可以和我发邮件讨论,谢谢大家。734140820@qq.com
标签:训练,Crowd,ROOT,py,MCNN,解决,Counting,data,下载 来源: https://blog.csdn.net/wpw5499/article/details/106231707