OCR de DNIs con Redes Neuronales Convolucionales

Las redes neuronales convolucionales (link) han demostrado durante los últimos años un rendimiento superior a las redes neuronales normales o perceptrones multicapa (MLP) para tareas de clasificación de imágenes, como por ejemplo en aplicaciones de reconocimiento de caracteres, o de clasificación de objetos en imágenes. Una de las demostraciones más relevantes de su rendimiento ha sido la de Krizhevsky et al., 2012, batiendo el record de clasificación en la base de datos ImageNet 2012, con una red convolucional que presentó una tasa de error del 16,4%, mientras que el modelo del segundo clasificado se situaba en un 26,1%.

Las redes neuronales convolucionales son redes neuronales MLP que presentan una o varias capas de convolución y submuestreo (pooling o sub-sampling) previas. Cada capa de convolución contiene un conjunto de pequeños filtros, habitualmente de tamaño 5×5 ó 7×7, cuyos coeficientes se determinan durante el entrenamiento de la red, de modo que para cada imagen de entrada a la red, la salida de la primera capa de convolución es un conjunto de versiones filtradas de la imagen de entrada (tantas como filtros presente la capa). Estas imágenes filtradas se someten a un muestreo zonal, típicamente empleando la función max-pooling, que reducen la dimensión de la imagen filtrada. Por ejemplo, para una capa con un max-pooling de tamaño 2×2 píxeles y stride 2 píxeles, la imagen de salida se generará recorriendo la imagen de entrada (la imagen filtrada por uno de los filtros de convolución de la capa anterior) en bloques (patches) de 2×2 píxeles, y generando un único píxel en la imagen resultante, de valor igual al máximo de los valores de los 4 píxeles del patch. Al emplearse un stride de 2 píxeles, el patch n se genera desplazando el patch n-1 2 píxeles en horizontal y/o vertical sobre la imagen filtrada de entrada. Se genera una imagen de salida de la capa de submuestreo con 4 veces menos píxeles que la imagen filtrada de entrada. Esta imagen de salida es la imagen de entrada a la siguiente capa de convolución o a la red MLP.

 

Resultado de imagen de convolutional neural networks

Ejemplo de red neuronal convolucional (http://deeplearning.net/tutorial/_images/mylenet.png)

 

El gran rendimiento de las redes neuronales convolucionales sorprendió en sus inicios a la comunidad científica, que no llega a entender claramente el motivo. La intuición hace pensar que los filtros de convolución son más eficaces obteniendo las características (features) de las imágenes que las que tendría una red MLP, sin embargo, es cierto que la aportación de los filtros no puede separarse del efecto de otros parámetros o acciones, como la regularización o las funciones de activación empleadas. Surge la gran necesidad de visualizar “el aprendizaje” de las redes neuronales convolucionales, como herramienta para comprender su funcionamiento. No te debes perder el artículo de Matthew D. Zeiler y Rob Fergus, “Visualizing and Understanding Convolutional Networks”.

La gran mayoría de artículos y publicaciones sobre redes neuronales convolucionales coinciden al indicar que la primera etapa de filtros se encarga de buscar bordes en la imagen de entrada, y que las etapas posteriores tratan de obtener características de orden mayor a partir de estas imágenes de bordes. Así, es frecuente encontrarse imágenes de filtros que busquen bordes cada uno en un ángulo diferente.

Fig. 2 : Illustration of the filters in the first convolutional layer: (a) randomly selected filters from the first layer in our model, and (b) the real parts of some Gabor filters. we can find some visual similarities between.  Filtros convolucionales de una red CNN (izquierda) (referencia)

En ÿNeeds hemos querido comprobar este hecho, y hemos analizado la red neuronal convolucional que hemos diseñado y entrenado para decodificar los caracteres de los documentos nacionales de identidad (DNI) en nuestros productos (ÿMobileDNI e ÿNeeds-DNI-Capture). Esta red neuronal está entrenada con caracteres extraídos de DNIs digitalizados con escáneres, teléfonos móviles y webcams, de muy diversas características y en entornos de capturas diferentes, componiendo de este modo una base de datos de documentos de identidad españoles de gran diversidad de calidades.

La red neuronal presenta dos capas convolucionales, cada una de ellas seguida de una capa de max-pooling, antes de su conexión a un MLP. Los caracteres de entrada a la red neuronal se encuentran en escala de grises sin invertir, es decir, los caracteres aparecen con valores de luminancia cercanos al negro. A continuación, mostramos una imagen ampliada de algunos de los filtros de la primera capa. Cada filtro posee un tamaño de 5×5 píxeles. Para su visualización se ha obtenido el valor máximo y mínimo de entre todos los filtros, para posteriormente transformar cada uno de los coeficientes (c) de cada filtro (h), con la transformada (c-min)*255/max, para trasladar cada coeficiente al rango [0, 255]. La imagen ha sido ampliada para una mejor visualización.

Filtros de una red neuronal convolucional para decodificar caracteres de DNI

25 filtros de 5×5 coeficientes de la primera capa convolucional.

Se observa claramente que los filtros no son detectores de bordes en diferentes ángulos, como se podía esperar, sino que parecen filtros que desempeñan una función más compleja. Podríamos visualizar la respuesta en frecuencia de cada uno de estos filtros, pero en vez de eso vamos a observar cuál es el resultado del filtrado de la imagen de entrada por cada uno de ellos.

Imagen de entrada a la CNN

Imagen de entrada a la CNN

 

Salida primera capa red CNN

Resultado del filtrado de la imagen de entrada

Como se observa, la imagen de entrada, está formada por un cuatro bien definido sobre un fondo ruidoso (el fondo del DNI en esa zona), y la imagen filtrada está formada por un cuatro todavía definido, aunque menos que en la imagen de entrada, sobre un fondo muy uniforme. Por lo tanto, el filtro se comporta como un filtro paso bajo, y no como un filtro detector de bordes. Si analizamos las imágenes filtradas por todos los filtros de la primera capa de convolución, observamos que todos los filtros son en realidad filtros paso bajo.
Esta característica contrasta con la mayor parte de las publicaciones existentes, pero en realidad es muy lógica, puesto que las imágenes de entrada para esta aplicación de OCR son imágenes de caracteres bien definidos, cuyos bordes destacan claramente sobre el fondo, y es precisamente este fondo ruidoso el que aporta incertidumbre al proceso de clasificación. Por este motivo, el algoritmo de aprendizaje empleado, en este caso Stochastic Gradient Descent (SGD), ha “aprendido” los coeficientes de los filtros precisamente para eliminar el ruido de fondo mientras se preservan las formas de los caracteres del DNI. Sería probablemente de otro modo si se tratase de clasificar objetos en imágenes naturales por ejemplo.
A continuación mostramos filtros pertenecientes a la segunda capa de convolución, los cuales han sido transformados al rango [0, 255] del mismo modo que los filtros de la primera capa para poder ser representados.

Capa 2 red CNN

Al igual que en el caso anterior, no se aprecia una estructura clara de los filtros a simple vista, por lo que veremos las imágenes a su salida. En este caso, las imágenes son de tamaño 16 píxeles de alto por 10 píxeles de ancho, por lo que han sido agrandadas para poder ser visualizadas. Como se observa, se vuelve a tratar de un filtrado paso bajo, donde la forma de los caracteres ha sido en gran medida difuminada, aunque todavía reconocible para la imagen de entrada anterior de tan buena calidad.

Salida capa 2 red CNN

Tras el max-pooling posterior a esta capa, las imágenes se reducen a un tamaño de 8×5 píxeles, es decir, únicamente 40 características. Esta disminución de la dimensión de cada imagen de entrada, unida a la borrosidad o disminución de los detalles finos, producto del filtrado paso bajo de los filtros y del submuestreo, provoca una homogeneización de las muestras pertenecientes a una misma clase, que facilita en gran medida el aprendizaje de patrones asociados a cada una de las clases, evitando de este modo overfitting, y produciendo un modelo mucho más robusto, es decir, un OCR de alta calidad en entornos de producción.

Esta red neuronal presenta una accuracy del 0,9994 sobre el test set, y eso que nuestra base de datos de caracteres de DNI presenta innumerables muestras que incluso son difíciles de decodificar para un humano, ¿increíble no?.