O problema do tamanho da imagem no código de imagem de extração proporcional de treinamento de rede

Depois de testar com sucesso a rede com cerca de 10 imagens de amostra, comecei a considerar o uso deste conjunto de teste para avaliar a rede. Mas havia um problema.
No processo de carregamento de imagens, os seguintes erros são frequentemente solicitados:

RuntimeError: argumento inválido 0: os tamanhos dos tensores devem corresponder, exceto na dimensão 0. Obteve 256 e 210 na dimensão 2 em ...

Percebi que havia um problema com o conjunto de dados. A entrada de toda a rede é 256 * 256 e o ​​tamanho do conjunto de dados é semelhante a este, mas no momento, deve haver muito poucos ou uma pequena parte do tamanho que não seja 256 * 256. No entanto, a quantidade de os dados são grandes e é impossível visualizá-los um por um. Até eu ver este blog:

解决 : RuntimeError: argumento inválido 0: os tamanhos dos tensores devem corresponder, exceto na dimensão 0. Obtidos 544 e 1935 na dimensão 2 em… / aten / src / TH / generic / THTensor.cpp: 711

Dois cenários para esse problema são mencionados no artigo:
1. Como a quantidade total de dados / tamanho do lote não é um número inteiro, um erro será relatado no último lote.
2. As dimensões dos dados da imagem de entrada são inconsistentes e existem amostras não qualificadas.

Vou testar o primeiro primeiro. Tire 46 fotos sem problemas de tamanho para o teste, o tamanho do lote é definido como 10, o teste foi realizado com sucesso 4 vezes e as últimas 6 fotos não foram processadas, mas o programa não relatou um erro e foi encerrado normalmente, então esta situação foi descartada.

No processo de amostragem e teste de todo o conjunto de dados várias vezes, o problema acima ocorreu, mas o tamanho não é fixo, às vezes 210, às vezes 196, etc., indicando que há fotos desses tamanhos, e 256 * 256 mask é usado como tensor no dataloader. Um erro foi relatado durante a operação. No entanto, a maior parte da pesquisa online e modificação do tamanho da imagem são este comando:

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

Uma imagem de tamanho 256 * 210 foi encontrada em todos os dados.Depois de executar o comando acima, o tamanho da imagem não mudou. Para efeito de verificação, redimensione para 512 * 512, e o resultado passa a 512 * 420. Até agora, verificou-se que o comando não é problema, mas a proporção da imagem não mudou, então há outro problema de dimensão.
Finalmente, descobri que o comando convert foi usado para modificar a resolução da imagem no Linux [turn] e
Insira a descrição da imagem aqui
o comando acima foi alterado para:

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

A imagem 256 * 210 original torna-se 256 * 256.

Além disso, anexe um pedaço de código que seja conveniente para amostragem aleatória e proporcional do conjunto de dados: o
python percebe que um certo número de imagens são selecionadas aleatoriamente de uma pasta e movidas para outra pasta

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

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)

Acho que você gosta

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