笔记目录
前言
这里主要用ubuntu18.04对caffe环境进行搭建,之前用windows搭建过caffe的环境但是还需要安装onnx的库,windows内存不太够用了,我也就不敢再瞎捣鼓了,于是乎我就用windows原先安装好的pytorch环境进行pytorch转onnx,用ubuntu进行onnx转caffe。
这里的ubuntu系统是我在阿里云租的一个服务器,因为第一次租有优惠很便宜。。。。反正比某迅的会员便宜。
这里用到的训练代码是yolov5
一.pytorch转onnx
以下这些我是在windows下的pytorch环境实现的。
1.修改yolov5/models/export.py
将opset_version=12改为opset_version=10(大约在72行左右)
2.在yolov5的目录下运行
python models/export.py --weights weights/yolov5s.pt --img 640 --batch 1
( --weights 后面跟你们自己训练好的模型)
3.简化onnx模型
很多时候,很多节点比如cast节点,Identity 这些节点可能都不需要,所以我们需要进行简化。
安装简化器
pip install onnx-simplifier
简化onnx模型
python -m onnxsim weights/yolov5s.onnx(简化前的模型名字与存放地址) weights/yolov5s_sim.onnx (简化后的模型名字与存放地址)
如果不做简化会报这个错
TypeError: ONNX node of type Clip is not supported.
二.onnx转caffe
1.yolov5网络层优化
在yolov5训练之前最好是改一下网络层,要不会报这个错。
Traceback (most recent call last):
File "convertCaffe.py", line 159, in <module>
convertToCaffe(graph, prototxt_path, caffemodel_path, exis_focus=True, focus_concat_name="Concat_40", focus_conv_name="Conv_41")
File "convertCaffe.py", line 83, in convertToCaffe
layer = converter_fn(node, graph, err)
File "/home/admin/code/yolov5_onnx2caffe/onnx2caffe/_operators.py", line 505, in _convert_resize
height_scale = scales[2]
IndexError: index 2 is out of bounds for axis 0 with size 0
因为我用的是yolov5s模型所以更改yolov5/models/yolov5s.yaml
将yolov5的focus层替换为conv层(stride为2),upsample层替换为deconv层
(反卷积层),因为caffe不支持focus层。
# parameters
nc: 4 # number of classes
depth_multiple: 0.33 # model depth multiple
width_multiple: 0.50 # layer channel multiple
# anchors
anchors:
- [10,13, 16,30, 33,23] # P3/8
- [30,61, 62,45, 59,119] # P4/16
- [116,90, 156,198, 373,326] # P5/32
# YOLOv5 backbone
backbone:
# [from, number, module, args]
#[[-1, 1, Focus, [64, 3]], # 0-P1/2
[[-1, 1, Conv, [64, 3, 2]], # 0-P1/2
[-1, 1, Conv, [128, 3, 2]], # 1-P2/4
[-1, 3, C3, [128]],
[-1, 1, Conv