目录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 ) 总结以上为个人经验,希望能给各人一个参考,也希望各人多多支持脚本之家。 来源:https://www.jb51.net/python/328694hke.htm 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
|手机版|小黑屋|梦想之都-俊月星空
( 粤ICP备18056059号 )|网站地图
GMT+8, 2025-7-1 18:55 , Processed in 0.030653 second(s), 19 queries .
Powered by Mxzdjyxk! X3.5
© 2001-2025 Discuz! Team.