YOLOv4 darknet模型转换成caffemodel再转om在Atlas服务器上面推理(一)

YOLOv4 darknet模型转换成caffemodel再转om在Atlas服务器上面推理(一) 保持微笑 2024-01-22 11:09:24 771

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];
++}

添加后如图所示

  1. 重新编译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服务器进行推理的教程详见我的下一篇文章

声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
红包 点赞 收藏 评论 打赏
评论
1个
内容存在敏感词
手气红包
  • marlin_lee 2024-01-24 09:28:15
    回复
    为什么需要安装pytorch,future?这些是在容器里安装么?
相关专栏
置顶时间设置
结束时间
删除原因
  • 广告/SPAM
  • 恶意灌水
  • 违规内容
  • 文不对题
  • 重复发帖
打赏作者
易百纳技术社区
保持微笑
您的支持将鼓励我继续创作!
打赏金额:
¥1易百纳技术社区
¥5易百纳技术社区
¥10易百纳技术社区
¥50易百纳技术社区
¥100易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区微信支付
易百纳技术社区
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

审核成功

发布时间设置
发布时间:
是否关联周任务-专栏模块

审核失败

失败原因
备注
拼手气红包 红包规则
祝福语
恭喜发财,大吉大利!
红包金额
红包最小金额不能低于5元
红包数量
红包数量范围10~50个
余额支付
当前余额:
可前往问答、专栏板块获取收益 去获取
取 消 确 定

小包子的红包

恭喜发财,大吉大利

已领取20/40,共1.6元 红包规则

    易百纳技术社区