参考了许多博文,慢慢地也就把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 复现
ST-GCN使用_raymond的CSDN-CSDN博客
st-gcn配置环境的过程中可能会遇到的问题_XYKenny的博客-CSDN博客
ST-GCN源码运行完整版(含OpenPose编译安装)及常见问题_咬我呀_Gemini的博客-CSDN博客