YOLOv4 darknet模型转换成caffemodel再转om在Atlas服务器上面推理(一)
YOLOv4 darknet模型转换成caffemodel
上网搜过很多转换教程,但是很多都少了一些步骤,这里的话自己整理一份教程,本人实测可以转换成功,如果大家觉得有用,关注点赞加收藏也是一种美德哦.
1. 准备训练好的darknet模型以及配置文件
如下图所示这里只需要darknet版本的cfg文件以及weights文件即可,data和names文件可以不用
2. git克隆转换文件仓库
克隆模型转换代码
git clone https://github.com/ChenYingpeng/darknet2caffe.git
3. 运行原版caffe的容器
网上有很多版本的教程都是要使用GPU版本的代码,但是GPU版本的代码NVCC各种不兼容,Debug时候浪费了好多时间,并且还不一定解决,我这边就是掉进了无底洞,原地哭泣一分钟.这里直接用CPU版本的caffe.
拉取CPU版本的原版caffe
docker pull bvlc/caffe:cpu
运行镜像生成容器,这里为了方便访问宿主机文件设置了映射
docker run --name caffe_cpu -itd -v /home/jxl:/home/jxl bvlc/caffe:cpu /bin/bash
进入容器
docker exec -it caffe_cpu /bin/bash
进入容器之后,我们不要急着操作下一步,而是首先要搞清楚状况,
caffe的文件位于/opt/caffe下面,文件夹目录如下所示
caffe的运行目录,输入下面命令
root@af17e8160533:/opt/caffe# env | grep caffe
PATH=/opt/caffe/build/tools:/opt/caffe/python:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/opt/caffe
PYCAFFE_ROOT=/opt/caffe/python
PYTHONPATH=/opt/caffe/python:
CAFFE_ROOT=/opt/caffe
我们发现caffe在build目录下,因为原版是通过cmake来编译的,知道这点很重要,因为我们之后不在build目录编译了,所以这个PATH的第一项必须要修改
4. 修改caffe代码
这点和网上的教程是基本一样的,但是由于我们编译的是CPU版本,所以相关的cuda文件(以cu为结尾的文件)不需要添加
将 darknet2caffe/caffe_layers/mish_layer 下的 mish_layer.hpp 文件和darknet2caffe/caffe_layers/upsample_layer 下的 upsample_layer.hpp 拷贝到容器的路径:/opt/caffe/include/caffe/layers 下。
将 darknet2caffe/caffe_layers/mish_layer 下的 mish_layer.cpp 文件和 darknet2caffe/caffe_layers/upsample_layer 下的 upsample_layer.cpp 拷贝到容器的路径:/opt/caffe/src/caffe/layers/ 下。
将 darknet2caffe/caffe_layers/pooling_layer 下的 pooling_layer.cpp 拷贝到容器的路径:/opt/caffe/src/caffe/layers/ 下。
然后,打开容器内的 caffe 文件:/opt/caffe/src/caffe/proto/caffe.proto。按照如下说明修改相应字段的程序。
注意: 对于YOLOv4,需要把注释中YOLOv3以及YOLOv4部分的代码全部加上,YOLOv3只需要加上YOLOv3部分,目标位置在407行
// LayerParameter next available layer-specific ID: 147 (last added: recurrent_param)
message LayerParameter {
optional TileParameter tile_param = 138;
optional VideoDataParameter video_data_param = 207;
optional WindowDataParameter window_data_param = 129;
// 第407行
++optional UpsampleParameter upsample_param = 149; //added by chen for Yolov3, make sure this id 149 not the same as before.
++optional MishParameter mish_param = 150; //added by chen for yolov4,make sure this id 150 not the same as before.
}
// added by chen for YoloV3
++message UpsampleParameter{
++ optional int32 scale = 1 [default = 1];
++}
// Message that stores parameters used by MishLayer
++message MishParameter {
++ enum Engine {
++ DEFAULT = 0;
++ CAFFE = 1;
++ CUDNN = 2;
++ }
++ optional Engine engine = 2 [default = DEFAULT];
++}
添加后如图所示
- 重新编译caffe并修改caffe的路径
这里比较关键,必须要在caffe的目录下面操作,而不是caffe/build文件夹
依次执行下面的命令
cd /opt/caffe
cmake ./CMakeLists.txt
make clean
make -j32
修改caffe的PATH路径
这里很关键,由于我们刚刚在caffe根路径下面编译caffe运行路径变成了:
/opt/caffe/tools
而不是我们一开始所说的
/opt/caffe/build/tools
所以最后我们需要把正确的路径添加到PATH
export PATH=/opt/caffe/tools:$PATH
至此caffe编译完成了
6. 转换模型文件至caffemodel
我们提前把darknet的模型放在darknet2caffe目录下面的一个文件夹里面,如下图所示
cd $darknet2caffe
# 安装pytorch,future
pip install torch
pip install future
转换过程
如果你看到这里,太好了!恭喜你完成了!下面看看我们的成果吧! 输出了prototxt文件以及caffemodel文件
转om模型并在Altas服务器进行推理的教程详见我的下一篇文章
- 分享
- 举报
-
marlin_lee 2024-01-24 09:28:15回复 举报为什么需要安装pytorch,future?这些是在容器里安装么?
-
浏览量:624次2024-01-22 15:27:25
-
2024-01-22 16:01:53
-
浏览量:1567次2024-02-04 17:13:47
-
浏览量:1316次2024-02-23 17:41:04
-
浏览量:1057次2023-12-18 17:48:09
-
浏览量:1984次2024-01-05 14:11:13
-
浏览量:4267次2021-09-24 09:30:49
-
浏览量:811次2023-07-05 10:12:20
-
浏览量:1153次2023-06-07 14:32:02
-
浏览量:2251次2020-04-24 18:04:21
-
2018-11-16 17:56:09
-
浏览量:596次2023-06-03 16:03:04
-
浏览量:2017次2018-03-19 15:32:19
-
浏览量:1606次2024-03-05 15:34:48
-
浏览量:682次2023-08-21 11:47:40
-
浏览量:1777次2019-11-13 15:34:43
-
浏览量:1759次2020-08-21 14:40:54
-
浏览量:4241次2017-10-30 16:46:25
-
浏览量:608次2023-12-20 16:31:10
-
广告/SPAM
-
恶意灌水
-
违规内容
-
文不对题
-
重复发帖
保持微笑
感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明