[CAN] Context-Aware Crowd Counting 复现过程记录

目录

  • 一,开发环境
  • 二,论文代码
  • 三,操作步骤
    • 导入项目
    • 数据准备
    • 训练模型
    • 模型预测结果
    • tips:

一,开发环境

windows10+Anaconda3+Python3.7+CUDA10.2+Pytorch1.5+Pycharm

二,论文代码

论文链接
代码链接

三,操作步骤

导入项目

1.通过git下载或者zip网页下载,二选一
[CAN] Context-Aware Crowd Counting 复现过程记录_第1张图片
2.导入pycharm的目录结构
[CAN] Context-Aware Crowd Counting 复现过程记录_第2张图片

数据准备

1.数据集
该demo使用的是ShanghaiTech Part B数据集
百度网盘: http://pan.baidu.com/s/1nuAYslz
2.导入数据集到目录
在项目的根目录创建一个文件夹data,将part_B_final放入其中
[CAN] Context-Aware Crowd Counting 复现过程记录_第3张图片
3.通过make_dataset.py创建hdf5文件(target文件)
这一步的操作是让image和mat文件经过高斯核的计算,产生target文件
make_dataset.py脚本需要做一些适当修改

  • 数据集的路径
    在这里插入图片描述
  • print函数加上小括号
    在这里插入图片描述
  • 还有一些无伤大雅的缩进格式,自行调整
    运行make_dataset.py脚本后,hdf5文件(后缀.h5)会产生在数据集的ground_truth文件夹中
    [CAN] Context-Aware Crowd Counting 复现过程记录_第4张图片
    4.使用create_json.py产生json文件,这些文件内容是训练、测试图片的路径
  • 首先把脚本修改成以下形式,运行脚本,产生train.json,包含训练集图片路径
    [CAN] Context-Aware Crowd Counting 复现过程记录_第5张图片
  • 接着修改脚本,产生val.json,包含测试数据集图片路径
    [CAN] Context-Aware Crowd Counting 复现过程记录_第6张图片
  • 运行无误,在同级目录下会出现两个json文件
    [CAN] Context-Aware Crowd Counting 复现过程记录_第7张图片

训练模型

1.接下来打开train.py
调整一些空格,缩进,我们打开终端,输入命令python train.py train.json val.json
[CAN] Context-Aware Crowd Counting 复现过程记录_第8张图片
运行查看结果(每解决一个问题,就重新在端口运行一遍命令

  • 报错1:NameError:name ‘xrange’ is not defined

[CAN] Context-Aware Crowd Counting 复现过程记录_第9张图片

  • 解决1:定位到model.py的45行,修改成如下

在这里插入图片描述

  • 报错2:TypeError: ‘odict_items’ object is not subscriptable
    [CAN] Context-Aware Crowd Counting 复现过程记录_第10张图片
  • 解决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。
    [CAN] Context-Aware Crowd Counting 复现过程记录_第11张图片
  • 解决6:这个不影响程序的运行,大多是一些老版本方法的一些警告。无伤大雅。
  • 报错7:虽然成功运行训练阶段的代码,但是在测试的阶段出现了报错:TypeError:slice indices must be integers or None or have an index…
    [CAN] Context-Aware Crowd Counting 复现过程记录_第12张图片
  • 解决7:我们定位到train.py的139行。发现是整除这个老问题。单杠变双杠,139就不会出现报错。
    在这里插入图片描述
    调通了训练代码
    [CAN] Context-Aware Crowd Counting 复现过程记录_第13张图片
    当结束模型的训练之后,会保存一个效果最好的模型model_best.pth.tar
    [CAN] Context-Aware Crowd Counting 复现过程记录_第14张图片

模型预测结果

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:单杠变双杠
    在这里插入图片描述
    成功预测!撒花✿✿
    [CAN] Context-Aware Crowd Counting 复现过程记录_第15张图片

tips:

  • 在train.py中,epoch可以适当调整,毕竟越大,所需要时间就越多,当然效果可能会越好。
  • 原文的epoch=2000,我修改成了epoch=100,batch_size=9,训练大概需要接近3个小时,最后测试的结果和论文中差两个点左右,如下图所示。
    [CAN] Context-Aware Crowd Counting 复现过程记录_第16张图片
  • 还有一个就是GPU利用率
    [CAN] Context-Aware Crowd Counting 复现过程记录_第17张图片
  • ok各位,以上就是这篇文章的全部内容了,非常感谢你能看到这里。如果你觉得这篇文章对你有所帮助求赞求收藏求评论求转发,别忘了点一个大大的关注,各位的支持就是我最大的动力,再见!邮箱:[email protected]

你可能感兴趣的:(pytorch,深度学习,机器学习)