El código oficial de SwinUnet entrena su propio conjunto de datos (segmentación de imágenes en escala de grises de un solo canal)

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

No es fácil codificar palabras. Además de coleccionar, ¡no olvides darme un me gusta!

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

---------Comienzo

Pase a otra publicación de blog sobre la parte de prueba de la red swinUnet

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

Propósito: Entrenar a Swin-Unet para segmentar regiones pulmonares

Ubicación oficial del conjunto de datos (no se puede descargar): https://www.kaggle.com/datasets/nikhilpandey360/chest-xray-masks-and-labels

Conjunto de datos de descarga gratuita de CSDN

Darse cuenta del efecto:

ingrese la imagen original
inserte la descripción de la imagen aquí

etiqueta de salida
inserte la descripción de la imagen aquí

En este artículo, ¡solo se utilizan 345 imágenes de todo el conjunto de datos para completar toda la tarea de segmentación!

1. Descarga el código oficial y descomprímelo

código de dirección
inserte la descripción de la imagen aquí

Carpeta descomprimida:

inserte la descripción de la imagen aquí

2. Descarga el conjunto de datos y descomprímelo

Dirección del conjunto de datos
inserte la descripción de la imagen aquí

Solo necesitamos usar las siguientes dos carpetas: una para imágenes y otra para etiquetas. Hay 800 imágenes en el archivo original y solo 704 etiquetas. Algunas imágenes no tienen etiquetas. Debe prestar atención al crear archivos npz.

inserte la descripción de la imagen aquí
Aquí están las 345 imágenes y las máscaras correspondientes utilizadas en este artículo.
inserte la descripción de la imagen aquí

etiquetas para tareas de segmentación,

inserte la descripción de la imagen aquí

3. Generar archivo .npz

pycharm abre el archivo del proyecto, configura el intérprete de python y crea el directorio de datos

En el directorio de datos, train_npz se usa para almacenar los archivos npz que se usan para el entrenamiento, y test_vol_h5 se usa para almacenar los archivos npz que se usan para las pruebas. Este es el nombre oficial y puede cambiar el código menos.
inserte la descripción de la imagen aquí

Convierta imágenes y etiquetas en archivos .npz

Mantenga la imagen y la etiqueta originales en el mismo directorio
inserte la descripción de la imagen aquí
Código de conversión: (modifique la ruta según la ubicación de sus propios datos), si solo hay dos categorías de fondo + objetivo, este código se puede usar directamente, si se divide en tres o más categorías, el código debe basarse en Ajuste los datos de su imagen Después del ajuste, asegúrese de que en la matriz de etiquetas del siguiente código, el fondo esté representado por 0 píxeles, el objetivo esté representado por 1, 2, 3, 4... píxeles respectivamente, y un valor de píxel representa una categoría. Por ejemplo (0: fondo, 1: clase 1, 2: clase 2, 3: clase 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')

Genere datos de imagen de entrenamiento y prueba como archivos npz en train_npz y test_vol_h5 respectivamente
inserte la descripción de la imagen aquí

Generar archivo txt correspondiente al archivo npz

El contenido del archivo txt es el nombre de los datos de imagen leídos durante el entrenamiento y las pruebas del modelo. Ignore el archivo my_tools.py.
inserte la descripción de la imagen aquí
El código para generar el archivo txt genera archivos train.txt y test_vol.txt de acuerdo con los archivos npz de entrenamiento y prueba, 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)

inserte la descripción de la imagen aquí

4. Descarga pesas preentrenadas

Dirección de descarga oficial

Descarga gratuita de csdn (recomendado)

Después de descargar los pesos, colóquelos en la carpeta pretrained_ckpt del proyecto. El oficial solo proporciona pesos de modelo con un tamaño de entrada de 224.
inserte la descripción de la imagen aquí

5. Modifica parte del código

Cuando los datos de su imagen son de un solo canal, definitivamente puede entrenar normalmente después de modificarlos de acuerdo con lo que está escrito en el texto. Para imágenes de entrada con tres canales o más, modifíquelas de acuerdo con el contenido escrito en el texto. Si todavía hay un problema, puede comentarme o enviarme un mensaje privado, y lo resolveremos juntos.

5.1 Modificar tren.py

Modifique los parámetros generales, la ruta del archivo de configuración y tenga en cuenta que num_classes es igual al fondo + el número de categorías de destino previstas. Debido a que no hay muchas modificaciones, por favor, perdóname por no poner el código modificado, puedes consultar la marca en la figura para modificarlo.
output_dir: la ruta donde se guardan los registros de entrenamiento y los pesos de salida
root_path: el directorio raíz donde se almacena el conjunto de datos
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

5.2 Modificar dataset_synapse.py

El formato del archivo npz generado por mí mismo es diferente del formato oficial de archivo npz. Se ha ajustado aquí y es completamente igual después del ajuste.
inserte la descripción de la imagen aquí

5.3 Modificar el archivo trainer.py

Establezca num_workers=0 en la función DataLoader en el archivo trainer.py
inserte la descripción de la imagen aquí

Hasta ahora, todos los códigos se han modificado y el archivo train.py se ejecuta. Si la consola tiene el siguiente resultado, ¡se ejecutará con éxito!
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
Después del entrenamiento, la carpeta de resultados en el archivo del proyecto almacena el registro de resultados del entrenamiento y los pesos del modelo.
inserte la descripción de la imagen aquí

Resumen: Debido a las limitaciones de algunas operaciones solo expresadas en palabras, solo se puede describir brevemente. Si tiene alguna pregunta, puede dejar un comentario o mensaje privado a continuación. Disculpe la demora, ¡muchas gracias!

Supongo que te gusta

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