ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【Pytorch2caffe】pytorch转caffe的一些注意细节

2021-09-29 14:01:11  阅读:256  来源: 互联网

标签:stats Pytorch2caffe track running ceil pytorch caffe https com


收集整理,感谢以下作者的解释。在设计pytorch网络结构的时候,务必注意下面几个点,防止训了很久的模型转成caffe不能用的情况。

#1、
q&a:#0929_1  pytorch 中的ceil mode 为false,则默认当奇数数feature size时,去掉多余的边的数据再进行maxpool;反之当ceil mode为true,则保留多余边数据,再maxpool
#规避 maxpool 时,尽量送入池化层时采用偶数hxw的feature map

Pytorch中池化层默认的ceil mode是false(向下取整)(2.5x2.5 -> 2x2),而caffe只实现了ceil mode= true的(向上取整)(2.5x2.5 -> 3x3)。


q&a: https://github.com/JDAI-CV/fast-reid/issues/210#issuecomment-669010431

#2、
q&a:#0929_2    prototxt注意问题推理过程发现每次的结果都不一样,发现prototxt中每个卷积层下都有初始化权重的偏差(weight_filter、bias_filter和maxpool 的ceil_model),将其统统删除;maxpool 的ceil_model在caffe中默认是true

q&a: https://www.cnblogs.com/wangxiaobei2019/p/14167822.html

#3、
q&a:#0929_3   如何在caffe做点乘操作?即怎么解决a*b1的问题 ??

code:
'''
对应的python代码是

def forward(self, x):
        b, c, _, _ = x.size()
        y = self.avg_pool(x).view(b, c)
        y = self.fc(y).view(b, c, 1, 1)
        return x * y.expand_as(x)
那么思路就有了

需要先将b1拉到和a一样的size,再做点乘

实现:

对应的操作就是caffe的scale层
'''

q&a: 
https://github.com/xxradon/PytorchToCaffe/issues/29


#4、
q&a:#0929_4 该版本的如果遇到相关报错,https://github.com/xxradon/PytorchToCaffe ; 记得加一个net.eval()

q&a: https://github.com/xxradon/PytorchToCaffe/issues/8


#5、关于Pytorch BN层的参数设置的问题
在Caffe中训练时设置use_global_stats=false,测试时需要改为use_global_stats=true。
在PyTorch中model.train()默认track_running_stats=true,测试时model. eval()默认track_running_stats=false。

q&a:0929_5 !!!!pytorch的train和eval两个模式下bn层输出不一样;!!!关于eval的重要性!!!

trainning=True, track_running_stats=True。这个是期望中的训练阶段的设置,此时BN将会跟踪整个训练过程中batch的统计特性。
trainning=True, track_running_stats=False。此时BN只会计算当前输入的训练batch的统计特性,可能没法很好地描述全局的数据统计特性。
trainning=False, track_running_stats=True。这个是期望中的测试阶段的设置,此时BN会用之前训练好的模型中的(假设已经保存下了)running_mean和running_var并且不会对其进行更新。一般来说,只需要设置model.eval()其中model中含有BN层,即可实现这个功能。[6,8]
trainning=False, track_running_stats=False 效果同(2),只不过是位于测试状态,这个一般不采用,这个只是用测试输入的batch的统计特性,容易造成统计特性的偏移,导致糟糕效果。
相关详细解释:https://www.cnblogs.com/jins-note/p/13440772.html

!!!!!tips:
如果BatchNorm2d的参数val,track_running_stats设置False,那么加载预训练后每次模型测试测试集的结果时都不一样;track_running_stats设置为True时,每次得到的结果都一样。

q&a::https://www.zhihu.com/question/282672547/answer/529154567

标签:stats,Pytorch2caffe,track,running,ceil,pytorch,caffe,https,com
来源: https://blog.csdn.net/ycc2011/article/details/120547086

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有