Yapay zekayla restore edilen yüzler neden video oyunu karakterine benzer
Yüz restorasyon modelleri, hasarlı bir fotoğraftaki yüzü eski bir video oyunundan çıkmış bir render gibi gösterebilir: plastik cilt, boyanmış gözler, keskin ama tam olarak o kişi olmayan bir yüz. Nedenleri ayırmak için 11 kamu malı fotoğraf üzerinde sekiz render varyantını kıyasladık: üç neden var, birbirinden ayrılabiliyorlar ve hiçbiri “daha iyi bir model”le çözülmüyor. Bu revizyon, orijinal kıyaslamada eksik olanı ekliyor: sayılar. Seçilen render'ı bir yüz tanıma gömmesiyle[4] yeniden ölçmek, gözle yapılan seçimi nicel olarak doğruluyor (“doğal” render'ın her ayarı ölçülebilir kimlik kazandırıyor ve restorasyonun kimlik vergisini yarıya indiriyor) ve sadakat düğmesinin tam taraması, her eğri 1.0'a doğru monoton olsa bile neden 0.7'de yayınlandığını gösteriyor.
Bu nottaki her sayı üretim hattının kodunda ölçüldü: aynı modeller, aynı matematik. Görüntü başına ham kayıtlar: e2v2_face.json · e2_face.json.
Önce
Sonra1 · Üç neden
1. Tam değiştirme. Standart hat, modelin çıktısını orijinal yüzün üzerine %100 opaklıkla yapıştırır; böylece restore edilen her yüz tamamen model tarafından çizilmiş olur. Fotoğrafın greni, kâğıt dokusu ve lens karakteri her yüzün çevresindeki görünmez bir oval sınırda sona erer.
2. Renk kayması. Yüz modeli fotoğrafın değil, kendi rengini üretir. Kıyaslamamızda ölçüldüğü üzere, 1850'lerden bir ambrotipte mavi gözler uydurdu ve 19. yüzyıldan Siyah bir öznenin stüdyo portresinde ten rengini açtı; bu, modern ve ağırlıklı olarak açık tenli fotoğraf derlemleriyle eğitilmiş yüz modellerinin bilinen bir hata biçimidir[2]. Modelin kromasını koruyan her hat onun önyargılarını da devralır.
3. Küçük yüzler halüsinasyondur. Kabaca 100 px'ten az yer kaplayan bir yüz, 512 px'lik yüz modeline 5–13× bilineer büyütme olarak, yani bir leke olarak ulaşır. Model de gerçek yüzü kurtarmak yerine makul bir yüz uydurur. Bu bir model sınırı değil, fizik sınırıdır: 40 px'lik bir yüz yumuşak-ama-insan yapılabilir, asla keskin-ve-sadık değil.
2 · Bir yüz onarımının anatomisi
Ayarların nerede yaşadığını görmek için tek bir yüzü hat boyunca izleyelim. Tespit (SCRFD, makullük kapısıyla) beş nirengi noktası verir. Hizalama, tespit edilen göz ve ağız noktalarını pi sabit FFHQ şablonuna[5] qi eşleyen en küçük kareler benzerlik dönüşümünü (ölçek s, döndürme θ, öteleme t) çözer:
böylece her yüz ağa 512×512 boyutunda, gözler ve ağız kanonik konumda girer. Model, varsayılan olarak CodeFormer[1], pikselleri regrese etmek yerine öğrenilmiş bir kod defterinde yüzleri arayarak restore eder ve önseli (0) ile senin girişin (1) arasında yön veren bir sadakat ağırlığı w ∈ [0, 1] sunar; sonuçta restore edilmiş bir kırpma üretir. Sonra bu notun konusu olan kısım gelir: geri yapıştırma. Klasik tarif, o kırpmayı tam opaklıkla ve modelin kendi renkleriyle birleştirir. Bizimki onu radyal bir yumuşatma m altında yerine çevirir ve her pikseli şöyle birleştirir:
blend = 0.75 ile ve faceL⊕photoab, modelin yalnızca lüminans (Lab L) katması, fotoğrafın ise kendi kromasını koruması anlamına gelir; bu, yalnızca kroma katıp fotoğrafın lüminansını koruyan renklendiricimizin tam aynadaki hâlidir. Küçük yüzler restorasyondan önce kaynak alanlarında özel bir ×4 süper çözünürlük geçişinden geçer; böylece model bilineer bir leke yerine kurtarılmış ayrıntı görür.
3 · H varyantını seçen görsel kıyaslama
Sekiz varyant, her biri derlem üzerinde tam bir hat çalıştırması; sadakat ağırlığı, geri yapıştırma opaklığı, renk kaynağı ve küçük yüz SR'si değiştirildi. Çıktılar orijinallerle yan yana, %100 yakınlaştırmada karşılaştırıldı:
| Varyant | Ağırlık | Geri yapıştırma | Renk kaynağı | Küçük yüz SR |
|---|---|---|---|---|
| A (o zamanki) | 0.70 | %100 | model | – |
| B | 0.90 | %100 | model | – |
| C | 0.70 | %70 | model | – |
| D | 0.70 | %100 | fotoğraf | – |
| E | 0.70 | %75 | fotoğraf | – |
| F | 0.85 | %75 | fotoğraf | – |
| G | 0.70 | %50 | fotoğraf | – |
| H (seçilen) | 0.70 | %75 | fotoğraf | evet |
H varsayılan render olarak yayınlandı. Yalnızca lüminans geri yapıştırma fotoğraf başına yarım saniyeden az ekler; küçük yüz geçişi yalnızca uygun her yüz için bir-iki saniye ekler. Orijinal sınırlamalar bölümü bariz zayıflığı kabul ediyordu: seçim 35 yüz üzerinde yan yana insan yargısıyla yapılmıştı, bir metrikle değil. Biz de metrik kıyaslamayı kurduk.
4 · Yeni: ablasyon, sayılarla
Tek bir sayı her şeyi çerçeveliyor: bozulmuş girişin kendisi orijinale karşı 0.950 kimlik puanı alıyor. ArcFace ağır artırmayla eğitildi, bu yüzden bulanıklık ve gürültünün içini görür; dolayısıyla restorasyon keskin olduğu için puan almaz; yalnızca fotoğraftaki kişiyi değiştirdiğinde ceza alır. Her render bu kimlik vergisinin bir kısmını öder. Soru, ne kadar:
| Render (hepsi w = 0.7'de) | PSNR (dB) | ArcFace kimlik | kimlik vergisi | Tenengrad oranı |
|---|---|---|---|---|
| Bozulmuş giriş (taban) | 27.32 | 0.950 | – | 0.217 |
| Classic v2 (100% paste, model colour) | 26.68 | 0.868 | −0.082 | 0.373 |
| + luma-only (photo keeps its chroma) | 26.72 | 0.882 | −0.068 | 0.376 |
| + 75% blend (grain shows through) | 27.06 | 0.901 | −0.049 | 0.304 |
| Natural (shipped: both + small-face SR) | 27.09 | 0.909 | −0.041 | 0.307 |
Metrik kıyaslama gözlerle ayar ayar uyuşuyor. Fotoğrafın kromasını korumak +0.014 kimlik kazandırıyor (renk kayması gerçekti ve ölçülebilirdi). %75 harman bir +0.019 daha ve PSNR'nin çoğunu kazandırıyor: gerçek yüzün dörtte birinin görünmesine izin vermek, yüz modelinin tüm sadakat ayarı kadar değerli. Birlikte kimlik vergisini −0.082'den −0.041'e yarılıyorlar ve girişin keskinliğinin hâlâ kabaca 1.4 katındalar. Tek dürüst maliyet: klasik render Tenengrad'a göre “daha keskin” (0.373 ve 0.307); bu keskinliğin bir kısmını fotoğrafa ait olmayan dokuya harcıyor. Bu, render'a taşınmış algı–bozulma ödünleşimidir[6] ve biz onu kimliğe harcıyoruz.


5 · Sadakat düğmesi, baştan sona tarandı
CodeFormer'ın ağırlığı w, kod defterinin önseli (0) ile senin girişine bağlılık (1) arasında yön verir[1]. Doğal render altında on bir adımda taradık:
İçeride bir optimumu olan ve 0.7'yi “diz noktası” olarak haklı çıkaracak bir ödünleşim eğrisi bekleyerek girdik. Veri reddetti: sayılara göre w = 1.0 baskın, her şiddette:
Peki neden 1.0 yerine 0.7 yayınlıyoruz? Çünkü metrikler gerekli ama yeterli değil. ArcFace kimi ölçer; yaşa ve dokuya neredeyse kördür; onu bulanıklığa dayanıklı kılan eğitim, pürüzsüzleştirmeye de hoşgörülü kılar. Kıyaslamanın orijinal gözlemi kendi kanıtıyla ayakta duruyor: modelin alışıldık 0.5 değerinde Göçmen Anne'de kaz ayakları gözle görülür biçimde yumuşuyor: Florence Owens Thompson 32 yaşındaydı ve Buhran'ı yüzünde taşıyordu; önsel ise taşımamasını tercih ediyor. w = 1.0'da kod defteri harap bir girişe o kadar bağlanıyor ki sıkıştırma çöpü hayatta kalmaya başlıyor. 0.7 metrik değerin neredeyse tamamını korurken (0.909 ve 0.932) resimler yaşlarını koruyor. Aşağıdaki s8 paneli de hasarlı miras fotoğraflarında w'yi asla 0'a yaklaştırmamanın gerekçesi:

6 · Diğer modeller, aynı render
| Yüz modeli | PSNR (dB) | ArcFace kimlik | Tenengrad oranı | ms / yüz* |
|---|---|---|---|---|
| CodeFormer (w = 0.7, default) | 27.09 | 0.909 | 0.307 | 7200 |
| GFPGAN 1.4 | 27.13 | 0.910 | 0.328 | 6046 |
| GPEN-BFR-256 | 26.68 | 0.927 | 0.322 | 2633 |
*2 vCPU'lu kıyaslama makinesinde medyan tam geçiş duvar saati süresi (tespit dahil). Doğal render altında üç model[1][2][3] birbirinin 0.02 kimlik yakınına yakınsıyor: artık baskın terim model değil, render; bu başlı başına bir bulgu: “video oyunu” görünümü hiçbir zaman hangi ağı çalıştırdığınla ilgili değildi. CodeFormer, ağır hasardaki sağlamlığı ve bu notun az önce iki bölüm harcadığı düğme için varsayılan olmayı sürdürüyor; GPEN yüz başına 2.6 s ile hız tercihi olmaya devam ediyor.
7 · Sınırlamalar
- Görsel kıyaslama 35 yüz; metrik kıyaslama 4 portre × 120 çalıştırma. Monoton şekiller her portrede tek tek geçerliydi; dayandığımız iddia bu; mutlak değerler özneye ve taramaya göre kayacaktır.
- ArcFace tek bir hakem, standart olanı, taban olarak yararlandığımız bulanıklık toleransı uyarısıyla. Binlerce yüz üzerinde bir insan algı çalışması eksik olan enstrüman ve yaş çizgisi gözlemi gömmelere değil, gözlere dayanıyor.
- Sentetik bozulma. Gerçek ayakkabı kutusu hasarı, bozulma yığınının modellemediği çizikler ve gümüşlenme ekler; hasar aşaması bunları ayrıca ele alır.
- Küçük yüz sınırı geçerli: kabaca 40 px yüzün altında hiçbir ayar sadık, keskin bir yüz üretmez ve dürüst çıktı yumuşak olandır.
Kaynaklar
- Zhou, S., Chan, K. C. K., Li, C., & Loy, C. C. (2022). Towards Robust Blind Face Restoration with Codebook Lookup Transformer. NeurIPS 35. arXiv:2206.11253. arxiv.org
- Wang, X., Li, Y., Zhang, H., & Shan, Y. (2021). Towards Real-World Blind Face Restoration with Generative Facial Prior. CVPR. arXiv:2101.04061. arxiv.org
- Yang, T., Ren, P., Xie, X., & Zhang, L. (2021). GAN Prior Embedded Network for Blind Face Restoration in the Wild. CVPR. arXiv:2105.06070. arxiv.org
- Deng, J., Guo, J., Xue, N., & Zafeiriou, S. (2019). ArcFace: Additive Angular Margin Loss for Deep Face Recognition. CVPR. arXiv:1801.07698. arxiv.org
- Karras, T., Laine, S., & Aila, T. (2019). A Style-Based Generator Architecture for Generative Adversarial Networks (the FFHQ alignment template). CVPR. arXiv:1812.04948. arxiv.org
- Blau, Y., & Michaeli, T. (2018). The Perception-Distortion Tradeoff. CVPR. arXiv:1711.06077. arxiv.org
- FaceFusion (open-source face processing platform): the reference implementation our SCRFD decode and model preprocessing are ported from, 1:1. github.com
- Lange, D. (1936). “Migrant Mother” (Destitute pea pickers in California), Farm Security Administration. Public domain, via Wikimedia Commons. commons.wikimedia.org
- Gardner, A. (1863). Abraham Lincoln, portrait O-77. Public domain, via Wikimedia Commons. commons.wikimedia.org
- ONNX Runtime: the inference engine both our server (CPU) and in-browser (WebGPU/WASM) engines run on. onnxruntime.ai