Leaving presentation mode.
Para iniciar la presentación, haz clic aquí o doble clic en cualquiera de las diapositivas. Para navegar por las diapositivas, puedes utilizar las flechas del teclado.

Esta presentación ha sido compuesta utilizando el motor B6+ del W3C, con scripts y estilos modificados por David Charte. Consulta el código fuente en GitHub.

Abstract nodes and connections

Aplicaciones del
Deep Learning
al análisis de imágenes

Décimo Ciclo de Conferencias de Enseñanzas de Postgrado

Máster Universitario en Ingeniería Informática
 

27 de marzo de 2023

¿Quién soy?

David Charte

<david@deivi.ch>
  • Informático y matemático
  • Doctor en TIC
  • (Ex-)docente en la UGR
  • Co-fundador de Logo LibreIM LibreIM
Sigue la presentación en deivi.ch/dl/

Índice

     

     

    Abstract nodes and connections

    La teoría

    Motivación

    Objetivo
    Queremos un modelo que generalice una serie de puntos

    Idea: interpolar los puntos con funciones "simples"

    $$f(x)=A+Bx$$

    $$f(x)=A+Bx+Cx^2+Dx^3+Ex^4$$

    $$f(x)=A+Bx+Cx^2+Dx^3+Ex^4$$

    \(f(x)=A+Bx\) ...ajustando \(A,B\) para mínimo error

    \(f(x_1,x_2)=A+Bx_1+Cx_2\) ...ajustando \(A,B,C\) para mínimo error

    ¿Más variables?

    \(\displaystyle f(\textbf{x})=\sum_i w_i\textbf{x}_i\) ...ajustando \(w_i\) para mínimo error

    "neurona"

    Construyendo una red (paso 1)

    Más neuronas

    $$\begin{align*}f(\textbf{x})&=W\textbf{x}\\W&=\begin{pmatrix}w_{11}&w_{12}&\dots&w_{1n}\\w_{21}&w_{22}&\dots&w_{2n}\\w_{31}&w_{32}&\dots&w_{3n}\\\vdots&\vdots&\ddots&\vdots\\w_{m1}&w_{m2}&\dots&w_{mn}\end{pmatrix}\end{align*}$$

    "capa"

    Construyendo una red (paso 2)

    Más capas\(f(\textbf{x})=W''(W'(W\textbf{x}))\)

    Falta algo...

    Demasiado lineal

    Construyendo una red (paso 3)

    Funciones de activación\(f(\textbf{x})=\sigma''(W''\sigma'(W'\sigma(W\textbf{x})))\) con \(\sigma\) no lineal, p.ej:

    Resumen

    Hay que entrenar!

    1. Forward pass

    Propagar hacia adelante: Computar la salida de la red para unos datos

    2. Calcular error

    Funciones de error: Comparar la salida de la red con la deseada

    3. Backprop

    Propagación hacia atrás: Técnica para calcular las derivadas del error respecto de cada parámetro

    4. SGD

    Descenso del gradiente estocástico: Estrategia para optimizar los parámetros buscando el mínimo error

    ¿Ya está?

    casi.

    ¿Y si tenemos datos estructurados?

    Abstract nodes and connections

    Redes convolucionales

    Operación de convolución

    Capa convolucional

    \(W\) es más pequeña que en la capa densa \(\Rightarrow\) mejor rendimiento con menos parámetros

    Filtros convolucionales

    Efectos de diferentes kernels en una misma fotografía
    En la red convolucional, los kernels se aprenden entrenando

    Estructura de una red

    En general, 3 opciones:

    Encoder imagen->código
    Encoder imagen->código
    Encoder imagen->código

    Estructura de una red

    Encoder imagen->código

    Encoder

    • Clasificación
    • Regresión
    • Detección de objetos
    YOLO

    Estructura de una red

    Decoder código->imagen

    Decoder

    • Generación
    StyleGAN

    Estructura de una red

    Encoder-decoder

    Encoder-decoder

    • Segmentación
    • Cambio de estilo
    • ...
    Ejemplo segmentación

    Operaciones comunes

    Convolución

    Extraer características a partir de imágenes

    Convolución

    Pooling

    Reducir el ancho y alto de los filtros

    Agregación

    Convolución traspuesta

    Operación inversa de la convolución

    Deconvolución

    Skip connections

    Recuperar información de pasos previos

    Skip connection

    Ejemplos (I)

    VGG-16

    VGG-16 para clasificación/detección

    Ejemplos (II)

    DCGAN

    DCGAN: deep convolutional generative adversarial network

    Ejemplos (III)

    DCGAN

    UNet para segmentación

    Abstract nodes and connections

    Implementación

    Lenguajes de programación

    Logo Python

    Python

    Logo C++ Logo JavaScript Logo R Logo Julia

    Frameworks

    TensorFlow

    Logo Tensorflow

    Pytorch

    Logo Pytorch

    Logo MXNet Logo Jax Logo Flux

    Google trends para Tensorflow, Pytorch y otras bibliotecas
    Any matrix. Is this a tensor? 95 páginas de tensores en Wikipedia

    VGG-16 Logo Python Logo Tensorflow

    # Block 1
    x = Conv2D(64, (3, 3), activation="relu", padding="same", name="block1_conv1")(img_input)
    x = Conv2D(64, (3, 3), activation="relu", padding="same", name="block1_conv2")(x)
    x = MaxPooling2D((2, 2), strides=(2, 2), name="block1_pool")(x)
    # Block 2
    x = Conv2D(128, (3, 3), activation="relu", padding="same", name="block2_conv1")(x)
    x = Conv2D(128, (3, 3), activation="relu", padding="same", name="block2_conv2")(x)
    x = MaxPooling2D((2, 2), strides=(2, 2), name="block2_pool")(x)
    # Block 3
    x = Conv2D(256, (3, 3), activation="relu", padding="same", name="block3_conv1")(x)
    x = Conv2D(256, (3, 3), activation="relu", padding="same", name="block3_conv2")(x)
    x = Conv2D(256, (3, 3), activation="relu", padding="same", name="block3_conv3")(x)
    x = MaxPooling2D((2, 2), strides=(2, 2), name="block3_pool")(x)
    # Block 4
    x = Conv2D(512, (3, 3), activation="relu", padding="same", name="block4_conv1")(x)
    x = Conv2D(512, (3, 3), activation="relu", padding="same", name="block4_conv2")(x)
    x = Conv2D(512, (3, 3), activation="relu", padding="same", name="block4_conv3")(x)
    x = MaxPooling2D((2, 2), strides=(2, 2), name="block4_pool")(x)
    # Block 5
    x = Conv2D(512, (3, 3), activation="relu", padding="same", name="block5_conv1")(x)
    x = Conv2D(512, (3, 3), activation="relu", padding="same", name="block5_conv2")(x)
    x = Conv2D(512, (3, 3), activation="relu", padding="same", name="block5_conv3")(x)
    x = MaxPooling2D((2, 2), strides=(2, 2), name="block5_pool")(x)
    # Classification block
    x = Flatten(name="flatten")(x)
    x = Dense(4096, activation="relu", name="fc1")(x)
    x = Dense(4096, activation="relu", name="fc2")(x)
    x = Dense(classes, activation=classifier_activation, name="predictions")(x)
                  

    Fuente: keras-team/keras/keras/applications/vgg16.py

    Recursos

    GPU NVidia gaming

    Tu GPU gaming: Para modelos pequeños

    GPU NVidia A100

    NVIDIA A100: Stable Diffusion se entrenó en una de estas

    Servidor NVidia DGX A100

    DGX A100: Tiene 8x NVIDIA A100 (hasta 640 GB VRAM!)

    Abstract nodes and connections

    Aplicaciones

    Algunas aplicaciones

    Ámbito industrial

    • Control de calidad
    • Análisis de materiales

    Medicina

    • Asistencia al diagnóstico: TACs, resonancias, radiografías
    ReCAPTCHA de Google

    Transporte

    • Vehículos autónomos

    Redes sociales

    • Etiquetado de personas
    • Detección de lugares
    • Detección de contenido no permitido

    Casos de aplicación

    Detección de COVID en radiografías

    COVIDGR Dataset and COVID-SDNet Methodology for Predicting COVID-19 Based on Chest X-Ray Images. S Tabik, A Gomez-Rios, J L Martin-Rodriguez, I Sevillano-Garcia, M Rey-Area, D Charte, E Guirado, J L Suarez, J Luengo, M A Valero-Gonzalez, P Garcia-Villanova, E Olmedo-Sanchez, F Herrera. 10.1109/jbhi.2020.3037127

    Identificación de fases del acero

    A tutorial on the segmentation of metallographic images: Taxonomy, new MetalDAM dataset, deep learning-based ensemble model, experimental analysis and challenges. J Luengo, R Moreno, I Sevillano, D Charte, A Peláez-Vegas, M Fernández-Moreno, P Mesejo, F Herrera. 10.1016/j.inffus.2021.09.018

    Detección de COVID: datos disponibles

    4 tipos de positivo

    Severidad de síntomas en radiografías

    Preprocesamiento de los datos

    Recorte y transformación de clases

    Recortes y transformaciones

    Trabajo previo

    Resultados de COVIDNet y COVID-CAPS
    Orígenes de los datos del dataset COVIDx

    Modelo base: ResNet-50

    Modelo ResNet-34

    Explicaciones del modelo

    GradCAM para clase positiva GradCAM para clase negativa

    Usamos GradCAM para identificar regiones que activan cada clase

    Resultados finales

    Modelo ResNet-34

    Metalografías: datos disponibles

    5 fases del material: matriz, austenita, martensita-austenita, precipitado y defectos

    42 imágenes etiquetadas, 164 sin etiquetar

    Severidad de síntomas en radiografías

    Modelos probados

    Unet

    UNet

    Pixelnet

    PixelNet

    FPN

    Feature Pyramid Network

    USSS

    Universal Semi-supervised Segmentation

    Transfer learning

    Loss graph

    Propuesta

    AMVE

    Artificial Multiview Ensemble

    Moralejas y comentarios

    One more thing...

    Stable Diffusion!

    Epic sunset

    epic photo of a sunset over a cliff, ocean, dolphins, big tree, realistic

    Diagrama Stable Diffusion

    aka DreamStudio. Paper: arxiv.org/abs/2303.01494

    Manos a la obra: deivi.ch/dl/colab

    Gandalf entrenando convolucionales en su macbook