[Imágenes médicas | Preprocesamiento de datos | Organización]

【Puntos de conocimiento】

Lectura y preprocesamiento de datos / 2 √Código : método de procesamiento de normalización × 2, recortar/rotar/voltear, caso completo de recorte central

Procesamiento de normalización×2:

【Mejora de datos】

Acerca de torchvision.transforms y componer

 desde torchvision importar transformaciones -> Ingrese a la caja de herramientas de transformación que define muchas clases

Acerca de componer:

Descripción de la función : torchvision.transforms es un paquete de preprocesamiento de imágenes en pytorch. Compose se usa generalmente para integrar varios pasos juntos. Las funciones en transformaciones (se proporciona el enlace)

Python Image Library PIL (Python Image Library) es una biblioteca de procesamiento de imágenes de terceros para Python, sin embargo, debido a sus potentes funciones y su gran cantidad de usuarios, casi se considera la biblioteca oficial de procesamiento de imágenes de Python.

 Uso de transforms.Compose() : torchvision es una biblioteca de gráficos de pytorch que sirve al marco de aprendizaje profundo de PyTorch y se utiliza principalmente para construir modelos de visión por computadora. torchvision.transforms se utiliza principalmente para transformaciones de gráficos comunes.

La composición de torchvision es la siguiente:
torchvision.datasets:  algunas funciones para cargar datos e interfaces de conjuntos de datos de uso común;
torchvision.models:  contiene estructuras de modelos de uso común (incluidos modelos previamente entrenados), como AlexNet, VGG, ResNet, etc.
torchvision.transforms:  transformaciones de imágenes de uso común, como recorte, rotación, etc .;

torchvision.utils:  Otros métodos útiles.

Enumera algunas operaciones comunes

clase torchvision.transforms .CenterCrop(size) Corta al centro  la PIL.Image dada para obtener el tamaño dado. El tamaño puede ser una tupla, (target_height, target_width). El tamaño también puede ser un número entero, en cuyo caso la forma de la imagen cortada es un cuadrado .

 clase torchvision.transforms .RandomCrop(size, padding=0)  La posición del punto central de corte se selecciona aleatoriamente . El tamaño puede ser una tupla o un número entero.

 clase torchvision.transforms.RandomHorizontalFlip  Invierte aleatoriamente el PIL.Image dado horizontalmente con una probabilidad de 0,5 . Es decir: la mitad de probabilidad de voltear, la mitad de probabilidad de no voltear. 

La clase torchvision.transforms.RandomSizedCrop (size, interpolation=2) primero corta aleatoriamente  el PIL.Image dado y luego lo cambia de tamaño al tamaño dado. 

La clase torchvision.transforms.Padding (padding, fill=0) rellena todos los bordes  de la PIL.Image dada con el valor de pad dado .

relleno: cuántos píxeles rellenar relleno: con qué valor rellenar

por ejemplo1.

from torchvision import transforms
from PIL import Image

padding_img = transforms.Pad(padding=10, fill=0)
img = Image.open('test.jpg')
 
print(type(img))
print(img.size)
 
padded_img=padding(img)
print(type(padded_img))
print(padded_img.size)

La función principal de la clase Compose() es concatenar múltiples operaciones de transformación de imágenes y recorrer las operaciones de transformación en la lista de transformaciones . Los parámetros en Compose son en realidad una lista y los elementos de esta lista son las operaciones de transformación que desea realizar.

Se proporciona un ejemplo específico, así como el código de procedimiento Jupyter de un solo paso (también se proporcionan las imágenes procesadas en cada paso):

transforms.Compose([transforms.RandomResizedCrop(224),
 		    transforms.RandomHorizontalFlip(),
                    transforms.ToTensor(),
                    transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])])

transforms.RandomResizedCrop(224) recorta aleatoriamente la imagen dada a diferentes tamaños y relaciones de aspecto, y luego escala la imagen recortada al tamaño especificado (es decir, primero recopila aleatoriamente y luego escala la imagen recortada al mismo tamaño), escala predeterminada = (0.08, 1.0) El significado de esta operación es: incluso si es solo una parte del objeto, pensamos que es un objeto de este tipo;

transforms.RandomHorizontalFlip()  rota aleatoriamente la imagen del PIL dado horizontalmente con la probabilidad dada, por defecto 0,5

transforms.ToTensor() convierte la imagen dada a Tensor

transforma.Normalize() procesamiento de normalización

from PIL import Image
# 操作1
img = Image.open("./demo.jpg")
print("原图大小:",img.size)
data1 = transforms.RandomResizedCrop(224)(img)
print("随机裁剪后图片大小:",data1.size)
data2 = transforms.RandomResizedCrop(224)(img)
data1 = transforms.RandomResizedCrop(224)(img)

plt.subplot(2,2,1),plt.imshow(img),plt.title("原图")
plt.subplot(2,2,2),plt.imshow(data1),plt.title("转换后的图1")
plt.subplot(2,2,3),plt.imshow(data2),plt.title("转换后的图2")
plt.subplot(2,2,4),plt.imshow(data3),plt.title("转换后的图3")
plt.show()
# 操作2
img = Image.open("./demo.jpg")
img1 = transforms.RandomHorizontalFlip()(img)
img2 = transforms.RandomHorizontalFlip()(img)
img3 = transforms.RandomHorizontalFlip()(img)

plt.subplot(2,2,1),plt.imshow(img),plt.title("原图")
plt.subplot(2,2,2), plt.imshow(img1), plt.title("变换后的图1")
plt.subplot(2,2,3), plt.imshow(img2), plt.title("变换后的图2")
plt.subplot(2,2,4), plt.imshow(img3), plt.title("变换后的图3")
plt.show()
# 操作3、4
img = Image.open("./demo.jpg")
img = transforms.ToTensor()(img)
img = transforms.Normalize(mean=[0.5,0.5,0.5], std=[0.5,0.5,0.5])(img)
print(img)

plt.subplot(m,n,p) #Para generar m filas y n columnas, esta es la p-ésima figura plt.subplot('row','column','number')

C

C

C

C

C

C

Cierta comprensión de la segmentación : al realizar el procesamiento de imágenes médicas basado en el aprendizaje profundo, el trabajo principal se concentra en la parte de preprocesamiento de datos : comprensión profunda del formato y las características de las imágenes médicas; diseño de operaciones de preprocesamiento de imágenes apropiadas para mejorar las características del objetivo; conversión El formato original de los datos se procesa en un formato adecuado para su entrada en modelos de aprendizaje profundo . Estos tres puntos son también los tres puntos más difíciles en el proceso de pasar del procesamiento de imágenes naturales al procesamiento de imágenes médicas. La diferencia de modelos no tendrá mucho impacto en la segmentación de imágenes médicas basada en el aprendizaje profundo. En otras palabras, un modelo de red que es excelente para la segmentación de imágenes naturales se puede transferir directamente a imágenes médicas (y viceversa), y el efecto solo se puede ver después del entrenamiento (como los famosos FCN, SegNet, U-Net, etc. ., especialmente U-Net se publicó originalmente en MICCAI). Por supuesto, si desea diseñar un modelo de entrenamiento de manera eficiente, aún necesita diseñar la red en función de las características de los datos (como el rango de tamaño de los objetos a segmentar, 2D o 3D, etc.) . La tecnología AutoDL logró resultados sobresalientes en 2019 (Búsqueda de arquitectura neuronal: una encuesta ) y se estima que el diseño del modelo de red será difícil de lograr en el futuro.

Conjunto de datos de imágenes médicas:

Desafíos - Gran Desafío (grand-challenge.org)

Introducción - Gran Desafío (grand-challenge.org)

【Código】

Leer:

Carga flexible de pesos parciales en Pytorch ,

Lectura de datos de un conjunto de datos personalizado en pytorch : describe cómo dividir su propio conjunto de datos en un conjunto de entrenamiento y un conjunto de validación, y leer y empaquetar los datos en lotes a través de un conjunto de datos personalizado.

Ejecute la primera red neuronal PyTorch paso a paso

Mano a mano

Comience rápidamente

Conjunto de datos personalizado

Cómo entrenar tu propio conjunto de datos de imágenes con pytorch

Cree su propio conjunto de datos usando Dataset y DataLoader en PyTorch

Leer archivo de datos CSV - después de la encapsulación - procesamiento por lotes de datos

Records personales:

Tubería dividida

Supongo que te gusta

Origin blog.csdn.net/sinat_40759442/article/details/128091723
Recomendado
Clasificación