ब्लॉग / इंजीनियरिंग

क्या AI फटन और खरोंचें ठीक कर सकता है? व्यवहार्यता के आँकड़े

· प्रयोग का लेख · प्रूफ ऑफ कॉन्सेप्ट, फिर शिप हुआ ऑप्ट-इन बीटा

हाँ, और यह पोस्ट वे माप दर्ज करती है जो इसे रोडमैप की उम्मीद से शिप होने वाले फीचर तक ले गए: पाइपलाइन खराब स्कैन के साथ पहले क्या करती थी, प्रूफ-ऑफ-कॉन्सेप्ट के वे आँकड़े जिन्होंने यह स्टेज बनाना सही ठहराया, और उस वर्शन के शुरू से आखिर तक के नतीजे जो अब “खरोंचें और फटन ठीक करें” चेकबॉक्स के पीछे शिप होता है।

पाइपलाइन पहले फटी फोटो के साथ क्या करती थी

रिस्टोरेशन में कोई इनपेंटिंग स्टेज नहीं था: ऐसा कुछ नहीं जो किसी हिस्से को हटाकर उसकी जगह कुछ गढ़ सके। बुरी तरह दरारों वाले एक पोर्ट्रेट पर परखा गया: चेहरे के हिस्सों के अंदर नुकसान संयोग से गायब हो जाता था (फेस मॉडल पूरा क्रॉप फिर से गढ़ता है) और फिर ब्लेंड की सीमा पर अचानक वापस आ जाता था, एक दरार जो गाल पर आकर रुक जाती है, जो बिना मरम्मत से भी बुरी लग सकती है। बाकी हर जगह नुकसान एन्हांस होता था: शार्पनिंग पास फटन के किनारों को डिटेल समझकर तीखा कर देता था, और कलराइज़र सफेद दरार की लकीरों को दृश्य का हिस्सा समझकर रंग देता था।

प्रूफ ऑफ कॉन्सेप्ट

टेस्ट विषय: इमल्शन की दरारों के जाल वाला 510×817 का ब्लैक एंड व्हाइट पोर्ट्रेट। हार्डवेयर: जानबूझकर कमज़ोर, सिर्फ CPU वाला सैंडबॉक्स, इसलिए हर टाइमिंग सबसे बुरी स्थिति है। दो स्टेज: एक स्क्रैच-डिटेक्शन नेटवर्क (Microsoft के ओपन-सोर्स “Bringing Old Photos Back to Life” प्रोजेक्ट[2] से) एक डैमेज मास्क बनाता है; फिर LaMa इनपेंटिंग मॉडल[1] सिर्फ मास्क किए हिस्सों को 512 px टाइलों में भरता है, दोनों ONNX Runtime के CPU प्रोवाइडर[3] पर।

चित्र 1. दरारों के जाल वाले पोर्ट्रेट पर प्रूफ-ऑफ-कॉन्सेप्ट की माप (सिर्फ CPU वाला सैंडबॉक्स, सबसे बुरी स्थिति)। मॉडल लोड गर्म इंस्टेंस पर एक बार की लागत है।

इस बुरी तरह खराब फोटो पर डैमेज मास्क ने 18.4% पिक्सेल ढके। क्वालिटी का नतीजा: दरारों का जाल चेहरे, कपड़ों और बैकग्राउंड से हट गया, बिना किसी नुकसानदेह फ़ॉल्स पॉज़िटिव के: लेस का मेज़पोश, जो स्क्रैच डिटेक्टरों का क्लासिक जाल है, बचा रहा।

जो शिप हुआ, शुरू से आखिर तक मापा हुआ

प्रोडक्शन स्टेज रिस्टोर क्रम में सबसे पहले चलता है, इसलिए दरारें हटने से पहले कभी रंगी या शार्प नहीं होतीं। डिटेक्शन छोटी साइड 256 पर 2 px मास्क डाइलेशन के साथ चलता है; इनपेंटिंग नेटिव रिज़ॉल्यूशन पर पैच-दर-पैच होती है, प्रति फोटो 12 पैच तक सीमित, जिसमें सबसे बड़े नुकसान वाले हिस्से जीतते हैं। दो इनवेरिएंट उम्मीद नहीं, ज़बरदस्ती लागू हैं: सिर्फ मास्क किए पिक्सेल ही कभी लिखे जाते हैं (आउटपुट का हर बिना नुकसान वाला पिक्सेल इनपुट से बाइट-दर-बाइट एक जैसा है) और एक कवरेज गेट पूरी स्टेज को तब छोड़ देता है जब पहचाना गया क्षेत्र 0.5% से कम हो (ठीक करने लायक कुछ नहीं) या 35% से ज़्यादा (नुकसान से ज़्यादा गलत पहचानी गई बनावट की संभावना)।

बाद के एक प्रोडक्शन संशोधन ने ऑटो गेट में दूसरा, ज़्यादा तीखा विभेदक जोड़ा: आकार। अकेला कवरेज बारीक फटन को डिटेक्टर के शोर से अलग नहीं कर सकता, लेकिन उनकी ज्यामिति में दस गुने का फर्क है: फटन लंबी और पतली होती है, शोर धब्बे होते हैं। मास्क के हर कनेक्टेड कॉम्पोनेंट के लिए, बाउंडिंग बॉक्स bw×bh और पिक्सेल क्षेत्रफल A के साथ, हम स्कोर करते हैं

elongation = (bw² + bh²) / A ,   auto-repair ⇔ 0.005 ≤ coverage ≤ 0.35 ∧ max elongation ≥ 6(1)

बेंच से कैलिब्रेशन बिंदु: एक साफ मार्केटिंग ग्राफिक अधिकतम इलॉन्गेशन 2.4 स्कोर करता है; दरारों के जाल वाला स्कैन 29.8। 6 का थ्रेशोल्ड दोनों से अच्छी तरह दूर है, और हर प्रोडक्शन रन अपना कवरेज और इलॉन्गेशन लॉग करता है ताकि गेट दो फोटो पर नहीं, असली ट्रैफिक पर ट्यून होता रहे।

नुकसान की मरम्मतडिटेक्ट → मास्क → इनपेंट
रंग भरनाअगर मोनोक्रोम हो
एन्हांसपूरी इमेज
चेहरेरिस्टोर और ब्लेंड
चित्र 2. डैमेज स्टेज चालू होने पर रिस्टोर क्रम। नुकसान की मरम्मत पहले चलती है ताकि कोई चीज़ दरारों को शार्प या रंगीन करे, उससे पहले वे हट जाएँ।
चित्र 3. चेकबॉक्स चालू रखकर टेस्ट फोटो पर शुरू से आखिर तक की गर्म टाइमिंग: कुल 20.2 s, जिसमें डैमेज स्टेज 7.9 s है (कोल्ड स्टार्ट: 35.7 s)। चेकबॉक्स बंद होने पर स्टेज कभी नहीं चलती और टाइमिंग पिछली पाइपलाइन से मेल खाती है।

दो कंट्रोल: चेकबॉक्स बंद होने पर स्टेज कभी नहीं चली और टाइमिंग पिछली पाइपलाइन से ठीक-ठीक मेल खाई। लगभग साफ एक फोटो पर डिटेक्टर ने सिर्फ सच में खराब 0.81% पिक्सेल (कोनों की बची हुई दरारें और धूल) फ्लैग किए, चेहरों, लेस या बनावट पर शून्य फ़ॉल्स पॉज़िटिव के साथ।

यह डिफ़ॉल्ट के बजाय ऑप्ट-इन क्यों है

अपने आप नुकसान की मरम्मत की जानी-पहचानी नाकामी फ़ॉल्स पॉज़िटिव हैं: जो डिटेक्टर बाड़ के तार, बालों की लटें या लेस को खरोंच समझ ले, वह असली सामग्री मिटा देगा, और इनपेंटर चीज़ें मिटाने में बहुत माहिर होता है। दो कंट्रोल फोटो सबूत हैं, बेंचमार्क नहीं। इसलिए यह स्टेज एक स्पष्ट चेकबॉक्स के रूप में शिप होती है, और हर रन अपना डैमेज-कवरेज आँकड़ा लॉग करता है ताकि डिफ़ॉल्ट बनाने से पहले थ्रेशोल्ड असली ट्रैफिक पर ट्यून किए जा सकें। हमने फोटो किसी बाहरी जेनरेटिव इमेज API को भेजने का शॉर्टकट भी खारिज किया: यह टूल फोटो को अपने ही इन्फ्रास्ट्रक्चर पर क्षणिक रूप से प्रोसेस करता है, और पूरा जेनरेटिव री-रेंडर आइडेंटिटी बहका देता है; लक्ष्य नुकसान ठीक करना है, आपके रिश्तेदार को फिर से पेंट करना नहीं।

संदर्भ

  1. Suvorov, R., Logacheva, E., Mashikhin, A., et al. (2022). Resolution-robust Large Mask Inpainting with Fourier Convolutions (LaMa). WACV. arXiv:2109.07161. arxiv.org
  2. 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
  3. ONNX Runtime: the inference engine both our server (CPU) and in-browser (WebGPU/WASM) engines run on. onnxruntime.ai