当前位置: 代码迷 >> 综合 >> OpenPose训练自己的数据集模型Realtime Multi-Person Pose Estimation
  详细解决方案

OpenPose训练自己的数据集模型Realtime Multi-Person Pose Estimation

热度:88   发布时间:2023-12-21 04:19:57.0

(持续更新中)

目录

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开始训练。

 

(未完,,待续)

  相关解决方案