قم بوضع التقدير / الكشف عن نقطة المفاتيح باستخدام YOLOv7 في ذكاء بيانات Python PlatoBlockchain. البحث العمودي. عاي.

ضع تقديرًا / اكتشاف نقطة أساسية باستخدام YOLOv7 في Python

المُقدّمة

يعد اكتشاف الأشياء مجالًا كبيرًا في رؤية الكمبيوتر ، وأحد أهم تطبيقات رؤية الكمبيوتر "في البرية".

لا يعد اكتشاف الكائنات موحدًا مثل تصنيف الصور ، ويرجع ذلك أساسًا إلى أن معظم التطورات الجديدة يتم إجراؤها عادةً بواسطة باحثين فرديين ومشرفين على الصيانة والمطورين ، بدلاً من المكتبات وأطر العمل الكبيرة. من الصعب تجميع البرامج النصية المساعدة الضرورية في إطار عمل مثل TensorFlow أو PyTorch والحفاظ على إرشادات API التي وجهت عملية التطوير حتى الآن.

هذا يجعل اكتشاف الكائن أكثر تعقيدًا إلى حد ما ، وعادةً ما يكون أكثر تفصيلاً (ولكن ليس دائمًا) ، وأقل سهولة من تصنيف الصور.

لحسن الحظ للجماهير - طورت Ultralytics واجهة برمجة تطبيقات بسيطة وقوية جدًا ورائعة لاكتشاف الكائنات حول YOLOv5 الخاصة بهم والتي تم تمديدها من قبل فرق البحث والتطوير الأخرى إلى إصدارات أحدث ، مثل YOLOv7.

في هذا الدليل المختصر ، سنقوم بتنفيذ Pose Estimation (Keypoint Detection) في Python ، باستخدام أحدث إصدارات YOLOv7.

يمكن أن تكون نقاط المفاتيح نقاطًا مختلفة - أجزاء من الوجه ، وأطراف من الجسم ، وما إلى ذلك. تقدير الوضع هو حالة خاصة لاكتشاف نقطة رئيسية - حيث تكون النقاط جزءًا من جسم الإنسان ، ويمكن استخدامها لاستبدال أجهزة تتبع الموقع باهظة الثمن ، تمكين التحكم في الروبوتات عبر الهواء ، وتشغيل عصر جديد من التعبير عن الذات البشرية من خلال AR و VR.

YOLO و Pose Estimation

YOLO (أنت تنظر مرة واحدة فقط) هي منهجية ، بالإضافة إلى مجموعة من النماذج المصممة لاكتشاف الكائنات. منذ البداية في عام 2015 ، تم اقتراح YOLOv1 و YOLOv2 (YOLO9000) و YOLOv3 من قبل نفس المؤلف (المؤلفين) - واستمر مجتمع التعلم العميق في التقدم مفتوح المصدر في السنوات المستمرة.

Ultralytics 'YOLOv5 هو أول تطبيق واسع النطاق لـ YOLO في PyTorch ، مما جعله أكثر سهولة من أي وقت مضى ، ولكن السبب الرئيسي وراء اكتساب YOLOv5 لمثل هذا الموطئ هو أيضًا واجهة برمجة التطبيقات القوية والبسيطة الجميلة المبنية حوله. يزيل المشروع التفاصيل غير الضرورية ، مع السماح بالتخصيص ، عمليا جميع تنسيقات التصدير القابلة للاستخدام ، ويستخدم ممارسات مذهلة تجعل المشروع بأكمله فعالًا ومثاليًا قدر الإمكان.

لا يزال YOLOv5 هو المشروع الأساسي لبناء نماذج اكتشاف الكائنات ، والعديد من المستودعات التي تهدف إلى تطوير طريقة YOLO تبدأ بـ YOLOv5 كخط أساس وتقدم واجهة برمجة تطبيقات مماثلة (أو ببساطة تفرع من المشروع والبناء فوقه). هذه هي حالة YOLOR (أنت تتعلم تمثيل واحد فقط) و YOLOv7 التي بنيت على رأس YOLOR (نفس المؤلف) وهو أحدث تقدم في منهجية YOLO.

YOLOv7 ليس مجرد بنية لاكتشاف الكائنات - فهو يوفر رؤوسًا جديدة للنماذج ، يمكنها إخراج نقاط المفاتيح (الهياكل العظمية) وإجراء تجزئة للمثيل إلى جانب انحدار الصندوق المحيط فقط ، وهو ما لم يكن قياسيًا مع نماذج YOLO السابقة. هذا ليس مفاجئًا ، نظرًا لأنه تم إعادة توجيه العديد من بنيات اكتشاف الكائنات لمهام تجزئة المثيل ومهام اكتشاف نقطة المفاتيح في وقت سابق أيضًا ، بسبب البنية العامة المشتركة ، مع مخرجات مختلفة اعتمادًا على المهمة. على الرغم من أنه ليس من المستغرب - من المحتمل أن يصبح دعم تجزئة المثيل واكتشاف نقطة المفاتيح المعيار الجديد للنماذج المستندة إلى 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 Notebooks إلى دليل العمل الرئيسي في الخلية التالية ، حتى بعد الاتصال %cd dirname، لذلك سيتعين عليك الاستمرار في الاتصال به في كل خلية تريد إجراء عملية فيها. تتذكر دفاتر Jupyter Notebooks المحلية التغيير ، لذلك لا داعي للاستمرار في استدعاء الأمر.

عندما تقوم بتشغيل كود بمجموعة معينة من الأوزان - سيتم تنزيلها وتخزينها في هذا الدليل. لإجراء تقدير الوضع ، سنرغب في تنزيل الأوزان لنموذج 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 ملف الأوزان ، والذي يمكن استخدامه لتحميل وإعادة بناء نموذج مدرب لتقدير الوضع.

تحميل نموذج تقدير الوضع 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() لتشغيل خوارزمية Non-Max Supression على الإخراج الأولي للنموذج ولإنتاج مخرجات نظيفة لتفسيرنا ، بالإضافة إلى output_to_keypoint() و plot_skeleton_kpts() طرق لإضافة نقاط أساسية إلى صورة معينة ، بمجرد توقعها.

يمكننا تحميل النموذج من ملف الوزن باستخدام torch.load(). لنقم بإنشاء وظيفة للتحقق مما إذا كانت وحدة معالجة الرسومات متاحة ، وقم بتحميل النموذج ، ووضعه في وضع الاستدلال ونقله إلى وحدة معالجة الرسومات إذا كان ذلك متاحًا:

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 وفي الواقع تعلم ذلك!

مع تحميل النموذج ، فلنقم بإنشاء ملف 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 تنبؤات رئيسية ، يتداخل معظمها. سنرغب في تطبيق Non-Max Supression على هذه التنبؤات الأولية ، تمامًا كما هو الحال مع تنبؤات اكتشاف الكائنات (حيث يتم توقع العديد من المربعات المحيطة ثم يتم "انهيارها" نظرًا لبعض الثقة وعتبة 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)

وينتج عنه:

هذه صورة يصعب استنتاجها! معظم الذراع اليمنى للممارس على اليمين مخفية ، ويمكننا أن نرى أن النموذج يستدل على أنه مخفي وعلى يمين الجسم ، في عداد المفقودين أن الكوع مثني وأن جزءًا من الذراع في المقدمة . الممارس على اليسار ، والذي يمكن رؤيته بوضوح أكثر ، يتم استنتاجه بشكل صحيح ، حتى مع وجود ساق خفية.

في واقع الأمر - شخص يجلس في الخلف ، تكاد تكون غير مرئية للكاميرا تم تقدير وضعهم بشكل صحيح على ما يبدو ، بناءً على وضع الوركين أثناء الجلوس. عمل رائع نيابة عن الشبكة!

وفي الختام

في هذا الدليل - لقد ألقينا نظرة سريعة على YOLOv7 ، أحدث تقدم في عائلة YOLO ، والذي يعتمد على YOLOR ، ويوفر كذلك إمكانية تجزئة المثيلات وإمكانيات الكشف عن نقاط المفاتيح بما يتجاوز قدرات اكتشاف الكائنات القياسية لمعظم الطُرز المستندة إلى YOLO .

بعد ذلك ، ألقينا نظرة على كيفية تنزيل ملفات الوزن التي تم إصدارها وتحميلها لإنشاء نموذج وإجراء استدلال تقدير الوضع للبشر ، مما أدى إلى نتائج مبهرة.

المضي قدمًا - التعلم العميق العملي لرؤية الكمبيوتر

طبيعتك الفضولية تجعلك ترغب في الذهاب إلى أبعد من ذلك؟ نوصي بالتحقق من الدورة: "التعلم العميق العملي لرؤية الكمبيوتر باستخدام Python".

قم بوضع التقدير / الكشف عن نقطة المفاتيح باستخدام YOLOv7 في ذكاء بيانات Python PlatoBlockchain. البحث العمودي. عاي.

دورة أخرى في الرؤية الحاسوبية؟

لن نقوم بتصنيف أرقام MNIST أو أزياء MNIST. لقد خدموا دورهم منذ وقت طويل. يركز عدد كبير جدًا من موارد التعلم على مجموعات البيانات الأساسية والبنى الأساسية قبل السماح لبنى الصندوق الأسود المتقدمة بتحمل عبء الأداء.

نريد التركيز على إزالة الغموض, التطبيق العملي, فهم, حدس و مشاريع حقيقية. يرغب فى التعلم كيف يمكنك أن تحدث فرقا؟ سنأخذك في جولة من طريقة معالجة أدمغتنا للصور إلى كتابة مصنف تعليمي عميق من الدرجة البحثية لسرطان الثدي إلى شبكات التعلم العميق التي "تهلوس" ، وتعليمك المبادئ والنظرية من خلال العمل العملي ، وتزويدك الدراية والأدوات لتصبح خبيرًا في تطبيق التعلم العميق لحل رؤية الكمبيوتر.

ماذا يوجد في الداخل؟

  • المبادئ الأولى للرؤية وكيف يمكن تعليم أجهزة الكمبيوتر "الرؤية"
  • مهام وتطبيقات مختلفة للرؤية الحاسوبية
  • أدوات التجارة التي ستجعل عملك أسهل
  • البحث عن مجموعات البيانات وإنشائها واستخدامها للرؤية الحاسوبية
  • نظرية وتطبيق الشبكات العصبية التلافيفية
  • التعامل مع تحول المجال والتواجد المشترك والتحيزات الأخرى في مجموعات البيانات
  • نقل التعلم والاستفادة من وقت تدريب الآخرين والموارد الحسابية لصالحك
  • بناء وتدريب مصنف حديث لسرطان الثدي
  • كيفية تطبيق جرعة صحية من الشك على الأفكار السائدة وفهم الآثار المترتبة على التقنيات المعتمدة على نطاق واسع
  • تصور "الفضاء المفهوم" لـ ConvNet باستخدام t-SNE و PCA
  • دراسات حالة عن كيفية استخدام الشركات لتقنيات الرؤية الحاسوبية لتحقيق نتائج أفضل
  • تقييم النموذج المناسب ، تصور الفضاء الكامن وتحديد انتباه النموذج
  • إجراء بحث في المجال ومعالجة مجموعات البيانات الخاصة بك وإنشاء اختبارات نموذجية
  • أحدث البنيات ، تطور الأفكار ، ما الذي يجعلها فريدة من نوعها وكيفية تنفيذها
  • KerasCV - مكتبة العمل قيد التقدم لإنشاء خطوط الأنابيب والنماذج الحديثة
  • كيف تحلل وتقرأ الأوراق وتنفذها بنفسك
  • اختيار النماذج حسب التطبيق الخاص بك
  • إنشاء خط أنابيب تعلم آلي شامل
  • المناظر الطبيعية والحدس في اكتشاف الكائنات باستخدام شبكات R-CNN و RetinaNets و SSDs و YOLO أسرع
  • المثيل والتجزئة الدلالية
  • التعرف على الكائنات في الوقت الفعلي باستخدام YOLOv5
  • تدريب كاشفات الأجسام YOLOv5
  • العمل مع المحولات باستخدام KerasNLP (مكتبة WIP ذات قوة الصناعة)
  • دمج المحولات مع ConvNets لإنشاء تسميات توضيحية للصور
  • ديب دريم
  • تحسين نموذج التعلم العميق لرؤية الكمبيوتر

الطابع الزمني:

اكثر من ستاكابوز