O código oficial SwinUnet treina seu próprio conjunto de dados (segmentação de imagem em tons de cinza de canal único)

**************************************************** ** *

Codificar palavras não é fácil. Além de colecionar, não esqueça de me dar um like!

**************************************************** ** *

---------Começar

Por favor, vá para outro post do blog sobre a parte de teste da rede swinUnet

Código oficial: https://github.com/HuCaoFighting/Swin-Unet

Objetivo: Treinar Swin-Unet para segmentar regiões pulmonares

Localização oficial do conjunto de dados (não pode ser baixado): https://www.kaggle.com/datasets/nikhilpandey360/chest-xray-masks-and-labels

Conjunto de dados de download gratuito de CSDN

Perceba o efeito:

inserir imagem original
insira a descrição da imagem aqui

rótulo de saída
insira a descrição da imagem aqui

Neste artigo, apenas 345 imagens de todo o conjunto de dados são usadas para concluir toda a tarefa de segmentação!

1. Baixe o código oficial e descompacte-o

endereço do código
insira a descrição da imagem aqui

Pasta descompactada:

insira a descrição da imagem aqui

2. Baixe o conjunto de dados e descompacte-o

Endereço do conjunto de dados
insira a descrição da imagem aqui

Só precisamos usar as duas pastas a seguir: uma para imagens e outra para rótulos. São 800 fotos no arquivo original e apenas 704 rótulos. Algumas imgs não têm rótulos. Você precisa prestar atenção ao fazer arquivos npz.

insira a descrição da imagem aqui
Aqui estão as 345 imagens e máscaras correspondentes usadas neste artigo
insira a descrição da imagem aqui

rótulos para tarefas de segmentação,

insira a descrição da imagem aqui

3. Gere o arquivo .npz

pycharm abre o arquivo de projeto, configura o interpretador python e cria o diretório de dados

No diretório de dados, train_npz é usado para armazenar os arquivos npz usados ​​para treinamento e test_vol_h5 é usado para armazenar os arquivos npz usados ​​para teste. Este é o nome oficial e você pode alterar menos o código.
insira a descrição da imagem aqui

Converta imagens e rótulos em arquivos .npz

Mantenha a imagem e o rótulo originais no mesmo diretório
insira a descrição da imagem aqui
Código de conversão: (modifique o caminho de acordo com a localização de seus próprios dados), se houver apenas duas categorias de plano de fundo + destino, este código pode ser usado diretamente, se for dividido em três ou mais categorias, o código deve ser baseado em Ajuste seus dados de imagem. Após o ajuste, certifique-se de que na matriz de rótulos do código a seguir, o fundo seja representado por 0 pixels, o alvo seja representado por 1, 2, 3, 4... pixels respectivamente, e um valor de pixel representa uma categoria. Por exemplo (0: background, 1: class 1, 2: class 2, 3: class 3...).

def npz():
    #原图像路径
    path = r'G:\dataset\Segmentation\LungSegmentation\npz\images\*.png'
    #项目中存放训练所用的npz文件路径
    path2 = r'G:\dataset\Unet\TransUnet-ori\data\Synapse\train_npz\\'
    for i,img_path in enumerate(glob.glob(path)):
    	#读入图像
        image = cv2.imread(img_path)
        image = cv2.cvtColor(image,cv2.COLOR_BGR2RGB)
        #读入标签
        label_path = img_path.replace('images','labels')
        label = cv2.imread(label_path,flags=0)
        #将非目标像素设置为0
        label[label!=255]=0
        #将目标像素设置为1
        label[label==255]=1
		#保存npz
        np.savez(path2+str(i),image=image,label=label)
        print('------------',i)

    # 加载npz文件
    # data = np.load(r'G:\dataset\Unet\Swin-Unet-ori\data\Synapse\train_npz\0.npz', allow_pickle=True)
    # image, label = data['image'], data['label']

    print('ok')

Gere dados de imagem de treinamento e teste como arquivos npz em train_npz e test_vol_h5, respectivamente
insira a descrição da imagem aqui

Gerar arquivo txt correspondente ao arquivo npz

O conteúdo do arquivo txt é o nome dos dados da imagem lidos durante o treinamento e teste do modelo. Ignore o arquivo my_tools.py.
insira a descrição da imagem aqui
O código para gerar o arquivo txt gera os arquivos train.txt e test_vol.txt de acordo com os arquivos npz de treinamento e teste, respectivamente.

def write_name():
    #npz文件路径
    files = glob.glob(r'C:\Users\22120\Desktop\Swin-Unet-main\data\Synapse\test_vol_h5\*.npz')
    #txt文件路径
    f = open(r'C:\Users\22120\Desktop\Swin-Unet-main\lists\lists_Synapse\test_vol.txt','w')
    for i in files:
        name = i.split('\\')[-1]
        name = name[:-4]+'\n'
        f.write(name)

insira a descrição da imagem aqui

4. Baixe pesos pré-treinados

Endereço oficial de download

csdn download gratuito (recomendado)

Após o download dos pesos, coloque-os na pasta pretrained_ckpt do projeto. O oficial fornece apenas pesos de modelo com um tamanho de entrada de 224.
insira a descrição da imagem aqui

5. Modifique parte do código

Quando seus dados de imagem são de canal único, você pode definitivamente treinar normalmente depois de modificá-los de acordo com o que está escrito no texto. Para imagens de entrada com três canais e acima, modifique-as de acordo com o conteúdo escrito no texto. Se ainda houver algum problema, você pode comentar ou me enviar uma mensagem privada e vamos resolvê-lo juntos.

5.1 Modificar train.py

Modifique os parâmetros gerais, o caminho do arquivo de configuração e observe que num_classes é igual ao plano de fundo + o número de categorias de destino previstas. Por não haver muitas modificações, por favor me perdoe por não colocar o código modificado, você pode consultar a marca na figura para modificá-lo.
output_dir: o caminho onde os logs de treinamento e os pesos de saída são salvos
root_path: o diretório raiz onde o conjunto de dados está armazenado
insira a descrição da imagem aqui
insira a descrição da imagem aqui
insira a descrição da imagem aqui

5.2 Modificar dataset_synapse.py

O formato do arquivo npz gerado por mim é diferente do formato oficial do arquivo npz, foi ajustado aqui, e é completamente o mesmo após o ajuste.
insira a descrição da imagem aqui

5.3. Modifique o arquivo trainer.py

Defina num_workers=0 na função DataLoader no arquivo trainer.py
insira a descrição da imagem aqui

Até agora, todos os códigos foram modificados e o arquivo train.py é executado. Se o console tiver a seguinte saída, ele será executado com sucesso!
insira a descrição da imagem aqui
insira a descrição da imagem aqui
Após o treinamento, a pasta de saída no arquivo de projeto armazena o log de saída de treinamento e os pesos do modelo.
insira a descrição da imagem aqui

Resumo: Devido às limitações de algumas operações expressas apenas em palavras, elas podem ser descritas resumidamente. Se você tiver alguma dúvida, pode deixar um comentário ou mensagem privada abaixo. Desculpe a demora, muito obrigado!

Acho que você gosta

Origin blog.csdn.net/qq_37652891/article/details/123932772
Recomendado
Clasificación