Memory Bank
Bellek bankası, bir modelin yeni girdileri tek bir partidekinden çok daha fazla örnekle karşılaştırabilmesi için önceki partilerden, karelerden veya referans görüntülerden gelen gömmeleri saklar.
Bellek bankası, bir modelin daha önce hesapladığı özellik vektörlerini veya gömme vektörlerini, yeni girdilerin tek bir gruba veya ileri geçişe sığabilecek olandan çok daha fazla örnekle karşılaştırılabilmesi için saklayan bir depodur. Yönteme bağlı olarak saklanan vektörler önceki eğitim gruplarından, önceki video karelerinden veya normal görüntülerden oluşan bir referans kümesinden gelir. Banka, benzerlik aramaları ya da dikkat mekanizmasıyla okunur ve yeni vektörler geldikçe güncellenir. Bellek bankaları bilgisayarlı görü alanındaki üç konunun merkezinde yer alır: her adımda binlerce negatif örnek sundukları karşıtsal öğrenme; önceki karelerde bir nesnenin nasıl göründüğünü hatırladıkları video bölümleme ve izleme; normal verilerin nasıl göründüğünü tuttukları anomali tespiti.
Karşıtsal Öğrenmede Bellek Bankaları#
Karşıtsal öz denetimli öğrenme, bir kodlayıcıyı aynı görüntünün iki görünümünü birbirine yaklaştıracak ve diğer görüntüleri uzaklaştıracak şekilde eğitir. Daha fazla negatif örnek, genellikle daha iyi bir eğitim sinyali sağlar. Daha fazla görüntüyle karşılaştırma yapmak için normalde daha büyük bir grup boyutu gerekir; bunu GPU belleği sınırlar. Zhirong Wu ve çalışma arkadaşları bu amaçla bellek bankasını CVPR 2018'de Parametrik Olmayan Örnek Ayırt Etme Yoluyla Denetimsiz Özellik Öğrenimi başlıklı çalışmada tanıttı: Banka, 1,28 milyon ImageNet eğitim görüntüsünün her biri için 128 boyutlu bir özellik tutuyor, görüntü yeniden görüldüğünde ilgili girdiyi yeniliyor ve her adımda buradan binlerce negatif örnek seçiyordu. Girdiler kodlayıcının eski sürümleri tarafından yazıldığı için saklanan özellikler güncelliğini yitiriyor ve mevcut modelle tutarsız hâle geliyordu.
Facebook AI Research'ten Kaiming He ve çalışma arkadaşlarının geliştirdiği Momentum Contrast (MoCo), bu sorunu bir kuyruk ve ikinci bir kodlayıcıyla çözdü. Banka, varsayılan olarak en yeni grupların 65.536 anahtarını tutar; her yeni grup kuyruğa eklenirken en eski grup çıkarılır. Anahtarlar, ağırlıkları ana kodlayıcıyı yavaşça izleyen bir momentum kodlayıcısından gelir. Bu kodlayıcının ağırlıkları eski değerlerinin 0,999 katı ile ana kodlayıcının ağırlıklarının 0,001 katının toplamı olarak güncellenir; böylece farklı adımlarda yazılan anahtarlar birbiriyle tutarlı kalır.
Video Bölümleme ve İzlemede Bellek Bankaları#
Videoda bellek bankası, modelin önceki karelere başvurarak örtülme ve görünüm değişiklikleriyle başa çıkmasını sağlar. Uzay-Zaman Belleği ağları (STM), geçmiş karelerin anahtar ve değer özelliklerini maskeleriyle birlikte sakladı ve her yeni kareyi bunlara dikkat ederek segmente ayırdı; XMem, bu yaklaşımı ayrı kısa süreli ve uzun süreli bellekler kullanarak uzun videolara genişletti. Meta'nın SAM 2'si, kullanıcının istem verdiği kareleri ve en güncel kareleri içeren bir bellek bankası tutar; bellek dikkati her yeni karenin özelliklerini bu karelere göre koşullandırır, böylece maske görüş alanından çıkıp yeniden giren bir nesneyi takip eder. Ultralytics paketinde SAM 2, varsayılan olarak istem verilen karelere ve en son 6 kareye dikkatini yöneltir; SAM2DynamicInteractivePredictor, update_memory=True ile çağrıldığında istem verilen bir görüntüdeki nesnenin durumunu bellek bankasına ekler ve daha sonraki görüntüleri sakladığı bilgilere göre segmentlere ayırır.
Çoklu nesne izleyicileri, yeniden kimlik belirleme için de aynı fikirden yararlanır: DeepSORT her izin son 100 görünüm tanımlayıcısından oluşan bir galeri tutar ve yeni tespitleri, saklanan tanımlayıcıları en çok benzeyen izle eşleştirir.
Anomali Tespiti için Bellek Bankaları#
Karsten Roth ve çalışma arkadaşlarının CVPR 2022'de sunduğu PatchCore, kusursuz ürün görüntülerinden ImageNet üzerinde önceden eğitilmiş bir CNN'nin çıkardığı yama özelliklerinden bir bellek bankası oluşturur. Bir test yaması, saklanan en yakın özelliğe olan uzaklığıyla puanlanır; görüntü puanı ise en kötü yama puanıdır. Böylece normal yamaların hiçbirine benzemeyen her şey öne çıkar. Açgözlü çekirdek alt örnekleme, özelliklerin yayılımını korurken bunların yalnızca küçük bir bölümünü tutar. Yöntem, MVTec AD endüstriyel kusur tespiti kıyaslamasında görüntü düzeyinde %99,6'ya kadar AUROC değerine ulaştı.
Bu PyTorch örneği, ham pikselleri özellik olarak kullanıp aynı yöntemi 8x8 el yazısı rakamlara uygular: 3 rakamından 100 görüntü bellek bankasını oluşturur, diğer tüm rakamlar ise anomali sayılır:
import torch
from sklearn.datasets import load_digits
from sklearn.metrics import roc_auc_score
X, y = load_digits(return_X_y=True)
X, y = torch.tensor(X / 16, dtype=torch.float32), torch.tensor(y)
normal = X[y == 3] # images of the digit 3 play the role of defect-free parts
memory_bank = normal[:100] # memory bank: stored features of 100 normal images
test = torch.cat([normal[100:], X[y != 3]]) # unseen 3s plus every other digit as anomalies
is_anomaly = torch.cat([torch.zeros(len(normal) - 100), torch.ones(len(X) - len(normal))])
# Greedy coreset: repeatedly keep the stored feature farthest from everything kept so far
coreset = [0]
distance = torch.cdist(memory_bank, memory_bank[:1])[:, 0]
for _ in range(9):
coreset.append(int(distance.argmax()))
distance = torch.minimum(distance, torch.cdist(memory_bank, memory_bank[coreset[-1:]])[:, 0])
for name, bank in [("Full memory bank, 100 entries", memory_bank), ("Coreset, 10 entries", memory_bank[coreset])]:
scores = torch.cdist(test, bank).min(dim=1).values # anomaly score: distance to the nearest stored feature
print(f"{name}: AUROC {roc_auc_score(is_anomaly, scores):.3f}")1.697 test görüntüsünde tam bellek bankası, görülmemiş 83 adet 3 rakamını diğer rakamlardan ROC eğrisi altındaki alan (AUC) değeri 0.984 ile ayırır. 10 girdili çekirdek alt küme ise 0.982 puanını alır ve belleğin onda birini ve daha az arama işlemini kullanarak algılama başarısının neredeyse tamamını korur.
Bellek Bankası ve İlgili Kavramlar#
- Vektör veri tabanı: Gömme vektörlerini kalıcı olarak saklar ve birçok uygulamanın benzerlik araması yapmasını sağlar. Bellek bankası ise tek bir modelin eğitim veya çıkarım döngüsünde, genellikle GPU belleğinde bulunur ve model çalışırken üzerine yazılır.
- Bağlam penceresi: Bir dönüştürücünün tek geçişte dikkat uyguladığı belirteçlerdir. Bellek bankası, diğer gruplardan, karelerden veya görüntülerden gelen vektörleri bu pencerenin dışında tutar.
- Transformer-XL: Önceki metin bölümünün gizli durumlarını, sonraki bölümün dikkat uyguladığı bir bellek olarak önbelleğe alır. Bu etkinleşme bellek bankası, bir dil modelinin erişimini tek bir pencerenin ötesine taşır.
- Zor negatif örnek madenciliği: Eğitim için ayırt edilmesi en zor negatif örnekleri seçer. Bellek bankası, bu seçimde kullanılabilecek geniş bir negatif örnek havuzu sağlar.
- Epizodik bellek: Yapay zekâ ajanlarında ve pekiştirmeli öğrenmede, kararları yönlendirmek için geri çağrılan geçmiş deneyimlerin deposudur. Bellek bankaları ise negatif örnekler, geçmiş kareler veya normal yamalar gibi modelin kendi hesaplamalarında kullandığı vektörleri saklar.










