PyTorch ve torchvision PlatoBlockchain Veri Zekası ile RetinaNet Nesne Algılama. Dikey Arama. Ai.

PyTorch ve torchvision ile RetinaNet Nesne Algılama

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. Bir tarafta, ister görevleri yerine getiren robotlar isterse kendi kendini süren arabalar olsun, ajanları ortamlarda yönlendiren otonom sistemler oluşturmak için kullanılabilir, ancak bu diğer alanlarla kesişmeyi gerektirir. Bununla birlikte, anormallik tespiti (hattaki kusurlu ürünler gibi), görüntüler içindeki nesneleri bulma, yüz algılama ve diğer çeşitli nesne algılama uygulamaları, diğer alanlar ile kesişmeden yapılabilir.

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. Bir ekosistemde olmanın en büyük faydalarından biri, size iyi uygulamalar, araçlar ve kullanım yaklaşımları hakkında faydalı bilgiler aramamanız için bir yol sağlamasıdır. Nesne algılama ile - çoğu, iyi bir kavrama elde etmek için alanın manzarası üzerinde çok daha fazla araştırma yapmak zorundadır.

PyTorch/TorchVision'ın RetinaNet'i ile Nesne Algılama

torchvision PyTorch'un Bilgisayarlı Görme projesidir ve bir uygulayıcı için yararlı olabilecek önceden eğitilmiş ağırlıklara, veri kümelerine ve yardımcı programlara sahip bir model hayvanat bahçesi, dönüşüm ve büyütme komut dosyaları sağlayarak PyTorch tabanlı CV modellerinin geliştirilmesini kolaylaştırmayı amaçlamaktadır.

Hala beta aşamasında ve oldukça deneysel olmasına rağmen – torchvision aralarından seçim yapabileceğiniz birkaç modelle nispeten basit bir Nesne Algılama API'si sunar:

  • Daha hızlı R-CNN
  • retina ağı
  • FCOS (Tamamen evrişimli RetinaNet)
  • SSD (VGG16 omurgası… evet)
  • SSDLite (MobileNetV3 omurgası)

API, diğer bazı üçüncü taraf API'ler kadar gösterişli veya basit olmasa da, aşina oldukları bir ekosistemde olmanın güvenliğini tercih edenler için çok iyi bir başlangıç ​​noktasıdır. Devam etmeden önce PyTorch ve Torchvision'u kurduğunuzdan emin olun:

$ pip install torch torchvision

Bazı yardımcı işlevlere yükleyelim, örneğin read_image(), draw_bounding_boxes() ve to_pil_image() RetinaNet'i ve önceden eğitilmiş ağırlıklarını (MS COCO) içe aktarmanın ardından görüntüleri okumayı, çizmeyi ve çıktı almayı kolaylaştırmak için:

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, bir ResNet50 omurgası ve bunun üzerinde bir Özellik Piramidi Ağı (FPN) kullanır. Sınıfın adı ayrıntılı olsa da mimarinin göstergesidir. kullanarak bir resim getirelim. requests kitaplığı ve yerel sürücümüzde bir dosya olarak kaydedin:

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

Bir görüntü mevcut olduğunda modelimizi ve ağırlıklarımızı somutlaştırabiliriz:

weights = RetinaNet_ResNet50_FPN_V2_Weights.DEFAULT
model = retinanet_resnet50_fpn_v2(weights=weights, score_thresh=0.35)

model.eval()

preprocess = weights.transforms()

The score_thresh argümanı, bir nesnenin bir sınıfın nesnesi olarak algılandığı eşiği tanımlar. Sezgisel olarak bu, güven eşiğidir ve modelin bir sınıfa ait olduğundan %35'ten az emin olması durumunda, bir nesneyi bir sınıfa ait olacak şekilde sınıflandırmayacağız.

Ağırlıklarımızdan elde edilen dönüşümleri kullanarak görüntüyü önceden işleyelim, bir toplu iş oluşturalım ve çıkarımı çalıştıralım:

batch = [preprocess(img)]
prediction = model(batch)[0]

İşte bu, bizim prediction sözlük, çıkarılan nesne sınıflarını ve konumlarını tutar! Şimdi, bu formda sonuçlar bizim için pek yararlı değil; meta verilere göre etiketleri ağırlıklardan çıkarmak ve sınırlayıcı kutular çizmek isteyeceğiz; 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()

Bunun sonucu:

RetinaNet aslında arabanın arkasına bakan kişiyi sınıflandırdı! Bu oldukça zor bir sınıflandırma.

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!

Değiştirerek RetinaNet'i bir FCOS'a (tamamen evrişimli RetinaNet) değiştirebilirsiniz. retinanet_resnet50_fpn_v2 ile fcos_resnet50_fpnkullanın ve FCOS_ResNet50_FPN_Weights ağırlıklar:

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

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”.

PyTorch ve torchvision PlatoBlockchain Veri Zekası ile RetinaNet Nesne Algılama. 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

Sonuç

Nesne Algılama, Bilgisayarlı Görmenin önemli bir alanıdır ve ne yazık ki olması gerekenden daha az ulaşılabilirdir.

Bu kısa kılavuzda bunun nasıl yapılacağına bir göz attık torchvisionPyTorch'un Bilgisayarlı Görme paketi, RetinaNet kullanarak görüntüler üzerinde nesne algılamayı kolaylaştırır.

Zaman Damgası:

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