Advertisement

人群场景分割matlab代码,Crowd Counting 人群计数 [MCNN] 复现过程记录

阅读量:

目录

一、开发环境

二、论文代码Github

三、操作步骤

导入项目

1. 通过Git或者网页下载器下载代码(二选一)
4d5fd26442346a0e1cf7796af3cf6fec.png

第一个箭头:获取git链接,通过git下载;

第二个箭头:通过网页下载器下载

2. 解压代码,import进PyCharm
62795a8945207e340cfcbc84d3a99d06.png

数据准备

1.下载数据集ShanghaiTech

百度网盘: http://pan.baidu.com/s/1nuAYslz

下载之后会有两个文件:
45f269c7e5c1c6a1ac050e56c86cfd2b.png

2.创建目录

以项目所在的目录为ROOT目录,建立ROOT/data/original/shanghaitech/
523253b9a7724b4f7ffd4a653a08d4cc.png

3.把数据集文件 “part_A_final” 放在 ROOT/data/original/shanghaitech/

4.把数据集文件 “part_B_final” 放在 ROOT/data/original/shanghaitech/

好的,到这里为止,准备工作已经做得差不多了。接下来尝试训练数据集和测试模型了。

测试模型

1.下载预训练模型

为了方便大家快速上手,节约训练模型的时间。论文代码链接下面的备注直接给出了已经训练好了的模型。
8deda6abc23cc28936f560d4a6d17c50.png

我尝试下载,但是失败了。在中检索到了付费资源,这里给出链接。大家可以尝试某宝的下载服务。

在项目中创建目录ROOT/final_models,将下载好的预训练模型放入其中:
72921050c095c1f929801ff23b8eb3a2.png

2.通过matlab创建测试数据的ground_truth文件

通过matlab打开文件ROOT/data_preparation/create_gt_test_set_shtech.m
507f3643f342fa5b486b3e82fde9b386.png
53e1a16e4bed9a6882a8c9c4b9614cf0.png

这一步的操作,是把数据集中的图片送入matlab,创建测试数据的ground_truth文件(保存到test_data下一级)。
4cfaa29e2d33e7a8837aafbda88ff1ee.png
7f5a12e70b20306297e099a3fc5fff6d.png

3.在pycharm中准备运行test.py()

将test.py中save_output值修改为true
74b4292d094a6f41ccf9bbbccc104b40.png

右键运行test.py

4.解决各种报错问题(每解决一个问题,就再次运行test.py)

错误0:需要在anaconda下载一个包opencv
537eeb7e1726532da4f2f16348e93616.png

解决0:之后代码中的import cv才不会报错
f2273f32c2c1f5ecaa15f0f48b22b5e8.png

错误1:print无小括号
b59793c3ad1a03c1db368bff63ff0daf.png

解决1:print之后的内容放在小括号中(之后相同的错误如法炮制)
819ebf9aa91d366b5d260a3f3edb4a72.png

错误2:找不到名为network的模块
aebcd6e2cdaed101c040e7f0a134f395.png
9b6da3087e137af2d79fa190f146c322.png

解决2:这个地方是路径的问题,在报错模块前加上路径
f449155ced52c352f0280191665b734c.png
fc843bef7e9f8fc7b5dfdac1833e0281.png
60086ac1cdbb6f3390b377cbceae3b50.png

错误3:再次遇到print的问题
59b825987364bf4697c4243398b92565.png

解决3:找到对应文件data_loader.py,参照【解决1】进行修改
cf506bffe2117c6081f725d92156f05f.png
27ac61b40ce8e182511141414b2fba18.png

错误4:数据格式问题
8a1f6c7695b46fed26780c0fa5c72a1e.png

解决4:cv2.resize内的参数是要求为整数,而python3中的’/’(除法),最后的结果自动转为浮点数

所以使用’//'运算
dc48031ff7fec5645d5f22db6b47b334.png

错误5:没有找到as_matrix属性
ffb67bb28f90061625d52552ceb60cf2.png

解决5:老版本的pandas才有as_matrix属性,替换成values
89a8a55ce51c5bc86264f210fd44d425.png

错误6:又出现一个新老版本差异的问题
4873ca7d9eb118c784538387849c573b.png

解决6:volatile已经无效,去掉括号内最后这个参数,并且在上面加上with torch.no_grad():
d12e63b1c645866d08b30b6b46a8d0c6.png

5.成功调通了测试代码,并输出正确的评估值
0eca1d2ed89213a994e650e3918aefbf.png

训练模型

上面的内容是下载别人已经训练好的模型,进行预测。接下来我们自己手把手对模型进行训练。

1.创建训练和验证集的ground truth相关文件

在matlab中打开ROOT/data_preparation/create_training_set_shtech.m

同样的,'A’运行一次,'B’运行一次
e019afd3591b1663b1fe09d8c656a7ae.png
31a2394ec730078ae0963876b55bc7db.png

2.运行train.py文件(每解决一个问题,就重新运行一次train.py文件)

3.一系列问题的出现和解决

问题1:由于路径,没有找到模块的问题
3074a56b89ce5775183196e7dc3e053b.png

解决1:和之前类似
ae75e6da76e3850ba7e39a0c9e9e9777.png

问题2:新老版本属性差异
aaa556368c29b29f054c4799fad38fb2.png

解决2:maxint改成maxsize
b2d890bd155a0d1f282fa702b0d9dc02.png

问题3:关于range返回类型和list不匹配的问题
b1a0dea9841a81b55d06cf4fe7cfe221.png

解决3:range() 返回的是“range object”,而不是实际的list 值。需要进行强转操作。网上很多朋友不知道在哪里进行强转,不是在random.py进行操作,而是data_loader.py。我试出来的。
239802fd0ee5d16b7e21f7e56282d507.png

问题4:新老版本产生的索引问题
d19615788352bdae6d23238a3f49de86.png

解决4:loss.data[0]改成loss.item()
3775910083015075e6b670f488a6702e.png

4.代码运行成功,在不断训练模型了(激动!!!)
aab1523ce79843439376fb1cf1b20ada.png
a4dcccf4be0d4b865205b1981aef8ab1.png
ef6c3479ceff75a2cb0b9e4890d52310.png
6e03672e631a39b1fc2e9841e7fa1ad5.png
28b7e45e6c295d1ae45c54a9b1e36975.png

5.代码中修改训练参数
4c19cfa59ca07b6dc6d35f14187e36fd.png

后话:第一次复现的论文,16年的CVPR。过程肯定有所不足,在这个过程中借鉴了很多博客的解决办法。当然这个记录会有很多纰漏和不足,如果朋友们有什么问题或者建议可以和我发邮件讨论,谢谢大家。734140820@qq.com

标签:训练,Crowd,ROOT,py,MCNN,解决,Counting,data,下载

来源:

全部评论 (0)

还没有任何评论哟~