Pytorch模型转Caffe
创始人
2025-06-01 01:57:16
0

1. 支持的转换算子

github上实现的PytorchToCaffe的代码,支持转换的算子如下(参见:pytorch_to_caffe.py):

F.conv2d=Rp(F.conv2d,_conv2d)
F.linear=Rp(F.linear,_linear)
F.relu=Rp(F.relu,_relu)
F.leaky_relu=Rp(F.leaky_relu,_leaky_relu)
F.max_pool2d=Rp(F.max_pool2d,_max_pool2d)
F.avg_pool2d=Rp(F.avg_pool2d,_avg_pool2d)
F.adaptive_avg_pool2d = Rp(F.adaptive_avg_pool2d,_adaptive_avg_pool2d)
F.dropout=Rp(F.dropout,_dropout)
F.threshold=Rp(F.threshold,_threshold)
F.prelu=Rp(F.prelu,_prelu)
F.batch_norm=Rp(F.batch_norm,_batch_norm)
F.instance_norm=Rp(F.instance_norm,_instance_norm)
F.softmax=Rp(F.softmax,_softmax)
F.conv_transpose2d=Rp(F.conv_transpose2d,_conv_transpose2d)
F.interpolate = Rp(F.interpolate,_interpolate)
F.sigmoid = Rp(F.sigmoid,_sigmoid)
F.tanh = Rp(F.tanh,_tanh)
F.tanh = Rp(F.tanh,_tanh)
F.hardtanh = Rp(F.hardtanh,_hardtanh)
# F.l2norm = Rp(F.l2norm,_l2Norm)torch.split=Rp(torch.split,_split)
torch.max=Rp(torch.max,_max)
torch.cat=Rp(torch.cat,_cat)
torch.div=Rp(torch.div,_div)
  • 作者重写了caffe的算子,来替换orch.nn算子。其中RP表示替换的意思(Replace)
  • 主要支持转Caffe的算子包括:F.conv2d,F.linear,F.relu,F.leaky_relu,F.max_pool2d,F.avg_pool2d,F.adaptive_avg_pool2d,F.dropout,F.threshold,F.prelu,F.batch_norm,F.instance_norm,F.softmax,F.conv_transpose2d,F.interpolate
  • F.upsampleF.interpolate算子不支持,经过测试上采样操作建议使用F.conv_transpose2d转置卷积替换。其中F.interpolate算子在转换caffe模型时,容易提示upsample_h参数不存在的错误(虽然作者代码中显示支持F.interpolate)。

2. pytoch转Caffe

  • (1) : github上下载PytorchToCaffe的脚本。
    在这里插入图片描述
  • (2): 将Caffe文件夹和pytorch_to_caffe.py文件放到项目根目录
  • (3): 对项目中不支持转caffe的算子,如upsampleF.interpolate,使用F.conv_transpose2d替换。
  • (4): 替换后重新训练pytorch模型,获得训练好的model.pt文件
  • (5): 在项目跟目录上创建convertCaffe.py,利用训练好的.pt文件,转caffe的.prototxt.caffemodel模型文件。convertCaffe.py的代码实现如下:
import sys
sys.path.insert(0,'.')
import torch
from torch.autograd import Variable
from torchvision.models import resnet
import pytorch_to_caffe
from nets.deeplabv3_plus import DeepLabif __name__=='__main__':name = 'deeplab'model = DeepLab(8, backbone="mobilenet", downsample_factor=16, pretrained=False)#model.load_state_dict(torch.load('logs/best_epoch_weights.pth', map_location='cpu'))checkpoint = torch.load("logs/best_epoch_weights.pth")model.load_state_dict(checkpoint,False)model.eval()input=torch.ones([1,3,224,224])#input=torch.ones([1,3,224,224])pytorch_to_caffe.trans_net(model,input,name)pytorch_to_caffe.save_prototxt('{}.prototxt'.format(name))pytorch_to_caffe.save_caffemodel('{}.caffemodel'.format(name))

在这里插入图片描述
转换成功会提示Transform Completed

相关内容

热门资讯

上证国际 | “膨胀”的欧美银... 过去一年,在全球主要市场中,欧美银行股表现也颇为亮眼。分析人士普遍认为,这背后既有宏观环境“东风”,...
美国人工智能公司Anthrop... (央视财经《天下财经》)综合多家外媒7日报道,美国人工智能公司Anthropic已签署一份融资意向书...
刚刚,全线跳水!12.77万人... 全线跳水! 今日(1月8日),以比特币为首的加密货币集体跳水。比特币盘中一度跌破9万美元,以太坊一度...
重庆农商银行:刘小军董事长任职... 1月8日,重庆农商银行发布公告,国家金融监督管理总局重庆监管局已核准刘小军担任本行董事、董事长的任职...
从“医病”到“医心”郑州市“五... “在轻柔的旋律中,他慢慢放松下来,最后一次和我们平静地聊天……这是医疗之外,最温暖的陪伴。”提及亲人...
A股指数震荡,仍有14只基金单... 1月8日,沪指窄幅震荡,创业板指盘中跌超1%。板块来看,商业航天、脑机接口、可控核聚变、AI应用等概...
新基金结算之争:中小机构深度绑... “对我们这样中等甚至偏小规模的基金公司来说,现在发产品,采用券结模式发产品的策略很现实:必须多找几家...
我们基金经理榜单是如何筛选的?... 来源:零城逆影 最近一个多月一直在忙着研究2026年的权益和固收基金榜单,很多人好奇我们的榜单是怎么...
重磅官宣!中国石化与中国航油实... 1月8日晚,据新华社报道,来自国务院国资委的消息,经报国务院批准,中国石油化工集团有限公司与中国航空...
原创 我... 一提到航天、火箭,就有一种高大上的感觉,其采用的材料也应该非常牛。但是,我国一家企业在研发火箭的时候...
霸王茶姬回应赴港上市传闻:暂无... 来源:澎湃新闻 新茶饮品牌霸王茶姬回应赴港上市传闻。 1月7日,有消息称中国茶饮连锁品牌霸王茶姬(...
从委内瑞拉到伊朗,国际原油市场... 界面新闻记者 | 刘婷 近期委内瑞拉和伊朗两个石油输出国组织(欧佩克)成员政局动荡,然而国际油价不...
ETF复盘资讯|乘风商业航天涨... 周四(1月8日),A股窄幅震荡,沪指微跌仍录得连续15个阳线。沪深两市成交额2.8万亿元,较上一个交...
聚焦全球变局与产业升级 天弘基... 2026年伊始,全球经济延续激荡的 “分化”与“重塑”,AI浪潮正从资本开支迈入应用落地关键期,全球...
多位知名基金经理“出手”! 【导读】多位知名基金经理最新调仓披露 中国基金报记者 含章 新年伊始,多家上市公司陆续发布相关公告,...
青山控股疑似拟携手阿曼:中东绿... 阿曼与中国青山控股集团深化工业合作,推动绿色钢铁本地化生产,这一举措契合阿曼工业战略2040,旨在发...
我国外汇储备规模33579亿美... 1月7日,国家外汇管理局发布的统计数据显示,截至2025年12月末,我国外汇储备规模为33579亿美...
暗盘大涨26%! 【导读】MINIMAX暗盘大涨26%! 中国基金报记者 格林 1月8日,港股三大指数齐跌。截至收盘,...
原创 印... 2026年初,印度高调宣布GDP突破4万亿美元,正式超越日本,成为全球第四大经济体,并放出豪言:三年...
龙旗科技:AI终端放量在即,全... 近日,上海龙旗科技股份有限公司(简称:“龙旗科技”)通过港交所主板上市聆讯。 这家全球智能手机ODM...