ONNX ve CTranslate2 Modellerinin ArcFace Üzerinden Mimari Karşılaştırması
ArcFace ile eğitilmiş InsightFace yüz embedding modellerinin ONNX biçiminden CTranslate2’ye neden doğrudan dönüştürülemediğini; model biçimi, mimari, grafik yürütmesi ve sayısal doğrulama ayrımları üzerinden inceleyen teknik değerlendirme.
ArcFace kaybı ve yüz embedding çıkarımı
ArcFace, yüz görüntüsünü işleyen convolutional omurganın adı değil, eğitimde kullanılan eklemeli açısal marj kaybıdır (Additive Angular Margin Loss). Amaç, aynı kişiye ait yüz temsillerini açısal uzayda yakınlaştırırken farklı sınıflar arasındaki açısal ayrımı artırmaktır. Normalize edilmiş özellikler ve sınıf ağırlıkları üzerinde doğru sınıf açısına sabit bir marj eklenir.
Basitleştirilmiş ArcFace kaybı şöyledir:
exp(s · cos(θyi + m))
Lᵢ = -log ------------------------------------------------
exp(s · cos(θyi + m)) + Σj≠yi exp(s · cos θj)Burada:
θyi, örneğin gerçek sınıf ağırlığı ile özellik vektörü arasındaki açıdır.m, eklemeli açısal marjdır.s, normalize edilmiş logit değerlerini ölçekleyen katsayıdır.yi, örneğin gerçek kimlik sınıfıdır.
Eğitim sonrasında sınıflandırma başlığı, birçok yüz doğrulama sisteminde kullanılmaz. Çıkarımda gerekli bölüm; hizalanmış yüz görüntüsünü sabit boyutlu embedding vektörüne dönüştüren omurgadır:
x ∈ R^(3×112×112) → f(x) ∈ R^512Embedding çoğunlukla L2 normuyla normalize edilir:
f(x)
f̂(x) = -------------
||f(x)||₂İki yüz arasındaki benzerlik, normalize edilmiş embedding vektörlerinin iç çarpımıyla hesaplanabilir:
similarity(a, b) = f̂(a)ᵀ f̂(b)Dolayısıyla dönüştürülmek istenen nesne bir “ArcFace katmanı” değildir. Bu nesne; ResNet, iResNet, MobileFaceNet veya benzeri bir görüntü omurgasının ArcFace kaybıyla eğitilmiş ağırlıklara sahip çıkarım grafiğidir.
ONNX biçimi, genel dönüşüm garantisi değildir
Bir modelin ONNX biçiminde bulunması, onun herhangi bir çıkarım motoruna dönüştürülebileceği anlamına gelmez. ONNX, hesaplama grafiğini ve ağırlıkları ortak bir gösterimle taşır. Hedef çalışma zamanının grafiği ayrıştırabilmesi, düğümleri desteklemesi ve yürütme semantiğini karşılayabilmesi ayrıca gerekir.
Bu nedenle aşağıdaki ayrımlar korunmalıdır:
- Model biçimi, model mimarisi değildir.
- Operatör desteği, bütün grafik desteği değildir.
- Ağırlık nicemleme, model dönüştürme değildir.
- Çıktı boyutu, çalışma zamanı uyumluluğu değildir.
ArcFace tabanlı InsightFace modeli geçerli bir .onnx dosyası olabilir ve 512 boyutlu yüz temsili üretebilir. Buna rağmen mevcut CTranslate2 dönüştürme araçlarıyla doğrudan CTranslate2 modeline dönüştürülemez.
Genel amaçlı ONNX çalışma zamanları farklı bir yürütme yaklaşımı kullanır:
ONNX grafiğini oku
↓
her düğümün operatörünü ve özniteliklerini çöz
↓
grafiği topolojik sırada planla
↓
uygun kernel veya donanım sağlayıcısına dağıt
↓
ara tensorleri üretONNX Runtime, desteklenen grafikleri yükleyebilir, optimize edebilir ve alt grafikleri CPU, CUDA, TensorRT, OpenVINO veya başka Execution Provider bileşenlerine dağıtabilir. Ancak opset sürümü, özel operatörler, dinamik şekiller ve donanım sağlayıcısının operatör kapsamı yine de yürütmeyi engelleyebilir.
CTranslate2'nin mimari sınırı
CTranslate2, genel amaçlı bir ONNX grafik yorumlayıcısı değildir. Transformer tabanlı modellerin verimli çıkarımı için geliştirilmiş özelleşmiş bir C++ ve Python çıkarım kütüphanesidir. Ağırlık nicemleme, katman birleştirme ve batch yeniden sıralama gibi optimizasyonları Transformer yürütme düzenine yöneliktir.
Mevcut dönüştürücüler, keyfî ONNX grafiklerini kabul eden genel bir giriş noktası sağlamaz. OpenNMT, Fairseq ve Hugging Face Transformers ekosistemlerindeki belirli model aileleri için mimariye duyarlı dönüştürücüler bulunur. Desteklenen aileler arasında BERT, T5, Llama, Whisper ve NLLB gibi seçilmiş Transformer modelleri yer alır; genel CNN görüntü modelleri bu kapsamda değildir.
CTranslate2 dönüşümü kabaca şu akışı izler:
kaynak framework modeli
↓
bilinen model sınıfını tanı
↓
beklenen parametreleri adlarıyla eşleştir
↓
CTranslate2 model belirtimini oluştur
↓
ağırlıkları hedef biçimde saklaBu yaklaşım, model ailesini ve çıkarım akışını önceden bilir. InsightFace yüz tanıma grafiği için yerleşik bir ArcFaceConverter, ResNetConverter veya genel ONNXConverter bulunmaz. Dönüştürücünün yalnızca ağırlıkları okuyup benzer katmanlara aktarması yeterli değildir; hedefte aynı grafiği temsil edecek model belirtimi ve yürütme sınıfı da bulunmalıdır.
Operatör, topoloji ve dönüşüm doğrulaması
Uyumluluğu yalnızca operatör adlarıyla değerlendirmek yanıltıcıdır. Bir çalışma zamanında matris çarpımı, aktivasyon, normalizasyon veya bazı convolution işlemlerinin bulunması, keyfî bir CNN grafiğinin yürütülebileceğini göstermez.
Operatör semantiği
Aynı adlı işlemler farklı veri düzenleri, eksenler, padding veya broadcasting kuralları kullanabilir. Bir convolution düğümünde örneğin aşağıdaki parametreler yer alabilir:
kernel_sizestridepaddingdilationgroupsinput_layoutweight_layout
Görüntü modellerinde yaygın giriş düzeni [N, C, H, W] biçimindedir. Kod tabanında bir Conv işleminin bulunması, ONNX Conv operatörünün bütün öznitelik birleşimlerinin desteklendiği anlamına gelmez.
Grafik topolojisi ve model belirtimi
InsightFace omurgaları yalnızca sıralı convolution katmanlarından oluşmaz. Residual bağlantılar, normalizasyon katmanları, aktivasyonlar ve şekil dönüşümleri içerir:
x ────────────────┐
│
Conv → BN → PReLU → Conv → BN
│
Add → çıktıHedef çalışma zamanı, düğümleri tek tek uygulayabilse dahi dallanma, birleşme ve tensor yaşam süresi kurallarını desteklemelidir. CTranslate2 ise serbest operatör grafiklerinden çok, desteklenen model türlerinin tanımlı yapılarıyla çalışır.
Bir yüz embedding omurgası için yerleşik model sınıfının şu soruları tanımlaması gerekir:
- Giriş görüntüsünün şekli nedir?
- Residual bloklar nasıl sıralanır?
- Feature map boyutları nerede küçültülür?
- Son embedding katmanı nasıl oluşturulur?
- Batch normalization parametreleri nasıl uygulanır?
- Çıktı normalize edilecek midir?
Dönüşümden sonra yüklenebilirlik de yeterli değildir. Sayısal eşdeğerlik sınanmalıdır:
yONNX = fONNX(x)
yhedef = fhedef(x)
max_abs_error = max |yONNX - yhedef|Embedding sistemlerinde yönsel sapma ayrıca önemlidir:
cosine_drift =
1 - cosine_similarity(yONNX, yhedef)Yüz doğrulama kararları cosine similarity eşiğine yakın örneklerde veriliyorsa küçük sayısal farklar kabul-ret sonucunu değiştirebilir. Dönüşümün çalışması, biyometrik karar davranışının korunduğu anlamına gelmez.
Uygun çıkarım motoru ve embedding sözleşmesi
ArcFace tabanlı ONNX yüz embedding modeli için doğal başlangıç noktası ONNX Runtime'dır. Model biçimini değiştirmeden aynı API altında CPU, CUDA, TensorRT ve OpenVINO gibi Execution Provider seçenekleri kullanılabilir.
NVIDIA GPU üzerinde sabit giriş şekli ve yüksek batch yükünde TensorRT ayrıca değerlendirilebilir. Intel CPU, iGPU veya NPU hedeflerinde OpenVINO modeli doğrudan yükleyebilir ya da kendi model biçimine önceden dönüştürebilir. ARM tabanlı edge cihazlarda ONNX Runtime'ın uygun CPU sağlayıcıları veya mobil odaklı ncnn gibi çalışma zamanları karşılaştırılabilir. ncnn, ONNX modellerinin pnnx aracılığıyla kendi model biçimine dönüştürülmesine yönelik bir yol sunar.
Motor seçimi tek görüntü çıkarım süresine göre yapılmamalıdır. Değerlendirmede aşağıdaki metrikler ölçülmelidir:
- Tek istek gecikmesi
- Sürdürülebilir throughput
- Batch ölçeklenmesi
- p95 ve p99 gecikmesi
- Model yükleme süresi
- Çalışma zamanı bellek tüketimi
- Host-device kopya maliyeti
- Çoklu oturum davranışı
- Precision değişiminde embedding sapması
Yüz tanıma hattındaki toplam gecikme yalnızca embedding modelinden oluşmaz:
Ttoplam =
Tdecode +
Tdetect +
Talign +
Tcopy +
Tembedding +
TsearchEmbedding çıkarımındaki hızlanma, yüz tespiti veya vektör arama aşaması baskınsa toplam sistemde sınırlı etki yaratabilir.
Ayrıca iki modelin 512 elemanlı vektör üretmesi, bu vektörlerin aynı embedding uzayında bulunduğunu göstermez:
f₁(x) ∈ R^512
f₂(x) ∈ R^512Bu ifadelerden f₁(x) ≈ f₂(x) sonucu çıkarılamaz. Embedding uzayı; eğitim verisi, omurga, kayıp fonksiyonu, ön işleme, hizalama, renk kanal sırası ve normalizasyon kurallarıyla birlikte oluşur.
Çalışma zamanı değiştirilirken aşağıdaki sözleşme korunmalıdır:
- Giriş boyutu
- RGB/BGR sırası
- Piksel ölçekleme
- Ortalama ve standart sapma
- Yüz hizalama geometrisi
- Çıktı tensor adı ve sırası
- L2 normalizasyonu
- Benzerlik ölçütü
- Karar eşiği
INT8 nicemlemede yalnızca model boyutu veya çıkarım süresi değerlendirilmemelidir. Benzerlik skorları, karar eşikleri ve nearest-neighbor aramasındaki sıralama davranışı da doğrulanmalıdır.
CTranslate2’ye CNN yüz embedding desteği eklemek kaynak kod düzeyinde teorik olarak mümkündür; ancak bunun için yeni model belirtimi, dönüştürücü, CPU ve GPU kernel yolları, bellek planlaması, API genişletmeleri ve farklı omurgalar için eşdeğerlik testleri gerekir. Bu maliyet, CNN ve ONNX grafikleri için zaten optimize edilmiş bir motorun kullanılmasından büyük olasılıkla daha yüksektir.
ONNX genel hesaplama grafiğini, tensorleri ve operatörleri taşırken CTranslate2 modeli desteklenen model ailesini, bilinen çıkarım akışını ve optimize ağırlık düzenini temsil eder. Bu soyutlama düzeyleri arasında genel bir çevirmen bulunmadığı sürece .onnx uzantısı CTranslate2 uyumluluğu sağlamaz.