pytorch用于对比试验,caffe用于工程落地
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pytorch用于对比试验,caffe用于工程落地相关的知识,希望对你有一定的参考价值。
参考技术A 从今天开始,进行工程和科研的融合。使用pytroch进行快速的迭代试验,选取确定一个最优的方案,最终用caffe进行工程落地。
需求1:打印网络,每层特征图尺寸
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple torchsummary
使用 torchsummary 里的 summary包
from torchsummary import summary
summary(net,(1,800,800),batch_size=1,device="cpu")
该步骤,给调参提供了参考(调参的目的是获取特定尺寸的特征图)。
需求2:caffe 和 pytorch 之间进行等价转换
caffe中的 BN+scale =pytorch 中的 BN
caffe中使用weight_fileter参数为 单个网络层,设置权重初始化方式:
layer
name: "conv1_n"
type: "Convolution"
bottom: "data"
top: "conv1_n"
convolution_param
num_output: 32
bias_term: false
pad: 3
kernel_size: 7
stride: 2
weight_filler
type: "xavier"
pytorch中则使用 torch.nn.init函数 对单个网络层 设置权重初始化方式:
pytorch有是十一种权重初始化方法。这些方法都位于 torch.nn.init函数中。
其他:
初始化单层权重:
conv1 = torch.nn.Conv2d(...)
torch.nn.init.xavier_uniform(conv1.weight)
也可以通过直接写入固定值的方式初始化单层权重:
conv1.weight.data.fill_(0.01)
conv1.bias.data.fill_(0.01)
其他例子:
self.conv1 = nn.Conv2d(3,64, kernel_size=7, stride=2, padding=3)
init.xavier_uniform(self.conv1.weight)
init.constant(self.conv1.bias,0.1)
使用 torch.nn.Module.apply函数对整个网络进行初始化(该函数,将对 nn.Module 一递归的方式进行全部网络层的权重初始化:
其他例子:
将深度可分离卷积层用卷积层表示:
https://support.huaweicloud.com/atctool-cann502alpha3infer/atlasatc_16_0148.html
深度可分离卷积的实现原理:https://zhuanlan.zhihu.com/p/92134485
pytorch中,使用2D卷积的group参数来实现深度可分离卷积:
caffe中的Eltwise层:
Eltwise层的操作有三个:product(点乘), sum(相加减) 和 max(取大值),其中sum是默认操作。
注意:其中A和B的系数(coefficient)都要给出。要求N,C,W,H必须全部相同;
caffe中reshape 层的实现原理:https://blog.csdn.net/wfei101/article/details/78449428
caffe中的normalize层实现原理:
https://www.codetd.com/article/880844
https://www.codetd.com/article/3894481
caffe中的eltwise,concat,reshape层,在pytorch中都以 直接对tensor进行操作的函数进行实现。torch.add(),torch.cat()的形式实现。
concat 和 eltwise中的sum的原理解析https://blog.csdn.net/weixin_39504171/article/details/107341579
pytorch中关于tensor之间点乘的实现:https://blog.csdn.net/da_kao_la/article/details/87484403
pytorch中对tensor 进行reshape的实现:https://blog.csdn.net/a1367666195/article/details/105600709
pytorch中关于 normalize的实现:
https://blog.csdn.net/weixin_43844219/article/details/104600514
https://bbs.huaweicloud.com/blogs/detail/187196
caffe中的smoothl1loss层,在pytorch中是以loss函数的形式实现的:
pytorch中关于smoothl1loss的实现:https://pytorch.org/docs/stable/generated/torch.nn.SmoothL1Loss.html
目前遇到了这些, 后续碰到新的层,继续补充。
将pytorch和caffe等价转换,必须弄清caffe中相关层的原理,以及其在pytorch中对应的实现,这样就可以在理解原理的基础上实现等价转换。
以上是关于pytorch用于对比试验,caffe用于工程落地的主要内容,如果未能解决你的问题,请参考以下文章
深度学习框架格局剧震:Caffe2 代码全部并入 PyTorch
Caffe2代码全部并入PyTorch:深度学习框架格局剧震
荧客技荐Caffe2 代码全部并入 PyTorch:深度学习框架格局剧震