Python PlatoBlockchain Veri Zekasında YOLOv7 ile Poz Tahmini/Anahtar Nokta Tespiti. Dikey Arama. Ai.

Python'da YOLOv7 ile Poz Tahmini/Anahtar Nokta Tespiti

Giriş

Nesne algılama, bilgisayarla görü alanında geniş bir alandır ve bilgisayarlı görünün “vahşi doğada” en önemli uygulamalarından biridir.

Nesne algılama, görüntü sınıflandırması kadar standartlaştırılmamıştır, çünkü yeni gelişmelerin çoğu tipik olarak büyük kütüphaneler ve çerçeveler yerine bireysel araştırmacılar, bakımcılar ve geliştiriciler tarafından yapılır. Gerekli yardımcı program komut dosyalarını TensorFlow veya PyTorch gibi bir çerçevede paketlemek ve şimdiye kadar geliştirmeyi yönlendiren API yönergelerini sürdürmek zordur.

Bu, nesne algılamayı biraz daha karmaşık, tipik olarak daha ayrıntılı (ancak her zaman değil) ve görüntü sınıflandırmasından daha az ulaşılabilir hale getirir.

Neyse ki kitleler için - Ultralytics, diğer araştırma ve geliştirme ekipleri tarafından YOLOv5 gibi daha yeni sürümlere genişletilen YOLOv7'leri etrafında basit, çok güçlü ve güzel bir nesne algılama API'si geliştirdi.

Bu kısa kılavuzda, son teknoloji YOLOv7 ile Python'da Poz Tahmini (Keypoint Detection) gerçekleştireceğiz.

Anahtar noktalar çeşitli noktalar olabilir – bir yüzün parçaları, bir vücudun uzuvları, vb. Poz tahmini, noktaların bir insan vücudunun parçaları olduğu ve pahalı konum izleme donanımının yerini almak için kullanılabileceği anahtar nokta tespitinin özel bir durumudur. havadan robotik kontrolü etkinleştirin ve AR ve VR aracılığıyla yeni bir insan kendini ifade etme çağına güç verin.

YOLO ve Poz Tahmini

YOLO (Sadece Bir Kez Bakarsınız) nesne algılama için oluşturulmuş bir model ailesi olduğu kadar bir metodolojidir. 2015'teki başlangıcından bu yana, YOLOv1, YOLOv2 (YOLOv9000 (YOLO3) ve YOLOvXNUMX aynı yazar(lar) tarafından önerildi - ve derin öğrenme topluluğu, devam eden yıllarda açık kaynaklı gelişmelerle devam etti.

Ultralytics'in YOLOv5'i YOLO'nun PyTorch'ta her zamankinden daha erişilebilir olmasını sağlayan ilk büyük ölçekli uygulamasıdır, ancak YOLOv5'in böyle bir dayanak kazanmasının ana nedeni, aynı zamanda onun etrafında oluşturulmuş güzel, basit ve güçlü API'dir. Proje, özelleştirilebilirliğe, pratik olarak tüm kullanılabilir dışa aktarma biçimlerine izin verirken gereksiz ayrıntıları soyutlar ve tüm projeyi hem verimli hem de olabildiğince optimal hale getiren harika uygulamalar kullanır.

YOLOv5, Nesne Algılama modelleri oluşturmak için hala temel projedir ve YOLO yöntemini geliştirmeyi amaçlayan birçok havuz, temel olarak YOLOv5 ile başlar ve benzer bir API sunar (veya projeyi çatallayın ve üzerine inşa edin). durum böyle YOLOR (Yalnızca Bir Temsil Öğrenirsiniz) ve YOLO metodolojisindeki en son gelişme olan YOLOR'un (aynı yazar) üzerine inşa edilen YOLOv7.

YOLOv7 yalnızca bir nesne algılama mimarisi değildir - önceki YOLO modellerinde standart olmayan yalnızca sınırlayıcı kutu regresyonunun yanı sıra anahtar noktaları (iskeletleri) çıkarabilen ve örnek segmentasyonu gerçekleştirebilen yeni model kafaları sağlar. Bu şaşırtıcı değildir, çünkü birçok nesne algılama mimarisi, paylaşılan genel mimari nedeniyle, göreve bağlı olarak farklı çıktılarla, örneğin segmentasyon ve anahtar nokta algılama görevleri için daha önce yeniden amaçlandı. Şaşırtıcı olmasa da, birkaç yıl önce neredeyse tüm diğer iki aşamalı dedektörlerden daha iyi performans göstermeye başlayan YOLO tabanlı modeller için desteklenen örnek segmentasyonu ve anahtar nokta tespiti büyük olasılıkla yeni standart haline gelecektir.

Bu, iki aşamalı dedektörlerden daha basit bir mimariyle, örnek segmentasyonu ve anahtar nokta algılamanın her zamankinden daha hızlı gerçekleştirilmesini sağlar.

Modelin kendisi, mimari değişikliklerin yanı sıra, çıkarım maliyetini artırmadan doğruluğu artıran “ücretsiz çanta” olarak adlandırılan eğitim yönlerini optimize ederek oluşturuldu.

YOLOv7'yi yükleme

Devam edelim ve projeyi GitHub'dan yükleyelim:

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

Bu bir oluşturur yolov7 temel proje dosyalarını bulabileceğiniz mevcut çalışma dizininizin altındaki dizin:

%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

Not: Google Colab Not Defterleri, aramadan sonra bile sonraki hücrede ana çalışma dizinine sıfırlanıyor %cd dirname, bu nedenle, bir işlemin yapılmasını istediğiniz her hücrede onu çağırmaya devam etmeniz gerekir. Yerel Jupyter Not Defterleri değişikliği hatırlar, bu nedenle komutu çağırmaya devam etmenize gerek yoktur.

Belirli bir ağırlık kümesiyle kod çalıştırdığınızda, bunlar indirilir ve bu dizinde saklanır. Poz tahmini yapmak için, bu görev için önceden eğitilmiş YOLOv7 modelinin ağırlıklarını indirmek isteyeceğiz. /releases/download/ GitHub'daki sekme:

! 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

Harika, indirdik yolov7-w6-pose.pt poz tahmini için eğitimli bir modeli yüklemek ve yeniden oluşturmak için kullanılabilen ağırlıklar dosyası.

YOLOv7 Poz Tahmin Modelini Yükleme

Poz tahmini yapmak için ihtiyaç duyacağımız kitaplıkları içe aktaralım:

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 ve torchvision yeterince basittir - YOLOv7, PyTorch ile uygulanır. bu utils.datasets, utils.general ve utils.plots modüller YOLOv7 projesinden gelir ve ön işlemeye ve model üzerinde çıkarım çalışması için girdi hazırlamaya yardımcı olan yöntemler sağlar. Bunlar arasında letterbox() görüntüyü doldurmak için, non_max_supression_keypoint() Modelin ilk çıktısında Maksimum Olmayan Bastırma algoritmasını çalıştırmak ve yorumumuz için temiz bir çıktı üretmek ve bunun yanı sıra output_to_keypoint() ve plot_skeleton_kpts() Öngörülen bir kez belirli bir görüntüye anahtar noktaları gerçekten ekleme yöntemleri.

Modeli ağırlık dosyasından yükleyebiliriz. torch.load(). Bir GPU olup olmadığını kontrol etmek için bir fonksiyon oluşturalım, modeli yükleyelim, çıkarım moduna geçirelim ve varsa GPU'ya taşıyalım:

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()

En iyi uygulamalar, endüstri tarafından kabul edilen standartlar ve dahil edilen hile sayfası ile Git'i öğrenmek için uygulamalı, pratik kılavuzumuza göz atın. Googling Git komutlarını durdurun ve aslında öğrenmek o!

Yüklenen model ile bir tane oluşturalım. run_inference() sistemimizdeki bir dosyaya işaret eden bir dizeyi kabul eden yöntem. Yöntem, görüntüyü OpenCV kullanarak okuyacaktır (cv2), ile doldurun letterbox(), buna dönüşümleri uygulayın ve bir toplu iş haline dönüştürün (model eğitilir ve her zamanki gibi toplu işler bekler):

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

Burada, dönüştürülmüş görüntüyü (çünkü orijinali çıkarıp üzerine çizmek isteyeceğiz) ve modelin çıktılarını döndürdük. Bu çıktılar, çoğu örtüşen 45900 anahtar nokta tahmini içerir. Aynı Nesne Algılama tahminlerinde olduğu gibi (birçok sınırlayıcı kutunun tahmin edildiği ve daha sonra bir miktar güven ve IoU eşiği verildiğinde bunların "daraltıldığı" gibi) bu ham tahminlere Maksimum Olmayan Bastırma uygulamak isteyeceğiz. Bastırmadan sonra, orijinal görüntüdeki her bir anahtar noktayı çizebilir ve görüntüleyebiliriz:

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()

Şimdi, bazı giriş görüntüleri için, örneğin karate.jpg ana çalışma dizininde çıkarım yapabilir, Maksimum Olmayan Bastırma gerçekleştirebilir ve sonuçları şu şekilde çizebiliriz:

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

Bunun sonucu:

Bu, çıkarılması oldukça zor bir görüntü! Sağdaki uygulayıcının sağ kolunun çoğu gizlidir ve modelin gizlendiğini ve vücudun sağında, dirseğinin bükülmüş ve kolun bir kısmının önde olduğu sonucuna vardığını görebiliriz. . Çok daha net görülen soldaki uygulayıcı, gizli bir bacakla bile doğru bir şekilde çıkarsama yapıyor.

Nitekim – arkada oturan bir kişi, kamera tarafından neredeyse tamamen görünmez Sadece otururken kalçalarının pozisyonuna dayanarak pozlarını görünüşte doğru bir şekilde tahmin etti. Ağ adına harika bir çalışma!

Sonuç

Bu kılavuzda - YOLO ailesindeki en son gelişme olan YOLOv7'ye kısa bir göz attık, YOLOR'un üzerine inşa edildi ve ayrıca çoğu YOLO tabanlı modelin standart nesne algılama yeteneklerinin ötesinde örnek segmentasyonu ve anahtar nokta algılama yetenekleri sağlar .

Daha sonra, yayınlanan ağırlık dosyalarını nasıl indirebileceğimize, bir model oluşturmak için onları nasıl yükleyebileceğimize ve insanlar için poz tahmini çıkarımı yaparak etkileyici sonuçlar elde edebileceğimize bir göz attık.

Daha İleri Gitmek – Bilgisayarla Görme için Pratik Derin Öğrenme

Meraklı doğanız daha ileri gitmek istemenizi sağlıyor mu? bizim kontrol etmenizi öneririz Kurs: “Python ile Bilgisayarla Görme için Pratik Derin Öğrenme”.

Python PlatoBlockchain Veri Zekasında YOLOv7 ile Poz Tahmini/Anahtar Nokta Tespiti. Dikey Arama. Ai.

Başka Bir Bilgisayarla Görme Kursu mu?

MNIST rakamları veya MNIST modası sınıflandırması yapmayacağız. Uzun zaman önce rollerine hizmet ettiler. Çok fazla öğrenme kaynağı, gelişmiş kara kutu mimarilerinin performans yükünü omuzlamasına izin vermeden önce temel veri kümelerine ve temel mimarilere odaklanıyor.

odaklanmak istiyoruz gizemden arındırma, pratiklik, anlayış, sezgi ve gerçek projeler. Öğrenmek istemek Nasıl bir fark yaratabilirsin? Beynimizin görüntüleri işleme biçiminden meme kanseri için araştırma düzeyinde bir derin öğrenme sınıflandırıcısı yazmaya, “halüsinasyon” gören derin öğrenme ağlarına, size ilkeleri ve teoriyi pratik çalışmalarla öğreterek, sizi aşağıdaki bilgilerle donatmaya kadar bir yolculuğa çıkaracağız. bilgisayar vizyonunu çözmek için derin öğrenmeyi uygulamada uzman olmak için teknik bilgi ve araçlar.

İçinde ne var?

  • Görmenin ilk ilkeleri ve bilgisayarlara “görmeyi” nasıl öğretebiliriz?
  • Bilgisayarla görmenin farklı görevleri ve uygulamaları
  • İşinizi kolaylaştıracak ticaret araçları
  • Bilgisayarla görü için veri kümelerini bulma, oluşturma ve kullanma
  • Evrişimli Sinir Ağlarının teorisi ve uygulaması
  • Veri kümelerinde etki alanı kayması, birlikte oluşma ve diğer önyargıları işleme
  • Öğrenimi aktarın ve başkalarının eğitim süresini ve hesaplama kaynaklarını kendi yararınıza kullanın
  • Son teknoloji bir meme kanseri sınıflandırıcısı oluşturmak ve eğitmek
  • Ana akım fikirlere sağlıklı bir şüphecilik dozu nasıl uygulanır ve yaygın olarak benimsenen tekniklerin sonuçları nasıl anlaşılır?
  • t-SNE ve PCA kullanarak ConvNet'in “kavram uzayını” görselleştirme
  • Şirketlerin daha iyi sonuçlar elde etmek için bilgisayarlı görme tekniklerini nasıl kullandıklarına dair vaka çalışmaları
  • Uygun model değerlendirmesi, gizli uzay görselleştirmesi ve modelin dikkatinin belirlenmesi
  • Alan araştırması yapmak, kendi veri kümelerinizi işlemek ve model testleri oluşturmak
  • Son teknoloji mimariler, fikirlerin ilerlemesi, onları benzersiz kılan nedir ve nasıl uygulanacağı
  • KerasCV – son teknoloji işlem hatları ve modeller oluşturmak için bir WIP kitaplığı
  • Makaleleri nasıl ayrıştırıp okuyabilir ve bunları kendiniz uygulayabilirsiniz
  • Uygulamanıza bağlı olarak model seçimi
  • Uçtan uca bir makine öğrenimi ardışık düzeni oluşturma
  • Daha Hızlı R-CNN'ler, RetinaNet'ler, SSD'ler ve YOLO ile nesne algılamada manzara ve sezgi
  • Örnek ve anlamsal segmentasyon
  • YOLOv5 ile Gerçek Zamanlı Nesne Tanıma
  • YOLOv5 Nesne Dedektörlerinin Eğitimi
  • KerasNLP (endüstri gücünde WIP kitaplığı) kullanarak Transformers ile çalışma
  • Görüntülerin altyazılarını oluşturmak için Transformers'ı ConvNets ile entegre etme
  • DeepDream
  • Bilgisayarla görme için Derin Öğrenme modeli optimizasyonu

Zaman Damgası:

Den fazla Yığın kötüye kullanımı