(持续更新中)
目录
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
^
/usr/include/opencv2/contrib/contrib.hpp:760:9: error: ‘vector’ does not name a type
vector
^
/usr/include/opencv2/contrib/contrib.hpp:761:9: error: ‘vector’ does not name a type
vector
类似这样的一堆错误。解决方法参考:
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