Swin Transformers | Compiti moderni di Visione Artificiale

Swin Transformers | Modern Tasks in Artificial Vision

Introduzione

Lo Swin Transformer è un’innovazione significativa nel campo dei vision transformers. Le eccezionali prestazioni dei transformers sono state dimostrate in varie attività. Tra questi transformers, lo Swin Transformer spicca come la spina dorsale della computer vision, fornendo flessibilità e scalabilità senza precedenti per soddisfare le esigenze dei moderni modelli di deep-learning. È il momento di sbloccare il pieno potenziale di questo transformer e di osservarne le impressionanti capacità.

Obiettivi di Apprendimento

In questo articolo, ci proponiamo di presentare gli Swin Transformers, una potente classe di vision transformers gerarchici. Alla fine di questo articolo, dovresti capire:

  • Le principali caratteristiche degli Swin Transformers
  • Le loro applicazioni come spina dorsale dei modelli di visione artificiale e
  • I vantaggi degli Swin Transformers in varie attività di visione artificiale, come la classificazione delle immagini, il rilevamento degli oggetti e la segmentazione delle istanze.

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

Comprensione degli Swin Transformers

In un articolo del 2021 intitolato “Swin Transformer: Hierarchical Vision Transformer using Shifted Windows”, Ze Liu, Yutong Lin, Yue Cao, Han Hu e Yixuan Wei hanno introdotto gli Swin Transformers. Questi transformers si differenziano da quelli tradizionali che elaborano le immagini per blocchi. Gli Swin Transformers suddividono l’immagine in finestre spostate non sovrapposte, consentendo un calcolo efficiente e scalabile.

Fonte: Liu et al. (2021)

L’uso di finestre spostate è essenziale negli Swin Transformers. Il loro design gerarchico risolve efficacemente il problema della complessità quadratica riscontrata nei transformers “vanilla” (encoder e decoder) quando si lavora con immagini ad alta risoluzione. Questa caratteristica di design consente anche agli Swin Transformers di adattarsi facilmente a diverse dimensioni delle immagini, rendendoli ideali per dataset piccoli e grandi.

Differenza tra uno Swin Transformer e ViT

La prima cosa da notare qui è che l’approccio degli Swin Transformers al trattamento delle immagini avviene per blocchi. In secondo luogo, lo Swin Transformer è una variante del Vision Transformer (ViT) originale. Introduce la suddivisione gerarchica dell’immagine in blocchi e li unisce man mano che la rete si approfondisce. Ciò aiuta a catturare in modo efficace le caratteristiche locali e globali.

Scomposizione del Processo in Dettaglio

  • Creazione dei blocchi: Invece di utilizzare una dimensione fissa dei blocchi come nel ViT (ad esempio, 18×18 pixel), lo Swin Transformer parte da blocchi più piccoli nei livelli iniziali. Ad esempio, supponiamo blocchi di 16×16 pixel.
  • Canali di Colore: Ciascun blocco corrisponde a una piccola porzione dell’immagine e ogni blocco viene trattato come un’immagine a colori con tre canali propri che sono comunemente rappresentati come canali rosso, verde e blu.
  • Dimensionalità delle Caratteristiche del Blocco: Utilizzando l’esempio di 16 per 16, un singolo blocco ha un totale di 768 dimensioni delle caratteristiche, cioè 16x16x3 = 768. Queste dimensioni corrispondono ai valori dei pixel nel blocco 16×16 per ciascuno dei tre canali di colore.
  • Trasformazione Lineare: Dopo la creazione di questi blocchi, vengono trasformati linearmente in uno spazio di dimensioni superiori. Questa trasformazione aiuta la rete a imparare rappresentazioni significative dai valori dei pixel nei blocchi.
  • Partizione Gerarchica: Man mano che la rete si approfondisce, questi blocchi più piccoli vengono uniti in blocchi più grandi. Questa partizione gerarchica consente al modello di catturare in modo efficace sia i dettagli locali (da blocchi più piccoli) che il contesto globale (da blocchi uniti).

L’approccio degli Swin Transformers di unire gradualmente i blocchi man mano che la profondità della rete aumenta aiuta il modello a mantenere un equilibrio tra informazioni locali e globali, che può essere cruciale per comprendere le immagini in modo efficace. Gli Swin Transformers introducono ancora molteplici concetti e ottimizzazioni aggiuntive utilizzando self-attention basato su finestre e finestre spostate come abbiamo visto in precedenza per ridurre il calcolo, tutto ciò contribuisce alle loro migliori prestazioni per le attività sulle immagini.

Caratteristiche degli Swin Transformers

  • Padding dell’Input: Gli Swin Transformers offrono il vantaggio di supportare qualsiasi altezza e larghezza di input se divisibili per 32, il che li rende flessibili. Ciò garantisce che il modello gestisca immagini di dimensioni variabili, offrendo maggiore flessibilità durante la fase di pre-elaborazione.
  • Hidden States di Output: Gli Swin Transformers consentono agli utenti di accedere agli hidden_states e ai reshaped_hidden_states quando il parametro `output_hidden_states` è impostato su True durante l’addestramento o l’inferenza. L’output `hidden_states` ha una forma di (batch_size, sequence_length, num_channels), tipica dei transformers. In contrasto, l’output `reshaped_hidden_states` ha una forma di (batch_size, num_channels, height, width), rendendolo più adatto per attività di visione artificiale successive.
  • Utilizzo dell’API AutoImageProcessor: Per preparare le immagini per il modello Swin Transformer, sviluppatori e ricercatori possono sfruttare l’API AutoImageProcessor. Questa API semplifica la fase di pre-elaborazione delle immagini gestendo compiti come ridimensionamento, data augmentation e normalizzazione, garantendo che i dati di input siano pronti per essere utilizzati dal modello Swin Transformer.
  • Spina Dorsale della Visione: Le architetture degli Swin Transformers sono versatili, il che li rende una potente spina dorsale per la visione artificiale. Come spina dorsale, gli Swin Transformers eccellono in attività come il rilevamento degli oggetti, la segmentazione delle istanze e la classificazione delle immagini, come vedremo di seguito. Questa adattabilità li rende una scelta eccellente per progettare modelli di visione all’avanguardia.

Applicazioni dei Swin Transformers

1. Swin per la classificazione delle immagini

La classificazione delle immagini consiste nel poter identificare la classe di un’immagine. I Swin Transformers hanno dimostrato prestazioni impressionanti sui compiti di classificazione delle immagini. Sfruttando la loro capacità di modellare efficacemente le dipendenze a lungo raggio, eccellono nel catturare pattern intricati e relazioni spaziali all’interno delle immagini. Ciò può essere visto come un modello Swin transformer con una testa di classificazione delle immagini in cima.

Dimostrazione della classificazione Swin

Vediamo il caso d’uso di Swin per la classificazione delle immagini. Prima di tutto, installiamo e importiamo le librerie e carichiamo l’immagine:

!pip install transformers torch datasets

Trova l’intero codice su GitHub.

Carica l’immagine

# Importa le librerie necessarie
from transformers import AutoImageProcessor, SwinForImageClassification
import torch

# Accedi alle immagini dal web
import urllib.parse as parse
import os
from PIL import Image
import requests

# Verifica l'url
def check_url(string):
    try:
        result = parse.urlparse(string)
        return all([result.scheme, result.netloc, result.path])
    except:
        return False

# Carica un'immagine
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)

# Mostra l'immagine
url = "https://img.freepik.com/free-photo/male-female-lions-laying-sand-resting_181624-2237.jpg?w=740&t=st=1690535667~exp=1690536267~hmac=0f5fb82df83f987848335b8bc5c36a1ee534f40301d2b7c095a2e5a62ff153fd"
image = load_image(url)

image
Fonte: Freepik

Caricamento di AutoImageProcessor e Swin

# Carica il processore di immagini pre-addestrato (AutoImageProcessor)
# "microsoft/swin-tiny-patch4-window7-224" è il checkpoint del modello utilizzato per il processamento delle immagini
image_processor = AutoImageProcessor.from_pretrained("microsoft/swin-tiny-patch4-window7-224")

# Carica il modello pre-addestrato Swin Transformer per la classificazione delle immagini
model = SwinForImageClassification.from_pretrained("microsoft/swin-tiny-patch4-window7-224")

# Prepara l'input per il modello utilizzando il processore di immagini
# L'immagine viene preelaborata e convertita in tensori PyTorch
inputs = image_processor(image, return_tensors="pt")

Ora effettuiamo l’inferenza e prevediamo le etichette

# Effettua l'inferenza utilizzando il modello Swin Transformer
# I logit sono l'output grezzo del modello prima di applicare softmax
with torch.no_grad():
    logits = model(**inputs).logits

# Prevedi l'etichetta per l'immagine selezionando la classe con il valore logit più alto
predicted_label = logits.argmax(-1).item()

# Recupera e stampa l'etichetta prevista utilizzando la mappatura id2label del modello
print(model.config.id2label[predicted_label])

Classe di previsione

leone, re delle bestie, Panthera leo

2. Masked Image Modeling (MIM)

Il processo consiste nel mascherare casualmente un’immagine di input e quindi ricostruirla attraverso il compito di pre-testo. Questa è un’applicazione per il modello Swin con un decodificatore in cima per il modello di immagine mascherata. MIM è un metodo di visione emergente per l’apprendimento auto-supervisionato con metodi pre-addestrati. È stato di successo in numerosi compiti di visione con i vision transformers (ViTs).

Dimostrazione del modello di immagine mascherata

Riusiamo le importazioni del codice precedente. Trova l’intero codice su GitHub. Ora carichiamo una nuova immagine.

# Carica un'immagine dall'URL fornito
url = "https://img.freepik.com/free-photo/outdoor-shot-active-dark-skinned-man-running-morning-has-regular-trainings-dressed-tracksuit-comfortable-sneakers-concentrated-into-distance-sees-finish-far-away_273609-29401.jpg?w=740&t=st=1690539217~exp=1690539817~hmac=ec8516968123988e70613a3fe17bca8c558b0e588f89deebec0fc9df99120fd4"
image = Image.open(requests.get(url, stream=True).raw)
image
Fonte: Freepik

Caricamento dell’AutoImageProcessor e del Modello di Immagine Mascherata

# Carica il processore di immagini preaddestrato (AutoImageProcessor)
# "microsoft/swin-base-simmim-window6-192" è il checkpoint del modello utilizzato per l'elaborazione delle immagini
image_processor = AutoImageProcessor.from_pretrained("microsoft/swin-base-simmim-window6-192")

# Carica il modello Swin Transformer preaddestrato per il Masked Image Modeling
model = SwinForMaskedImageModeling.from_pretrained("microsoft/swin-base-simmim-window6-192")

# Calcola il numero di patch in base alla dimensione dell'immagine e delle patch
num_patches = (model.config.image_size // model.config.patch_size) ** 2

# Converti l'immagine in valori di pixel e prepara gli input per il modello
pixel_values = image_processor(images=image, return_tensors="pt").pixel_values

# Crea una maschera booleana casuale di forma (batch_size, num_patches)
bool_masked_pos = torch.randint(low=0, high=2, size=(1, num_patches)).bool()

# Esegui il masked image modeling sul modello Swin Transformer
outputs = model(pixel_values, bool_masked_pos=bool_masked_pos)

# Recupera la perdita e i valori di pixel ricostruiti dagli output del modello
loss, reconstructed_pixel_values = outputs.loss, outputs.reconstruction

# Stampa la forma dei valori di pixel ricostruiti
print(list(reconstructed_pixel_values.shape))

Sopra vediamo i valori di pixel ricostruiti. Infine, evidenziamo altre applicazioni.

Altre applicazioni potrebbero essere per il rilevamento degli oggetti e la segmentazione delle istanze. L’applicazione del rilevamento degli oggetti aiuterebbe a identificare una particolare parte di un’immagine, mentre nella segmentazione delle istanze, i transformer swin rilevano e segmentano oggetti singoli all’interno di un’immagine.

Conclusione

Abbiamo visto i Transformer Swin che si sono affermati come un avanzamento rivoluzionario nel campo della visione artificiale, offrendo una soluzione flessibile, scalabile ed efficiente per una vasta gamma di compiti di riconoscimento visivo. Utilizzando un design gerarchico e gestendo immagini di dimensioni variabili, i Transformer Swin continuano a tracciare la strada per nuove scoperte nel mondo dell’apprendimento profondo e delle applicazioni di visione artificiale. Con il progresso dei vision transformers, è probabile che i Transformer Swin rimangano all’avanguardia nella ricerca all’avanguardia e nelle implementazioni pratiche. Spero che questo articolo vi abbia aiutato a conoscere il concetto.

Punti chiave

  • I Transformer Swin sono vision transformers gerarchici per compiti di visione artificiale, offrendo scalabilità ed efficienza nel processare immagini ad alta risoluzione.
  • I Transformer Swin possono servire come base per varie architetture di visione artificiale, eccellendo in compiti come la classificazione delle immagini, il rilevamento degli oggetti e la segmentazione delle istanze.
  • L’API AutoImageProcessor semplifica la preparazione delle immagini per i Transformer Swin, gestendo ridimensionamento, aumentazione e normalizzazione.
  • La loro capacità di catturare dipendenze a lungo raggio rende i Transformer Swin una scelta promettente per modellare schemi visivi complessi.

Domande frequenti

  • Liu, Z., Lin, Y., Cao, Y., Hu, H., Wei, Y., Zhang, Z., Lin, S., & Guo, B. (2021). Swin Transformer: Hierarchical Vision Transformer using Shifted Windows. ArXiv. /abs/2103.14030
  • Xie, Z., Zhang, Z., Cao, Y., Lin, Y., Bao, J., Yao, Z., Dai, Q., & Hu, H. (2021). SimMIM: A Simple Framework for Masked Image Modeling. ArXiv. /abs/2111.09886

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