pytorch模型转caffe模型(pytorch->onnx->caffe)


前言

这里主要用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
  • 5
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 19
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值