yolov3/yolov4转为caffe模型 docker环境安装caffe1.x

1 部署 caffe 环境
常规的方法是下载 caffe 的源码,进行编译安装。但是,这种方法比较复杂,不太容易成功。更简单的方法是直接下载 caffe1.x 的docker 镜像。这种方法需要你提前在 Ubuntu 里安装了 nvidia-docker。
打开 docker hub 网站https://registry.hub.docker.com/
搜索caffe:
在这里插入图片描述
Tags->点击进去,下载对应的版本(我这里下次的是gpu版本命令为):docker pull bvlc/caffe:gpu
在这里插入图片描述
下载完成后输入命令:docker images 查看下载好的镜像。
在这里插入图片描述
为镜像创建容器:
docker run --runtime=nvidia --name caffe -i -t bvlc/caffe:gpu /bin/bash
这里我们给该容器起的名字是 caffe,大家可以自由设置,根据 docker ps -a 这条命令来查看各个容器。
在这里插入图片描述
这样,我们就进入了 caffe1.x 的 docker 容器之内了。
该容器已部署好了 caffe1.x,caffe1.x 路径为:/opt/caffe
退出后想继续进入容器执行命令:
docker exec -it caffe /bin/bash
2 caffe 源码修改
因为官方 caffe1.x 框架不支持 yolo3/yolov4 的 upsample 层,所以需要手动增加 upsample 层,对 caffe 源码进行修改。
克隆 GitHub 上的转换工具项目:
git clone https://github.com/ChenYingpeng/darknet2caffe.git
根据README.md记录:

  Python2.7
  Caffe
  Pytorch >= 0.40
  Add Caffe Layers
1.`caffe_layers/mish_layer/mish_layer.hpp,caffe_layers/upsample_layer/upsample_layer.hpp` 拷贝到容器的路径 `/opt/caffe/include/caffe/layers `.
2. `caffe_layers/mish_layer/mish_layer.cpp **mish_layer.cu**,caffe_layers/upsample_layer/upsample_layer.cpp upsample_layer.cu` 拷贝到容器的路径 `/opt/caffe/src/caffe/layers/`.
3. Copy `caffe_layers/pooling_layer/pooling_layer.cpp` 拷贝到容器的路径 ` /opt/caffe/src/caffe/layers/ `
5. 然后,打开容器内的 caffe 文件:/opt/caffe/src/caffe/proto/caffe.proto。按照如下说明修改相应字段的程序。

caffe.proto:

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

其中,++ 表示该行是增加的内容。
3 caffe 重新编译
修改完 caffe 的一些源码之后,需要对 caffe 重新编译。
进入 /opt/caffe/build 目录,输入以下命令:
make clean
make all -j8
make pycaffe -j8

caffe 重新编译之后,就可以对 yolov3/yolov4 模型进行 caffe 转换了。
4 模型转换
进入darknet2caffe-master/weights目录执行命令下载例子提供过来的weights:
./download_weights.sh
下载完成后在 darknet2caffe 目录下,输入以下命令:
python darknet2caffe.py cfg/yolov4.cfg weights/yolov4.weights prototxt/yolov4.prototxt caffemodel/yolov4.caffemodel
如果输出类似下面的语句,则证明转换成功!

在这里插入图片描述
最后根据自己的cfg以及weight文件进行转换
5 环境问题记录:

  1. docker的容器下使用apt-get update卡在[0%] Working问题解决办法:
    产生问题的原因在于docker的容器下实在是太干净简洁了,很多东西都没有,这里是因为缺少apt-transport-https包导致的,先在自己电脑上下载apt-transport-https_xxx_amd64.deb包(http://archive.ubuntu.com/ubuntu/pool/main/a/apt/),下载好后使用dpkg -i /path/to/apt-transport-https_1.2.32_amd64.deb安装即可。
    在apt-get update可以发现问题解决了,又可以愉快的使用apt-get装软件了。
  2. docker ImportError: No module named xxx
    如果提示缺少torch执行命令:
    pip install torch
    如果提示缺少builtins执行命令:
    pip install future
  3. docker 复制文件命令
    在宿主机上执行命令:
    从容器里面拷文件到宿主机:
    docker cp 容器名:要拷贝的文件在容器里面的路径 要拷贝到宿主机的相应路径:
    docker cp caffe:/opt/ /home/caffe
    从宿主机拷文件到容器里面:
    docker cp 要拷贝的文件路径 容器名:要拷贝到容器里面对应的路径
    docker cp /home/caffe caffe:/opt/
  4. cfg文件异常报错
    如果在转换过程中有报错有可能是cfg文件中activation=relu,目前支持成功转换的格式是activation=mish
    6 主要参考链接
    https://zhuanlan.zhihu.com/p/357316097
    https://blog.csdn.net/red_stone1/article/details/114909443
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值