Darknet2Caffe 大概步骤

文章目录

  • 1训练模型
  • 2转换模型
    • 2.1安装Caffe
    • 2.2拓展 upsample 层
    • 2.3转换模型

注:第四、五、六节文章只是极端理想的情况(模型移植精度损失不大,后处理代码也无需过多修改),可以作为熟悉大致流程的例子看看。移植模型绝对不会这么理想…

1训练模型

我的模型训练是在 Linux 服务器上进行。因为我的笔记本没有 GPU。
使用 yolov3 训练模型网上有很多教程。大体上就是先标注数据再训练得到模型。
大家查一下就可以看到很多图文并茂的教程了。我就不重复了。
完事之后,你会得到如下2个文件:

xxx.cfg
xxx.weights

2转换模型

因为相机需要的是 WK 模型,而 WK 模型只能从 Caffe 模型转换得到。
所以我们先把 Darknet 转换到 Caffe。

2.1安装Caffe

第一步当然是安装 Caffe。
Caffe 的安装非常坑,光是安装就可以写一个博客了。
网上也有很多教程,每个人遇到的问题也不一样,这个只能靠自己(Google)了。
我只能说一说大体上的步骤。
你可能需要先安装 protobuf-2.6.1
需要的Caffe源码 :https://github.com/BVLC/caffe
编辑Makefile.config之后是编译安装。

make all
make test
make runtest
make pycaffe

2.2拓展 upsample 层

装完之后是需要在 Caffe 里拓展 upsample 层,可以参考网络上的一些教程。

darknet2caffe的原理性说明:
Yolov3转化Caffe框架详解

在caffe里拓展新层:
caffe添加新层教程

darknet2caffe开源工具作者 ChenYingpeng 在网络上提供的upsample层拓展文件:
https://github.com/ChenYingpeng/darknet2caffe/tree/master/caffe_layers

具体操作如下:

  1. 把upsample_layer.hpp放入include/caffe/layers下面
  2. 把upsample_layer.cpp与upsample_layer.cu放在src/caffe/layers下面
  3. 修改自己的caffe.proto文件
    src/caffe/proto/caffe.proto中的LayerParameter的最后一行加入加入:
    message LayerParameter { 
    	.....  
    	optional UpsampleParameter upsample_param = 149;  
    }  
    
    注意149为新层的ID号,该ID号请根据个人的caffe.proto文件指定即可
  4. 然后在caffe.proto文件的最后添加upsample层的参数:
    message UpsampleParameter{  
      optional int32 scale = 1 [default = 1];  
    }  
    
  5. 重新编译Caffe

    make clean
    make all -j4
    make test -j4
    make runtest -j4
    make pycaffe -j4

2.3转换模型

模型转换工具:https://github.com/ChenYingpeng/darknet2caffe
使用时需要修改 darknet2caffe.py 文件里的 caffe_root 值
转换命令:

python darknet2caffe.py cfg/xxx.cfg weights/xxx.weights prototxt/xxx.prototxt caffemodel/xxx.caffemodel  

转换完成后会出现:

unknow layer type yolo 
unknow layer type yolo 
save prototxt to xxx.prototxt
save caffemodel to xxx.caffemodel

此处打印 yolo 层未识别,这是因为 yolo 层的处理现在需要自己用代码完成,正好与华为给的 yolov3_demo 文件中的 yolov3后处理步骤 对应起来。此时 Darknet转Caffe已经完成了。

你可能感兴趣的:(#,海思NNIE与深度学习,caffe,darknet2caffe,深度学习)