ST-GCN训练自建数据集

参考了许多博文,慢慢地也就把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-skeletonNTU 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。

ST-GCN训练自建数据集_第1张图片

 

{
    "---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博客

你可能感兴趣的:(深度学习,人工智能,python)