GoTrack neden CLIP üstüne bir FAISS reranker kullanıyor.
Pickup tespiti bir sınıflandırma değil — bir benzerlik problemidir. Canlı kareleri mağaza-bazlı bir kataloga karşı indeksliyoruz ve müşterinin gerçekte ne aldığına bir reranker karar veriyor.
GoTrack team
Bilgisayarla görü perakende

GoTrack’i bir sınıflandırıcıyla yayına almaya çalıştık. İşe yaramadı. Model kötü olduğu için değil, problem bir sınıflandırma problemi olmadığı için — bu bir benzerlik problemi. Mağazaların tek bir tişört rafı yoktur; aynı silüeti paylaşan 80 SKU’ları vardır ve müşteriler ne kaparlarsa kaparlar. Sınıflandırıcı, sınıf başına bir baş eğitmenizi gerektirir. Reranker ise kataloğu bir kez gömmenizi gerektirir.
Sınıflandırmadan retrieval’a
Pipeline’ı iki aşamaya böldük. Birinci aşama canlı kare ve mağaza kataloğu üzerinde CLIP çalıştırır, ardından FAISS’ten en yakın K katalog girdisini sorgular. İkinci aşama bu K’yı yedi ek sinyalle yeniden sıralar — duruş, el konumu, bekleme süresi, oturumdaki önceki pickup’lar, günün saati ağırlıklandırması, stok durumu ve rafın bölge kademesi.
# Stage 1: vector recall
emb = clip.encode_image(frame)
candidates = faiss.search(emb, k=20)
# Stage 2: rerank with side-features
ranked = reranker.rerank(
candidates,
pose=pose_emb,
hand=hand_position,
dwell=dwell_seconds,
history=session_history,
tod=time_of_day,
stock=stock_state,
tier=zone_tier,
)
pickup = ranked[0]Neden iki aşama
İki aşama, hız ve doğruluğu birbirinden bağımsız ödünleştirmemize izin veriyor. CLIP + FAISS hızlı ve yaklaşık; reranker daha yavaş ama bilgilendirilmiş. Reranker’ı asla 20’den fazla aday üzerinde çalıştırmıyoruz. Edge donanımında, raf üstü ticari kameralarla 300 ms altında pickup’tan ekran değişimine ulaşmamızın yolu bu.
Yedi sinyal bize ne kazandırıyor
- Duruş, görsel olarak benzer iki SKU’dan birinin farklı bir katlama deseni varsa onları ayırt eder.
- El konumu, müşteri raftan bir şey kapmadan geçtiğinde yanlış pozitifleri ortadan kaldırır.
- Bekleme süresi, hızlı göz gezdirmeler aleyhine bir önyargı oluşturur.
- Oturum geçmişi yakınlık katsayısını artırır — az önce bir small aldıysanız, muhtemelen başka bir small alıyorsunuzdur.
- Günün saati, rafın tarihsel pickup dağılımına göre yeniden ağırlıklandırma yapar.
- Stok durumu, elimizde olmayan her şeyi geriye iter (var olmayan bir ürünü kapamazsınız).
- Bölge kademesi, daha yüksek marjlı veya kampanya işaretli ürünlere küçük bir destek verir.
Tenant-bazlı değil, mağaza-bazlı
FAISS indeksleri tenant-bazlı değil, mağaza-bazlı. Aynı zincirdeki iki mağaza çoğunlukla farklı SKU setleri, farklı yerleşimler ve farklı stok durumları çalıştırır. Mağaza başına bir indeks kurmak ucuz (CLIP gömüleri minik) ve recall gürültümüzü yarıya indiriyor.
Ne ölçtük
Butik pilotunda FAISS+reranker pipeline’ı, v1 sınıflandırıcı temeline kıyasla komşu-SKU pickup’larında %22’lik bir artış üretti ve yanlış pozitif oranı (pickup olmadan ekran değişimi) %11’den %2’nin altına düştü. Raf başına tek bir tepe kameray ile uçtan uca 300 ms’nin altı rahatça korundu.
“Bir pickup, zaten indekslediğiniz bir vektöre olan benzerliktir. Sınıflandırmayı bırakın; retrieval’a başlayın.”