pytorch图片分割原理分析

 更新时间:2024年10月14日 08:46:46   作者:xx_xjm  
自Transformer模型被应用于计算机视觉领域后,图像分割技术得到了进一步的发展,但图像分割操作复杂,特别是对张量的处理,涉及多种变换方法,其中,view/reshape用于改变数据形状,而permute/transpose用于改变数据的维度顺序

pytorch图片分割原理

自从transformer应用到cv领域以后,对图片的分割需求便越加重了,但是图像分割说起来容易,实际操作起来还是有很多地方不懂(主要还是code能力太弱)。

我们知道,对张量的处理一般又两种,一种是view/reshape这样的,先将数据按行展开,再按照指定形状排列数据;另一种是permute/transpose这种,是把数据按照维度进行变化,也就是把数据排列的先后顺序转换一下(后面具体介绍)。所以分割图片就用到了两者的结合

实验

原图:

1:我们先看直接reshape的结果:将原图片切割为8份

完全没法看好吧!

原因就是上面说的,reshape是把整张图片按行(这里是按照通道数3,实际上也确实应该把通道数调到最后,按照通道展开,原因后面介绍)展开。

2:我们看一下正确的做法

可以看到分割的很完美!

接下来解释一下原因

1:通道数必须放到最后一个维度:首先,我们知道再张量数据是连续的情况下,其数据是按行展开排序的,也就是按照张量最后一个维度展开排序,所以,对于一个三通道的RGB图像(3,H, W)它本来是按照宽度展开的,但这样在分割的时候就存在问题了,因为,分割一张图片,应该是三个通道一起分割,故,我们第一步应该把通道数调到最后一个维度(这里因为是用cv2打开的图片,通道数已经在最后一维 ,所以不用再单独转换,但如果需要转换的话,注意,不可以用reshape或者view,只能用permute/或者transpose)

2:宽和高的分割必须先在自己的维度分割,即对于一组(B,C,H, W)的图片,在把C转换到最后一维后为(B,H,W,C),分割(此时用reshape)应该先按照(B,H/H分割size,H分割size,W/W分割size,W分割size,C)展开,然后再用permute,或者tanspose转化为(B,H/H分割size,W/W分割size,H分割size,W分割size,C),最后,再用contiguous().view转化为(B,(H/H分割size)*(W/W分割size),H分割size,W分割size,C),解释如下:

张量的维度,实际上表述数据的方向和排列顺序,越靠后的维度越先排列,所以,对于(B, H W, C),如果只是进行reshape或者view的话,他始终是会先把宽W排完之后再排高,所以,为了要把图片分成一份一份的,那么就必须让宽和高交替出现,也就是要改变数据的排列顺序,这正是permute和transpose的作用,它们相当于在保持现有数据在内存中顺序的基础上,改变数据的排列顺序,这里(B,H/H分割size,H分割size,W/W分割size,W分割size,C)H/H分割size,H分割size都代表高;W/W分割size,W分割size都代表宽,也就是(B,高,高,宽,宽,C),将H分割size和W/W分割size转换以后则为(B,高,宽,高,宽,C )

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Python查找算法之插补查找算法的实现

    Python查找算法之插补查找算法的实现

    这篇文章主要介绍了Python查找算法之插补查找算法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • Python  Django 母版和继承解析

    Python Django 母版和继承解析

    这篇文章主要介绍了Python Django 母版和继承解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • python简单爬虫--get方式详解

    python简单爬虫--get方式详解

    本篇文章介绍了python爬虫中get和post方法介绍以及cookie作用,对此有兴趣的朋友学习下,希望能够给你带来帮助
    2021-09-09
  • python内打印变量之%和f的实例

    python内打印变量之%和f的实例

    今天小编就为大家分享一篇python内打印变量之%和f的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • Python Numpy 高效的运算工具详解

    Python Numpy 高效的运算工具详解

    这篇文章主要介绍了Python numpy矩阵处理运算工具用法汇总,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2021-10-10
  • python异步IO的项目实践

    python异步IO的项目实践

    本文主要介绍了python异步IO的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • Python+PyQt5编写图片格式转换器

    Python+PyQt5编写图片格式转换器

    这篇文章主要为大家详细介绍了如何利用Python和PyQt5编写一个简单的图片格式转换器,文中的示例代码讲解详细,感兴趣的小伙伴可以动手尝试一下
    2023-07-07
  • python 爬取英雄联盟皮肤图片

    python 爬取英雄联盟皮肤图片

    还记得那些年一起网吧开黑通宵的日子吗?《英雄联盟》绝对是大学时期的风靡游戏,即使毕业多年的大学同学相聚,难免不怀念一番当时一起玩《英雄联盟》的日子。今天就给大家分享一下英雄及皮肤图片的爬虫。
    2021-05-05
  • opencv实现图像几何变换

    opencv实现图像几何变换

    这篇文章主要为大家详细介绍了opencv实现图像几何变换,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-03-03
  • 31个必备的Python字符串方法总结

    31个必备的Python字符串方法总结

    字符串是Python中基本的数据类型,几乎在每个Python程序中都会使用到它。本文为大家总结了Python中必备的31个字符串方法,需要的可以参考一下
    2022-03-03

最新评论