HRNet提取骨架特征点+ ST-GCN训练自己的数据集代码实践问题记录

软硬件环境:
python 3.6.5
Ubuntu 18.04 LTS
Pytorch 1.1.0
NVIDIA TITAN XP 8GB

项目链接https://github.com/open-mmlab/mmskeleton

前提

HRNet的准备工作可见我的上一条博文。

准备工作

  1. 准备数据集
  2. 准备环境,包含两步:
    第一步: 进入文件夹./deprecated/origin_stgcn_repo/ ,打开requirements.txt看下需要满足的环境条件,conda list:
    HRNet提取骨架特征点+ ST-GCN训练自己的数据集代码实践问题记录_第1张图片
    我不直接安装requirements.txt中的需求原因是,怕修改了我的torch版本,导致和cuda版本不匹配,这样我又要重新降版本,很麻烦,所我采用对比的方法,对比自己已经安装的包和requirements.txt上需要安装的包。
    对比后,发现缺少:
    HRNet提取骨架特征点+ ST-GCN训练自己的数据集代码实践问题记录_第2张图片
    所以pip install -r requirements.txt进行安装:
    在这里插入图片描述
    第二步
cd deprecated/origin_stgcn_repo/torchlight
python setup.py install
cd ..

在这里插入图片描述
到这一步,环境就基本搭建好了。

特征点

这里我没有使用ST-GCN提取特征点的Openpose,而是使用了HRNet来提取特征点。
OpenPose提取18个点,HRNet提取17个点,所以有很多需要改的地方。

数据集准备

这里我是用了一个比较老的数据集,training_lib_KTH.zip。
这个数据集包含六种行为。
HRNet提取骨架特征点+ ST-GCN训练自己的数据集代码实践问题记录_第3张图片
我对数据集的简单处理是,按照行为对所有视频进行分类,把同一种行为放到一个文件夹中:
HRNet提取骨架特征点+ ST-GCN训练自己的数据集代码实践问题记录_第4张图片

训练过程

准备工作
i)修改train.yaml,

work_dir: ./work_dir/recognition/kinetics_skeleton/ST_GCN  #此处根据自己需要来改

# feeder
feeder: feeder.feeder.Feeder
train_feeder_args:
  random_choose: True
  random_move: True
  window_size: 150
  data_path: ./data/Kinetics/kinetics-skeleton/train_data.npy
  label_path: ./data/Kinetics/kinetics-skeleton/train_label.pkl
test_feeder_args:
  data_path: ./data/Kinetics/kinetics-skeleton/val_data.npy
  label_path: ./data/Kinetics/kinetics-skeleton/val_label.pkl

# model
model: net.st_gcn.Model
model_args:
  in_channels: 3
  num_class: 400  #修改
  edge_importance_weighting: True
  graph_args:
    layout: "openpose"
    strategy: "spatial"

# training
device: [0, 1, 2, 3]  #视情况修改
batch_size: 256 #视情况修改
test_batch_size: 256 #视情况修改

#optim
base_lr: 0.1 #视情况修改
step: [20, 30, 40, 50] #视情况修改
num_epoch: 50 #视情况修改

上面标注了我自己修改的地方。
ii) deprecated/origin_stgcn_repo/resource/kinetics_skeleton/label_name.txt 将里面的行为改成自己要训练的行为
iii)我修改了data_processing.py,demo_old.py,video.py 以及hrnet_process.py (前面已经提及,我使用HRNet提取特征点,所以需要修改很多地方)
训练过程
i) 初次建立数据集,输出json文件(具体根据修改的data_processing.py来命令)
ii) 训练代码:

python main.py recognition -c config/st_gcn/<dataset>/train.yaml [--work_dir <work folder>]

这里我用的自己的数据集,所以config/st_gcn//train.yaml 部分直接改成train.yaml路径即可,后面中括号可以忽略。在训练过程中遇到了很多问题,主要的报错记录在下:

报错1
ModuleNotFoundError: No module named 'skvideo'
解决办法:pip install --user scikit-video

报错2AttributeError: module 'yaml' has no attribute 'FullLoader'
解决办法pip install --ignore-installed PyYAML
报错3ERROR: anaconda-client 1.6.14 has requirement python-dateutil>=2.6.1, but you'll have python-dateutil 2.1 which is incompatible.
解决办法pip install python-dateutil==2.6.1
报错4IndexError: index 300 is out of bounds for axis 1 with size 300
解决办法:说明视频帧数大于300了,先查看一下json文件每一个视频的frame_index,确认后,处理一下data_processing的逻辑,确定怎么进行切分。

测试

python main.py demo_old --video 'path'

最终看到如下结果:
努力没白费,继续加油!
HRNet提取骨架特征点+ ST-GCN训练自己的数据集代码实践问题记录_第5张图片

你可能感兴趣的:(计算机视觉,行为检测学习记录)