Czy AI naprawi rozdarcia i rysy? Liczby o wykonalności
Tak, a ten wpis dokumentuje pomiary, które zaprowadziły tę funkcję od nadziei na mapie drogowej do wdrożenia: co potok robił wcześniej z uszkodzonymi skanami, liczby z dowodu koncepcji, które uzasadniły zbudowanie tego etapu, oraz wyniki od początku do końca wersji, która działa dziś za polem wyboru „Napraw rysy i rozdarcia”.
Co potok robił wcześniej z podartym zdjęciem
Renowacja nie miała etapu inpaintingu: niczego, co mogłoby usunąć obszar i zsyntetyzować zastępstwo. Sprawdzone na mocno popękanym portrecie: wewnątrz obszarów twarzy uszkodzenia znikały przypadkiem (model twarzy syntetyzuje na nowo cały wycinek), a potem nagle wracały na granicy wtapiania, pęknięcie urywające się na policzku, co może wyglądać gorzej niż brak naprawy. Wszędzie indziej uszkodzenia były uwydatniane: przebieg wyostrzania uwyraźniał krawędzie rozdarć, jakby były detalem, a koloryzator barwił białe linie pęknięć jak treść sceny.
Dowód koncepcji
Obiekt testowy: czarno-biały portret 510×817 z siatką pęknięć emulsji. Sprzęt: celowo słaby sandbox wyłącznie na CPU, więc każdy czas to najgorszy przypadek. Dwa etapy: sieć wykrywania rys (z otwartoźródłowego projektu Microsoftu „Bringing Old Photos Back to Life”[2]) tworzy maskę uszkodzeń; model inpaintingu LaMa[1] wypełnia potem tylko zamaskowane obszary w kafelkach 512 px, oba na dostawcy CPU ONNX Runtime[3].
Maska uszkodzeń objęła 18,4% pikseli tego mocno uszkodzonego zdjęcia. Wynik jakościowy: siatka pęknięć została usunięta z twarzy, ubrania i tła, bez szkodliwych fałszywych wykryć: koronkowy obrus, klasyczna pułapka na detektory rys, przetrwał.
Co wdrożono, zmierzone od początku do końca
Produkcyjny etap działa jako pierwszy w kolejności renowacji, więc pęknięcia nigdy nie są kolorowane ani wyostrzane przed usunięciem. Wykrywanie działa przy krótszym boku 256 z dylatacją maski 2 px; inpainting jest łatowy w natywnej rozdzielczości, z limitem 12 łat na zdjęcie, przy czym wygrywają największe obszary uszkodzeń. Dwa niezmienniki są wymuszane, a nie zakładane: zapisywane są wyłącznie zamaskowane piksele (każdy nieuszkodzony piksel wyjścia jest bajt w bajt identyczny z wejściem), a bramka pokrycia pomija cały etap, gdy wykryty obszar jest poniżej 0,5% (nie ma czego naprawiać) lub powyżej 35% (to raczej błędnie wykryta faktura niż uszkodzenie).
Późniejsza rewizja produkcyjna dodała do automatycznej bramki drugi, ostrzejszy dyskryminator: kształt. Samo pokrycie nie odróżni włoskowatego rozdarcia od szumu detektora, ale ich geometria różni się o rząd wielkości: rozdarcie jest długie i cienkie, szum to kleksy. Dla każdej spójnej składowej maski, o ramce bw×bh i polu w pikselach A, liczymy
Punkty kalibracyjne ze stanowiska testowego: czysta grafika marketingowa uzyskuje maksymalne wydłużenie 2,4; skan z siatką pęknięć 29,8. Próg 6 leży wyraźnie z dala od obu, a każdy produkcyjny przebieg loguje swoje pokrycie i wydłużenie, więc bramka jest wciąż strojona na prawdziwym ruchu, a nie na dwóch zdjęciach.
Dwie kontrole: z odznaczonym polem wyboru etap nigdy nie ruszył, a czasy dokładnie pokryły się z poprzednim potokiem. Na niemal czystym zdjęciu detektor oznaczył tylko naprawdę uszkodzone 0,81% pikseli (resztki pęknięć w rogach i kurz), z zerem fałszywych wykryć na twarzach, koronce czy fakturze.
Czemu jest opcjonalna, a nie domyślna
Znanym trybem awarii automatycznej naprawy uszkodzeń są fałszywe wykrycia: detektor, który oznaczy druty ogrodzenia, kosmyki włosów czy koronkę jako rysy, wymaże prawdziwą treść, a inpainter bardzo dobrze wymazuje. Dwa zdjęcia kontrolne to dowód, nie test porównawczy. Etap trafia więc do produkcji jako jawne pole wyboru, a każdy przebieg loguje swoje pokrycie uszkodzeń, żeby progi dało się dostroić na prawdziwym ruchu przed jakimkolwiek awansem na ustawienie domyślne. Odrzuciliśmy też skrót w postaci wysyłania zdjęć do zewnętrznego generatywnego API obrazów: to narzędzie przetwarza zdjęcia przejściowo na naszej własnej infrastrukturze, a pełne generatywne przerysowanie dryfuje tożsamość; celem jest naprawa uszkodzeń, a nie przemalowanie Twojego krewnego.
Źródła
- Suvorov, R., Logacheva, E., Mashikhin, A., et al. (2022). Resolution-robust Large Mask Inpainting with Fourier Convolutions (LaMa). WACV. arXiv:2109.07161. arxiv.org
- Wan, Z., Zhang, B., Chen, D., et al. (2020). Bringing Old Photos Back to Life (the scratch-detection recipe). CVPR. arXiv:2004.09484. arxiv.org
- ONNX Runtime: the inference engine both our server (CPU) and in-browser (WebGPU/WASM) engines run on. onnxruntime.ai