caffe的model和prototxt转pytorch的model

Posted waldenlake

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了caffe的model和prototxt转pytorch的model相关的知识,希望对你有一定的参考价值。

#由于系统没有同时安装caffe和pytorch,一个在系统下,一个在conda中,应该是隔离的python环境,一般不能用。
#因而只能用numpy当做中间媒介,下面代码是numpy存储的caffe网络,将之转成pytorch
#我没有自动化那个prototxt的转换,没没必要,自己写的一摸一样的pytorch网络
def net_from_caffe(n,re): #n是pytorch的model, re 是numpy存储的caffemodel i=-1 for name, l1 in n.named_children(): try: l2 = getattr(n, name) l2.weight # skip ReLU / Dropout except Exception: continue i+=1 while len(re[i][weights])==0 and i<len(re): #在numpy中非conv和全连接层是没有weights的,只对齐这两个layer就行了 i+=1 w=torch.from_numpy(re[i][weights][0])# b=torch.from_numpy(re[i][weights][1]) assert w.size() == l2.weight.size() assert b.size() == l2.bias.size() l2.weight.data.copy_(w) l2.bias.data.copy_(b)

坑点:

1.pil在打开图片时,默认rgb,默认0-1范围。要搞成0-255的自己去乘

2.有个注意的点,pytorch在第一次con到全联接的时候,要做一个展开操作,直接h=h.view(h.size(0),-1)就可以和caffe的一一对应

3.rgb转bgr:im=im[[2,0,1],...]

 

 

torch.load的两种方式:

1.直接存model

但是这样子model的数据类型是固定的,你必须让这个数据类型在调用出可见才能打开

2.存state_dict

比较灵活,直接对参数赋值,没有外面包裹的数据类型,就是多了点麻烦




以上是关于caffe的model和prototxt转pytorch的model的主要内容,如果未能解决你的问题,请参考以下文章

caffe - 训练前如何修改 prototxt

解析Caffe框架的prototxt模型文件

解析Caffe框架的prototxt模型文件

浅谈caffe中train_val.prototxt和deploy.prototxt文件的区别

caffe训练resume

Caffe中Solver.prototxt解析