Openpose训练自己的数据集

(持续更新中)

目录

1.下载训练openpose模型的相关官方代码

2.下载训练所需要的数据集

3.安装MATLAB

4.编译训练openpose模型所用的caffe

5.训练数据集的准备及处理

6.准备训练用的prototxt模型文件

7.模型训练
1.下载训练openpose模型的相关官方代码

GitHub地址:

https://github.com/ZheC/Realtime_Multi-Person_Pose_Estimation

git或者下载解压之后得到如下内容:

 
2.下载训练所需要的数据集

cd training

./getData.sh

运行上述脚本,下载训练需要的数据集,同时还git下了一个cocoAPI。

下载时间较长,因为数据集共有40G左右。

 
3.安装MATLAB

由于步骤1中得到的数据集处理代码中需要用到matlab,因此需要安装一下。

Ubuntu上的matlab安装参考这篇文章:

https://blog.csdn.net/qq_38469553/article/details/82050851

 
4.编译训练openpose模型所用的caffe

GitHub地址:

https://github.com/CMU-Perceptual-Computing-Lab/caffe_train

下载之后得到caffe_train文件夹,这个文件夹中和原始的caffe相比在源码中添加了一些openpose相关的内容。

将此caffe文件夹中的Makefile.config.example文件copy一份为Makefile.config文件,之后按照需要修改其中的内容(和编译原始的caffe基本相同)。

具体请参考:

https://blog.csdn.net/qq_38469553/article/details/78786892

这篇文章中关于caffe配置的相关内容。PS:如果你的ubuntu系统之前没有成功编译通过caffe,参照上面这篇文章即可完成caffe的所有相关配置。

按照编译官方最新的caffe的方法来编译这个用于训练openpose模型的caffe_train会遇到很多错误,主要原因我认为是这个caffe_train有点过时了,里面的部分源码都是很老版本的caffe中的。而我们所用的一些caffe相关的工具,软件,库肯定都是较新的版本。

下面列出一些可能遇到的问题及解决方法:

(1)/usr/include/opencv2/contrib/contrib.hpp:760:9: error: ‘vector’ does not name a type

具体错误如下:
/usr/include/opencv2/contrib/contrib.hpp:561:48: error: expected ‘,’ or ‘...’ before ‘<’ token
                                   CV_OUT vector<vector<Point> >& results, CV_OUT vector<float>& cost,
                                                ^
/usr/include/opencv2/contrib/contrib.hpp:760:9: error: ‘vector’ does not name a type
         vector<int> Rsr;
         ^
/usr/include/opencv2/contrib/contrib.hpp:761:9: error: ‘vector’ does not name a type
         vector<int> Csr;

类似这样的一堆错误。解决方法参考:

https://blog.csdn.net/qq_38469553/article/details/82424441

 

(2)./include/caffe/util/cudnn.hpp:112:3: error: too few arguments to function

具体错误如下:

In file included from ./include/caffe/util/device_alternate.hpp:40:0,
                 from ./include/caffe/common.hpp:19,
                 from src/caffe/syncedmem.cpp:1:
./include/caffe/util/cudnn.hpp: In function ‘void caffe::cudnn::setConvolutionDesc(cudnnConvolutionStruct**, cudnnTensorDescriptor_t, cudnnFilterDescriptor_t, int, int, int, int)’:
./include/caffe/util/cudnn.hpp:112:3: error: too few arguments to function ‘cudnnStatus_t cudnnSetConvolution2dDescriptor(cudnnConvolutionDescriptor_t, int, int, int, int, int, int, cudnnConvolutionMode_t, cudnnDataType_t)’

类似这样的一堆错误。解决方法参考:

https://blog.csdn.net/qq_38469553/article/details/82423906

 

(3)/usr/bin/ld: cannot find -lopenblas

解决方法参考:

https://blog.csdn.net/qq_38469553/article/details/82424186

 
5.训练数据集的准备及处理

注意:在运行下面的文件时,其中用到了caffe的部分,要将代码中caffe的路径改为自己的编译好的caffe的路径

步骤2得到原始的数据集之后,在training目录下(例如我将原始的training拷贝了一份为training_myself):

(1)运行genANNO.m将原始的图片信息由json转换为mat格式

输入matlab,打开matlab;

在matlab中输入getANNO,然后回车运行,注意:在matlab中运行.m文件时只需要输入文件名,不带后缀。

运行之后,在dataset/COCO/mat/目录下得到.mat文件:coco_kpt.mat  coco_val.mat

 

(2)运行genCOCOMask.m得到未标注的人的mask图片

在matlab中输入genCOCOMask运行,此时可能会遇到如下错误:

>> genCOCOMask
1/ 21634
2/ 21634
3/ 21634
4/ 21634
5/ 21634
6/ 21634
6/ 21634
Undefined function or variable 'maskApiMex'.

Error in MaskApi.decode (line 84)
      masks = maskApiMex( 'decode', Rs );

原因是没有将COCOAPI中的matlabAPI编译好,解决办法:

https://blog.csdn.net/qq_38469553/article/details/82348255

运行完成后,在training_myself/dataset/COCO/目录下得到一个mask2014/目录,里面是未标注人的图片。将这个文件夹拷贝到training_myself/dataset/COCO/images/目录下以便后续处理:

cp -r dataset/COCO/mask2014/ dataset/COCO/images/

除了这个文件夹之外还在training_myself目录下得到了coco_kpt_mask.mat coco_val_mask.mat两个mat文件。

 

(3)运行genJSON.m文件得到存储了用于训练的信息的json文件

在matlab中输入:

genJSON('COCO')

括号中的‘COCO’是参数,运行之后在dataset/COCO/json/下得到一个json文件。

 

(4)运行genLMDB.py文件得到训练用的lmdb格式数据集

首先打开该py文件,修改输入的数据路径和lmdb存储的路径(第58行和最后一行),

此外如果你的系统没有安装python用到的lmdb相关的包,则需要通过pip安装一下lmdb包:

pip install --user lmdb

然后

python genLMDB.py运行,从而在你设置的路径下得到lmdb文件。例如我的路径为training_myself/trainingdata/lmdb/

 
6.准备训练用的prototxt模型文件

将步骤1中,training/中的example_proto/文件夹拷贝一份到training_myself/proto/,这里面包含了如下文件:

├── pose_solver.prototxt
├── pose_train_test.prototxt
└── train_pose.sh

(1)修改pose_solver.prototxt

将其中的snapshot路径修改为自己的路径,其他的参数自行调整。

 

(2)修改pose_train_test.prototxt

第7行输入数据的路径改为步骤5得到的lmdb的路径;第8行的batch_size可以根据你的服务器的计算能力来修改。

 

(3)下载预训练模型文件caffemodel

在train_pose.sh中可以看到,此openpose模型是基于VGG_ILSVRC_19_layers.caffemodel来训练的。下载地址:

https://gist.github.com/ksimonyan/3785162f95cd2d5fee77

 

(4)修改train_pose.sh

将其中的运行用的caffe路径改为步骤4编译好的caffe,其他用到的文件的路径自行修改。

 
7.模型训练

执行 sh train_pose.sh 0,1 表示使用两块GPU开始训练。
https://blog.csdn.net/qq_38469553/article/details/82119292

<think>嗯,用户想了解如何使用OpenPose训练自定义模型。首先,我需要整理一下用户的需求,他提到了教程、数据集和配置。根据提供的引用内容,有几个相关的引用可能有用,比如引用[1]、[3]和[5]都提到了OpenPose训练项目的数据集准备和配置文件。 首先,用户可能需要知道数据准备的步骤。根据引用[3],步骤2提到了处理原始数据集,放在training目录下。因此,我需要指导用户如何准备数据集,包括视频转JSON,再转成模型需要的格式。同时,引用[2]中提到STGCN的数据处理流程,虽然不直接相关,但可能类似,比如视频到JSON再到npy或pkl文件。 接下来是配置文件的修改。引用[5]提到了train.py和test.py作为主要的训练和测试脚本,还有配置文件。用户需要知道如何调整模型参数,比如batch size和学习率。引用[4]讨论了训练过程中的配置,比如随机种子和数据加载,这些也是需要注意的点。 然后,模型结构修改可能也是必要的,比如添加新的关键点。引用[1]提到训练自定义数据集可以提高特定场景的表现,所以用户可能需要调整网络结构以适应新的关键点。这里需要引用[1]来支持这一点。 训练和测试阶段,用户需要运行train.py,并监控训练日志。引用[5]中的启动命令是关键,需要明确指出。同时,测试阶段使用test.py,同样需要引用[5]。 优化部分,可能需要调整学习率策略和数据增强,引用[4]提到学习率的配置和调整方法,可以作为参考。此外,引用[2]中的图结构修改可能对模型优化有启发。 最后,常见问题可能包括数据集格式错误或显存不足,需要根据引用[3]和[4]给出建议,比如检查路径和调整batch size。 需要确保回答结构清晰,分步骤说明,并正确引用相关来源。同时,生成的相关问题要围绕数据准备、配置调整、优化方法和应用场景展开,确保覆盖用户可能关心的其他方面。</think># OpenPose自定义模型训练指南 ## 一、数据准备阶段 1. **原始数据格式转换** - 将视频数据转换为JSON格式标注文件,需保证每帧图像对应关键点坐标数据。引用[2]中提到的"视频转json"流程可参考 - 使用OpenPose官方工具处理原始视频:`./build/examples/openpose/openpose.bin --video input.mp4 --write_json output/` - 生成结构示例: ``` dataset/ ├── images/ │ ├── 000000.jpg │ └── 000001.jpg └── annotations/ ├── 000000.json └── 000001.json ``` 2. **格式标准化处理** - 将JSON标注转换为训练所需的NPY/PKL格式,引用[2]提到的`jsons转json > json转npy&pkl`流程适用 - 使用脚本处理标注文件: ```python import numpy as np annotations = np.load('annotations.npy', allow_pickle=True) ``` ## 二、配置文件修改 1. **关键参数配置** - 修改`training/train.py`中的训练参数: ```python cfg = { 'batch_size': 16, 'learning_rate': 1e-4, 'num_epochs': 100 } ``` 2. **模型结构调整** - 在`models/pose_model.py`中修改网络层: ```python class PoseNet(nn.Module): def __init__(self): super().__init__() self.conv1 = nn.Conv2d(3, 64, kernel_size=3) # 输入通道调整为3 ``` ## 三、训练执行流程 1. **启动训练** ```bash python training/train.py --dataset_path ./dataset --model_output ./models ``` 2. **训练监控** - 使用TensorBoard查看损失曲线: ```bash tensorboard --logdir=./logs ``` ## 四、模型优化技巧 1. **学习率调整策略** ```python scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size=30, gamma=0.1) ``` 2. **数据增强配置** ```python transform = transforms.Compose([ transforms.RandomRotation(15), transforms.ColorJitter(brightness=0.2) ]) ``` ## 五、常见问题解决方案 1. **数据集加载失败** - 检查JSON文件编码格式(需UTF-8) - 验证图像路径配置,引用[3]强调路径正确性 2. **显存不足处理** - 减小batch_size参数值 - 使用混合精度训练,引用[4]提到的训练配置可参考 [^1]: 引用自OpenPose训练项目文档 [^2]: 参考STGCN数据处理流程 [^3]: 来自Openpose自定义训练指南 [^4]: Pytorch训练配置建议 [^5]: OpenPose项目文件说明
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值