Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Mask R-CNN
Mask R-CNN
About
Blog
5 minutos de lectura
Una red neuronal convolucional (Convolutional Neural Networks en ingl�s, con los
acr�nimos CNNs o ConvNets) es un caso concreto de redes neuronales Deep Learning,
estas han tenido un auge exponencial recientemente dado sus excelentes resultados,
pero ya se conocen desde los a�os 90.
Para hacernos una idea intuitiva de c�mo funcionan estas redes neuronales, pensemos
en c�mo nosotros reconocemos las cosas. Por ejemplo, si vemos una cara, la
reconocemos porque tiene orejas, ojos, una nariz, cabello, etc. Entonces vamos
asimilando en nuestra cabeza qu� rasgos cumple y asignamos una probabilidad de que
sea una cara. Por ejemplo, si vemos una posible cara de noche, pero la mitad de
ella esta oscura puede que dudemos al decidir mentalmente si se trata de una
persona o no, dado que no vemos claramente los rasgos suficientes de una cara. Las
redes convolucionales hacen algo similar, dar una posibilidad de que el objeto que
buscamos sea el que ve en la imagen.
Inicio - Mask R-CNN
El objetivo de este post es construir un modelo CNN con m�scaras de regi�n (Mask R-
CNN) que pueda detectar el �rea de da�o en un autom�vil. El problema de una red CNN
es que puede encontrar miles de objetos y regiones, para paliar este problema se
crearon las R-CNN. En R-CNN, la CNN est� obligada a enfocarse en una sola regi�n,
porque de esa manera se minimiza la interferencia de otros objetos. Las regiones en
el R-CNN se detectan mediante un algoritmo de b�squeda selectiva seguido de cambio
de tama�o, de modo que las regiones tengan el mismo tama�o antes de que se env�en a
un CNN para la clasificaci�n y la regresi�n del cuadro delimitador. Es decir, una
R-CNN busca en n-regiones y se enfoca en encontrar el objeto-target, de ah� que nos
sirva de manera id�nea para este caso. Por ejemplo, los primeros casos de uso de
estas redes R-CNN son en la conducci�n aut�noma, ya que sirven de manera
espectacular para la detecci�n de coches en una carretera; procesar� diferentes
regiones en busca de los n-coches de la imagen.
</br></br>
Inicio - C�mo crear una R-CNN
Una buena forma de imaginar una R-CNN es por medio de la combinaci�n de una faster-
R-CNN y una Fully Conected CNN. La primera Faster R-CNN, buscar� las regi�n en la
cual cree que esta el objeto, y la clase de estas, la Fully conected CNN,
encontrar� el objeto en esa regi�n.
</br></br>
</br></br>
</br></br>
Train del modelo
Primero traemos las librer�as necesarias para entrenar este modelo antes citadas y
definimos tambi�n los directorios de los pesos ya entrenamos de COCO. Esta es un
dataset de todo tipo de im�genes las cuales han sido entrenadas, y tenemos los
pesos de ese entrenamiento. Esto nos servir� de punto de partida para entrenar el
modelo usando el transfer learning.
import os
import sys
import json
import datetime
import numpy as np
import skimage.draw
import cv2
from mrcnn.visualize import display_instances
import matplotlib.pyplot as plt
# Add images
for a in annotations:
polygons = [r['shape_attributes'] for r in a['regions'].values()]
self.add_image(
"damage", ## for a single class just add the name here
image_id=a['filename'], # use file name as a unique image id
path=image_path,
width=width, height=height,
polygons=polygons)
Funci�n de creaci�n de una m�scara pasada una imagen, crear� una m�scara con las
caracter�sticas de alto x ancho que le pasemos, lo devolver� en el formato
adecuado.
info = self.image_info[image_id]
mask = np.zeros([info["height"], info["width"], len(info["polygons"])],
dtype=np.uint8)
for i, p in enumerate(info["polygons"]):
# Get indexes of pixels inside the polygon and set them to 1
rr, cc = skimage.draw.polygon(p['all_points_y'], p['all_points_x'])
mask[rr, cc, i] = 1
Para la posterior visualizaci�n del los objetos detectados crearemos una funci�n
que se encargar� de pintar la regi�n que ha encontrado en la imagen en cuesti�n.
if mask.shape[0] > 0:
splash = np.where(mask, image, gray).astype(np.uint8)
else:
splash = gray
return splash
Este ser� la funci�n train del modelo, como ya viene pre-entrenada con los pesos de
COCO no ser� necesario entrenarla mucho, lo haremos s�lo con 10 veces.
def train(model):
# Training dataset.
dataset_train = CustomDataset()
dataset_train.load_custom(args.dataset, "train")
dataset_train.prepare()
# Validation dataset
dataset_val = CustomDataset()
dataset_val.load_custom(args.dataset, "val")
dataset_val.prepare()
model.train(dataset_train, dataset_val,
learning_rate=config.LEARNING_RATE,
epochs=10,
layers='heads')
Train principal
# Create model
if args.command == "train":
model = modellib.MaskRCNN(mode="training", config=config,
model_dir=args.logs)
else:
model = modellib.MaskRCNN(mode="inference", config=config,
model_dir=args.logs)
weights_path = COCO_WEIGHTS_PATH
if args.weights.lower() == "coco":
# Exclude the last layers because they require a matching
# number of classes
model.load_weights(weights_path, by_name=True, exclude=[
"mrcnn_class_logits", "mrcnn_bbox_fc",
"mrcnn_bbox", "mrcnn_mask"])
else:
model.load_weights(weights_path, by_name=True)
if args.command == "train":
train(model)
elif args.command == "splash":
detect_and_color_splash(model, image_path=args.image,
video_path=args.video)
Para entrenar este modelo, y hacer lo que hemos citado en los pasos anterior
ejecutaremos el siguiente comando:
Referencias
Como hemos comentado en los posts anteriores, en este set de diferentes notebooks
trataremos de hacer un an�lisis de la serie temporal de lo...
Predictor de precios de mercado - General Motors - Parte II
Como hemos comentado en los posts anteriores, en este set de diferentes notebooks
trataremos de hacer un an�lisis de la serie temporal de lo...
Predictor de precios de mercado - General Motors - Parte I
Desde hace tiempo los economistas han estudiado e intentado comprender los
movimientos de los precios en la bolsa de valores, debido a que l...
Seguir:
Feed