Blog / Mühendislik

Saydam PNG'ler yapay zeka büyütücüleri bozar: koyu hale hatası

· hata incelemesi, düzeltme ölçülmüş · konu: üretimdeki ×4 hattı

Saydamlık içeren bir PNG'yi (kesilmiş bir fotoğraf, bir çıkartma dışa aktarımı) neredeyse herhangi bir yapay zeka büyütücüsüne ver, belirli bir kusur ortaya çıkar: her saydam kenardan özneye doğru birkaç piksel sızan bir koyu hale ve arkasında soluk, parlak bir aşım halkası. Koyu önizlemelerde saklanır, beyaz sayfalarda göze batar. Bunu kendi hattımızda yeniden ürettik, tam şeklini ölçtük (−94 luma'lık, üç model pikseli genişliğinde bir hendek), web platformunun önçarpılmış alfa gidiş dönüşüne kadar izini sürdük ve yayınladığımız düzeltmeyi ölçtük: model daha çalışmadan hatanın %98'ini kaldıran O(n) bir taşkın doldurma.

−93.9luma hatası, ilk piksel halkasınaif yol ve temiz referans
≈3 pxmodel ölçeğinde hendek genişliğiardından +17'lik bir aşım halkası
63×düzeltmeyle hata azalması−62.9 → 1.1 ortalama, 0–3 px bandı
O(n)düzeltmenin maliyetitek BFS geçişi, fazladan çıkarım yok

Bu nottaki her sayı üretim hattının kodunda ölçüldü: aynı modeller, aynı matematik. Görüntü başına ham kayıtlar: e3_alpha.json.

1 · Siyah nereden geliyor

Web'in 2B canvas'ı pikselleri önçarpılmış saklar: (r, g, b, α) değil, (rα, gα, bα, α). Birleştirme bu formata bayılır (Porter–Duff operatörleri[1] tek çarp-topla işlemine dönüşür), ama tam olarak tek bir yerde kayıplıdır. Pikselleri geri okumak rengi α'ya bölmek demektir:

r = ⌊ rα / α ⌉, undefined at α = 0(1)

α = 0'da bu 0/0'dır ve platformun yanıtı[2], kurtarılacak hiçbir şeyin kalmadığıdır: renk, canvas'a dokunduğu anda sıfırla çarpılmıştır. getImageData, tamamen saydam her pikselin altında RGB (0, 0, 0) döndürür. Kesilmiş görüntünün saydam alanı sessizce saf siyah bir göle dönüşmüştür.

Bir insan gölü asla görmez: alfa onu gizler. Bir süper çözünürlük ağı insan değildir: üç kanal RGB tüketir ve alfa tüketmez, dolayısıyla vantasiyaha gömülü bir fotoğraf görür ve sınıra yakın her çıktı pikseli, göle dalan bir alıcı alandan hesaplanır. Siyah yerinde durmaz; evrişim yığını boyunca içeri doğru yayılır[3].

2 · Haleyi ölçmek

naif (canvas RGB=0)alfa taşırma (bizimki)
-100-75-50-2502513581216Özneye doğru L1 uzaklığı (px, model ölçeği)Referansa karşı Δ lumakusursuz
Şekil 1. Hale, profili çıkarılmış. Naif yol (mor): öznenin içindeki ilk piksel halkasında −94 luma'lık bir hendek, 2 px'te −90, 3 px'te −54, ardından 5 px'te +17'lik bir aşım halkası, ~13 px'e kadar sıfıra sönümleniyor; sonlu bir alıcı alan boyunca koyu bulaşma, GAN tarafından bir kenara keskinleştirilmiş. Üretim yolu (yeşil): hiçbir zaman 1.5 luma seviyesinden kötü değil. Uzaklıklar model ölçeğinde; çıktı pikselleri için ×4.
Üç panel: dama tahtası üzerinde gösterilen kesilmiş giriş, ovalin çevresinde koyu bir kenarla naif büyütme ve temiz alfa taşırılmış büyütme
Şekil 2. Saydamlıklı giriş (solda), naif yol (ortada), üretim yolu (sağda), açık bir zemin üzerine birleştirilmiş. Orta panelin kenarı küçük boyutta hafif bir “kirli kenar” gibi okunuyor; bu hatanın bu kadar sık yayınlanmasının nedeni tam olarak bu: bir kullanıcı çıkartmayı açık bir arka plana koyana kadar saklanıyor.

Gerçekten sezgiye aykırı bir ölçüm: modelin saydam bölgenin içinde çöp halüsinasyonu yapmasını, “boşluğu iyileştirmesini” bekliyorduk. Yapmıyor. Düz siyah giriyor, düz siyah çıkıyor (gradyan enerjisi 0.1). Zarar, modelin boşlukta uydurduğu şey değil; boşluğun sınırın öte yanındaki özneye yaptığı şey. Bu önemli, çünkü çıktıyı maskelemenin seni kurtaramayacağı anlamına geliyor: hasarlı pikseller görünür bölgenin içinde, α > 0'ın altında.

3 · Düzeltme: boşluğu makul renkle doldur

Model α = 0 altında RGB görmek zorundaysa, bunun özneyi sürdüren bir RGB olmasını sağla. Çıkarımdan önce alfa taşırma çalıştırıyoruz: saydam olmayan her pikselden başlayan çok kaynaklı bir genişlik öncelikli taşkın; her saydam piksel, zaten renklendirilmiş 4-komşularının ortalama rengini alır:

c(p) = mean{ c(q) : q ∈ N₄(p), q colored }, p in BFS order(2)

Kuyruğu sınır halkasıyla tohumlamak ve FIFO işlemek, kuyruktan çıkan her pikselin en az bir renkli komşusu olmasını garanti eder (onu kuyruğa kim eklediyse önce bitmiştir); böylece tek bir O(n) geçişi tüm boşluğu renklendirir: sınırsız uzaklık, kapalı delikler dahil. Alfa baytlarına asla dokunulmaz; yarı saydam pikseller kendi renklerini korur. Model artık bir uçurum yerine pürüzsüz bir devam görür ve alfa (ayrı büyütülmüş) çıkışta yeniden uygulanır. Ölçülen etki: 0–3 px bandındaki hata -62.9'dan 1.1 luma seviyesine düşüyor, 63× azalma, ölçülebilir hiçbir çalışma süresi maliyeti olmadan.

Naif ve taşırılmış yeniden yapımların kenar ayrıntısı, artı halenin alfa sınırına sarıldığını gösteren güçlendirilmiş bir fark ısı haritası
Şekil 3. Kenar ayrıntısı: naif yol (solda), taşırılmış yol (ortada) ve sağda iki yeniden yapım arasındaki |fark|, ×8 güçlendirilmiş. Hale alfa sınırını izliyor, başka hiçbir şeyi değil; kenardan uzakta çıktılar birebir aynı, ki bu tam olarak düzeltmenin tasarlandığı gibi davranması.

4 · Bu senin görüntülerin için ne anlama geliyor

Bu siteyi kullanıyorsan: hiçbir şey; saydam PNG'ler bulut hattında da tarayıcı içi yedek motorda da yukarıdaki ölçülmüş yoldan geçer, çünkü ikisi aynı saf kütüphaneyi paylaşır. Görüntü araçları geliştiriyorsan: yalnızca RGB alan her modeli önçarpılmış sıfırlara alerjik say: çıkarımdan önce taşır (yukarıdaki taşkın bağımlılıksız ~30 satır) ya da düz bir renge matla ve matın yanlılığını kabul et. Ve birinin iyileştirici çıktısındaki gizemli bir koyu kenarı teşhis ediyorsan, artık parmak izini biliyorsun: birkaç piksel genişliğinde bir hendek, arkasında bir aşım halkası ve alfa sınırıyla kusursuz bir korelasyon. Akılda tutulacak üç sayı: −94, 3 px, 63×.

Kaynaklar

  1. Porter, T., & Duff, T. (1984). Compositing Digital Images. SIGGRAPH '84, Computer Graphics 18(3), 253–259. (The premultiplied-alpha compositing algebra.) dl.acm.org
  2. WHATWG HTML Living Standard, the 2D canvas element: premultiplied backing stores and the lossy getImageData round-trip for non-opaque pixels. html.spec.whatwg.org
  3. Wang, X., Xie, L., Dong, C., & Shan, Y. (2021). Real-ESRGAN: Training Real-World Blind Super-Resolution with Pure Synthetic Data. ICCV Workshops. arXiv:2107.10833. arxiv.org
  4. Lange, D. (1936). “Migrant Mother” (Destitute pea pickers in California), Farm Security Administration. Public domain, via Wikimedia Commons. commons.wikimedia.org
  5. ONNX Runtime: the inference engine both our server (CPU) and in-browser (WebGPU/WASM) engines run on. onnxruntime.ai