Feature Maps
Una mappa delle caratteristiche è la griglia di risposte che un filtro produce su un'immagine e mostra dove compare il suo schema. Panoramica di calcolo, forme e visualizzazione.
Una mappa delle caratteristiche è l'output di un filtro in uno strato di una rete neurale convoluzionale (CNN): una griglia 2D di numeri che registra l'intensità con cui lo schema del filtro appare in ogni posizione dell'input. Uno strato convoluzionale con 64 filtri produce 64 mappe delle caratteristiche, impilate in un tensore di forma canali × altezza × larghezza, che diventa l'input dello strato successivo. Le mappe delle caratteristiche degli strati iniziali evidenziano bordi, colori e trame, mentre quelle degli strati più profondi rispondono a parti di oggetti e a oggetti interi. Mappa di attivazione è un sinonimo; inoltre, l'intero tensore impilato di uno strato viene spesso chiamato mappa delle caratteristiche.
Come si calcola una mappa delle caratteristiche#
Un filtro, detto anche kernel, è una piccola griglia di pesi del modello appresi, in genere 3×3 per ogni canale di input. La convoluzione fa scorrere il filtro sull'input e, in ogni posizione, moltiplica elemento per elemento i valori sovrapposti e li somma, aggiungendo una distorsione, per ottenere un numero di output. Valori di output elevati indicano le posizioni in cui l'input corrisponde allo schema del filtro. L'altezza e la larghezza dell'output dipendono dalle dimensioni dell'input, dalla dimensione del kernel k, dal padding p e dallo stride s secondo floor((input + 2p - k) / s) + 1; quindi un kernel 3×3 con padding 1 mantiene le dimensioni con stride 1 e le dimezza con stride 2.
Il frammento seguente applica un kernel per il rilevamento dei bordi verticali a una piccola immagine scura a sinistra e luminosa a destra.
import torch
import torch.nn.functional as F
# Un'immagine in scala di grigi 8x8: metà sinistra scura, metà destra luminosa, per ottenere un singolo bordo verticale
image = torch.zeros(1, 1, 8, 8)
image[..., 4:] = 1.0
# Un kernel Sobel 3x3 che risponde ai bordi verticali
kernel = torch.tensor([[-1.0, 0.0, 1.0], [-2.0, 0.0, 2.0], [-1.0, 0.0, 1.0]]).view(1, 1, 3, 3)
# Fai scorrere il kernel sull'immagine per produrre una mappa delle caratteristiche
feature_map = F.conv2d(image, kernel)
print(feature_map.shape)
print(feature_map[0, 0, 0])Stampa torch.Size([1, 1, 6, 6]) e tensor([0., 0., 4., 4., 0., 0.]). Senza padding, l'immagine 8×8 produce una mappa 6×6 (8 − 3 + 1 = 6) e la mappa ha valori diversi da zero solo nelle due colonne in cui il kernel attraversa il bordo. Le CNN addestrate apprendono molti filtri del primo strato che si comportano come questo kernel Sobel, insieme a filtri ottimizzati per colori e trame.
Le mappe delle caratteristiche attraverso la rete#
Man mano che i dati attraversano una CNN, le mappe delle caratteristiche in genere si riducono in altezza e larghezza e aumentano nel numero di canali. Ogni passaggio di riduzione del campionamento dimezza la risoluzione e ogni posizione in una mappa più profonda riassume un campo recettivo più ampio dell'immagine originale. I rilevatori mantengono mappe a diverse profondità perché il compromesso opera in entrambe le direzioni: una mappa con stride 8 di un'immagine 640×640 è una griglia 80×80, abbastanza fine da individuare oggetti piccoli, mentre una mappa con stride 32 è una griglia 20×20, le cui celle vedono una porzione sufficiente dell'immagine per riconoscere oggetti grandi. Una rete piramidale di caratteristiche (FPN) fonde le mappe di queste profondità affinché ogni scala disponga sia di una posizione precisa sia di informazioni di alto livello; il backbone che le produce è la principale fase di estrazione delle caratteristiche di un modello.
Mappe delle caratteristiche e termini correlati#
- Filtro: il filtro contiene i pesi appresi, mentre la mappa delle caratteristiche è il risultato della loro applicazione a un input. Ogni filtro produce una mappa delle caratteristiche per immagine.
- Funzione di attivazione: una funzione come ReLU applicata elemento per elemento a una mappa delle caratteristiche dopo la convoluzione. La mappa esiste sia prima sia dopo l'applicazione, sotto forma di valori pre-attivazione e post-attivazione.
- Embedding: un embedding è in genere un vettore 1D ottenuto tramite pooling o appiattimento di una mappa delle caratteristiche; conserva il contenuto dell'immagine ma ne scarta la posizione. Gli embedding alimentano la ricerca per similarità e il clustering, mentre le mappe spaziali delle caratteristiche alimentano le attività che richiedono informazioni sulla posizione, come la segmentazione semantica.
- Mappe di salienza: Una mappa di salienza è una singola mappa di calore che spiega una previsione, spesso calcolata a partire dalle mappe delle caratteristiche e dai relativi gradienti.
Ispezione e visualizzazione delle mappe delle caratteristiche#
Rappresentare i singoli canali come immagini in scala di grigi mostra a cosa risponde ciascun filtro. Le mappe del primo livello assomigliano a copie della foto filtrate per rilevare i bordi, mentre quelle dei livelli profondi sono macchie grossolane sovrapposte alle parti degli oggetti. In PyTorch, un hook forward registrato con register_forward_hook acquisisce le mappe delle caratteristiche di qualsiasi livello durante l'inferenza. I livelli profondi hanno centinaia di canali, perciò gli strumenti di IA spiegabile di solito li condensano in un'unica mappa di calore. Grad-CAM assegna a ogni canale di una mappa delle caratteristiche di un livello finale un peso basato sul gradiente medio di un punteggio di classe, quindi somma i canali; in questo modo evidenzia le regioni dell'immagine che hanno determinato una previsione. Nel modello nano YOLO26, un'immagine 640×640 raggiunge la testa di rilevamento sotto forma di tre mappe delle caratteristiche di 64×80×80, 128×40×40 e 256×20×20; eseguire previsioni con visualize=True salva una sovrapposizione LayerCAM _cam.jpg che assegna a ogni posizione di queste mappe un peso basato sul gradiente positivo verso ciascuna classe prevista.










