इस लेख में, मैं आपको बताऊंगा कि हम उपयोगकर्ता वाहन सत्यापन प्रक्रिया को कैसे स्वचालित करते हैं। मैं आपके साथ उन घटकों को साझा करूंगा जिनका हम उपयोग करते हैं, और हम प्रक्रिया को कैसे व्यवस्थित करते हैं।
इनड्राइव में, हम बड़ी मात्रा में दृश्य सामग्री का उपयोग करते हैं। हम अलग-अलग मानसिकता वाले विभिन्न क्षेत्रों की एक विस्तृत श्रृंखला में मौजूद हैं जहां विभिन्न दस्तावेज़ों का प्रचुर मात्रा में उपयोग किया जाता है: पासपोर्ट, प्रमाण पत्र और वाहन दस्तावेज़।
इसके अलावा, निपटने के लिए स्वयं ड्राइवर और उनके वाहन भी हैं।
जब हमारे उपयोगकर्ताओं के लिए यात्रा आराम और सेवा की बेहतर गुणवत्ता के बारे में बात की जाती है, तो सुरक्षा और अप्रत्याशित को खत्म करना अत्यंत आवश्यक है। उदाहरण के लिए, जब ऊपर खींचने वाली कार वह नहीं है जिसे आपने बुक किया था।
आपको पता चलेगा कि हम इनड्राइव में वर्तमान में नियमित वाहन सत्यापन कैसे संभालते हैं। एक बार यह हो जाने के बाद, हमारे मॉडरेटर मैन्युअल रूप से पहले और बाद की तस्वीरों की जांच करते हैं। बेशक, सत्यापन प्रक्रिया में अन्य चीजें भी शामिल हैं, लेकिन यहां हम केवल इसी पहलू पर ध्यान केंद्रित करेंगे।
वर्तमान दृष्टिकोण के साथ समस्या यह है कि बुनियादी ढांचे को बढ़ाने की तुलना में मध्यस्थों की संख्या बढ़ाना अधिक कठिन है। खासकर जब बात उपयोगकर्ताओं के निजी डेटा से निपटने की आती है।
आइए समस्या को बहुत सरलता से रखें, जैसे कि एक बच्चे के लिए: हमारे पास एक कार की दो तस्वीरें हैं - क्या वे दोनों एक ही कार की हैं? जाहिर है, कोई भी इस प्रश्न को संभाल सकता है, लेकिन एक बार जब हम तुलना मानदंड जोड़ते हैं तो चीजें अधिक जटिल हो जाती हैं।
उदाहरण के लिए, यह सुनिश्चित करना कि यह सेल फ़ोन का स्क्रीनशॉट नहीं है या लाइसेंस प्लेट नंबर एकदम मेल खाते हैं।
विश्व स्तर पर, इस समस्या को कई तरीकों से हल किया जा सकता है: E2E मॉडल और इन मॉडलों के सेट का उपयोग करना।
E2E मॉडल का तात्पर्य एक बड़े मॉडल (संभवतः एक तंत्रिका नेटवर्क) को शामिल करना है जो छवियों की एक जोड़ी के आधार पर हमारे प्रश्नों का उत्तर दे सकता है, जैसे "क्या यह फोटो में वही वाहन है या नहीं?", "क्या लाइसेंस प्लेट नंबर मेल खाते हैं ऊपर है या नहीं?”, आदि।
ऐसे मॉडलों के साथ समस्या यह है कि उन्हें सीखने के लिए बहुत सारे डेटा की आवश्यकता होती है और उन्हें इस बात की समझ नहीं होती है कि उत्तर वही है जो वह है।
उदाहरण के लिए, यदि हम किसी मॉडल को तस्वीरों की एक जोड़ी के आधार पर "हां"/"नहीं" का उत्तर देने के लिए प्रशिक्षित करते हैं, तो उत्तर के कारणों का पता लगाना संभव नहीं है।
इसलिए उपयोगकर्ता यह नहीं समझ पाएंगे कि हम उनसे क्या चाहते हैं और हमें मॉडरेटर लाना होगा।
यह अंत-से-अंत दृष्टिकोण हमारे अनुकूल नहीं है। हम उपयोगकर्ता को यह संकेत देना चाहते हैं कि प्रदान की गई तस्वीर "बिल के अनुरूप" क्यों नहीं है: "फोटो को अच्छी रोशनी वाली जगह पर लेना सबसे अच्छा है," "ऐसा लगता है कि हमें पूरी कार दिखाई नहीं दे रही है" चित्र," या "लाइसेंस प्लेट नंबर प्रदान की गई जानकारी से मेल नहीं खाता।"
हमारे लिए यह बहुत महत्वपूर्ण है कि जब अलग-अलग वाहन हों तो मॉडल "हां" में उत्तर न दे। आइए इस मीट्रिक को "एफपीआर" (झूठी सकारात्मक दर) नाम दें और इसका उपयोग सभी नकारात्मक उदाहरणों (जहां वाहन मेल नहीं खाते हैं) की तुलना में "हां" प्रतिक्रियाओं का प्रतिशत दिखाने के लिए करें।
अब, आइए सभी सकारात्मक उत्तरों के लिए "हां" उत्तरों के अनुपात को मापने के लिए एक और मीट्रिक - टीपीआर - पेश करें।
मूल रूप से, मॉडल को अनुकूलित करते समय ये दो मीट्रिक पहले से ही हमारे कार्य का वर्णन करने के लिए पर्याप्त हैं: एफपीआर को कम करना और यह सुनिश्चित करना कि टीपीआर बहुत अधिक ख़राब न हो।
हमने मॉडल सेट दृष्टिकोण अपनाया। इसलिए, हम अपने सभी विचारों को तैयार समाधान के ढांचे में जोड़ सकते हैं (इस ढांचे को "आधार रेखा" के रूप में संदर्भित किया जाएगा)। आइए जानें कि यह कैसा दिखता है और इसे भागों में विभाजित करें।
वास्तव में, इसमें कई मॉडल शामिल हैं जो इनपुट पर दो छवियों को स्वतंत्र रूप से संसाधित करते हैं, और आउटपुट पर वाहन का लाइसेंस प्लेट नंबर और उसका वेक्टर देते हैं। परिणामस्वरूप, तुलना किए गए विवरणों के आधार पर, समीक्षाधीन दो तस्वीरों के बारे में एक सत्यापन निर्णय लिया जाता है।
यह एल्गोरिदम का ढांचा है जिसका उपयोग हम कई अन्य मॉडलों को जोड़ने, उन्हें अपने मॉडल के विभिन्न नोड्स में रखने के लिए करते हैं। उदाहरण के लिए, किसी फोटो की गुणवत्ता, उसकी स्पष्टता, रोशनी और संतृप्ति स्तर का मूल्यांकन करते समय।
कभी-कभी, हमें ऐसी तस्वीरें सबमिट करने के प्रयासों का पता लगाने की आवश्यकता होती है जो वास्तविक नहीं हैं। ऐसा करने के लिए, हम एक प्रीप्रोसेसर जोड़ते हैं जो स्पूफिंग हमलों के लिए फोटो की जांच करता है।
इस तरह के दृष्टिकोण का उपयोग करते समय, स्पष्ट उत्पाद पुनरावृत्ति चक्र होना और एक अच्छा परीक्षण डेटा सेट उत्पन्न करना महत्वपूर्ण है। हम इन दो कारकों का आकलन करने के लिए एक नया मॉडल जोड़ते हैं, "क्या यह सौंपी गई समस्या का समाधान करता है?" और "यह पिछले समाधान के मेट्रिक्स को कितना संशोधित करता है?"
आइए अब समाधान के बुनियादी निर्माण खंडों के बारे में बात करें।
आइए शब्दावली पर एक नज़र डालने के लिए आगे बढ़ें। नीचे, मैं "बाउंडिंग बॉक्स" और "सेगमेंटेशन मास्क" जैसे शब्दों का अर्थ समझाऊंगा।
बाउंडिंग बॉक्स एक आयताकार आकार होता है जिसका उपयोग रुचि की किसी विशिष्ट वस्तु को घेरने के लिए किया जाता है। उदाहरण के लिए, यदि हम बिल्ली के चेहरे की पहचान करना चाहते हैं, तो हम एक बाउंडिंग बॉक्स को लाल रंग में रेखांकित करके परिभाषित करेंगे। इसे छवि के भीतर इसके निचले-बाएँ और ऊपरी-दाएँ बिंदुओं के निर्देशांक द्वारा परिभाषित किया गया है।
विभाजन एक इनपुट छवि में प्रत्येक व्यक्तिगत पिक्सेल को एक क्लास लेबल निर्दिष्ट करने के कार्य को संदर्भित करता है। अपनी चर्चा के संदर्भ में, हमने बिल्ली को पृष्ठभूमि से खंडित करके अलग कर दिया।
हमारे मॉडल में, वाहन की पृष्ठभूमि हमारे लिए कोई दिलचस्पी की बात नहीं है क्योंकि यह हमारे लक्ष्य समाधान को आकार देने के लिए कोई प्रासंगिक जानकारी प्रदान नहीं करती है। लेकिन इसका मतलब यह नहीं है कि हमें पृष्ठभूमि का उपयोग करके अपने मॉडलों को बेहतर बनाने के बारे में कोई विचार नहीं है।
वाहनों को पृष्ठभूमि से अलग करने की चुनौती का समाधान करने के लिए, हम YOLO परिवार (यू ओनली लुक वन्स) का एक मॉडल लेंगे और इसे कार छवियों को खंडित करने के लिए प्रशिक्षित करेंगे। यहां समस्या यह है कि हमारे पास उपयोगकर्ताओं की बड़ी संख्या में तस्वीरें हैं जिनमें एक से अधिक कारें हैं।
इस समस्या से निपटने के लिए, हम निम्नलिखित दृष्टिकोण अपना सकते हैं:
बढ़िया, हमें अपना पहला इनपुट मिल गया है।
अगला कदम वाहन का लाइसेंस प्लेट नंबर ढूंढना है। लगभग सभी देशों में लाइसेंस प्लेट सामने की ओर स्थित होती है। वे दुर्लभ मामले जहां वाहन पंजीकरण प्लेटें असामान्य स्थानों पर स्थित हैं, इस लेख के दायरे से बाहर हैं।
लाइसेंस प्लेट नंबर स्थापित करने का सबसे आम तरीका बाउंडिंग बॉक्स का पता लगाना और परिणामी पैच पर ओसीआर लागू करना है।
लेकिन जैसा कि हमारे प्रयोगों से पता चला है, यदि वाहन की पंजीकरण संख्या प्लेट क्षितिज के समानांतर नहीं है, तो ओसीआर बहुत कम प्रभावी है (और कुछ मॉडलों में अधिक समय लेता है)।
यह हमारे डेटा के लिए विशेष रूप से प्रासंगिक है, जहां हम ड्राइवरों से एक कोण पर तस्वीरें लेने के लिए कहते हैं।
हमने जो समाधान तय किया वह संख्या को खंडित करना और फिर प्राप्त समोच्च रेखा को चिकना करना था। हमारे मामले में, विभाजन कार्य को उसी तरह से निपटाया गया जैसे वाहनों को खंडित किया जाता है, निम्नलिखित परिणाम के साथ:
इसके बाद, हमने मास्क का उपयोग करके एक समोच्च रेखा खींची और इसे चिकना करने के लिए ConvexHull लगाया। यह सरल एल्गोरिदम हमारी समोच्च रेखा की समतलता को चिकना (सीधा) करता है, जिससे यह सीधी हो जाती है। इसे समोच्च बहुभुज में कोणों की कम संख्या के रूप में वर्णित किया जा सकता है।
एक आदर्श दुनिया में, इस ऑपरेशन से हमें चार बिंदुओं द्वारा परिभाषित एक आयत मिलेगा।
एक बार जब हम सीमाओं को संरेखित कर लेते हैं, तो हम परिप्रेक्ष्य के साथ उसी अभ्यास को दोहराते हैं, ताकि पंजीकरण संख्या सुचारू, अच्छी तरह से प्रस्तुत की जा सके और स्पष्ट रूप से दिखाई दे। यह दृष्टिकोण विशेष रूप से तब सहायक होता है जब किसी कार की तस्वीर ऐसे कोण से खींची जाती है जहां लाइसेंस प्लेट मुश्किल से दिखाई देती है।
परिप्रेक्ष्य सुधार क्या है? मुझे अपनी बीजगणित कक्षा से याद आया कि रोटेशन मैट्रिक्स कैसे काम करता है। यदि आप कार्टेशियन समन्वय प्रणाली में एक वर्ग लेते हैं और प्रत्येक निर्देशांक को 30 डिग्री के घूर्णन मैट्रिक्स से गुणा करते हैं, तो नए समन्वय प्रणाली में आपका वर्ग 30 डिग्री तक घुमाया जाएगा।
यहां, हम एक समान कार्य से निपट रहे हैं - आइए समोच्च रेखा लें और सभी बिंदुओं को नई समन्वय प्रणाली में ले जाएं। समस्या एक उपयुक्त परिवर्तन मैट्रिक्स खोजने की है।
ये सभी एल्गोरिदम पहले से ही अच्छी तरह से स्थापित हैं, इसलिए हमें केवल यह सुनिश्चित करना है कि वे मौजूदा कार्य के लिए सही ढंग से कॉन्फ़िगर किए गए हैं।
नतीजा बहुत बढ़िया था. इससे टीपीआर में लगभग 15 प्रतिशत अंक की वृद्धि हुई। इसके बाद, हम कुछ हल्के, उच्च-गुणवत्ता वाले OCR सॉफ़्टवेयर लागू करते हैं, जैसे PARSeq आर्किटेक्चर।
अब तक, यह वाहन फ़ोटो को संसाधित करने के लिए नवीनतम तंत्रिका नेटवर्क तकनीक है। एंबेडिंग खोज, अनुशंसाओं और डेटा संपीड़न सहित विभिन्न मशीन लर्निंग क्षेत्रों में व्यापक रूप से अपनाई जाने वाली तकनीक है।
हमारे कार्य के संदर्भ में, वाहनों के बीच समानता का आकलन करने के लिए एम्बेडिंग का उपयोग किया जाता है।
आइए एक उदाहरण देखें जहां मैंने अपनी कार की तस्वीर पहले दाईं ओर से ली, और फिर बाईं ओर से। अब, मैं इन चित्रों के लिए एम्बेडिंग (वेक्टर) की गणना कर सकता हूं, और यदि ये वेक्टर अंतरिक्ष में करीब हैं, तो यह इंगित करता है कि यह वही वाहन है।
लेकिन एम्बेडिंग एक और उपयोगी संपत्ति प्रदान करती है जिसका उपयोग उत्पाद में किया जा सकता है: यदि आपका एम्बेडिंग मॉडल अच्छी तरह से काम करता है, तो आप एम्बेडिंग नमूनों में से निकटतम क्या है इसकी खोज कर सकते हैं। उदाहरण के लिए, सिस्टम में गैर-अद्वितीय वाहन ढूंढना।
इनड्राइव डेटा का उपयोग करके अपने एम्बेडिंग मॉडल को प्रशिक्षित करते समय, हमने सावधानीपूर्वक सावधानी बरती। हमने तस्वीरों से किसी भी व्यक्तिगत डेटा को परिश्रमपूर्वक हटा दिया और सुनिश्चित किया कि डेटासेट सामान्यीकृत हो, जिसमें उन सभी देशों की छवियां शामिल हों जहां हम काम करते हैं और गुणवत्ता के स्तर अलग-अलग हैं।
इस दृष्टिकोण का उद्देश्य उन व्यक्तियों के खिलाफ भेदभाव को रोकना है जिनके पास उच्च गुणवत्ता वाली तस्वीरें खींचने के लिए महंगे स्मार्टफोन तक पहुंच नहीं है।
नतीजतन, वाहन ब्रांड और मेक द्वारा समूहीकृत एक डेटासेट प्राप्त हुआ। कई प्रयोग करने के बाद हमें एहसास हुआ कि फिलहाल हमें वाहनों के रंगों की तुलना किए बिना ही काम चलाना होगा।
अपने मॉडल के लिए आर्किटेक्चर का चयन करते समय, हमने एक ऐसी रीढ़ की तलाश की जो प्रदर्शन और कम्प्यूटेशनल दक्षता के बीच संतुलन बनाए रखे। अत्यधिक बड़ी रीढ़ की हड्डी का उपयोग करने से बचना महत्वपूर्ण था, क्योंकि यह बेसलाइन चलने के समय को काफी धीमा कर सकता था।
सावधानीपूर्वक विचार करने के बाद, हमने मशीन सीखने के उद्देश्यों के लिए एडिटिव एंगुलर मार्जिन लॉस के उपयोग द्वारा पूरक, हमारे बैकबोन आर्किटेक्चर के रूप में कुशलनेट_बी2 को चुना।
हमारे मॉडल का लक्ष्य वेक्टर अभ्यावेदन सीखना है जहां एक ही मेक और मॉडल के वाहन, जैसे कि सभी ऑडी ए4, वेक्टर स्पेस में एक साथ निकटता से स्थित होते हैं।
इसके विपरीत, ऑडी A5s को ऑडी A4s से कुछ दूर स्थित किया जाएगा, लेकिन उदाहरण के लिए, टोयोटा कैमरी की तुलना में यह अभी भी करीब स्थित होगा।
अब, आइए वाहन तुलनाओं के कुछ उदाहरणों पर गौर करें:
शीर्ष पर, हमारे पास दो समान कारें हैं, जबकि नीचे, हमारे पास दो अलग-अलग कारें हैं। आइए समानता स्कोर पर दोबारा गौर करें: शीर्ष जोड़ी का स्कोर 0.989 है, जबकि निचली जोड़ी का स्कोर 0.697 है। 0.98 का थ्रेशोल्ड मान निर्धारित करके, हम वाहनों को समान के रूप में वर्गीकृत कर सकते हैं।
हालाँकि, यह ध्यान रखना महत्वपूर्ण है कि हमारा मॉडल अभी तक त्रुटिपूर्ण ढंग से कार्य नहीं कर रहा है। संबंधित कारक में हमारा पूर्वाग्रह है:
मॉडल 0.751 का परिणाम देता है, जबकि हम आदर्श रूप से विभिन्न वाहनों के लिए शून्य के करीब मूल्य चाहते हैं।
यहां मुख्य मुद्दा हमारे मॉडल को मुख्य रूप से वाहन मॉडल और ब्रांडों पर केंद्रित डेटासेट पर प्रशिक्षित करने से उत्पन्न होता है। नतीजतन, मॉडल विभिन्न वाहनों के बीच अंतर करने में कुशल हो गया, लेकिन वाहन वर्गों के भीतर अंतर का मूल्यांकन करते समय उसे संघर्ष करना पड़ा।
दूसरी समस्या जिसका हमें सामना करना पड़ा वह यह है कि वाहन को विभिन्न कोणों पर दिखाया जा सकता है, जो सीमित डेटा सेट के कारण हमारे एम्बेडिंग की गुणवत्ता को नकारात्मक रूप से प्रभावित करता है।
पहले कदम के रूप में, ग्राहक की ओर से, हम मास्क जोड़ते हैं और ड्राइवर को बताते हैं कि उनकी कार की तस्वीर कैसे ली जाए। दूसरा कदम वाहन को अंतरिक्ष में स्थापित करने और उसके घूमने का अनुमान लगाने के लिए उसके विभिन्न हिस्सों का पता लगाना होगा।
घूर्णन के सही कोण को चुनने के लिए यहां बहुत सारे अनुमान विकसित किए जा सकते हैं। और सबसे महत्वपूर्ण बात यह है कि इन मॉडलों का बाद में वाहन की स्थिति का मूल्यांकन करने के लिए पुन: उपयोग किया जा सकता है। लेकिन वह कहानी किसी और समय के लिए है।
इल्या कफ्तानोव द्वारा पोस्ट किया गया।