自建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。

自建stgcn数据集并训练_第1张图片

 
  
  1. {

  2. "---QUuC4vJs": { #修改

  3. "has_skeleton": true,

  4. "label": "testifying", #修改

  5. "label_index": 354 #修改

  6. },

  7. "--3ouPhoy2A": { #修改

  8. "has_skeleton": true,

  9. "label": "eating spaghetti", #修改

  10. "label_index": 116 #修改

  11. },

  12. "--4-0ihtnBU": { #修改

  13. "has_skeleton": true,

  14. "label": "dribbling basketball", #修改

  15. "label_index": 99 #修改

  16. },

  17. ...

  18. }

此时,自制数据集基本算改完了,准备训练开始训练数据集。

3.训练数据集

1) 更改kinetics_gendata.py

 
  
  1. if __name__ == '__main__':

  2. parser = argparse.ArgumentParser(

  3. description='Kinetics-skeleton Data Converter.')

  4. parser.add_argument(

  5. '--data_path', default='data/Kinetics/kinetics-skeleton') #修改

  6. parser.add_argument(

  7. '--out_folder', default='data/Kinetics/kinetics-skeleton') #修改

  8. arg = parser.parse_args()

  9. part = ['train', 'val']

  10. for p in part:

  11. data_path = '{}/kinetics_{}'.format(arg.data_path, p) #修改

  12. label_path = '{}/kinetics_{}_label.json'.format(arg.data_path, p) #修改

  13. data_out_path = '{}/{}_data.npy'.format(arg.out_folder, p)

  14. label_out_path = '{}/{}_label.pkl'.format(arg.out_folder, p)

  15. if not os.path.exists(arg.out_folder):

  16. os.makedirs(arg.out_folder)

  17. 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 

 
  
  1. work_dir: ./work_dir/recognition/jobsite

  2. # feeder

  3. feeder: feeder.feeder.Feeder

  4. train_feeder_args:

  5. random_choose: True

  6. random_move: True

  7. window_size: 150

  8. data_path: ./data/jobsite/train_data.npy #修改

  9. label_path: ./data/jobsite/train_label.pkl #修改

  10. test_feeder_args:

  11. data_path: ./data/jobsite/val_data.npy #修改

  12. label_path: ./data/jobsite/val_label.pkl #修改

  13. # model

  14. model: net.st_gcn.Model

  15. model_args:

  16. in_channels: 3

  17. num_class: 7 #修改

  18. edge_importance_weighting: True

  19. graph_args:

  20. layout: 'openpose'

  21. strategy: 'spatial'

  22. # training

  23. device: [0] #视情况修改

  24. batch_size: 128 #视情况修改

  25. test_batch_size: 256 #视情况修改

  26. #optim

  27. base_lr: 0.1

  28. step: [20, 30, 40, 50] #视情况修改

  29. num_epoch: 300 #视情况修改

4) 修改demo_old 

 
  
  1. parser.set_defaults(config='./config/st_gcn/jobsite/demo_old.yaml') #修改

  2. 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博客

你可能感兴趣的:(AI编程)