पायथन प्लेटोब्लॉकचैन डेटा इंटेलिजेंस में YOLOv7 के साथ पोज़ एस्टीमेशन/कीपॉइंट डिटेक्शन। लंबवत खोज। ऐ.

पायथन में YOLOv7 के साथ पोज़ एस्टीमेशन/कीपॉइंट डिटेक्शन

परिचय

कंप्यूटर विज़न में ऑब्जेक्ट डिटेक्शन एक बड़ा क्षेत्र है, और "जंगली में" कंप्यूटर विज़न के अधिक महत्वपूर्ण अनुप्रयोगों में से एक है।

ऑब्जेक्ट डिटेक्शन छवि वर्गीकरण के रूप में मानकीकृत नहीं है, मुख्यतः क्योंकि अधिकांश नए विकास आम तौर पर बड़े पुस्तकालयों और ढांचे के बजाय व्यक्तिगत शोधकर्ताओं, अनुरक्षकों और डेवलपर्स द्वारा किए जाते हैं। TensorFlow या PyTorch जैसे ढांचे में आवश्यक उपयोगिता स्क्रिप्ट को पैकेज करना और अब तक के विकास को निर्देशित करने वाले API दिशानिर्देशों को बनाए रखना मुश्किल है।

यह ऑब्जेक्ट डिटेक्शन को कुछ अधिक जटिल बनाता है, आमतौर पर अधिक वर्बोज़ (लेकिन हमेशा नहीं), और छवि वर्गीकरण की तुलना में कम पहुंच योग्य।

सौभाग्य से जनता के लिए - Ultralytics ने अपने YOLOv5 के आसपास एक सरल, बहुत शक्तिशाली और सुंदर ऑब्जेक्ट डिटेक्शन एपीआई विकसित की है जिसे अन्य अनुसंधान और विकास टीमों द्वारा नए संस्करणों में विस्तारित किया गया है, जैसे कि YOLOv7।

इस संक्षिप्त मार्गदर्शिका में, हम अत्याधुनिक YOLOv7 के साथ पायथन में पोज़ एस्टीमेशन (कीपॉइंट डिटेक्शन) का प्रदर्शन करेंगे।

मुख्य बिंदु विभिन्न बिंदु हो सकते हैं - चेहरे के हिस्से, शरीर के अंग, आदि। मुद्रा अनुमान मुख्य बिंदु का पता लगाने का एक विशेष मामला है - जिसमें बिंदु मानव शरीर के अंग होते हैं, और महंगे स्थिति ट्रैकिंग हार्डवेयर को बदलने के लिए उपयोग किया जा सकता है, ओवर-द-एयर रोबोटिक्स नियंत्रण को सक्षम करें, और एआर और वीआर के माध्यम से मानव आत्म अभिव्यक्ति के एक नए युग को शक्ति प्रदान करें।

योलो और मुद्रा अनुमान

योलो (आप केवल एक बार देखें) एक कार्यप्रणाली है, साथ ही ऑब्जेक्ट डिटेक्शन के लिए बनाए गए मॉडलों का परिवार है। 2015 में स्थापना के बाद से, YOLOv1, YOLOv2 (YOLO9000) और YOLOv3 को एक ही लेखक (लेखकों) द्वारा प्रस्तावित किया गया है - और गहन शिक्षण समुदाय निरंतर वर्षों में ओपन-सोर्स प्रगति के साथ जारी रहा।

Ultralytics 'YOLOv5 PyTorch में YOLO का पहला बड़े पैमाने पर कार्यान्वयन है, जिसने इसे पहले से कहीं अधिक सुलभ बना दिया है, लेकिन YOLOv5 ने इस तरह के पैर जमाने का मुख्य कारण इसके चारों ओर बनाया गया सुंदर सरल और शक्तिशाली एपीआई भी है। अनुकूलनशीलता, व्यावहारिक रूप से सभी प्रयोग करने योग्य निर्यात प्रारूपों की अनुमति देते हुए, परियोजना अनावश्यक विवरणों को दूर करती है, और अद्भुत प्रथाओं को नियोजित करती है जो पूरी परियोजना को कुशल और इष्टतम दोनों बनाती हैं।

YOLOv5 अभी भी ऑब्जेक्ट डिटेक्शन मॉडल बनाने के लिए मुख्य परियोजना है, और कई रिपॉजिटरी जो YOLO विधि को आगे बढ़ाने का लक्ष्य रखते हैं, YOLOv5 को आधार रेखा के रूप में शुरू करते हैं और एक समान API प्रदान करते हैं (या बस प्रोजेक्ट को फोर्क करें और इसके ऊपर निर्माण करें)। ऐसा है का मामला YOLOR (आप केवल एक प्रतिनिधित्व सीखते हैं) और YOLOv7 जो YOLOR (उसी लेखक) के शीर्ष पर बनाया गया है जो YOLO पद्धति में नवीनतम प्रगति है।

YOLOv7 केवल एक ऑब्जेक्ट डिटेक्शन आर्किटेक्चर नहीं है - नए मॉडल हेड प्रदान करता है, जो कि कीपॉइंट्स (कंकाल) को आउटपुट कर सकता है और केवल बाउंडिंग बॉक्स रिग्रेशन के अलावा इंस्टेंस सेगमेंटेशन कर सकता है, जो पिछले YOLO मॉडल के साथ मानक नहीं था। यह आश्चर्य की बात नहीं है, क्योंकि कई ऑब्जेक्ट डिटेक्शन आर्किटेक्चर को उदाहरण के विभाजन और कीपॉइंट डिटेक्शन कार्यों के लिए पहले भी साझा किया गया था, साझा सामान्य आर्किटेक्चर के कारण, कार्य के आधार पर अलग-अलग आउटपुट के साथ। हालांकि यह आश्चर्य की बात नहीं है - सपोर्टिंग इंस्टेंस सेगमेंटेशन और कीपॉइंट डिटेक्शन संभवतः योलो-आधारित मॉडल के लिए नया मानक बन जाएगा, जिन्होंने कुछ साल पहले व्यावहारिक रूप से अन्य सभी दो-चरण डिटेक्टरों से बेहतर प्रदर्शन करना शुरू कर दिया है।

यह दो-चरण डिटेक्टरों की तुलना में सरल वास्तुकला के साथ, पहले से कहीं अधिक तेजी से प्रदर्शन करने के लिए इंस्टेंस सेगमेंटेशन और कीपॉइंट डिटेक्शन बनाता है।

मॉडल स्वयं वास्तुशिल्प परिवर्तनों के साथ-साथ प्रशिक्षण के अनुकूलन पहलुओं के माध्यम से बनाया गया था, जिसे "बैग-ऑफ-फ्रीबीज" कहा जाता है, जिसने अनुमान लागत को बढ़ाए बिना सटीकता में वृद्धि की।

YOLOv7 . स्थापित करना

चलिए आगे बढ़ते हैं और GitHub से प्रोजेक्ट इंस्टॉल करते हैं:

! git clone https://github.com/WongKinYiu/yolov7.git

यह एक बनाता है yolov7 आपकी वर्तमान कार्यशील निर्देशिका के अंतर्गत निर्देशिका, जिसमें आप मूल प्रोजेक्ट फ़ाइलें ढूंढ पाएंगे:

%cd yolov7
!ls

/Users/macbookpro/jup/yolov7
LICENSE.md       detect.py        models           tools
README.md        export.py        paper            train.py
cfg              figure           requirements.txt train_aux.py
data             hubconf.py       scripts          utils
deploy           inference        test.py

नोट: कॉल करने के बाद भी, Google Colab नोटबुक अगले सेल में मुख्य कार्यशील निर्देशिका पर रीसेट हो जाती है %cd dirname, इसलिए आपको इसे प्रत्येक सेल में कॉल करते रहना होगा जिसमें आप एक ऑपरेशन करना चाहते हैं। स्थानीय ज्यूपिटर नोटबुक्स परिवर्तन को याद रखते हैं, इसलिए कमांड को कॉल करते रहने की कोई आवश्यकता नहीं है।

जब भी आप दिए गए वज़न के सेट के साथ कोड चलाते हैं - वे इस निर्देशिका में डाउनलोड और संग्रहीत किए जाएंगे। मुद्रा अनुमान करने के लिए, हम उस कार्य के लिए पूर्व-प्रशिक्षित YOLOv7 मॉडल के लिए वज़न डाउनलोड करना चाहेंगे, जो कि इसके अंतर्गत पाया जा सकता है /releases/download/ गिटहब पर टैब:

! curl -L https://github.com/WongKinYiu/yolov7/releases/download/v0.1/yolov7-w6-pose.pt -o yolov7-w6-pose.pt
%cd ..

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100  153M  100  153M    0     0  3742k      0  0:00:42  0:00:42 --:--:-- 4573k

/Users/macbookpro/jup

बढ़िया, हमने डाउनलोड कर लिया है yolov7-w6-pose.pt weights फ़ाइल, जिसका उपयोग मुद्रा अनुमान के लिए प्रशिक्षित मॉडल को लोड और पुनर्निर्माण करने के लिए किया जा सकता है।

YOLOv7 मुद्रा अनुमान मॉडल लोड हो रहा है

आइए उन पुस्तकालयों को आयात करें जिनकी हमें मुद्रा अनुमान करने की आवश्यकता होगी:

import torch
from torchvision import transforms

from utils.datasets import letterbox
from utils.general import non_max_suppression_kpt
from utils.plots import output_to_keypoint, plot_skeleton_kpts

import matplotlib.pyplot as plt
import cv2
import numpy as np

torch और torchvision काफी सीधे हैं - YOLOv7 को PyTorch के साथ लागू किया गया है। utils.datasets, utils.general और utils.plots मॉड्यूल YOLOv7 प्रोजेक्ट से आते हैं, और हमें ऐसे तरीके प्रदान करते हैं जो मॉडल के अनुमान को चलाने के लिए प्रीप्रोसेसिंग और इनपुट तैयार करने में मदद करते हैं। उनमें से हैं letterbox() छवि को पैड करने के लिए, non_max_supression_keypoint() मॉडल के प्रारंभिक आउटपुट पर नॉन-मैक्स सप्रेशन एल्गोरिथम को चलाने के लिए और हमारी व्याख्या के लिए एक स्वच्छ आउटपुट का उत्पादन करने के लिए, साथ ही साथ output_to_keypoint() और plot_skeleton_kpts() किसी दी गई छवि में वास्तव में मुख्य बिंदु जोड़ने के तरीके, एक बार उनकी भविष्यवाणी हो जाने के बाद।

हम मॉडल को भार फ़ाइल से लोड कर सकते हैं torch.load(). यह जांचने के लिए एक फ़ंक्शन बनाएं कि क्या GPU उपलब्ध है, मॉडल को लोड करें, इसे अनुमान मोड में रखें और यदि उपलब्ध हो तो इसे GPU पर ले जाएं:

def load_model():
    device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
    model = torch.load('yolov7/yolov7-w6-pose.pt', map_location=device)['model']
    
    model.float().eval()

    if torch.cuda.is_available():
        
        
        model.half().to(device)
    return model

model = load_model()

सर्वोत्तम प्रथाओं, उद्योग-स्वीकृत मानकों और शामिल चीट शीट के साथ, Git सीखने के लिए व्यावहारिक मार्गदर्शिका देखें। Googling Git कमांड को रोकें और वास्तव में सीखना यह!

लोड किए गए मॉडल के साथ, आइए बनाते हैं a run_inference() विधि जो हमारे सिस्टम पर एक फ़ाइल की ओर इशारा करते हुए एक स्ट्रिंग को स्वीकार करती है। विधि OpenCV का उपयोग करके छवि को पढ़ेगी (cv2), इसे पैड करें letterbox(), इसमें परिवर्तन लागू करें, और इसे एक बैच में बदलें (मॉडल को प्रशिक्षित किया जाता है और हमेशा की तरह बैचों की अपेक्षा करता है):

def run_inference(url):
    image = cv2.imread(url) 
    
    image = letterbox(image, 960, stride=64, auto=True)[0] 
    
    image = transforms.ToTensor()(image) 
    
    image = image.unsqueeze(0) 
    output, _ = model(image) 
    return output, image

यहां, हमने रूपांतरित छवि लौटा दी है (क्योंकि हम मूल और उस पर प्लॉट निकालना चाहते हैं) और मॉडल के आउटपुट। इन आउटपुट में 45900 मुख्य बिंदु भविष्यवाणियां हैं, जिनमें से अधिकांश ओवरलैप हैं। हम इन अपरिष्कृत पूर्वानुमानों पर गैर-अधिकतम दमन लागू करना चाहेंगे, ठीक वैसे ही जैसे ऑब्जेक्ट डिटेक्शन भविष्यवाणियों के साथ (जहां कई बाउंडिंग बॉक्स की भविष्यवाणी की जाती है और फिर कुछ आत्मविश्वास और IoU थ्रेशोल्ड को देखते हुए उन्हें "ढह" दिया जाता है)। दमन के बाद, हम प्रत्येक मुख्य बिंदु को मूल छवि पर प्लॉट कर सकते हैं और इसे प्रदर्शित कर सकते हैं:

def visualize_output(output, image):
    output = non_max_suppression_kpt(output, 
                                     0.25, 
                                     0.65, 
                                     nc=model.yaml['nc'], 
                                     nkpt=model.yaml['nkpt'], 
                                     kpt_label=True)
    with torch.no_grad():
        output = output_to_keypoint(output)
    nimg = image[0].permute(1, 2, 0) * 255
    nimg = nimg.cpu().numpy().astype(np.uint8)
    nimg = cv2.cvtColor(nimg, cv2.COLOR_RGB2BGR)
    for idx in range(output.shape[0]):
        plot_skeleton_kpts(nimg, output[idx, 7:].T, 3)
    plt.figure(figsize=(12, 12))
    plt.axis('off')
    plt.imshow(nimg)
    plt.show()

अब, कुछ इनपुट इमेज के लिए, जैसे karate.jpg मुख्य कार्य निर्देशिका में, हम अनुमान चला सकते हैं, गैर-अधिकतम दमन कर सकते हैं और परिणामों को इसके साथ प्लॉट कर सकते हैं:

output, image = run_inference('./karate.jpg')
visualize_output(output, image)

इसका परिणाम यह होगा:

यह अनुमान लगाने के लिए काफी कठिन छवि है! दाहिनी ओर अभ्यासी की अधिकांश दाहिनी भुजा छिपी हुई है, और हम देख सकते हैं कि मॉडल ने अनुमान लगाया है कि यह छिपा हुआ है और शरीर के दाईं ओर, यह गायब है कि कोहनी मुड़ी हुई है और हाथ का एक हिस्सा सामने है . बाईं ओर अभ्यासी, जो अधिक स्पष्ट रूप से देखा जाता है, एक छिपे हुए पैर के साथ भी, सही ढंग से अनुमान लगाया जाता है।

तथ्य की बात के रूप में - एक व्यक्ति जो पीछे बैठा है, कैमरे के लिए लगभग पूरी तरह से अदृश्य बैठने के दौरान कूल्हों की स्थिति के आधार पर, उनकी मुद्रा का सही अनुमान लगाया गया है। नेटवर्क की ओर से बढ़िया काम!

निष्कर्ष

इस गाइड में - हमने YOLOv7 पर एक संक्षिप्त नज़र डाली है, YOLO परिवार में नवीनतम उन्नति, जो YOLOR के शीर्ष पर निर्मित होती है, और आगे अधिकांश YOLO- आधारित मॉडल की मानक ऑब्जेक्ट डिटेक्शन क्षमताओं से परे इंस्टेंस सेगमेंटेशन और कीपॉइंट डिटेक्शन क्षमताएं प्रदान करती है। .

फिर हमने इस पर एक नज़र डाली कि कैसे हम रिलीज़ की गई वज़न फ़ाइलों को डाउनलोड कर सकते हैं, उन्हें एक मॉडल बनाने के लिए लोड कर सकते हैं और प्रभावशाली परिणाम देकर मनुष्यों के लिए मुद्रा अनुमान अनुमान लगा सकते हैं।

आगे जाना - कंप्यूटर विजन के लिए व्यावहारिक गहन शिक्षण

आपका जिज्ञासु स्वभाव आपको और आगे जाना चाहता है? हम अनुशंसा करते हैं कि हमारी जाँच करें कोर्स: "पायथन के साथ कंप्यूटर विजन के लिए प्रैक्टिकल डीप लर्निंग".

पायथन प्लेटोब्लॉकचैन डेटा इंटेलिजेंस में YOLOv7 के साथ पोज़ एस्टीमेशन/कीपॉइंट डिटेक्शन। लंबवत खोज। ऐ.

एक और कंप्यूटर विजन कोर्स?

हम MNIST अंकों या MNIST फैशन का वर्गीकरण नहीं करेंगे। उन्होंने बहुत समय पहले अपनी भूमिका निभाई थी। उन्नत ब्लैक-बॉक्स आर्किटेक्चर को प्रदर्शन का बोझ उठाने देने से पहले बहुत से सीखने के संसाधन बुनियादी डेटासेट और बुनियादी आर्किटेक्चर पर ध्यान केंद्रित कर रहे हैं।

हम पर ध्यान केंद्रित करना चाहते हैं रहस्योद्घाटन, व्यावहारिकता, समझ, अंतर्ज्ञान और वास्तविक परियोजनाएं. सीखना चाहते है कैसे आप कुछ कर सकते है? हम आपको हमारे दिमाग की छवियों को संसाधित करने से लेकर स्तन कैंसर के लिए एक शोध-ग्रेड डीप लर्निंग क्लासिफायर लिखने से लेकर गहन शिक्षण नेटवर्क तक ले जाएंगे जो "मतिभ्रम" करते हैं, आपको व्यावहारिक कार्य के माध्यम से सिद्धांत और सिद्धांत सिखाते हैं, आपको इससे लैस करते हैं कंप्यूटर विज़न को हल करने के लिए गहन शिक्षण को लागू करने में विशेषज्ञ बनने के लिए जानकारी और उपकरण।

अंदर क़या है?

  • दृष्टि के पहले सिद्धांत और कंप्यूटर को "देखना" कैसे सिखाया जा सकता है
  • कंप्यूटर विज़न के विभिन्न कार्य और अनुप्रयोग
  • व्यापार के उपकरण जो आपके काम को आसान बना देंगे
  • कंप्यूटर विज़न के लिए डेटासेट खोजना, बनाना और उपयोग करना
  • दृढ़ तंत्रिका नेटवर्क का सिद्धांत और अनुप्रयोग
  • डेटासेट में डोमेन शिफ्ट, सह-घटना और अन्य पूर्वाग्रहों को संभालना
  • अपने लाभ के लिए सीखने और दूसरों के प्रशिक्षण समय और कम्प्यूटेशनल संसाधनों का उपयोग करना स्थानांतरित करें
  • एक अत्याधुनिक स्तन कैंसर क्लासिफायर का निर्माण और प्रशिक्षण
  • मुख्यधारा के विचारों पर संदेह की एक स्वस्थ खुराक कैसे लागू करें और व्यापक रूप से अपनाई गई तकनीकों के निहितार्थ को समझें
  • t-SNE और PCA का उपयोग करके ConvNet के "अवधारणा स्थान" की कल्पना करना
  • बेहतर परिणाम प्राप्त करने के लिए कंपनियां कंप्यूटर विज़न तकनीकों का उपयोग कैसे करती हैं, इसका केस अध्ययन
  • उचित मॉडल मूल्यांकन, गुप्त स्थान विज़ुअलाइज़ेशन और मॉडल के ध्यान की पहचान करना
  • डोमेन अनुसंधान करना, अपने स्वयं के डेटासेट को संसाधित करना और मॉडल परीक्षण स्थापित करना
  • अत्याधुनिक वास्तुकला, विचारों की प्रगति, उन्हें क्या विशिष्ट बनाता है और उन्हें कैसे लागू किया जाए
  • KerasCV - अत्याधुनिक पाइपलाइन और मॉडल बनाने के लिए WIP लाइब्रेरी
  • पेपर कैसे पार्स करें और पढ़ें और उन्हें स्वयं कैसे लागू करें
  • अपने आवेदन के आधार पर मॉडल का चयन
  • एंड-टू-एंड मशीन लर्निंग पाइपलाइन बनाना
  • तेजी से आर-सीएनएन, रेटिनानेट्स, एसएसडी और योलो के साथ ऑब्जेक्ट डिटेक्शन पर लैंडस्केप और अंतर्ज्ञान
  • इंस्टेंस और सिमेंटिक सेगमेंटेशन
  • YOLOv5 . के साथ रीयल-टाइम ऑब्जेक्ट रिकग्निशन
  • YOLOv5 ऑब्जेक्ट डिटेक्टरों का प्रशिक्षण
  • KerasNLP (उद्योग-शक्ति WIP पुस्तकालय) का उपयोग कर ट्रांसफॉर्मर के साथ कार्य करना
  • छवियों के कैप्शन उत्पन्न करने के लिए ट्रांसफॉर्मर को कन्वनेट के साथ एकीकृत करना
  • DeepDream
  • कंप्यूटर विज़न के लिए डीप लर्निंग मॉडल ऑप्टिमाइज़ेशन

समय टिकट:

से अधिक स्टैकब्यूज