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.
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.
- Come costruire un’intelligenza artificiale responsabile con TensorFlow?
- Microsoft AI presenta una strategia avanzata di ottimizzazione della comunicazione basata su ZeRO per un efficiente addestramento di modelli di grandi dimensioni, senza essere limitati dalle dimensioni del batch o dalla larghezza di banda.
- Incontra CoDi un nuovo modello di diffusione cross-modale per la sintesi da qualsiasi sorgente a qualsiasi destinazione.
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.
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)
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)
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)
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)
Link di Riferimento
- 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.