Pytorch转变Caffe再转变om模型转换流程是怎样的


这篇文章给大家介绍Pytorch转变Caffe再转变om模型转换流程是怎样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Baseline:PytorchToCaffe主要功能代码在:直接使用可以参考resnet_pytorch_2_caffe.py,如果网络中的操作Baseline中都已经实现,则可以直接转换到Caffe模型。如果遇到没有实现的操作,则要分为两种情况来考虑。以arg_max为例分享一下添加操作的方式。首先要查看Caffe中对应层的参数:caffe.proto为对应版本caffe层与参数的定义,可以看到ArgMax定义了out_max_val、top_k、axis三个参数:与Caffe算子边界中的参数是一致的。layer_param.py构建了具体转换时参数类的实例,实现了操作参数从Pytorch到Caffe的传递:pytorch_to_caffe.py中定义了Rp类,用来实现Pytorch操作到Caffe操作的变换:在添加操作时,要使用Rp类替换操作:接下来,要具体实现该操作:即实现了argmax操作Pytorch到Caffe的转换。如果要转换的操作在Caffe中无直接对应的层实现,解决思路主要有两个:1)在Pytorch中将不支持的操作分解为支持的操作:如nn.InstanceNorm2d,实例归一化在转换时是用BatchNorm做的,不支持 affine=True 或者track_running_stats=True,默认use_global_stats:false,但om转换时use_global_stats必须为true,所以可以转到Caffe,但再转om不友好。InstanceNorm是在featuremap的每个Channel上进行归一化操作,因此,可以实现nn.InstanceNorm2d为:但在验证HiLens Caffe算子边界中发现, om模型转换不支持Channle维度之外的求和或求均值操作,为了规避这个操作,我们可以通过支持的算子重新实现nn.InstanceNorm2d:经过验证,与原操作等价,可以转为Caffe模型2)在Caffe中通过利用现有操作实现:在Pytorch转Caffe的过程中发现,如果存在featuremap + 6这种涉及到常数的操作,转换过程中会出现找不到blob的问题。我们首先查看pytorch_to_caffe.py中add操作的具体转换方法:可以看到对于blob不存在的情况进行了判断,我们只需要在log.blobs(args[0]) == None条件下进行修改,一个自然的想法是利用Scale层实现add操作:类似的,featuremap * 6这种简单乘法也可以通过同样的方法实现。Pooling:Pytorch默认 ceil_mode=false,Caffe默认 ceil_mode=true,可能会导致维度变化,如果出现尺寸不匹配的问题可以检查一下Pooling参数是否正确。另外,虽然文档上没有看到,但是 kernel_size > 32 后模型虽然可以转换,但推理会报错,这时可以分两层进行Pooling操作。Upsample:om边界算子中的Upsample 层scale_factor参数必须是int,不能是size。如果已有模型参数为size也会正常跑完Pytorch转Caffe的流程,但此时Upsample参数是空的。参数为size的情况可以考虑转为scale_factor或用Deconvolution来实现。Transpose2d:Pytorch中 output_padding 参数会加在输出的大小上,但Caffe不会,输出特征图相对会变小,此时反卷积之后的featuremap会变大一点,可以通过Crop层进行裁剪,使其大小与Pytorch对应层一致。另外,om中反卷积推理速度较慢,最好是不要使用,可以用Upsample+Convolution替代。Pad:Pytorch中Pad操作很多样,但Caffe中只能进行H与W维度上的对称pad,如果Pytorch网络中有h = F.pad(x, (1, 2, 1, 2), “constant”, 0)这种不对称的pad操作,解决思路为:如果不对称pad的层不存在后续的维度不匹配的问题,可以先判断一下pad对结果的影响,一些任务受pad的影响很小,那么就不需要修改。如果存在维度不匹配的问题 香港云主机,可以考虑按照较大的参数充分pad之后进行Crop,或是将前后两个(0, 0, 1, 1)与(1, 1, 0, 0)的pad合为一个(1, 1, 1, 1),这要看具体的网络结构确定。如果是Channel维度上的pad如F.pad(x, (0, 0, 0, 0, 0, channel_pad), “constant”, 0),可以考虑零卷积后cat到featuremap上:一些操作可以转到Caffe,但om并不支持标准Caffe的所有操作,如果要再转到om要对照文档确认好边界算子。关于Pytorch转变Caffe再转变om模型转换流程是怎样的就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

相关推荐: 修改hosts文件提示没有权限保存如何解决

这篇文章给大家介绍修改hosts文件提示没有权限保存如何解决,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1.找到hosts文件,右击后点击属性2.点击安全3.点击编辑按钮4.修改当前登录系统用户权限(允许全部勾上,点击应用即可)关于修改…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 09/03 14:48
Next 09/03 14:49

相关推荐