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:深度学习框架格局剧震

重磅!PyTorch 落地 Linux 基金会

Horizon:Facebook的应用强化学习平台(PyTorch/Caffe2)

pytorch模型转caffe模型