El problema del tamaño de la imagen en la formación de la red_ código de imagen de extracción proporcional

Después de probar con éxito la red con aproximadamente 10 imágenes de muestra, comencé a considerar el uso de este conjunto de prueba para evaluar la red. Pero había un problema.
En el proceso de carga de imágenes, se presentan con frecuencia los siguientes errores:

RuntimeError: argumento no válido 0: los tamaños de los tensores deben coincidir excepto en la dimensión 0. Obtuve 256 y 210 en la dimensión 2 en…

Me di cuenta de que había un problema con el conjunto de datos. La entrada de toda la red es 256 * 256, y el tamaño del conjunto de datos se ve así, pero en la actualidad, debería haber muy pocos o una pequeña parte del tamaño que no sea 256 * 256. Sin embargo, la cantidad de los datos son grandes y es imposible verlos uno por uno. Hasta que vi este blog:

解决 : RuntimeError: argumento no válido 0: los tamaños de los tensores deben coincidir excepto en la dimensión 0. Obtuve 544 y 1935 en la dimensión 2 en… / aten / src / TH / generic / THTensor.cpp: 711

En el artículo se mencionan dos escenarios para este problema:
1. Dado que la cantidad total de datos / tamaño de lote no es un número entero, se informará un error en el último lote.
2. Las dimensiones de los datos de la imagen de entrada son inconsistentes y hay muestras no calificadas.

Probaré el primero primero. Saque 46 imágenes sin problemas de tamaño para la prueba, el tamaño de lote se establece en 10, la prueba se llevó a cabo con éxito 4 veces y las últimas 6 imágenes no se procesaron, pero el programa no informó un error y se terminó normalmente, por lo que esta situación fue descartada.

En el proceso de muestreo y prueba de todo el conjunto de datos varias veces, se produjo el problema anterior, pero el tamaño no es fijo, a veces 210, a veces 196, etc., lo que indica que hay imágenes de estos tamaños y el 256 * 256 mask se utiliza como tensor en el cargador de datos. Se informó un error durante la operación. Sin embargo, la mayor parte de la búsqueda en línea y la modificación del tamaño de la imagen son este comando:

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

Se encontró una imagen de tamaño 256 * 210 en todos los datos. Después de ejecutar el comando anterior, el tamaño de la imagen no cambió. Para fines de verificación, cambie el tamaño a 512 * 512 y el resultado será 512 * 420. Hasta ahora, se ha encontrado que el comando no es un problema, pero la relación de imagen no ha cambiado, por lo que hay otro problema de dimensión.
Finalmente, encontré que el comando de conversión se usó para modificar la resolución de la imagen en linux [turn] y
Inserte la descripción de la imagen aquí
el comando anterior se cambió a:

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

La imagen original de 256 * 210 se convierte en 256 * 256.

Además, adjunte un fragmento de código que sea conveniente para muestrear aleatoria y proporcionalmente del conjunto de datos:
Python se da cuenta de que una cierta cantidad de imágenes se seleccionan al azar de una carpeta y se mueven a otra carpeta.

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

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)

Supongo que te gusta

Origin blog.csdn.net/qq_41872271/article/details/105562226
Recomendado
Clasificación