Vision Transformers (ViT) nell’elaborazione delle didascalie delle immagini utilizzando modelli ViT preaddestrati

Using pre-trained ViT models in image captioning with Vision Transformers (ViT).

Introduzione

L’Image captioning utilizzando i modelli ViT preaddestrati può essere visto come un testo o una descrizione scritta sotto un’immagine destinata a fornire una descrizione dei dettagli dell’immagine. È il compito di tradurre un’immagine in una descrizione testuale. Viene fatto collegando Visione (immagine) e Linguaggio (Testo). In questo articolo, raggiungiamo questo obiettivo utilizzando i Vision Transformers (ViT) nelle immagini come tecnologia principale utilizzando il backend PyTorch. L’obiettivo è mostrare un modo di impiegare i transformers, in particolare i ViT, per generare didascalie di immagini, utilizzando modelli addestrati senza doverli addestrare da zero.

Fonte: Springer

Con il trend attuale delle piattaforme di social media e dell’utilizzo online delle immagini, i vantaggi di questa abilità sono molteplici e potrebbero essere utili in molte situazioni, tra cui la descrizione, la citazione, l’aiuto ai non vedenti e persino l’ottimizzazione dei motori di ricerca. Ciò rende molto utile apprendere questa tecnica per i progetti che coinvolgono immagini.

Obiettivi di apprendimento

  • L’idea di Image Captioning
  • Utilizzare i ViTs per la cattura di immagini
  • Eseguire il captioning di immagini con modelli preaddestrati
  • Utilizzare i Transformers con Python

Puoi trovare l’intero codice utilizzato in questo repository GitHub .

Questo articolo è stato pubblicato come parte del Data Science Blogathon.

Cosa sono i modelli Transformer?

Prima di analizzare ViT, iniziamo con una comprensione dei Transformers. Dal momento dell’introduzione dei Transformers nel 2017 da parte di Google Brain, ha suscitato interesse per la sua capacità nell’NLP. Un Transformer è un modello di deep learning distinto dalla sua adozione dell’auto-attenzione, che pesa differenzialmente l’importanza di ogni parte dei dati in input. E viene utilizzato principalmente nei campi dell’elaborazione del linguaggio naturale (NLP).

I Transformers elaborano dati in input sequenziali, come quelli del linguaggio naturale, ma i Transformers elaborano l’intero input in una sola volta. Con l’aiuto del meccanismo di attenzione, c’è un contesto per qualsiasi posizione nella sequenza in input. Questa efficienza consente maggiore parallelizzazione e riduce i tempi di addestramento, migliorando l’efficienza.

Architettura del Transformer

Ora analizziamo la struttura architetturale dei Transformers. L’architettura del Transformer è composta principalmente da una struttura encoder-decoder. La struttura encoder-decoder dell’architettura del Transformer è stata presentata in un famoso articolo intitolato “Attention Is All You Need”.

L’encoder è composto da strati responsabili del processo di elaborazione dell’input in modo iterativo, uno strato dopo l’altro, mentre d’altra parte, gli strati del decoder ricevono l’output dell’encoder e generano un output decodificato. In altre parole, l’encoder mappa la sequenza in input in una sequenza che viene quindi inserita in un decoder. Il decoder genera quindi una sequenza di output.

Cosa sono i Vision Transformers?

Dal momento che questo articolo mostra un uso pratico di ViT nella didascalia delle immagini, è utile anche capire come funzionano i ViT. I Vision Transformers sono un tipo di transformers che svolgono compiti relativi all’immagine che includono le immagini. Sono un transformer che utilizza anche meccanismi di attenzione per trovare le relazioni tra le immagini in input. In questo caso d’uso, collegheranno la nostra immagine con token o testo.

Fonte: Alexey et al. 2021

Implementazione del captioning delle immagini

Con la comprensione di ciò che sono i transformers e come funzionano, passiamo all’implementazione del nostro modello di didascalia delle immagini. Inizieremo installando la libreria del transformer e quindi costruire il modello prima di utilizzare il nostro modello per generare didascalie di immagini.

Prima di passare a scrivere i codici, ricordiamo che stiamo effettivamente utilizzando il modello vit-gpt2-image-captioning addestrato per la descrizione di immagini reso disponibile dalla libreria Hugging Face. La base di questo modello è un vision transformer.

Importazione delle librerie necessarie

La prima cosa da fare è installare la libreria Transformer poiché non è ancora preinstallata in Colab.

# Installing Transformer Libraries

!pip install transformers

Ora possiamo importare le librerie.

# Web links Handler
import requests

# Backend
import torch

# Image Processing
from PIL import Image

# Transformer and pre-trained Model
from transformers import VisionEncoderDecoderModel, ViTImageProcessor, GPT2TokenizerFast

# Managing loading processing
from tqdm import tqdm

# Assign available GPU
device = "cuda" if torch.cuda.is_available() else "cpu"

Troverai l’intero codice in questo GitHub repo .

# Loading a fine-tuned image captioning Transformer Model

# ViT Encoder-Decoder Model
model = VisionEncoderDecoderModel.from_pretrained("nlpconnect/vit-gpt2-image-captioning").to(device)

# Corresponding ViT Tokenizer
tokenizer = GPT2TokenizerFast.from_pretrained("nlpconnect/vit-gpt2-image-captioning")

# Image processor
image_processor = ViTImageProcessor.from_pretrained("nlpconnect/vit-gpt2-image-captioning")

Abbiamo introdotto tre (3) modelli pre-addestrati dalla classe transformers. Vediamo le loro funzioni brevemente.

  • VisionEncoderDecoderModel : Questo aiuta a svolgere una generazione di testo da immagine con qualsiasi modello pre-addestrato di visione utilizzando un Transformers (come l’encoder) come ViT (che abbiamo usato qui) o modelli BEiT che utilizzano l’auto-addestramento supervisionato di Vision Transformers (ViTs) per superare l’auto-addestramento supervisionato insieme a qualsiasi modello di linguaggio pre-addestrato come decoder come GPT2 (che stiamo usando anche qui). Quindi, in questo approccio, impieghiamo VisionEncoderDecoder come applicazione per la descrizione di immagini utilizzandolo per codificare l’immagine e successivamente utilizzare un modello di linguaggio per generare le didascalie.
  • GPT2TokenizerFast : Questo crea un tokenizer GPT-2 utilizzando la libreria Hugging Face tokenizers. Carichiamo la libreria tokenizers nei transformers. Il tokenizer è già stato addestrato per gestire tutte le caratteristiche che richiediamo per la descrizione delle immagini.
  • ViTImageProcessor : Infine, ViTImageProcessor. Aiuta a costruire un processore di immagini ViT.

Preparazione dell’immagine per la cattura

Ora dobbiamo creare una funzione per caricare gli URL e elaborare le immagini che desideriamo catturare.

# Accesssing images from the web
import urllib.parse as parse
import os
# Verify url
def check_url(string):
    try:
        result = parse.urlparse(string)
        return all([result.scheme, result.netloc, result.path])
    except:
        return False

# Load an image
def load_image(image_path):
    if check_url(image_path):
        return Image.open(requests.get(image_path, stream=True).raw)
    elif os.path.exists(image_path):
        return Image.open(image_path)

Abbiamo appena creato due funzioni per verificare prima un URL e un’altra funzione per utilizzare quell’URL verificato per caricare l’immagine per la cattura.

Esecuzione di inferenza sull’immagine

L’inferenza ci aiuta a giungere a una conclusione ragionevole sull’immagine in base alle sue caratteristiche. Un approccio consiste nel convertire l’immagine in tensori utilizzando PyTorch (come usato qui) o trattarlo come pixel. Per eseguire la nostra inferenza, utilizziamo il metodo generale come mostrato di seguito per generare in modo automatico la didascalia.

# Image inference
def get_caption(model, image_processor, tokenizer, image_path):
    image = load_image(image_path)
    
    # Preprocessing the Image
    img = image_processor(image, return_tensors="pt").to(device)
    
    # Generating captions
    output = model.generate(**img)
    
    # decode the output
    caption = tokenizer.batch_decode(output, skip_special_tokens=True)[0]
    
    return caption

Abbiamo utilizzato una decodifica greedy, che è quella predefinita. Altre opzioni potrebbero includere la ricerca a raggio o il campionamento multinomiale. Puoi sperimentare con loro e vedere la differenza.

Caricamento e cattura delle immagini

Finalmente, possiamo caricare e catturare le nostre immagini come richiesto. Caricheremo diverse immagini e vedremo come si comporta la cattura. Nota che queste immagini non sono tratte dal dataset coco ma da fonti in rete. Sentiti libero di utilizzare le tue immagini come desideri.

#  Visualizzazione dei media dell'immagine
from IPython.display import display

Esempio 1

# Caricamento degli URL
url = "https://images.pexels.com/photos/101667/pexels-photo-101667.jpeg?auto=compress&cs=tinysrgb&w=600"

# Visualizzazione dell'immagine
display(load_image(url))

# Visualizzazione della didascalia
get_caption(model, image_processor, tokenizer, url)
Fonte: Pexels

Didascalia:

un cavallo nero che corre attraverso un campo erboso

Esempio 2

# Caricamento degli URL
url = "https://images.pexels.com/photos/103123/pexels-photo-103123.jpeg?auto=compress&cs=tinysrgb&w=600"

# Visualizzazione dell'immagine
display(load_image(url))

# Visualizzazione della didascalia
get_caption(model, image_processor, tokenizer, url)
Fonte: Pexels

Didascalia:

un uomo in cima ad una collina con una montagna

Esempio 3

# Caricamento degli URL
url = "https://images.pexels.com/photos/406014/pexels-photo-406014.jpeg?auto=compress&cs=tinysrgb&w=600"

# Visualizzazione dell'immagine
display(load_image(url))

# Visualizzazione della didascalia
get_caption(model, image_processor, tokenizer, url)
Fonte: Pexels

Didascalia:

un cane con un lungo naso

Altre Applicazioni dei Vision Transformers

Prima di concludere, vediamo alcuni altri casi d’uso dei Vision Transformers oltre alla descrizione delle immagini:

  • Riconoscimento ottico dei caratteri (OCR)
  • Rilevamento/Classificazione delle immagini
  • Identificazione di Deepfake
  • Detection/Segmentazione di anomalie
  • Segmentazione e analisi di immagini

Conclusione

Abbiamo eseguito la descrizione delle immagini utilizzando la tecnologia Vision Transformers (ViT) con un backend di PyTorch. ViTs sono modelli di deep learning che elaborano dati di input sequenziali e riducono i tempi di formazione. Utilizzando i modelli pre-addestrati VisionEncoderDecoderModel, GPT2TokenizerFast e ViTImageProcessor, abbiamo fornito un modo facile di creare senza dover costruire da zero. Hanno anche la capacità di superare la formazione supervisionata e sono adatti per la descrizione delle immagini.

Punti Chiave

  • Siamo stati in grado di vedere la descrizione delle immagini, traducendo un’immagine in una descrizione testuale utilizzando i modelli pre-addestrati Vision Transformers (ViT) e il backend di PyTorch.
  • I Transformers sono modelli che elaborano dati di input sequenziali utilizzando l’auto-attenzione, la parallelizzazione e la riduzione dei tempi di formazione.
  • Abbiamo dimostrato l’uso pratico dei ViT nella descrizione delle immagini, utilizzando meccanismi di attenzione per collegare le immagini ai testi.

Domande Frequenti (FAQ)

  • GitHub del progetto: https://github.com/inuwamobarak/Image-captioning-ViT
  • Vision Transformer (ViT)Siamo in viaggio per avanzare e democratizzare l’intelligenza artificiale attraverso l’open source e la scienza aperta.huggingface.co
  • OpenAI GPT2Siamo in viaggio per avanzare e democratizzare l’intelligenza artificiale attraverso l’open source e la scienza aperta.huggingface.co
  • TokenizerSiamo in viaggio per avanzare e democratizzare l’intelligenza artificiale attraverso l’open source e la scienza aperta.huggingface.co
  • Modelli Vision Encoder DecoderSiamo in viaggio per avanzare e democratizzare l’intelligenza artificiale attraverso l’open source e la scienza aperta.huggingface.co
  • https://link.springer.com/chapter/10.1007/978-3-030-74478-6_7
  • https://en.wikipedia.org/wiki/Transformer_(machine_learning_model)
  • https://openreview.net/pdf?id=YicbFdNTTy

I media mostrati in questo articolo non sono di proprietà di Analytics Vidhya e sono utilizzati a discrezione dell’autore.