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:
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
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)