Python PlatoBlockchain ڈیٹا انٹیلی جنس میں YOLOv7 کے ساتھ پوز اسٹیمیشن/کی پوائنٹ کا پتہ لگانا۔ عمودی تلاش۔ عی

Python میں YOLOv7 کے ساتھ پوز تخمینہ/کی پوائنٹ کا پتہ لگانا

تعارف

آبجیکٹ کا پتہ لگانا کمپیوٹر ویژن کا ایک بڑا میدان ہے، اور کمپیوٹر ویژن کی "جنگلی میں" ایک اہم ترین ایپلی کیشن ہے۔

آبجیکٹ کا پتہ لگانا تصویر کی درجہ بندی کی طرح معیاری نہیں ہے، بنیادی طور پر اس لیے کہ زیادہ تر نئی پیشرفتیں بڑی لائبریریوں اور فریم ورک کے بجائے انفرادی محققین، دیکھ بھال کرنے والوں اور ڈویلپرز کے ذریعے کی جاتی ہیں۔ TensorFlow یا PyTorch جیسے فریم ورک میں ضروری یوٹیلیٹی اسکرپٹس کو پیک کرنا اور API کے رہنما خطوط کو برقرار رکھنا مشکل ہے جو اب تک ترقی کی رہنمائی کرتے ہیں۔

یہ آبجیکٹ کا پتہ لگانے کو کچھ زیادہ پیچیدہ بناتا ہے، عام طور پر زیادہ لفظی (لیکن ہمیشہ نہیں)، اور تصویر کی درجہ بندی سے کم قابل رسائی۔

خوش قسمتی سے عوام کے لیے - Ultralytics نے اپنے YOLOv5 کے ارد گرد ایک سادہ، بہت طاقتور اور خوبصورت آبجیکٹ کا پتہ لگانے والا API تیار کیا ہے جسے دیگر ریسرچ اور ڈیولپمنٹ ٹیموں نے YOLOv7 جیسے نئے ورژنز میں بڑھا دیا ہے۔

اس مختصر گائیڈ میں، ہم جدید ترین YOLOv7 کے ساتھ Python میں پوز اسٹیمیشن (Keypoint Detection) انجام دیں گے۔

کلیدی پوائنٹس مختلف پوائنٹس ہو سکتے ہیں – چہرے کے حصے، جسم کے اعضاء وغیرہ۔ پوز کا تخمینہ کلیدی پوائنٹ کی کھوج کا ایک خاص معاملہ ہے – جس میں پوائنٹس انسانی جسم کے حصے ہوتے ہیں، اور مہنگے پوزیشن ٹریکنگ ہارڈویئر کو تبدیل کرنے کے لیے استعمال کیا جا سکتا ہے، اوور دی ایئر روبوٹکس کنٹرول کو فعال کریں، اور AR اور VR کے ذریعے انسانی خود کے اظہار کے نئے دور کو طاقت دیں۔

یولو اور پوز کا تخمینہ

یولو (آپ صرف ایک بار دیکھیں) ایک طریقہ کار ہے، اور ساتھ ہی آبجیکٹ کا پتہ لگانے کے لیے بنائے گئے ماڈلز کا خاندان۔ 2015 میں آغاز کے بعد سے، YOLOv1، YOLOv2 (YOLO9000) اور YOLOv3 ایک ہی مصنف (مصنفوں) کی طرف سے تجویز کیے گئے ہیں - اور گہری سیکھنے والی کمیونٹی نے مسلسل سالوں میں کھلے ذرائع سے ترقی کے ساتھ جاری رکھا۔

Ultralytics' YOLOv5 PyTorch میں YOLO کا پہلا بڑے پیمانے پر نفاذ ہے، جس نے اسے پہلے سے کہیں زیادہ قابل رسائی بنایا ہے، لیکن YOLOv5 کے اس قدر قدم جمانے کی بنیادی وجہ بھی اس کے ارد گرد بنایا گیا خوبصورت سادہ اور طاقتور API ہے۔ پراجیکٹ غیر ضروری تفصیلات کو ختم کرتا ہے، جبکہ حسب ضرورت کی اجازت دیتا ہے، عملی طور پر تمام قابل استعمال برآمدی فارمیٹس، اور حیرت انگیز طریقوں کو استعمال کرتا ہے جو پورے پروجیکٹ کو موثر اور بہترین بناتا ہے۔

YOLOv5 اب بھی ایک اہم پروجیکٹ ہے جس کے ساتھ آبجیکٹ ڈیٹیکشن ماڈلز کی تعمیر ہے، اور بہت سی ریپوزٹریز جن کا مقصد YOLO طریقہ کار کو آگے بڑھانا ہے YOLOv5 کو ایک بیس لائن کے طور پر شروع کرتے ہیں اور اسی طرح کا API پیش کرتے ہیں (یا صرف اس پروجیکٹ کو فورک کریں اور اس کے اوپر تعمیر کریں)۔ کا معاملہ ایسا ہی ہے۔ YOLOR (آپ صرف ایک نمائندگی سیکھتے ہیں) اور YOLOv7 جو YOLOR (ایک ہی مصنف) کے اوپر بنایا گیا ہے جو YOLO طریقہ کار میں تازہ ترین پیشرفت ہے۔

YOLOv7 صرف ایک آبجیکٹ کا پتہ لگانے کا فن تعمیر نہیں ہے - نئے ماڈل ہیڈز فراہم کرتا ہے، جو کلیدی پوائنٹس (کنکال) کو آؤٹ پٹ کر سکتا ہے اور صرف باؤنڈنگ باکس ریگریشن کے علاوہ مثال کی تقسیم بھی کر سکتا ہے، جو پچھلے YOLO ماڈلز کے ساتھ معیاری نہیں تھا۔ یہ حیرت کی بات نہیں ہے، کیونکہ بہت سے آبجیکٹ کا پتہ لگانے کے فن تعمیر کو پہلے بھی مثال کے طور پر سیگمنٹیشن اور کلیدی پوائنٹ کا پتہ لگانے کے کاموں کے لیے دوبارہ تیار کیا گیا تھا، مشترکہ عمومی فن تعمیر کی وجہ سے، کام پر منحصر مختلف آؤٹ پٹ کے ساتھ۔ اگرچہ یہ حیرت کی بات نہیں ہے - معاون مثال کی تقسیم اور کلیدی نقطہ کا پتہ لگانے کا امکان YOLO پر مبنی ماڈلز کے لیے نیا معیار بن جائے گا، جس نے چند سال پہلے عملی طور پر دیگر تمام دو مراحل کے ڈٹیکٹروں سے بہتر کارکردگی کا مظاہرہ کرنا شروع کر دیا ہے۔

یہ مثال کی تقسیم اور کلیدی پوائنٹ کا پتہ لگانے کو پہلے سے کہیں زیادہ تیز تر بناتا ہے، دو مرحلے کے ڈٹیکٹروں کے مقابلے میں ایک آسان فن تعمیر کے ساتھ۔

یہ ماڈل خود تعمیراتی تبدیلیوں کے ساتھ ساتھ تربیت کے پہلوؤں کو بہتر بنانے کے ذریعے بنایا گیا تھا، جسے "بیگ آف فریبیز" کا نام دیا گیا، جس نے تخمینہ لاگت میں اضافہ کیے بغیر درستگی میں اضافہ کیا۔

YOLOv7 انسٹال کرنا

آئیے آگے بڑھیں اور GitHub سے پروجیکٹ انسٹال کریں:

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

یہ تخلیق کرتا ہے a 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 Notebooks کال کرنے کے بعد بھی، اگلے سیل میں مین ورکنگ ڈائرکٹری پر ری سیٹ ہو جاتی ہے۔ %cd dirname، لہذا آپ کو ہر اس سیل میں اسے کال کرتے رہنا پڑے گا جس میں آپ آپریشن کرنا چاہتے ہیں۔ مقامی Jupyter نوٹ بک اس تبدیلی کو یاد رکھتی ہیں، لہذا کمانڈ کو کال کرتے رہنے کی ضرورت نہیں ہے۔

جب بھی آپ وزن کے دیے گئے سیٹ کے ساتھ کوڈ چلاتے ہیں - وہ اس ڈائرکٹری میں ڈاؤن لوڈ اور اسٹور کیے جائیں گے۔ پوز کا تخمینہ لگانے کے لیے، ہم اس کام کے لیے پہلے سے تربیت یافتہ YOLOv7 ماڈل کے وزن کو ڈاؤن لوڈ کرنا چاہیں گے، جو کہ ذیل میں پایا جا سکتا ہے۔ /releases/download/ GitHub پر ٹیب:

! 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 وزن کی فائل، جس کا استعمال پوز کے تخمینے کے لیے تربیت یافتہ ماڈل کو لوڈ کرنے اور اس کی تشکیل نو کے لیے کیا جا سکتا ہے۔

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 دستیاب ہے، ماڈل لوڈ کریں، اسے inference موڈ میں رکھیں اور اگر دستیاب ہو تو اسے 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 سیکھنے کے لیے ہمارے ہینڈ آن، عملی گائیڈ کو دیکھیں۔ گوگلنگ گٹ کمانڈز کو روکیں اور اصل میں سیکھ یہ!

ماڈل لوڈ ہونے کے ساتھ، آئیے ایک بنائیں 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 مین ورکنگ ڈائرکٹری میں، ہم انفرنس چلا سکتے ہیں، Non-Max Supression کو انجام دے سکتے ہیں اور اس کے ساتھ نتائج کو پلاٹ کر سکتے ہیں:

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

اس کے نتائج:

یہ اندازہ لگانا کافی مشکل تصویر ہے! دائیں طرف پریکٹیشنر کے دائیں بازو کا زیادہ تر حصہ پوشیدہ ہے، اور ہم دیکھ سکتے ہیں کہ ماڈل نے اندازہ لگایا کہ یہ چھپا ہوا ہے اور جسم کے دائیں طرف، غائب ہے کہ کہنی مڑی ہوئی ہے اور بازو کا ایک حصہ سامنے ہے۔ . بائیں طرف پریکٹیشنر، جو بہت زیادہ واضح طور پر دیکھا جاتا ہے، صحیح طریقے سے اندازہ لگایا جاتا ہے، یہاں تک کہ ایک چھپی ہوئی ٹانگ کے ساتھ.

حقیقت کے طور پر - ایک شخص جو پیچھے بیٹھا ہے، کیمرے کے لیے تقریباً مکمل طور پر پوشیدہ ان کے پوز کا بظاہر صحیح اندازہ لگایا گیا ہے، صرف بیٹھتے وقت کولہوں کی پوزیشن کی بنیاد پر۔ نیٹ ورک کی جانب سے بہت اچھا کام!

نتیجہ

تھی گائیڈ میں - ہم نے YOLO خاندان کی تازہ ترین پیشرفت YOLOv7 پر ایک مختصر نظر ڈالی ہے، جو YOLOR کے سب سے اوپر بنتی ہے، اور زیادہ تر YOLO پر مبنی ماڈلز کی معیاری آبجیکٹ کا پتہ لگانے کی صلاحیتوں سے آگے مثالوں کی تقسیم اور کلیدی نشان کی شناخت کی صلاحیتیں فراہم کرتی ہے۔ .

اس کے بعد ہم نے اس پر ایک نظر ڈالی ہے کہ ہم کس طرح جاری کردہ وزن کی فائلوں کو ڈاؤن لوڈ کر سکتے ہیں، ایک ماڈل بنانے کے لیے ان کو لوڈ کر سکتے ہیں اور انسانوں کے لیے پوز کا تخمینہ لگا سکتے ہیں، جس سے متاثر کن نتائج برآمد ہوتے ہیں۔

مزید جانا - کمپیوٹر وژن کے لیے عملی گہری تعلیم

آپ کی جستجو کرنے والی فطرت آپ کو مزید آگے بڑھنا چاہتی ہے؟ ہم اپنے کو چیک کرنے کی تجویز کرتے ہیں۔ کورس: "Python کے ساتھ کمپیوٹر وژن کے لیے عملی گہری تعلیم".

Python PlatoBlockchain ڈیٹا انٹیلی جنس میں YOLOv7 کے ساتھ پوز اسٹیمیشن/کی پوائنٹ کا پتہ لگانا۔ عمودی تلاش۔ عی

ایک اور کمپیوٹر وژن کورس؟

ہم MNIST ہندسوں یا MNIST فیشن کی درجہ بندی نہیں کریں گے۔ انہوں نے بہت پہلے اپنے حصے کی خدمت کی۔ بہت سارے سیکھنے کے وسائل بنیادی ڈیٹاسیٹس اور بنیادی فن تعمیرات پر توجہ مرکوز کر رہے ہیں اس سے پہلے کہ جدید بلیک باکس فن تعمیر کو کارکردگی کا بوجھ اٹھانے دیا جائے۔

ہم توجہ مرکوز کرنا چاہتے ہیں۔ demystification, عملیی, افہام و تفہیم, انترجشتھان اور حقیقی منصوبوں. سیکھنا چاہتے ہیں۔ کس طرح کیا آپ فرق کر سکتے ہیں؟ ہم آپ کو ایک سفر پر لے جائیں گے جس طرح سے ہمارے دماغ چھاتی کے کینسر کے لیے ایک ریسرچ گریڈ ڈیپ لرننگ کلاسیفائر لکھنے سے لے کر گہرے سیکھنے کے نیٹ ورکس تک لے جائیں گے جو کہ "فریب" کرتے ہیں، عملی کام کے ذریعے آپ کو اصول اور تھیوری سکھاتے ہیں، کمپیوٹر وژن کو حل کرنے کے لیے گہری سیکھنے کا اطلاق کرنے میں ماہر بننے کا طریقہ اور اوزار۔

اندر کیاہے؟

  • بصارت کے پہلے اصول اور کمپیوٹر کو "دیکھنا" کیسے سکھایا جا سکتا ہے۔
  • کمپیوٹر وژن کے مختلف کام اور ایپلی کیشنز
  • تجارت کے اوزار جو آپ کے کام کو آسان بنائیں گے۔
  • کمپیوٹر وژن کے لیے ڈیٹاسیٹس کی تلاش، تخلیق اور استعمال
  • Convolutional Neural Networks کا نظریہ اور اطلاق
  • ڈیٹا سیٹس میں ڈومین شفٹ، شریک ہونے اور دیگر تعصبات کو ہینڈل کرنا
  • سیکھنے کو منتقل کریں اور دوسروں کے تربیتی وقت اور کمپیوٹیشنل وسائل کو اپنے فائدے کے لیے استعمال کریں۔
  • ایک جدید ترین چھاتی کے کینسر کی درجہ بندی کرنے والے کی تعمیر اور تربیت
  • مرکزی دھارے کے خیالات پر شکوک و شبہات کی صحت مند خوراک کو کیسے لاگو کیا جائے اور وسیع پیمانے پر اختیار کی جانے والی تکنیکوں کے مضمرات کو کیسے سمجھا جائے
  • T-SNE اور PCA کا استعمال کرتے ہوئے ConvNet کی "تصور کی جگہ" کا تصور کرنا
  • کیس اسٹڈیز کہ کمپنیاں بہتر نتائج حاصل کرنے کے لیے کمپیوٹر ویژن تکنیک کا استعمال کیسے کرتی ہیں۔
  • ماڈل کی مناسب تشخیص، اویکت جگہ کا تصور اور ماڈل کی توجہ کی نشاندہی کرنا
  • ڈومین ریسرچ کرنا، آپ کے اپنے ڈیٹا سیٹس پر کارروائی کرنا اور ماڈل ٹیسٹ قائم کرنا
  • جدید فن تعمیر، خیالات کی ترقی، انہیں کیا منفرد بناتا ہے اور انہیں کیسے نافذ کیا جائے
  • KerasCV – جدید ترین پائپ لائنز اور ماڈل بنانے کے لیے ایک WIP لائبریری
  • پیپرز کو کیسے پارس کریں اور پڑھیں اور خود ان پر عمل کریں۔
  • آپ کی درخواست پر منحصر ماڈلز کا انتخاب
  • آخر سے آخر تک مشین لرننگ پائپ لائن بنانا
  • تیز تر R-CNNs، RetinaNets، SSDs اور YOLO کے ساتھ آبجیکٹ کا پتہ لگانے پر زمین کی تزئین اور بصیرت
  • مثال اور سیمنٹک سیگمنٹیشن
  • YOLOv5 کے ساتھ ریئل ٹائم آبجیکٹ کی شناخت
  • YOLOv5 آبجیکٹ ڈیٹیکٹر کی تربیت
  • KerasNLP (صنعت کی طاقت WIP لائبریری) کا استعمال کرتے ہوئے ٹرانسفارمرز کے ساتھ کام کرنا
  • تصاویر کے کیپشن بنانے کے لیے ConvNets کے ساتھ ٹرانسفارمرز کو مربوط کرنا
  • DeepDream
  • کمپیوٹر ویژن کے لیے ڈیپ لرننگ ماڈل کی اصلاح

ٹائم اسٹیمپ:

سے زیادہ Stackabuse