目前我有一个pytorch版本的yolov3模型,该模型有 X.cfg和X.pt两个文件
该格式可以与两个主流pytorch工程一致:
https://github.com/ultralytics/yolov3
https://github.com/eriklindernoren/PyTorch-YOLOv3
由于caffe没有yolov3所需的upsample层与yolo层,所以需要自己来实现。。不要急,有大神开源项目:
https://github.com/eric612/MobileNet-YOLO
你需要做的就是把这个caffe工程给编译一下。该caffe工程附加了很多其余功能,作者提供了CMakeLists.txt,(注意不要从别的caffe文件中复制过来Makefile与Makefile.config来编译,这个坑我已经踩过了。。)编译需要注意事项:
1、python2(该工程默认就是py2,文件中可以选择使用py3,但是会报很多错误)
2、opencv3(这个工程还包含ssd检测模块,需要opencv3中videoio.hpp来支持)
3、caffe所需一大堆依赖库,可参考我的博客:https://blog.csdn.net/l297969586/article/details/61209313
编译完成后,进入这个caffe工程的
CAFFE_ROOT/models/darknet_yolov3/ 目录下
打开darknet2caffe.py ,修改
#修改为自己的caffe路径
caffe_root = '/home/ubuntu/workspace/pytorch2caffe/caffe-yolo-new/'
#修改需要转的pytorch模型路径
weights_det = '/home/ubuntu/workplace/darknet_yolov3/yolov3.pt'
cfg_det = '/home/ubuntu/workplace/darknet_yolov3/yolov3.cfg'
#修改为自己的输入size(由于我的模型不是正常的yolov3,做过裁剪和尺寸调试)
model_det = Darknet(cfg_det, 512)
#修改为自己的输入size(由于我的模型不是正常的yolov3,做过裁剪和尺寸调试)
input_var = Variable(torch.rand(1, 3, 512, 512))
#修改输出prototxt与caffemodel的路径
pytorch2caffe(input_var, output_var, 'deploy.prototxt', 'model.caffemodel')
然后就开始运行darknet2caffe.py ,就会得到model.caffemodel和deploy.prototxt。
此时关键的来了!!!!你会发现这个caffemodel根本没法用!!!
问题在于:其实这个工程是转darknet至caffe的,pytorch文件中pt文件不是纯数字组合。在写入caffemodel的时候,会将类似与文本的信息如“conv_layer_1”当做是数字处理,从而打印输出caffemodel内容时会发现很多 nan和-nan的数字。
我的处理方式,重新训练。。
那上文说的这些不是白扯么,不其实刚才的工作已经将这个工作完成近百分之80了。因为yolo版本caffe有了,deploy.prototxt有了,对照这deploy.prototxt仿照 CAFFE_ROOT/models/darknet_yolov3/ 下的任意一个test.prototxt和train.prototxt就可以写出你自己的test和train对应的prototxt。
开始训练,大功告成。
附几张caffe训练好的效果图: