# Transformador de visión

Un transformador de visión (en inglés: Vision transformer o ViT), es un transformador de red neuronal que se utiliza específicamente para tareas de procesamiento visual, como el reconocimiento de imágenes.

## Transformadores de visión

Inicialmente, los transformadores encontraron su aplicación principal en tareas de procesamiento de lenguaje natural (en inglés: Natural Language Processing o NLP), como se evidencia en modelos de lenguaje tales como BERT y GPT-3. Por otro lado, el procesamiento de imágenes tradicionalmente ha utilizado redes neuronales convolucionales (en inglés: Convolutional Neural Network o CNN). Algunos de los proyectos más reconocidos en este ámbito incluyen Xception, ResNet, EfficientNet, DenseNet e Inception.
Los transformadores miden las relaciones entre pares de tokens de entrada, que pueden ser palabras en el caso de cadenas de texto; estas relaciones se denominan atención. Sin embargo, en el caso de las imágenes, la unidad básica de análisis son los píxeles. Calcular las relaciones entre cada par de píxeles en una imagen típica resulta prohibitivo en términos de memoria y cálculo debido al costo cuadrático asociado. Para abordar este desafío, ViT calcula las relaciones entre los píxeles en secciones pequeñas de la imagen (por ejemplo, en bloques de 16x16 píxeles), lo que reduce drásticamente el costo computacional. Las secciones, junto con sus encajes o embeddings posicionales, son colocadas en secuencia. Los encajes son vectores que pueden aprenderse. Cada sección se organiza en una secuencia lineal y se multiplica por una matriz de encaje. El resultado, combinado con el encaje posicional correspondiente, se introduce en el transformador para su procesamiento.
Al igual que en el caso de BERT, en las tareas de clasificación, el token de clase juega un papel fundamental. Se trata de un token especial que se utiliza como entrada exclusiva del último perceptrón multicapa (en inglés: Multilayer Perceptron o MLP), ya que ha sido influenciado por todos los demás tokens en el modelo.
La arquitectura más comúnmente utilizada para la clasificación de imágenes es aquella que emplea exclusivamente el transformador codificador para transformar los distintos tokens de entrada. No obstante, es importante destacar que también existen otras aplicaciones en las cuales se utiliza la parte decodificadora de la arquitectura de un transformador tradicional.

## Historia

La arquitectura general de los transformadores fue introducida inicialmente en 2017 en el influyente artículo titulado "Attention is All You Need". Desde entonces, los transformadores han sido ampliamente adoptados en el campo del Procesamiento de Lenguajes Naturales (NLP) y se han convertido en una de las arquitecturas de redes neuronales más populares y prometedoras en este ámbito.
En 2019, se propuso la arquitectura Transformador de Visión para el procesamiento de imágenes sin la necesidad de utilizar convoluciones, en un estudio realizado por Cordonnier y otros. Posteriormente, esta arquitectura fue evaluada de manera más exhaustiva en el conocido artículo titulado "An image is worth 16x16 words". La idea principal detrás de esta arquitectura consiste en descomponer las imágenes de entrada en una serie de parches, los cuales se transforman en vectores y se tratan como palabras en un transformador convencional.
En el campo del NLP, el mecanismo de atención en los transformadores se utiliza para capturar las relaciones entre diferentes palabras en el texto analizado. Sin embargo, en Visión por Computadora, los transformadores de visión tienen como objetivo capturar las relaciones entre diferentes porciones de una imagen.
En 2021, un modelo de transformador puro demostró un mejor rendimiento y mayor eficiencia que las CNN en la clasificación de imágenes.
En junio de 2021, se realizó un estudio en el que se incorporó un trasformador back end a un modelo ResNet. Esto resultó en una reducción drástica de los costes computacionales y un aumento en la precisión del modelo.
Durante el mismo año, se presentaron varias variantes importantes de los transformadores de visión, con el objetivo de mejorar la eficiencia, precisión y adaptabilidad a dominios específicos. Entre las variantes más relevantes destaca el Swin Transformer, el cual introdujo modificaciones en el mecanismo de atención y adoptó un enfoque multietapa, logrando resultados vanguardistas en conjuntos de datos de detección de objetos como COCO (en inglés: Microsoft Common Objects in Context). Otra variante interesante es el TimeSformer, diseñado específicamente para tareas de comprensión de vídeo, y es capaz de capturar información espacial y temporal mediante el uso de atención espacio-temporal dividida.
Los transformadores de visión también han logrado trascender del ámbito del laboratorio para adentrarse en uno de los campos más importantes de la visión por computadora: la conducción autónoma.

## Comparación con Redes Neuronales Convolucionales

Debido al tamaño de parche (comparativamente grande) que se utiliza habitualmente, el rendimiento de los ViT depende en mayor medida de decisiones como las del optimizador, los hiperparámetros específicos del conjunto de datos y la profundidad de la red que las redes convolucionales. El preprocesamiento con una capa de filtros convolucionales superpuestos de menor tamaño (longitud [stride] < tamaño [size]) contribuye al rendimiento y la estabilidad.
La CNN realiza una traducción del nivel básico de píxeles a un mapa de características. Luego, un tokenizador se encarga de traducir ese mapa de características en una secuencia de tokens que se introducen en el transformador. El transformador, a su vez, aplica el mecanismo de atención para generar una secuencia de tokens de salida. Finalmente, un proyector vuelve a conectar los tokens de salida con el mapa de características original. Esta conexión permite que el análisis se beneficie de los detalles potencialmente significativos a nivel de píxel. Como resultado, se reduce drásticamente la cantidad de tokens que deben ser analizados, lo que conlleva una reducción de costes computacionales.
Las diferencias entre las CNN y los transformadores de visión son numerosas y se encuentran principalmente en sus arquitecturas.
En realidad, las CNN logran resultados destacados incluso con conjuntos de datos de entrenamiento basado en volúmenes que no son tan grandes como los que requieren los transformadores de visión. Este comportamiento diferente parece ser el resultado de los distintos sesgos inductivos que poseen. La arquitectura orientada a filtros de las CNN permite que estas redes capturen rápidamente las características específicas de las imágenes analizadas. Sin embargo, esta misma arquitectura puede limitar su capacidad para capturar relaciones globales de manera más compleja.
Por otro lado, los transformadores de visión tienen un sesgo diferente hacia la exploración de relaciones topológicas entre parches, lo que les permite capturar relaciones globales y de mayor alcance, aunque requieren un entrenamiento más intensivo en términos de datos. Además, los transformadores de visión han demostrado ser más sólidos frente a las distorsiones de la imagen de entrada, como los parches antagónicos o las permutaciones.
No obstante, elegir una arquitectura sobre la otra no siempre es la elección más adecuada, ya que se han obtenido excelentes resultados en varias tareas de visión por computadora mediante arquitecturas híbridas que combinan capas convolucionales con transformadores de visión.

## El papel del aprendizaje autosupervisado

La necesidad considerable de datos durante la fase de entrenamiento ha llevado a la búsqueda de métodos alternativos para entrenar estos modelos. En la actualidad, los métodos autosupervisados juegan un papel central en este sentido.
Estos enfoques hacen posible entrenar una red neuronal de manera casi autónoma, lo que le permite inferir las características específicas de un problema sin la necesidad de construir un extenso conjunto de datos o proporcionar etiquetas precisas. La capacidad de entrenar un transformador de visión sin requerir un conjunto de datos de visión masivo podría ser la clave para la adopción generalizada de esta arquitectura innovadora y prometedora.

## Aplicaciones

Los transformadores de visión se han utilizado con éxito en diversas tareas de visión por computadora, incluso en aquellas que están en la vanguardia de la tecnología.
Algunas de las áreas de aplicación más relevantes incluyen:
* Clasificación de imágenes.
* Detección de objetos.
* Generación de deepfakes.
* Segmentación de imágenes.
* Detección de anomalías.
* Renderización de imágenes.
* Análisis de grupos.
* Automatización vehicular.

## Implementaciones

Existen numerosas implementaciones de transformadores de visión y sus variantes disponibles en línea como código abierto. Las principales versiones de esta arquitectura se han implementado en PyTorch, pero también se han desarrollado implementaciones disponibles para TensorFlow.