[CAN] Context-Aware Crowd Counting 复现过程记录
一,开发环境
windows10+Anaconda3+Python3.7+CUDA10.2+Pytorch1.5+Pycharm
二,论文代码
三,操作步骤
导入项目
1.通过git下载或者zip网页下载,二选一
2.导入pycharm的目录结构
数据准备
1.数据集
该demo使用的是ShanghaiTech Part B数据集
百度网盘: http://pan.baidu.com/s/1nuAYslz
2.导入数据集到目录
在项目的根目录创建一个文件夹data,将part_B_final放入其中
3.通过make_dataset.py创建hdf5文件(target文件)
这一步的操作是让image和mat文件经过高斯核的计算,产生target文件
make_dataset.py脚本需要做一些适当修改
- 数据集的路径
- print函数加上小括号
- 还有一些无伤大雅的缩进格式,自行调整
运行make_dataset.py脚本后,hdf5文件(后缀.h5)会产生在数据集的ground_truth文件夹中
4.使用create_json.py产生json文件,这些文件内容是训练、测试图片的路径 - 首先把脚本修改成以下形式,运行脚本,产生train.json,包含训练集图片路径
- 接着修改脚本,产生val.json,包含测试数据集图片路径
- 运行无误,在同级目录下会出现两个json文件
训练模型
1.接下来打开train.py
调整一些空格,缩进,我们打开终端,输入命令python train.py train.json val.json
运行查看结果(每解决一个问题,就重新在端口运行一遍命令)
- 报错1:NameError:name ‘xrange’ is not defined
- 解决1:定位到model.py的45行,修改成如下
- 报错2:TypeError: ‘odict_items’ object is not subscriptable
- 解决2:定位到model.py的46行。这里需要把self.frontend.state_dict().items(),mod.state_dict().items(),转成list类型,才能支持切片操作。
- 报错3:TypeError:integer argument expected, got float
- 解决3:定位到image.py的36行,单斜杠改成双斜杠,使除法结果为整数
- 报错4:RuntimeError: CUDA out of memory .
- 解决5:这个是显存不足,需要修改batch_size的大小。定位到train.py的32行。
我们可以看到作者给的batch_size是26。
我的电脑配置显存6G,经过测试能承受的最大batch_size是9。
所以我修改成9,各位根据电脑配置来设置即可。 - 报警告6:重新运行命令之后,我们可以看到一系列警告信息,并且成功运行第一个epoch。
- 解决6:这个不影响程序的运行,大多是一些老版本方法的一些警告。无伤大雅。
- 报错7:虽然成功运行训练阶段的代码,但是在测试的阶段出现了报错:TypeError:slice indices must be integers or None or have an index…
- 解决7:我们定位到train.py的139行。发现是整除这个老问题。单杠变双杠,139就不会出现报错。
调通了训练代码
当结束模型的训练之后,会保存一个效果最好的模型model_best.pth.tar
模型预测结果
1.打开test.py,首先解决一些明显的已经解决过的错误。
- 40行修改成如下
- 65,66行修改成如下
- 修改测试图片路径,修改模型文件名为model_best.pth.tar
2.运行test.py代码(每解决一个问题,就重新在端口运行一遍命令)
该脚本会通过加载之前效果最好的模型文件(model_best.pth.tar)来预测test中的图片密度图
- 报错1:TypeError: slice indices must be integers or None or have an index method
- 解决1:单杠变双杠
成功预测!撒花✿✿
tips:
- 在train.py中,epoch可以适当调整,毕竟越大,所需要时间就越多,当然效果可能会越好。
- 原文的epoch=2000,我修改成了epoch=100,batch_size=9,训练大概需要接近3个小时,最后测试的结果和论文中差两个点左右,如下图所示。
- 还有一个就是GPU利用率
- ok各位,以上就是这篇文章的全部内容了,非常感谢你能看到这里。如果你觉得这篇文章对你有所帮助求赞求收藏求评论求转发,别忘了点一个大大的关注,各位的支持就是我最大的动力,再见!邮箱:[email protected]