Está en la página 1de 10

TALLER - DEEP LEARNING

FACILITADORES

Ing. Eliecer Estupiñán


Ing. William Vega

DATOS DEL PARTICIPANTE

Nombre Completo: Victor De Hoyos

PROBLEMA

Se tiene una serie de imágenes de animales y se desea construir una herramienta para realizar el
reconocimiento por imagen de esta

OBJETIVO

Construir una herramienta de reconocimiento de imágenes de animales.

HERRAMIENTAS

Ingrese al siguiente enlace


https://colab.research.google.com/notebooks/welcome.ipynb
Archivo > Nuevo Cuaderno de Python 3

INSTRUCCIONES

Escriba y ejecute los siguientes scripts.


Después de realizar todas las actividades planteadas, guarde el documento en formato PDF y
cargue en el Drive, en la ruta dada por los facilitadores.

Page 1 of 10
Reconocimiento de imagen y CNNs
El reconocimiento de imagen es el problema de identificar y clasificar objetos en una imagen.
Posiblemente, una de sus aplicaciones más comunes en la actualidad es el etiquetado automático
de imágenes, usado para la gestión y organización de contenido web.

Gracias a un tipo de modelos conocidos como Convolutional Neural Networks (CNNs), redes
neuronales convolucionales, el reconocimiento de imagen ha experimentado enormes progresos.
Estos modelos están inspirados por los procesos biológicos que tienen lugar en el cortex visual,
donde las neuronas individuales responden a estímulos en un área restringida del campo visual.
Esta área se superpone parcialmente con el de las neuronas más próximas, cubriendo de forma
colectiva el campo visual completo.

Macroarquitectura de la red VGG16

Como resultado, las CNNs aprenden a responder a diferentes caracterices de la imagen (bordes,
formas, etc), como los bancos de filtros utilizados en los algoritmos tradicionales y definidos de
forma manual. De hecho, la capacidad de aprender dichos filtros supone una ventaja única de las
CNNs, que elimina el esfuerzo manual requerido en el diseño de características.

Page 2 of 10
En la actualidad, existen multitud de arquitecturas de CNN disponibles de forma gratuita y sin
restricciones de uso que pueden alcanzar un rendimiento razonable en tareas de reconocimiento
visual. Por ejemplo, Keras — una librería de alto nivel que sirve como capa de abstracción sobre
Tensorflow — proporciona acceso a alguno de los ganadores de la competición ImageNet ILSVRC.
CNNs como ResNet50 (desarrollada por Microsoft Research) o InceptionV3 (desarrollada por
Google Research) se ofrecen listas para reconocer 1000 objectos comunes (lista de objectos
ILSVRC).

Empezando con Colaboratory

Para empezar, sólo necesitamos acceder a Colaboratory, crear un nuevo notebook desde New
Notebook > New Python 3 Notebook, e instalar Keras.

!pip install -q keras

Precedido con “!”, Colaboratory permite escribir comandos de sistema, lo que nos da control
sobre la máquina virtual para instalar paquetes no disponibles por defecto.

Cargando y ejecutando el modelo


Cualquiera de los modelos de reconocimiento de imagen disponibles en Keras puede ser cargado
con sólo dos líneas de código. Esto automáticamente descargará el modelo entrenado para
clasificar 1000 objetos comunes usando el conjunto de datos de ImageNet.

#Cargue el modelo de inicio v3


from keras.applications.inception_v3 import InceptionV3
model = InceptionV3(weights='imagenet', include_top=True)

El módulo keras.applications proporciona acceso a las arquitecturas más comunes, como


VGG16, ResNet50, InceptionV3 o MobileNet. En este caso vamos a elegir la Inception-v3 de
Google, que es una de las mejores, con un error top-5 del 3,46%. Valor que mide la frecuencia con
la que falla el modelo a la hora de predecir la respuesta correcta como una de sus cinco mejores
estimaciones.

Page 3 of 10
Función de predicción
Para empezar a hacer predicciones sólo necesitamos preparar la imagen de entrada y decodificar
el vector de predicción de salida. Para esto, vamos a escribir la función auxiliar predict.

#Función auxiliar para preprocesar la imagen y predecir clases


import numpy as np
from keras.preprocessing import image
from keras.applications.inception_v3 import preprocess_input,
decode_predictions
def predict(model, img_path, target_size=(299, 299), top_n=5):
img = image.load_img(img_path, target_size=target_size)
x = image.img_to_array(img)
x = np.expand_dims(x, axis=0)
x = preprocess_input(x)
preds = model.predict(x)
return decode_predictions(preds, top=top_n)[0]

En primer lugar, la imagen tiene que ser redimensionada para adaptarse al tamaño de entrada de
la red Inception-v3, en este caso target_size=(299, 299), otras redes como la VGG16 o la
ResNet50 deben establecer un tamaño igual a (224, 224). La función image.load_img del
módulo keras.preprocessing carga directamente la imagen desde su ubicación img_path
y redimensiona la imagen al tamaño especificado target_size.

El siguiente paso es convertir la imagen img a un array de numpy con image.img_to_array


y cambiar sus dimensiones con np.expand_dim para pasar de (3, 299, 299) a (1, 3,
299, 299). De este modo se tiene un array de 4 dimensiones con 1 imagen de 3 canales RGB y
tamaño 299 por 299. Esto es necesario porque la función model.predict requiere que la
entrada sea un array de 4 dimensiones, pudiendo clasificar múltiples imágenes de una sola vez.

El último paso antes de la predicción es la normalización de los datos, que usa la función
preprocess_input para centrarlos en cero usando la media de los valores de los canales de
las imágenes del conjunto de entrenamiento. Este paso es extremadamente importante porque si
no se realiza provocará que las probabilidades de las predicciones sean incorrectas.

Finalmente, el valor devuelto por la función de predicción model.predict es decodificado por


decode_predictions para devolver el resultado de la clasificación a través de la
correspondiente etiqueta y la probabilidad predicha.

Page 4 of 10
#Funciones de ayuda para trazar resultados
import matplotlib.pyplot as plt

def plot_image(img_path):
img = image.load_img(fn, target_size=(299, 299))
plt.figure(figsize=(8, 8))
plt.imshow(img, interpolation='nearest')
plt.axis('off')

def plot_pred(pred):
plt.figure(figsize=(8, 2))
classes = [c[1] for c in pred]
probas = [c[2] for c in pred]
y_pos = np.arange(len(classes))
plt.barh(y_pos, probas, align='center')
plt.yticks(y_pos, classes)
plt.gca().invert_yaxis()
plt.xlabel('Probability')
plt.xlim(0, 1)

Carga de la imagen

Definido nuestro sistema de reconocimiento, solo necesitamos cargar nuestras propias imágenes
para probar su funcionamiento. Para ello, podemos usar directamente el código que podemos
encontrar al hacer click en el botón negro que se encuentra en lo alto a la izquierda, justo debajo
del menú.

#Código para cargar una imagen


from google.colab import files
uploaded = files.upload()
for fn in uploaded.keys():
print(‘User uploaded file “{name}” with length {length} bytes’.format(
name=fn, length=len(uploaded[fn])))

Predicción
Cargada la imagen, obtendremos una predicción que se mostrará como a continuación.

#Realiza predicciones y muestra la imagen redimensionada de entrada y los


resultados.
pred = predict(model, fn)
plot_image(fn)
plot_pred(pred)

Page 5 of 10
La cual, usa la librería matplotlib para mostrar la imagen y el resultado predicho en un gráfico
de barras horizontal.

Conclusiones

Este artículo da un vistazo rápido de cómo empezar con la predicción de objectos presentes en
una imagen empleando redes neuronales convolucionales (CNNs). Pero esto no es más que una
introducción, dado que dichas redes pueden ser adaptadas a medida para predecir con gran
precisión nuestras propias clases de objectos usando “transfer learning”.

Actividad Final

- Realice la carga de mínimo tres imágenes de animales descargadas de internet para verificar el
funcionamiento del reconocimiento de imágenes (adjunte las imágenes con el resultado al
documento de entrega).

Imagen Subida: Armadillo

Page 6 of 10
Resultado: Exitoso

Page 7 of 10
Imagen Subida: Japanese spaniel

Resultado: No Exitoso

Imagen Subida: Great Dane

Page 8 of 10
Resultado: Exitoso

- De una explicación de cómo funciona Deep Learning.

Los modelos de aprendizaje profundo se denominan redes neuronales profundas.


“Profundo” hace referencia al número de capas ocultas en la red neuronal las cuales hasta 150.

Se entrenan mediante el uso de extensos conjuntos de datos etiquetados y arquitecturas de


redes neuronales que aprenden directamente a partir de los datos, sin necesidad de una
extracción manual de características.

- ¿Cuál es la diferencia entre Machine Learning y Deep Learning?


Deep Learning es una forma especializada de aprendizaje automático.
Machine Learning empieza con la extracción manual de las características relevantes de las
imágenes.

Page 9 of 10
Deep Learning, extrae las características directamente de las imágenes. Además realiza un
“aprendizaje completo”, se proporcionan datos sin procesar, se realiza una clasificación, la cual
aprende cómo hacerlo automáticamente.

- Investigue 3 aplicaciones que utilicen deep learning en la actualidad.


Reconocimiento de Imágenes
Reconocimiento de Texto
Reconocimiento de Voz

Page 10 of 10

También podría gustarte