Few-Shot Vision
Module: Computer Vision | Difficulty: Advanced
Prototypical Network
where is the class prototype.
MAML Update
Episode Training
N-way K-shot Setup
- classes per episode
- support examples per class
- query examples per class
import torch
import torch.nn as nn
class PrototypicalNet(nn.Module):
def __init__(self, encoder, distance='euclidean'):
super().__init__()
self.encoder = encoder
self.distance = distance
def forward(self, support_x, support_y, query_x, N):
# Encode support and query
s_feats = self.encoder(support_x)
q_feats = self.encoder(query_x)
# Compute prototypes
prototypes = []
for k in range(N):
mask = support_y == k
prototypes.append(s_feats[mask].mean(dim=0))
prototypes = torch.stack(prototypes)
# Compute distances
dists = torch.cdist(q_feats, prototypes)
return -dists # logits
def few_shot_loss(model, episode, N, K, Q):
support_x, support_y, query_x, query_y = episode
logits = model(support_x, support_y, query_x, N)
return nn.functional.cross_entropy(logits, query_y)
Key Takeaways
- Prototypical networks use class means as prototypes
- MAML optimizes for fast adaptation to new tasks
- Episode training simulates the few-shot scenario