今天要写的代码涉及到数据增强的部分,因为我用的框架是pytorch,想着如果直接有数据增强的函数直接用就好了,省的写了,查了一下确实有,就在torchvision的tranform中,但是这里面对于图像的变化都是针对于PIL图像的,而我之前对于图片的操作都是用的给cv2,就稍微看了一下PIL的用法,再加上函数,图像增强的部分算是搞明白了。
但是在我训练完之后,要预测时,因为要计算混淆矩阵,但是老出错误,往回寻找错误才发现问题。
混淆矩阵计算时,真值和预测值所对应的标签都是一致的,比如我是两分类,预测的结果是0和1,而label因为随着样本图像做过数据增强,所以它也是经过PIL处理的,我就打开label的值看了一下,居然是0和0.0032,试验了很多遍,确实是因为PIL打开图片的原因,我本来在考虑按照哪个格式来,分析了一下,肯定是整数来代替类别比较方便,所以我决定想办法将PIL打开的后的图片经过变化之后,能转成cv2打开的那个样子。
查了一下,说PIL打开图片是”RGB“方式,而cv2打开是”BGR"方式,难道这个导致了像素值的变化?我以为这两种打开方式只是改变了宽高,可惜PIL也没有以“BGR”打开的方式,也不能比较一下值变化是不是因为这个。
将PIL转成numpy或者tensor如果用那种常见的方式依旧不行,欸,我看到了一个这样的转换方式np.asanyarray(),试了一下,果真,那些个0.0039变成了1,总算解决了一个问题了。
本来我在训练的时候发现loss值相比于之前训练的特别低,还以为数据增强这么管用,原来是因为数据增强让我的label变得那么小,所以loss值才那么低的......现在改完了,重新跑一下看看数据增强的作用吧~