readme: ---
  tags:
  - image-classification
  - pytorch
  - huggingpics
  metrics:
  - accuracy
  
  model-index:
  - name: nintendo-controllers-model-opt3
    results:
    - task:
        name: Image Classification
        type: image-classification
      metrics:
        - name: Accuracy
          type: accuracy
          value: 0.5333333611488342
  ---
  
  # nintendo-controllers-model-opt3
  
  
  Modelo de clasificacion de imagenes con Python.
  
  
  Las predicciones que se obtienen se realizan a traves de un modelo de aprendizaje profundo llamado transformador de visión (ViT) el cual es capaz de discernir entre un control de Xbox y un control de Playstation. En un ViT, la imagen de entrada se "corta" en subimágenes de igual tamaño y cada una de esas subimágenes pasa por una insercion lineal lo que hace que 
  cada subimagen sea sólo un vector unidimensional. Despues se le agrega una insercion posicional a cada uno de estos vectores lo cual permite a la red saber dónde se encuentra
  cada subimagen originalmente en la imagen. Estos vectores se transmiten, junto con un vector de clasificación especial, a los bloques codificadores transformadores, cada uno de los cuales
  se compone de : Una Normalización de Capas (LN), una Autoatención Multicabezal (MSA),una conexión residual, una segunda LN, un Perceptrón Multicapa (MLP) 
  y otra conexión residual, los cuales se conectan uno detrás de otro. Por último, se utiliza un bloque MLP de clasificación para la clasificación final sólo en el vector de clasificación especial, que al final de todo el proceso, es el que
  tiene toda la informacion global de la imagen.
  
  La data que se usa de entrada al modelo es obtenida atraves de una API de buscador de imagenes que las descarga y almacena desde la web, de la cual se recolectan ~150 
  imagenes por clase. Una vez obtenida las imagenes, se dividen entre un 75% y 15% para usar como entrenamiento y validacion respectivamente. 
  Para validar la data recolectada, se hace un pequeño muestreo al azar de las imagenes para confirma que las imagenes que consiguio la API, en su mayoria sean igual
  a lo que se introdujo como busqueda (microsoft xbox controller y sony playstation controller).
  
  Una vez etiquetada y mapeada la data, se preparan ejemplos en batches, los cuales seran alimentados de forma aleatorea a un modelo ViT ya preentrenado por  usando el conjunto
  de datos ImageNet-21k. El modelo consta de metodos de entrenamiento, validacion y optimizacion usando PyTorch, en este caso se uso atom como optimizador. 
  
  Una vez validadas las predicciones con las etiquetas de las imagenes, se obtuvo un modelo capaz de discernir entre una control de playstation y un control de xbox
  con una precision de >53%.
  
  
  ## Imagenes de ejemplo
  
  
  #### microsoft xbox controller
  
  ![microsoft xbox controller](images/microsoft_xbox_controller.jpg)
  
  #### sony playstation controller
  
  ![sony playstation controller](images/sony_playstation_controller.jpg)