网络训练中的图片尺寸问题_比例抽取图片代码

在用10张左右的样本图片测试网络成功后,开始考虑用这个测试集来评价网络。但出现了问题。
在加载图像的过程中,频繁提示如下错误:

RuntimeError: invalid argument 0: Sizes of tensors must match except in dimension 0. Got 256 and 210 in dimension 2 at …

我意识到是数据集出问题了。整个网络的输入是256*256的,数据集看上去尺寸也是这样,但目前来看,应该是里面有极少数或者一小部分尺寸并不是256 *256.但奈何数据量大,不可能挨个查看。直到看到这篇博客:

解决:RuntimeError: invalid argument 0: Sizes of tensors must match except in dimension 0. Got 544 and 1935 in dimension 2 at …/aten/src/TH/generic/THTensor.cpp:711

文中提到了出现这个问题的两种情形:
1、由于数据总量/batchsize不是整数,因此在最后一个batch会报错。
2、输入图像数据维度不一致,存在不合要求的样本。

我先测试第一种。拿出46张尺寸没问题的图片作测试,batchsize设为10,测试成功进行了4次,最后6张没处理,但是程序并未报错,正常终止,排除这种情况。

先后几次从整个数据集中抽样测试过程中,都出现上述问题,但尺寸也不固定,有时210,有时196等等,说明存在这些尺寸的图片,在dataloader中与256*256的mask作张量运算时报错。但是网上查找修改图片尺寸几乎都是这条命令:

find -name "*.jpg" -exec convert -resize 1692x1355 {
    
    } {
    
    } \;

在整个数据中发现一张256*210尺寸的图片,执行上述命令后,图片的尺寸并无变化。出于验证的目的,resize成512 *512,结果变成了512 *420.至此,发现命令没问题,但是图片比例没变,因此还有一个维度有问题。
后终于发现linux下使用convert命令修改图片分辨率【转】
在这里插入图片描述
将上述命令改为:

find -name "*.png" -exec convert -resize 256x256! {
    
    } {
    
    } \;

原来256*210的图片变为256 *256。

另外,附一段方便从数据集中随机按比例取样的代码:
python实现从一个文件夹下随机抽取一定数量的图片并移动到另一个文件夹

##深度学习过程中,需要制作训练集和验证集、测试集。

import os, random, shutil
def moveFile(fileDir):
        pathDir = os.listdir(fileDir)    #取图片的原始路径
        filenumber=len(pathDir)
        rate=0.1    #自定义抽取图片的比例,比方说100张抽10张,那就是0.1
        picknumber=int(filenumber*rate) #按照rate比例从文件夹中取一定数量图片
        sample = random.sample(pathDir, picknumber)  #随机选取picknumber数量的样本图片
        print (sample)
        for name in sample:
                shutil.move(fileDir+name, tarDir+name)
        return

if __name__ == '__main__':
	fileDir = "./source/"    #源图片文件夹路径
	tarDir = './result/'    #移动到新的文件夹路径
	moveFile(fileDir)

猜你喜欢

转载自blog.csdn.net/qq_41872271/article/details/105562226