**************************************************** ** *
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
etiqueta de salida
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
Carpeta descomprimida:
2. Descarga el conjunto de datos y descomprímelo
Dirección del conjunto de datos
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.
Aquí están las 345 imágenes y las máscaras correspondientes utilizadas en este artículo.
etiquetas para tareas de segmentación,
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.
Convierta imágenes y etiquetas en archivos .npz
Mantenga la imagen y la etiqueta originales en el mismo directorio
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
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.
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)
4. Descarga pesas preentrenadas
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.
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
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.
5.3 Modificar el archivo trainer.py
Establezca num_workers=0 en la función DataLoader en el archivo trainer.py
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!
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.