自建stgcn数据集并训练
参考了许多博文,慢慢地也就把 st-gcn 跑出来了,参考的文章一会附在文章里面,实测有用。
1.安装st-gcn
复现STGCN CPU版 (ubuntu16.04+pytorch0.4.0+openpose+caffe)_Significance的博客-CSDN博客复现旧版STGCN GPU版 (win10+openpose1.5.0)_Significance的博客-CSDN博客2
2.准备训练数据集
官方使用的是 Kinetics-skeleton 和 NTU RGB+D 两个数据集来训练网络,如果是自制数据集,我们需要将自己的训练集先转换为这两个数据集的格式,然后再转化为st-gcn所需要的格式。
那么如何将自己的训练集转换成这两个数据集的格式呢?
1)直接在st-gcn的程序里跑自己的数据
运行st-gcn:
python main.py demo_old --video E:/st-gcn/resource/media/数据集名称/running.mp4 --openpose E:/openpose/build/bin
跑出来的json文件可以在st-gcn文件里获取到,单帧和一个视频所有帧都有。文件位置在data/openpose_estimation,data里是所有帧json文件, snippets 是单帧json文件。
2)更改标签与标签序号
此时,存在的问题是json文件末尾的"label":"unknow","label_index": -1。
因为你没有对它进行定义,因次需要 更改"label"与"label_index" ,即标签与标签序号。
3)建议下载 Kinetics-skeleton数据集 ,数据集里的文件如下图,更改后的标签与标签序号对应于kinetics_train与kinstics_val文件。此外,按照模板 更改文件中的两个json文件 ,kinetics_train_label.json与kinetics_val_label.json。

-
{ -
"---QUuC4vJs": { #修改 -
"has_skeleton": true, -
"label": "testifying", #修改 -
"label_index": 354 #修改 -
}, -
"--3ouPhoy2A": { #修改 -
"has_skeleton": true, -
"label": "eating spaghetti", #修改 -
"label_index": 116 #修改 -
}, -
"--4-0ihtnBU": { #修改 -
"has_skeleton": true, -
"label": "dribbling basketball", #修改 -
"label_index": 99 #修改 -
}, -
... -
}
此时,自制数据集基本算改完了,准备训练开始训练数据集。
3.训练数据集
1) 更改kinetics_gendata.py
-
if __name__ == '__main__': -
parser = argparse.ArgumentParser( -
description='Kinetics-skeleton Data Converter.') -
parser.add_argument( -
'--data_path', default='data/Kinetics/kinetics-skeleton') #修改 -
parser.add_argument( -
'--out_folder', default='data/Kinetics/kinetics-skeleton') #修改 -
arg = parser.parse_args() -
part = ['train', 'val'] -
for p in part: -
data_path = '{}/kinetics_{}'.format(arg.data_path, p) #修改 -
label_path = '{}/kinetics_{}_label.json'.format(arg.data_path, p) #修改 -
data_out_path = '{}/{}_data.npy'.format(arg.out_folder, p) -
label_out_path = '{}/{}_label.pkl'.format(arg.out_folder, p) -
if not os.path.exists(arg.out_folder): -
os.makedirs(arg.out_folder) -
gendata(data_path, label_path, data_out_path, label_out_path)
修改后,最好另存为xx_gendata.py,然后运行xx_gendata.py,将数据集转化为st-gcn需要格式。
python tools/xxx_gendata.py --data_path
2) 修改label_name.txt ,原位置在resource/kinetics_skeleton,建议新命名一个文件夹,并保存label_name.txt。
3) 修改train.yaml 。
-
work_dir: ./work_dir/recognition/jobsite -
# feeder -
feeder: feeder.feeder.Feeder -
train_feeder_args: -
random_choose: True -
random_move: True -
window_size: 150 -
data_path: ./data/jobsite/train_data.npy #修改 -
label_path: ./data/jobsite/train_label.pkl #修改 -
test_feeder_args: -
data_path: ./data/jobsite/val_data.npy #修改 -
label_path: ./data/jobsite/val_label.pkl #修改 -
# model -
model: net.st_gcn.Model -
model_args: -
in_channels: 3 -
num_class: 7 #修改 -
edge_importance_weighting: True -
graph_args: -
layout: 'openpose' -
strategy: 'spatial' -
# training -
device: [0] #视情况修改 -
batch_size: 128 #视情况修改 -
test_batch_size: 256 #视情况修改 -
#optim -
base_lr: 0.1 -
step: [20, 30, 40, 50] #视情况修改 -
num_epoch: 300 #视情况修改
4) 修改demo_old 。
-
parser.set_defaults(config='./config/st_gcn/jobsite/demo_old.yaml') #修改 -
parser.set_defaults(print_log=False)
此时,基本代码已修改完毕,开始进行训练。训练过程出现问题时,按照错误提示基本能够解决。
5)训练
python main.py recognition -c config/st_gcn/数据集/train.yaml
运行st-gcn中所参考文章如下:
HRNet提取骨架特征点+ ST-GCN训练自己的数据集代码实践问题记录_Cheungleilei的博客-CSDN博客
st-gcn训练自建行为识别数据集_星辰-CSDN博客
stgcn使用_Significance的博客-CSDN博客
ST-GCN 使用+复现_Queen B的博客-CSDN博客_st-gcn 复现
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)