परिचय
कंप्यूटर विज़न में ऑब्जेक्ट डिटेक्शन एक बड़ा क्षेत्र है, और "जंगली में" कंप्यूटर विज़न के अधिक महत्वपूर्ण अनुप्रयोगों में से एक है। एक तरफ, इसका उपयोग स्वायत्त प्रणालियों के निर्माण के लिए किया जा सकता है जो वातावरण के माध्यम से एजेंटों को नेविगेट करते हैं - चाहे वह रोबोट कार्य कर रहे हों या सेल्फ-ड्राइविंग कार हों, लेकिन इसके लिए अन्य क्षेत्रों के साथ चौराहे की आवश्यकता होती है। हालांकि, विसंगति का पता लगाना (जैसे कि एक लाइन पर दोषपूर्ण उत्पाद), छवियों के भीतर वस्तुओं का पता लगाना, चेहरे का पता लगाना और वस्तु का पता लगाने के विभिन्न अन्य अनुप्रयोगों को अन्य क्षेत्रों को काटे बिना किया जा सकता है।
ऑब्जेक्ट डिटेक्शन छवि वर्गीकरण के रूप में मानकीकृत नहीं है, मुख्यतः क्योंकि अधिकांश नए विकास आम तौर पर बड़े पुस्तकालयों और ढांचे के बजाय व्यक्तिगत शोधकर्ताओं, अनुरक्षकों और डेवलपर्स द्वारा किए जाते हैं। TensorFlow या PyTorch जैसे ढांचे में आवश्यक उपयोगिता स्क्रिप्ट को पैकेज करना और अब तक के विकास को निर्देशित करने वाले API दिशानिर्देशों को बनाए रखना मुश्किल है।
यह ऑब्जेक्ट डिटेक्शन को कुछ अधिक जटिल बनाता है, आमतौर पर अधिक वर्बोज़ (लेकिन हमेशा नहीं), और छवि वर्गीकरण की तुलना में कम पहुंच योग्य। एक पारिस्थितिकी तंत्र में होने का एक प्रमुख लाभ यह है कि यह आपको उपयोग करने के लिए अच्छी प्रथाओं, उपकरणों और दृष्टिकोणों पर उपयोगी जानकारी की खोज न करने का एक तरीका प्रदान करता है। वस्तु का पता लगाने के साथ - अच्छी पकड़ पाने के लिए अधिकांश को क्षेत्र के परिदृश्य पर अधिक शोध करना पड़ता है।
PyTorch/TorchVision के रेटिनानेट के साथ ऑब्जेक्ट डिटेक्शन
torchvision
PyTorch का कंप्यूटर विज़न प्रोजेक्ट है, और इसका उद्देश्य परिवर्तन और संवर्द्धन स्क्रिप्ट, पूर्व-प्रशिक्षित वज़न, डेटासेट और उपयोगिताओं के साथ एक मॉडल चिड़ियाघर प्रदान करके, जो एक व्यवसायी के लिए उपयोगी हो सकता है, PyTorch-आधारित CV मॉडल के विकास को आसान बनाना है।
जबकि अभी भी बीटा में है और बहुत अधिक प्रायोगिक है - torchvision
चुनने के लिए कुछ मॉडलों के साथ अपेक्षाकृत सरल ऑब्जेक्ट डिटेक्शन एपीआई प्रदान करता है:
- तेज़ आर-सीएनएन
- रेटिनानेट
- FCOS (पूरी तरह से दृढ़ रेटिनानेट)
- SSD (VGG16 बैकबोन… ओह)
- SSDLite (MobileNetV3 बैकबोन)
जबकि एपीआई कुछ अन्य तृतीय-पक्ष एपीआई की तरह पॉलिश या सरल नहीं है, यह उन लोगों के लिए एक बहुत ही अच्छा प्रारंभिक बिंदु है जो अभी भी एक पारिस्थितिकी तंत्र में होने की सुरक्षा को पसंद करते हैं जिससे वे परिचित हैं। आगे बढ़ने से पहले, सुनिश्चित करें कि आपने PyTorch और Torchvision स्थापित किया है:
$ pip install torch torchvision
आइए कुछ उपयोगिता कार्यों में लोड करें, जैसे कि read_image()
, draw_bounding_boxes()
और to_pil_image()
रेटिनानेट और इसके पूर्व-प्रशिक्षित वज़न (MS COCO) को आयात करने के बाद, छवियों को पढ़ना, खींचना और आउटपुट करना आसान बनाने के लिए:
from torchvision.io.image import read_image
from torchvision.utils import draw_bounding_boxes
from torchvision.transforms.functional import to_pil_image
from torchvision.models.detection import retinanet_resnet50_fpn_v2, RetinaNet_ResNet50_FPN_V2_Weights
import matplotlib.pyplot as plt
RetinaNet एक ResNet50 बैकबोन और उसके ऊपर एक फ़ीचर पिरामिड नेटवर्क (FPN) का उपयोग करता है। जबकि वर्ग का नाम वर्बोज़ है, यह वास्तुकला का सूचक है। आइए का उपयोग करके एक छवि प्राप्त करें requests
पुस्तकालय और इसे हमारे स्थानीय ड्राइव पर एक फ़ाइल के रूप में सहेजें:
import requests
response = requests.get('https://i.ytimg.com/vi/q71MCWAEfL8/maxresdefault.jpg')
open("obj_det.jpeg", "wb").write(response.content)
img = read_image("obj_det.jpeg")
जगह में एक छवि के साथ - हम अपने मॉडल और वजन को तुरंत चालू कर सकते हैं:
weights = RetinaNet_ResNet50_FPN_V2_Weights.DEFAULT
model = retinanet_resnet50_fpn_v2(weights=weights, score_thresh=0.35)
model.eval()
preprocess = weights.transforms()
RSI score_thresh
तर्क उस सीमा को परिभाषित करता है जिस पर किसी वस्तु को किसी वर्ग की वस्तु के रूप में पहचाना जाता है। सहज रूप से, यह आत्मविश्वास की सीमा है, और हम किसी वस्तु को किसी वर्ग से संबंधित होने के लिए वर्गीकृत नहीं करेंगे यदि मॉडल 35% से कम आश्वस्त है कि यह एक वर्ग से संबंधित है।
आइए हमारे वज़न से ट्रांसफ़ॉर्म का उपयोग करके छवि को प्रीप्रोसेस करें, एक बैच बनाएं और अनुमान चलाएं:
batch = [preprocess(img)]
prediction = model(batch)[0]
बस इतना ही, हमारा prediction
शब्दकोश में अनुमानित वस्तु वर्ग और स्थान हैं! अब, इस रूप में परिणाम हमारे लिए बहुत उपयोगी नहीं हैं - हम वज़न से मेटाडेटा के संबंध में लेबल निकालना चाहते हैं और बाउंडिंग बॉक्स बनाना चाहते हैं, जो इसके माध्यम से किया जा सकता है draw_bounding_boxes()
:
labels = [weights.meta["categories"][i] for i in prediction["labels"]]
box = draw_bounding_boxes(img, boxes=prediction["boxes"],
labels=labels,
colors="cyan",
width=2,
font_size=30,
font='Arial')
im = to_pil_image(box.detach())
fig, ax = plt.subplots(figsize=(16, 12))
ax.imshow(im)
plt.show()
इसका परिणाम यह होगा:
रेटिनानेट ने वास्तव में कार के पीछे झाँकने वाले व्यक्ति को वर्गीकृत किया! यह काफी कठिन वर्गीकरण है।
सर्वोत्तम प्रथाओं, उद्योग-स्वीकृत मानकों और शामिल चीट शीट के साथ, Git सीखने के लिए व्यावहारिक मार्गदर्शिका देखें। Googling Git कमांड को रोकें और वास्तव में सीखना यह!
आप रेटिनानेट को एक एफसीओएस (पूरी तरह से दृढ़ रेटिनानेट) में बदलकर बदल सकते हैं retinanet_resnet50_fpn_v2
साथ में fcos_resnet50_fpn
, और का उपयोग करें FCOS_ResNet50_FPN_Weights
वजन:
from torchvision.io.image import read_image
from torchvision.utils import draw_bounding_boxes
from torchvision.transforms.functional import to_pil_image
from torchvision.models.detection import fcos_resnet50_fpn, FCOS_ResNet50_FPN_Weights
import matplotlib.pyplot as plt
import requests
response = requests.get('https://i.ytimg.com/vi/q71MCWAEfL8/maxresdefault.jpg')
open("obj_det.jpeg", "wb").write(response.content)
img = read_image("obj_det.jpeg")
weights = FCOS_ResNet50_FPN_Weights.DEFAULT
model = fcos_resnet50_fpn(weights=weights, score_thresh=0.35)
model.eval()
preprocess = weights.transforms()
batch = [preprocess(img)]
prediction = model(batch)[0]
labels = [weights.meta["categories"][i] for i in prediction["labels"]]
box = draw_bounding_boxes(img, boxes=prediction["boxes"],
labels=labels,
colors="cyan",
width=2,
font_size=30,
font='Arial')
im = to_pil_image(box.detach())
fig, ax = plt.subplots(figsize=(16, 12))
ax.imshow(im)
plt.show()
आगे जाना - कंप्यूटर विजन के लिए व्यावहारिक गहन शिक्षण
आपका जिज्ञासु स्वभाव आपको और आगे जाना चाहता है? हम अनुशंसा करते हैं कि हमारी जाँच करें कोर्स: "पायथन के साथ कंप्यूटर विजन के लिए प्रैक्टिकल डीप लर्निंग".
एक और कंप्यूटर विजन कोर्स?
हम MNIST अंकों या MNIST फैशन का वर्गीकरण नहीं करेंगे। उन्होंने बहुत समय पहले अपनी भूमिका निभाई थी। उन्नत ब्लैक-बॉक्स आर्किटेक्चर को प्रदर्शन का बोझ उठाने देने से पहले बहुत से सीखने के संसाधन बुनियादी डेटासेट और बुनियादी आर्किटेक्चर पर ध्यान केंद्रित कर रहे हैं।
हम पर ध्यान केंद्रित करना चाहते हैं रहस्योद्घाटन, व्यावहारिकता, समझ, अंतर्ज्ञान और वास्तविक परियोजनाएं. सीखना चाहते है कैसे आप कुछ कर सकते है? हम आपको हमारे दिमाग की छवियों को संसाधित करने से लेकर स्तन कैंसर के लिए एक शोध-ग्रेड डीप लर्निंग क्लासिफायर लिखने से लेकर गहन शिक्षण नेटवर्क तक ले जाएंगे जो "मतिभ्रम" करते हैं, आपको व्यावहारिक कार्य के माध्यम से सिद्धांत और सिद्धांत सिखाते हैं, आपको इससे लैस करते हैं कंप्यूटर विज़न को हल करने के लिए गहन शिक्षण को लागू करने में विशेषज्ञ बनने के लिए जानकारी और उपकरण।
अंदर क़या है?
- दृष्टि के पहले सिद्धांत और कंप्यूटर को "देखना" कैसे सिखाया जा सकता है
- कंप्यूटर विज़न के विभिन्न कार्य और अनुप्रयोग
- व्यापार के उपकरण जो आपके काम को आसान बना देंगे
- कंप्यूटर विज़न के लिए डेटासेट खोजना, बनाना और उपयोग करना
- दृढ़ तंत्रिका नेटवर्क का सिद्धांत और अनुप्रयोग
- डेटासेट में डोमेन शिफ्ट, सह-घटना और अन्य पूर्वाग्रहों को संभालना
- अपने लाभ के लिए सीखने और दूसरों के प्रशिक्षण समय और कम्प्यूटेशनल संसाधनों का उपयोग करना स्थानांतरित करें
- एक अत्याधुनिक स्तन कैंसर क्लासिफायर का निर्माण और प्रशिक्षण
- मुख्यधारा के विचारों पर संदेह की एक स्वस्थ खुराक कैसे लागू करें और व्यापक रूप से अपनाई गई तकनीकों के निहितार्थ को समझें
- t-SNE और PCA का उपयोग करके ConvNet के "अवधारणा स्थान" की कल्पना करना
- बेहतर परिणाम प्राप्त करने के लिए कंपनियां कंप्यूटर विज़न तकनीकों का उपयोग कैसे करती हैं, इसका केस अध्ययन
- उचित मॉडल मूल्यांकन, गुप्त स्थान विज़ुअलाइज़ेशन और मॉडल के ध्यान की पहचान करना
- डोमेन अनुसंधान करना, अपने स्वयं के डेटासेट को संसाधित करना और मॉडल परीक्षण स्थापित करना
- अत्याधुनिक वास्तुकला, विचारों की प्रगति, उन्हें क्या विशिष्ट बनाता है और उन्हें कैसे लागू किया जाए
- KerasCV - अत्याधुनिक पाइपलाइन और मॉडल बनाने के लिए WIP लाइब्रेरी
- पेपर कैसे पार्स करें और पढ़ें और उन्हें स्वयं कैसे लागू करें
- अपने आवेदन के आधार पर मॉडल का चयन
- एंड-टू-एंड मशीन लर्निंग पाइपलाइन बनाना
- तेजी से आर-सीएनएन, रेटिनानेट्स, एसएसडी और योलो के साथ ऑब्जेक्ट डिटेक्शन पर लैंडस्केप और अंतर्ज्ञान
- इंस्टेंस और सिमेंटिक सेगमेंटेशन
- YOLOv5 . के साथ रीयल-टाइम ऑब्जेक्ट रिकग्निशन
- YOLOv5 ऑब्जेक्ट डिटेक्टरों का प्रशिक्षण
- KerasNLP (उद्योग-शक्ति WIP पुस्तकालय) का उपयोग कर ट्रांसफॉर्मर के साथ कार्य करना
- छवियों के कैप्शन उत्पन्न करने के लिए ट्रांसफॉर्मर को कन्वनेट के साथ एकीकृत करना
- DeepDream
निष्कर्ष
ऑब्जेक्ट डिटेक्शन कंप्यूटर विज़न का एक महत्वपूर्ण क्षेत्र है, और दुर्भाग्य से कम पहुंच योग्य होना चाहिए।
इस संक्षिप्त मार्गदर्शिका में, हमने इस पर एक नज़र डाली है कि कैसे torchvision
, PyTorch का कंप्यूटर विज़न पैकेज, रेटिनानेट का उपयोग करके छवियों पर ऑब्जेक्ट डिटेक्शन करना आसान बनाता है।