当前位置 : 主页 > 编程语言 > python >

深度学习模型中颜色空间转换

来源:互联网 收集:自由互联 发布时间:2022-06-18
​目录​ ​​背景​​ ​​方法​​ ​​结论​​ 背景 情况是这样的,我训练一个深度学习模型,用于图片的处理,读取图片时使用的是​skimage​包,然后进行一系列常见的处理变


​目录​

​​背景​​

​​方法​​

​​结论​​


背景

情况是这样的,我训练一个深度学习模型,用于图片的处理,读取图片时使用的是​skimage​包,然后进行一系列常见的处理变为tensor类型送入模型中进行训练。这个模型为我自己设计的,同时还有其他的论文设计的模型,他们共用一个数据预处理,现在我不想动数据处理模块,只想在我设计的​模型中进行颜色空间的换​,看看模型在另外的颜色空间中是否有不一样的表现,那么如何做呢?(如果有其他好方法或者错误记得私信我,谢谢~~!!!)

方法

所以就出现了比较蠢的方法,把即将送入模型中的tensor张量数据类型一圈。先把batch维度删去,再从GPU中转出来,转为numpy类型,还需要通道维度的变换,最后用skimage.color包对转出来的矩阵进行颜色空间的变换。

如下,现在即将送入模型的张量为s,那么,可以在模型中使用如下代码进行颜色空间的换,我是将ycbcr颜色空间转换为rgb颜色空间。

import skimage.color as sc
s = sr.squeeze(0) #输入的s是即将送入模型中的用skimage读取后转换的tensor张量
s = s.cpu().numpy() #从GPU中取出,并转换为矩阵
s = sc.ycbcr2rgb(s)*255 #颜色空间变换!255是送入模型的tensor为0-1
s = np.transpose(s,[2,0,1]) #现在的结果s就是图片RGB矩阵,值0-255
###
#你的对s的其他操作
###
s = torch.from_numpy(s).cuda() #转为tensor并放入GPU
s = s.unqueeze(0) #增加batch 维度,此时的s可以送入模型中训练

结论

1.注意的是cv2包读取图片时矩阵是按照​BGR​排列的,这和其他包不同

2.注意换时的图片的通道、宽度、高度的​排列顺序​。以及​浮点、整型​等(在这我未考虑,对结果影响不大)。

3.注意skimage等读出图片的矩阵数值范围是​0-255​,而送入模型中训练的tensor值范围是​0-1​


网友评论