Visió per Computador - cvc.uab.es · Visió per Computador Deep learning Felipe Lumbreras Dept....
Transcript of Visió per Computador - cvc.uab.es · Visió per Computador Deep learning Felipe Lumbreras Dept....
Visió per ComputadorDeep learning
Felipe LumbrerasDept. Ciències de la Computació / Centre de Visió per Computador
Universitat Autònoma de Barcelonahttp://www.cvc.uab.es/shared/teach/a102784/
Qué es el deep learning
• “[…] to allow computers to learn from experience and understand theworld in terms of a hierarchy of concepts, with each concept defined in terms of its relation to simpler concepts. By gathering knowledge fromexperience, this approach avoids the need for human operators to formally specify all of the knowledge that the computer needs. Thehierarchy of concepts allows the computer to learn complicatedconcepts by building them out of simpler ones. If we draw a graphshowing how these concepts are built on top of each other, the graph isdeep, with many layers. For this reason, we call this approach to AI deeplearning”
http://www.deeplearningbook.org/contents/intro.html
• “Deep Learning is a new area of Machine Learning research, which has been introduced with the objective of moving Machine Learning closerto one of its original goals: Artificial Intelligence”
http://deeplearning.net/
• Redes neuronales
Intro
Historia
• McCulloch-Pitts, Neuron [1943]. Pesos configurados a mano
• Rosemblatt, perceptron [1957]. Clasificador, aprendía de ejemplos
• Widrow and Hoff, ADALINE (adaptive linear element) [1960]. Regresor, usaba descenso estocástico de gradiente
• Minsky and Papert, XOR problem [1969]. Los modelos lineales tienen limitaciones
• Fukushima, Neocognitron [1980]. Campos receptivos, precursor de CNN
• Backpropagation + Multilayer perceptron ideas ya establecidas pero rescatadas por Rumelhart, Hinton y Willians [1986] para resolver problemas complicados.
• LeCun, LeNet-5 [1998]. Utiliza Convolutional Neural Networks para reconocer patrones visuales (dígitos) a partir de píxeles
• …
Intro
http://beamandrew.github.io/deeplearning/2017/02/23/deep_learning_101_part1.html
• Bases de datos (datos etiquetados)
• Capacidad de la red: más neuronas y más conectividad
• Mejora computacional (GPUs)
Intro
Claves del éxito
Qué hace una red
• Parte de ejemplos (datos-etiquetas, entradas-salidas, x-y)
• Aproxima/genera una función. Dada una entrada genera unas salida.
– Clasifica
– Regresiona
– Genera
– …
• Con una única capa oculta y un número finito de neuronas se puede aproximar cualquier función: universal approximation theorem
• Cómo lo hace: parte de un estado inicial (aleatorio, otro problema, …), altera los pesos de manera que se minimiza el error entre las respuestas deseadas (presentadas) y lo que genera la red
Intro
cs.stanford.edu/people/karpathy/convnetjs/
z1
x2
x1
x1
xn
z1x2
𝑔(𝒙)z2
zo
...
Para qué se usan en VC
• Clasificación de imágenes: 1K–10K clases
http://image-net.org/
www.nature.com/articles/nature21056.epdf
• Detección de objetos: 20-1K clases
• Segmentación semántica: 3 – 20 clases
Intro
Para qué se usan
• En todos los ámbitos de la VC se está apostando por este tipo de soluciones– Generación de imágenes, phillipi.github.io/pix2pix/
– Style transfer, github.com/fzliu/style-transfer, arxiv.org/abs/1705.01088v1
– Superresolución arxiv.org/abs/1501.00092, arxiv.org/abs/1702.00783
– Colorización, richzhang.github.io/ideepcolor/
– 3D, ...
• En otros ámbitos:– Gaming,
– Síntesis de texto,
– Reconocimiento de habla,
– Chatbots,
– Criptografía,
– Gráficos: generación de escenas, recolorización, reiluminación,
– Simulaciones: astrofísica, ingeniería, ...
Intro
Redes neuronales
Intro
AlexNet (2012)
VGG-16 (2014)
Esquema típico de red feedforward
Redes famosas y usadas en la resolución de varios problemas
Perceptrón
• Neurona
• Neurona computacional , n inputs y una salida, parámetros (pesos 𝜔), función de activación = threshold binario (ajustado en cada caso, t)
Red básica
Modelo simple:- Pesos sinápticos- Estímulo acumulado- Salida todo o nada
Clasificador lineal binario
XOR problem
playground.tensorflow.org
𝑦 = 𝜎𝑡(𝝎′ · 𝒙)
𝑏
𝜎
Multilayer perceptron
• MLP red neuronal feedforward
• Más capas -> ocultas (hidden layers) -> deep
• Conseguimos fronteras y funciones más complicadas (no lineales)
• Neurona base: para no ajustar el threshold de la función de activación lo trataremos como un peso extra conectado a una entrada fija (bias 𝑏)
• Dispondremos varias capas
• Usaremos funciones de activación derivables (permiten el aprendizaje)
Red básica
𝑦 = 𝜎(𝝎′ · 𝒙 + 𝑏)
𝒛 = 𝜎(𝑾𝟐𝒚 + 𝒃2) = 𝜎(𝑾𝟐𝜎 𝑾𝟏𝒙 + 𝒃1 + 𝒃2)
x1
xn
z1
x2z2
zo
......
...
𝑾𝟐, 𝒃2𝑾𝟏, 𝒃1 𝑦1
𝑦m
𝑦2
Backpropagation
• El objetivo es minimizar la diferencia entre la función objetivo (respuestas conocida) y la respuesta de la red, Coste (C)
• Utilizaremos un
descenso del gradiente
• El error que observamos en la salida, C, lo propagamos hacia el interior. Se recalcularán pesos y bias
• Se utiliza la regla de la cadena para conocer cómo se ve afectado cada parámetro
Red básica
neuralnetworksanddeeplearning.com/chap2.html
Arquitectura
• ConvNets: input + [CNN + subsampling]xN + [FC]xM + output -> loss
C: ConvolutionalS: Sampling
FC: Fully connected
• LeNet-5: activations: tanh or sigmoidsinput: 32x32C1: 28x28x6S2: 14x14x6C3: 10x10x16S4: 5x5x16F5: 120 F6: 84output: 10
Arquitectura
LeNet-5 (1998)
Mapas de características
Clasificador
Cascada
Arquitectura
Arquitectura
AlexNet (2012)
• AlexNet: activations: ReLUs
input: 227x227
C1: 55x55x96
C2: 27x27x256
C3: 13x13x384
C4: 13x13x384
C5: 13x13x256
FC6: 4096
FC7: 4096
FC8 (output): 1000
Capas convolucionales (CNN)
• Campo receptivo, solo hay conectividad local
• Los pesos son los mismos para cada posición (filtro)
• Equivale y se calcula con convoluciones
Ejemplo: entrada 32x32x3
campo receptivo: 5x5
pesos que conectan una región y una neurona: 5x5x3
• Hiperparámetros: – Depth: número de filtros que queremos usar
– Stride: salto entre convoluciones, si >1 se reduce el volumen espacial
– zero-padding: incrementa el borde del input con ceros, para ajustar tamaños de entradas y salidas y que se puedan comprar.
Arquitectura
Subsampling, Max pooling
• Podemos interponer capas de pooling que reducen el tamaño de la red
• En algunas arquitecturas podemos tener capas de upsampling, para ello nos guardaremos en las capas de max pooling de qué pixel sacamos el valor
Arquitectura
stride=3
subsampling
Max pooling
0.1 0.7
-0.2 0.6
0.1 0.7
-0.2 0.6
0.7
Average pooling
0.3
Funciones de activación
• Sigmoidea: 𝜎 𝑥 =1
1+𝑒−𝑥
• Tanh: tanh 𝑥
• ReLU: max 0, 𝑥
• Leaky ReLU: max 0.1𝑥, 𝑥
• ELU: ቊ𝑥 𝑥 ≥ 0
𝛼(𝑒𝑥 − 1) 𝑥 < 0
• Maxout: max(𝜔1′ 𝑥 + 𝑏1,𝜔2
′ 𝑥 + 𝑏2)
Arquitectura
1
x
Capa completamente conectada (FC)
• Las últimas capas no buscan características
• Clasifican, regresionan, …
• La información se ha ido reduciendo
• Conectamos todas con todas las neuronas en un esquema tradicional
Arquitectura
z1
z2
zo
...
......
FC1 FC2
output
Softmax
• Los outputs de la red para el caso de un clasificador necesitamos que se adapten al rango 0,1 y que sean una probabilidad (sumen 1).
• Para ellos utilizaremos la función softmax que ajusta las salidas de nuestra red al rango 0,1
𝜎(𝒛)𝑗=𝑒𝑧𝑗
σ𝑘 𝑒𝑧𝑘
Arquitectura
Loss/Cost function
Loss
• Para poder usar backpropagation, definiremos una cost/loss/error function(*) que tiene que satisfacer dos propiedades:1. Se debe poder expresar como un promedio de costes para muestras de entrenamiento
individuales .
𝐶 =1
𝑛
𝑥
𝐶𝑥
2. La función de coste C no debe depender de ningún valor de activación por detrás de los de la última capa
(*) en algunos contextos se distinguen estas, siendo loss (perdida) la función que evalua el error para un dato concreto, y cost (coste) la que aglutina un conjunto de muestras y términos regularizadores
Loss para regresión
• L2 o cuadrática
𝐶 =1
2
𝑗
(𝑎𝑗𝐿 − 𝑦𝑗)
2
• L1 o absoluta o Laplace, no diferenciable en cero.
𝐶 =
𝑗
|𝑎𝑗𝐿 − 𝑦𝑗|
• Huber: cuadrática para valores pequeños, absoluta para valores grandes
Loss
Loss para classificación
• Logistic
𝐶 = −𝑦𝑗 log 𝑎𝑗𝐿 − 1 − 𝑦𝑗 log(1 − 𝑎𝑗
𝐿)
• Hinge
𝐶 = max(0,1 − 𝑎𝑗𝐿𝑦𝑗)
Loss
Qué datos usaremos
• Muchos y etiquetados
• Bases de datos grandes – MNIST: 70K imágenes en grises 20x20
representa dígitos escritos a mano
60K training, 10K testing
– CIFAR-10: 60K imágenes en color 32x32
10 clases, 6K/clase. 50K training,10K test
– CIFAR-100: lo mismo pero con 100 clases, 600/clase
– ImageNet: organizada según WordNet
10M imágenes color, 10K categorías
– Places: 2,44M imágenes color.
– ….
Datos
Training, Validation, Test
• Training: datos usados para aprender, la diferencia de las respuesta de la red a estos datos con respecto a las salidas esperadas es la diferencia que propagaremos hacia atrás.
• Validation: la manera correcta de sintonizar los hyperparámetros sin tocar el resto de los datos. La idea es partir el training en dos: uno mayor para entrenar y otro para validar. Podemos evaluar la accuracy obtenida cada cierto tiempo y ver cómo evoluciona en el tiempo.
• Test: Se evalúan una única vez al final. No podemos usar el test para aprender la red o sus hiperparámetros
• En el caso de tener pocas muestras y no poder partir en 3 se puede optar por hace una Cross-validation
Datos
Epoch, batch, iterations
• Epoch: una pasada de los datos forward y backward de todos los datos de entrenamiento
• batch size: número de muestras de entrenamiento en un paso forward/backward. Cuanto mayor sea este batch size mejor representado estará el gradiente pero más memoria se necesitará.
• Iterations: número de pasos, cada uno usa batch size número de ejemplos
Datos
Regularización
• Hacer más robusto el aprendizaje, reducir el overfitting… Contamos con varias técnicas:
– Data augmentation
– Early stopping
– Dropout
– Batch normalization
– Weight decay
Datos
Data augmentation
• Generar más muestras plausibles a partir de:
• - ligeras traslaciones (random crops)
• - simetrías horizontales y verticales
• - rotaciones
• Manipulación del color
• Distorsiones geométricas
• Añadir ruido a los datos
• Utilizar partes y reconstruir nuevas imágenes
• Nota: siempre que sean creíbles, por ejemplo una escena con el cielo en el suelo no es creíble dentro del ámbito de un coche autónomo, pero una naranja en cualquier dirección sí en un entorno industrial de control de calidad de fruta.
Datos
Early stopping
• El training genera overfitting de sus datos, la red acaba ajustando muy bien las respuestas del training. Cuando pasa esto la red se equivocará más en un caso no visto. Lo que haremos es vigilar y parar cuando el validation error comience a subir
Datos
Weight decay
• Evita que la importancia del resultado recaiga en pocas neuronas limitando el peso de estas.
• Añadimos a la función de coste un término que penaliza que los pesos se hagan grandes
Datos
ሚ𝐶 = 𝐶 +𝜆
2𝑊2
Ajuste (hiperparámetros)
• Babysitting
• Random search vs. Gridded search
• Simulated annealing
• Metalearning
Ajuste
Aceleración (GPU)
• En esencia una red consiste en multiplicar unos vectores de entrada por unas matrices de pesos … y aprender consiste en reducir el error en la salida propagándolo backwards
• GPUs
• Cuda, openC, …
Aceleración
Entornos de programación
• Caffee• MatConvNet (Matlab)• Theano• Torch• Tensorflow• Keras (sobre Theano o Tensorflow)• Lasagne• PyTorch• Caffe2 • …
Entornos
Zoo
Zoo
https://adeshpande3.github.io/adeshpande3.github.io/The-9-Deep-Learning-Papers-You-Need-To-Know-About.html
Reccurrent (RNN)
• Las salidas se utilizan como entradas, esto genera un estado interno de la red que exhibe un comportamiento temporal.
• Usadas con éxito con secuencias: modelización del lenguaje, traducción automática, reconocimiento de voz, image captioning entre otras.
• LSTM (Hochreiter & Schmidhuber, 1997) es uno de los tipos de RNN más usados en la que el gradiente se propaga unos cuantas veces hasta que se olvida.
• Esta redes que tienen millones de parámetros requieren semanas de entrenamiento en sistemas multiGPU.
Zoo
Resnet
Zoo
• Mezclas las salidas de una capa, con las salidas de unas cuantas capas antes.
• Necesitas profundidades muy grandes de redes
• Dan buenos resultados
Autoencoders
• “Comprimes” los datos,
• Quitas lo superfluo
• Reduces la dimensionalidad
Zoohttp://cs.stanford.edu/people/karpathy/convnetjs/demo/autoencoder.html
Links interesantes
• http://cs231n.stanford.edu/2016/
• http://www.deeplearningbook.org/
• http://neuralnetworksanddeeplearning.com/
• http://cs.stanford.edu/people/karpathy/
• http://distill.pub/
• http://deeplearning.net/
Links