MindSpore和Python中nn.Unfold的区别
创始人
2024-04-13 05:01:37

在往MindSpore迁移项目中遇到了这个转换,以至于不得不去仔细研究一下。

Unfold是卷积操作中的一部分,我们来看一下描述。

Unfold()函数是从一个batch图片中,提取出滑动的局部区域块,也就是卷积操作中的提取kernel filter对应的滑动窗口。Mindspore和pytorch的功能比较可以参考官网的链接。
比较与torch.nn.Unfold的功能差异 — MindSpore master documentation

首先强调一下几个我认为重点的东西

1、MindSpore的Unfold只能GPU使用无法在CPU上使用,测试也是不行的。

2、MindSpore这个方法输出的是四维的,Pytorch的输出是三维的。而只要把MindSpore 的最后两个维度合并就是Pytorch的结果了,这个后续讲详细介绍。

3、官网举的例子特别容易让人误解,Pytorch的例子直接用的Pytorch用的他们官方的,但是自己的例子是自己编的,并且和pytorch的例子还不是对应的关系。这让我们刚刚开始使用MindSpore的特别容易误解。

下面详细说一下这两个框架中Unfold的输入输出,以至于可以快速进行迁移。

在Pytorch中需要的参数是

  • kernel_size (int or tuple) – 滑动窗口的大小

  • stride (int or tupleoptional) – 滑动步长 Default: 1

  • padding (int or tupleoptional) – padding Default: 0

  • dilation (int or tupleoptional) – 空洞大小,这里默认1就是没有空洞,和conv中的有所区别. Default: 1 (这里就可以看出pytorch的文档写的确实好,他怕解释不清楚,给了可视化的链接conv_arithmetic/README.md at master · vdumoulin/conv_arithmetic · GitHub)

那么同理MindSpore这边的参数也是差不多的,但是格式真的是差距很大。也不知道为什么要求必须两边加个1,而padding的数量也是帮你定好了的。

  • ksizes (Union[tuple[int], list[int]]) - 滑窗大小,其格式为[1, ksize_row, ksize_col, 1]的int组成的tuple或list。

  • strides (Union[tuple[int], list[int]]) - 滑窗步长,其格式为[1, stride_row, stride_col, 1]的int组成的tuple或list。

  • rates (Union[tuple[int], list[int]]) - 滑窗元素之间的空洞个数,其格式为[1, rate_row, rate_col, 1] 的int组成的tuple或list。

  • padding (str) - 填充模式,可选值有:”same”或”valid”的字符串,不区分大小写。默认值:”valid”。

    • same - 指所提取的区域块的部分区域可以在原始图像之外,此部分填充为0。

    • valid - 表示所取的区域快必须被原始图像所覆盖。

好的,假如目前我们都设置了同样参数的Unfold,因为mindspore没有默认的参数,所以需要我们输入。那么同样参数的Unfold,得到的结果有什么差别呢?

py_unfold = torch.nn.Unfold(kernel_size=(2, 2)) # pytorch
ms_unfold = mindspore.nn.Unfold(ksizes=[1, 2, 2, 1], strides=[1, 1, 1, 1], rates=[1, 1, 1, 1])

假设input的维度为(N,C,W,H),kernel_size=(k1, k2)

那么Pytorch的输出维度为(N, C\times k1\times k2, L)

MindSpore的输出维度为(N, C\times k1\times k2, L_r\times L_w)

在这里L的求法都给了在数学上很复杂的公式,如果只是为了理解,那么完全没必要去看那个公式,在这里L = L_r\times L_w,这里第一个维度N就是batch_size,一直没有变,第二个维度是kernel乘以通道数C,最后一个维度是每一层会产生多少个小的窗口。用一张图就可以很容易解释了。加入input为(N,C,3,3),Unfold的核大小为(2,2),stride = 1 ,paddind = 0, dilation = 1。则最后的L = 4,如果使用MS,得到的为L_r\times L_w = 2\times 2

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...