打印
[其他ST产品]

ST-GCN复现的全过程(详细)

[复制链接]
435|36
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
提前工作服务器

我其实复现了2次,第一次是用的3070,第二次尝试了并行超算云服务器,里面有8张 A100。两个都是采用了本机远程ssh连接服务器跑。

本机环境

第一次完整复现过程是在win的vscode上,python3.8,torch版本有点忘了好像是1.10+cu113。(忽略即可)


第二次是macOS的Pycharm 2021.1.2 专业版。 python3.7.13,torch1.10.0+cu113


下面主要是将第二次的过程,其实过程步骤是一样的。


系统和IDE没什么关系,主要是python版本和torch的cuda版本最好要对应一下。


数据集

ST-GCN官方的数据集是用的Kinetics和NTU RGB+D,如果用Kinetics或者要跑那个demo的话,是需要提前安装配置好openpose的,我嫌太麻烦,就没配置,直接用NTU RGB+D,因为NTU里面自带有骨骼点的。好像也是可以用自建的数据集的,不过没尝试过,后续步骤反正是差不多的。


由于是远程ssh连接服务器,所以还需要提前把数据集和代码都拷到服务器当中,然后本机和服务器进行连接,中间的过程就不讲了,不懂得可以看我前面的blog或者网上帖子。



使用特权

评论回复
评论
9dome猫 2023-4-20 16:56 回复TA
———————————————— 版权声明:本文为CSDN博主「Eric加油学!」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/m0_56698268/article/details/124781356 
沙发
9dome猫|  楼主 | 2023-4-20 16:56 | 只看该作者
运行逻辑
一切就绪后,打开st-gcn代码,有库没导的自己导一下,我遇到的主要问题好像是torchlight那个库,比较麻烦,因为它是 from torchlight.io import xxxxxx 类似于这样子的方式,但是它那个文件夹里io、gpu等py文件有2层路径,所以需要改成 from torchlight.torchlight.io import xxxxx 就是再加一个torchlight包的路径。如果还有其他的一些小bug可以再看其他博主的经验贴。

如果知道ST-GCN输入终端命令后的各种调用逻辑,那运行起来有bug可以快速找到问题,如果不知道的也可以参考一些之前发的一个源码分析blog,里面有写一些调用逻辑  (比如 gpu设备是怎么调用的,参数是怎么解析的)

使用特权

评论回复
板凳
9dome猫|  楼主 | 2023-4-20 16:57 | 只看该作者
第一步   处理数据集
终端进入服务器配好的虚拟环境,然后cd到服务器st-gcn代码文件夹的位置



python tools/ntu_gendata.py --data_path <path to nturgbd+d_skeletons>

使用特权

评论回复
地板
9dome猫|  楼主 | 2023-4-20 16:57 | 只看该作者
这个就是处理的终端命令,是执行tools包下的ntu_gendata.py文件来输出数据集的,data_path是通过参数解析你所输入的地址,如上图所示,data_path后面输入你数据集所在的整个路径,就可以开始处理数据集了。

使用特权

评论回复
5
9dome猫|  楼主 | 2023-4-20 16:57 | 只看该作者
这里遇到我犯了个超蠢的错误:

我一开始无论怎么解析我的地址,都显示找不到该文件夹,我一开始以为是字符串拼接的问题,比如 \ 和 \\ 这种转义字符的问题,各种尝试都没用,后来我又尝试了不使用参数解析,我直接找到调用的那个文件,直接把参数解析注释掉,直接手动赋值为我的地址,也不起效果。

最后找到问题了,居然是 我解析的地址是我本机的数据集地址!!!我用的是服务器的环境,进入的是服务器的代码文件地址,结果居然解析我本机的地址,实在是太蠢了...

使用特权

评论回复
6
9dome猫|  楼主 | 2023-4-20 16:57 | 只看该作者

命令输入完毕后,会开始处理数据集,分别是xsub的train和val 还有xview的train和val,最后如果你没有做其他更改的话,应该是在根目录下新建一个data包,保存到data/NTU-RGB-D/nturgb+d_skeletons.

使用特权

评论回复
7
9dome猫|  楼主 | 2023-4-20 16:58 | 只看该作者

使用特权

评论回复
8
9dome猫|  楼主 | 2023-4-20 16:58 | 只看该作者
第二步 训练网络
我先训练的是ntu-xsub ,readme里也有命令

使用特权

评论回复
9
9dome猫|  楼主 | 2023-4-20 16:58 | 只看该作者
python main.py recognition -c config/st_gcn/ntu-xsub/train.yaml

使用特权

评论回复
10
9dome猫|  楼主 | 2023-4-20 16:58 | 只看该作者


一开始给我报错了,是cuda设备相关的问题,代码里是如果gpu个数大于1,可以设置并行运行,超算云服务器好像是有多张卡,但我不知道怎么处理多gpu问题,所以干脆直接设置gpu数量为1

使用特权

评论回复
11
9dome猫|  楼主 | 2023-4-20 16:58 | 只看该作者
主要修改的是torchlight包下的gpu.py文件:


使用特权

评论回复
12
9dome猫|  楼主 | 2023-4-20 16:59 | 只看该作者

使用特权

评论回复
13
9dome猫|  楼主 | 2023-4-20 16:59 | 只看该作者
然后再输入运行的命令,就开始跑了,batch-size设置的64,epoch为80(之前3070跑的时候batchsize只能设到8,大了跑不动)

使用特权

评论回复
14
9dome猫|  楼主 | 2023-4-21 00:24 | 只看该作者

使用特权

评论回复
15
9dome猫|  楼主 | 2023-4-21 00:24 | 只看该作者
这个跑的还挺快的,一个epoch用时9分钟左右吧,之前3070一个epoch好像要13分钟左右。(感觉如果用多gpu并行会跑的巨快,听说超算云里面有8张卡)

使用特权

评论回复
16
9dome猫|  楼主 | 2023-4-21 00:24 | 只看该作者
第三步 测试
训练模型时,每10个epoch会保存一次模型,在model包下,训练完毕时使用test命令.

使用特权

评论回复
17
9dome猫|  楼主 | 2023-4-21 00:31 | 只看该作者
python main.py recognition -c config/st_gcn/<dataset>/test.yaml

使用特权

评论回复
18
9dome猫|  楼主 | 2023-4-21 00:32 | 只看该作者
<dataset> 改成要测试的就行了 比如 ntu-xsub

如果训练的model没有放在model包下,放在了work_dir下,也可以手动添加 --weights <path to model weights>        或者直接在test.yaml文件里第一行把weights的值改成你要的路径,然后输入上面的指令即可。

使用特权

评论回复
19
9dome猫|  楼主 | 2023-4-21 00:35 | 只看该作者
比如我这次只训练了40个epoch被中断了,然后model放在了work_dir下的recognition下,我就可以直接用训练好的40个epoch的先去测试。

使用特权

评论回复
20
9dome猫|  楼主 | 2023-4-21 00:35 | 只看该作者

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

133

主题

1406

帖子

2

粉丝