Deteksi Objek RetinaNet dengan PyTorch dan torchvision PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.

Deteksi Objek RetinaNet dengan PyTorch dan torchvision

Pengantar

Deteksi objek adalah bidang besar dalam visi komputer, dan salah satu aplikasi visi komputer yang lebih penting "di alam liar". Di satu sisi, ini dapat digunakan untuk membangun sistem otonom yang menavigasi agen melalui lingkungan - baik itu robot yang melakukan tugas atau mobil yang mengemudi sendiri, tetapi ini membutuhkan persimpangan dengan bidang lain. Namun, deteksi anomali (seperti produk cacat pada garis), penempatan objek di dalam gambar, deteksi wajah, dan berbagai aplikasi deteksi objek lainnya dapat dilakukan tanpa memotong bidang lain.

Deteksi objek tidak standar seperti klasifikasi gambar, terutama karena sebagian besar perkembangan baru biasanya dilakukan oleh peneliti individu, pengelola dan pengembang, daripada perpustakaan besar dan kerangka kerja. Sulit untuk mengemas skrip utilitas yang diperlukan dalam kerangka kerja seperti TensorFlow atau PyTorch dan mempertahankan pedoman API yang memandu pengembangan sejauh ini.

Hal ini membuat deteksi objek agak lebih kompleks, biasanya lebih bertele-tele (tetapi tidak selalu), dan kurang mudah didekati daripada klasifikasi gambar. Salah satu manfaat utama berada dalam ekosistem adalah menyediakan cara untuk tidak mencari informasi berguna tentang praktik, alat, dan pendekatan yang baik untuk digunakan. Dengan deteksi objek โ€“ sebagian besar harus melakukan lebih banyak penelitian tentang lanskap lapangan untuk mendapatkan pegangan yang baik.

Deteksi Objek dengan RetinaNet PyTorch/TorchVision

torchvision adalah proyek Visi Komputer PyTorch, dan bertujuan untuk membuat pengembangan model CV berbasis PyTorch lebih mudah, dengan menyediakan skrip transformasi dan augmentasi, kebun binatang model dengan bobot, kumpulan data, dan utilitas yang telah dilatih sebelumnya yang dapat berguna bagi seorang praktisi.

Saat masih dalam versi beta dan sangat eksperimental โ€“ torchvision menawarkan API Deteksi Objek yang relatif sederhana dengan beberapa model untuk dipilih:

  • Lebih cepat R-CNN
  • RetinaNet
  • FCOS (RetinaNet yang sepenuhnya konvolusi)
  • SSD (tulang punggung VGG16โ€ฆ astaga)
  • SSDLite (tulang punggung MobileNetV3)

Meskipun API tidak sesederhana atau sesederhana beberapa API pihak ketiga lainnya, ini adalah titik awal yang sangat baik bagi mereka yang masih lebih suka keamanan berada di ekosistem yang mereka kenal. Sebelum melanjutkan, pastikan Anda menginstal PyTorch dan Torchvision:

$ pip install torch torchvision

Mari kita memuat beberapa fungsi utilitas, seperti read_image(), draw_bounding_boxes() dan to_pil_image() untuk memudahkan membaca, menggambar, dan menghasilkan gambar, diikuti dengan mengimpor RetinaNet dan bobotnya yang telah dilatih sebelumnya (MS COCO):

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 menggunakan tulang punggung ResNet50 dan Feature Pyramid Network (FPN) di atasnya. Meskipun nama kelasnya bertele-tele, ini menunjukkan arsitekturnya. Mari ambil gambar menggunakan requests perpustakaan dan simpan sebagai file di drive lokal kami:

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

Dengan gambar di tempat โ€“ kami dapat membuat instance model dan bobot kami:

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

model.eval()

preprocess = weights.transforms()

Grafik score_thresh argumen mendefinisikan ambang batas di mana suatu objek terdeteksi sebagai objek kelas. Secara intuitif, ini adalah ambang kepercayaan, dan kami tidak akan mengklasifikasikan objek ke dalam kelas jika model kurang dari 35% yakin bahwa itu milik kelas.

Mari kita praproses gambar menggunakan transformasi dari bobot kita, buat kumpulan dan jalankan inferensi:

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

Itu saja, kami prediction kamus menyimpan kelas dan lokasi objek yang disimpulkan! Sekarang, hasilnya tidak terlalu berguna bagi kami dalam formulir ini โ€“ kami ingin mengekstrak label sehubungan dengan metadata dari bobot dan menggambar kotak pembatas, yang dapat dilakukan melalui 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()

Ini menghasilkan:

RetinaNet sebenarnya mengklasifikasikan orang yang mengintip di belakang mobil! Itu klasifikasi yang cukup sulit.

Lihat panduan praktis dan praktis kami untuk mempelajari Git, dengan praktik terbaik, standar yang diterima industri, dan termasuk lembar contekan. Hentikan perintah Googling Git dan sebenarnya belajar itu!

Anda dapat mengganti RetinaNet ke FCOS (Full Convolutional RetinaNet) dengan mengganti retinanet_resnet50_fpn_v2 dengan fcos_resnet50_fpn, dan gunakan FCOS_ResNet50_FPN_Weights bobot:

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

Melangkah Lebih Jauh โ€“ Pembelajaran Mendalam Praktis untuk Visi Komputer

Sifat ingin tahu Anda membuat Anda ingin melangkah lebih jauh? Kami merekomendasikan untuk memeriksa kami Kelas: โ€œPembelajaran Mendalam Praktis untuk Visi Komputer dengan Pythonโ€.

Deteksi Objek RetinaNet dengan PyTorch dan torchvision PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.

Kursus Computer Vision lainnya?

Kami tidak akan melakukan klasifikasi digit MNIST atau mode MNIST. Mereka melayani bagian mereka sejak lama. Terlalu banyak sumber belajar yang berfokus pada kumpulan data dasar dan arsitektur dasar sebelum membiarkan arsitektur kotak hitam tingkat lanjut memikul beban kinerja.

Kami ingin fokus pada demistifikasi, kepraktisan, pemahaman, intuisi dan proyek nyata. Mau belajar bagaimana Anda dapat membuat perbedaan? Kami akan membawa Anda dalam perjalanan dari cara otak kami memproses gambar hingga menulis pengklasifikasi pembelajaran mendalam tingkat penelitian untuk kanker payudara hingga jaringan pembelajaran mendalam yang "berhalusinasi", mengajari Anda prinsip dan teori melalui kerja praktik, membekali Anda dengan pengetahuan dan alat untuk menjadi ahli dalam menerapkan pembelajaran mendalam untuk memecahkan visi komputer.

Apa yang ada di dalam?

  • Prinsip pertama visi dan bagaimana komputer dapat diajarkan untuk "melihat"
  • Berbagai tugas dan aplikasi visi komputer
  • Alat perdagangan yang akan membuat pekerjaan Anda lebih mudah
  • Menemukan, membuat, dan memanfaatkan kumpulan data untuk visi komputer
  • Teori dan penerapan Jaringan Saraf Konvolusi
  • Menangani pergeseran domain, kejadian bersama, dan bias lainnya dalam kumpulan data
  • Transfer Belajar dan memanfaatkan waktu pelatihan dan sumber daya komputasi orang lain untuk keuntungan Anda
  • Membangun dan melatih pengklasifikasi kanker payudara yang canggih
  • Bagaimana menerapkan dosis skeptisisme yang sehat untuk mengarusutamakan gagasan dan memahami implikasi dari teknik yang diadopsi secara luas
  • Memvisualisasikan "ruang konsep" ConvNet menggunakan t-SNE dan PCA
  • Studi kasus tentang bagaimana perusahaan menggunakan teknik visi komputer untuk mencapai hasil yang lebih baik
  • Evaluasi model yang tepat, visualisasi ruang laten dan mengidentifikasi perhatian model
  • Melakukan penelitian domain, memproses kumpulan data Anda sendiri, dan membuat pengujian model
  • Arsitektur mutakhir, perkembangan ide, apa yang membuatnya unik dan bagaimana menerapkannya
  • KerasCV โ€“ perpustakaan WIP untuk menciptakan saluran pipa dan model yang canggih
  • Cara mengurai dan membaca makalah dan menerapkannya sendiri
  • Memilih model tergantung pada aplikasi Anda
  • Membuat pipeline machine learning ujung ke ujung
  • Lanskap dan intuisi pada deteksi objek dengan R-CNN, RetinaNet, SSD, dan YOLO yang Lebih Cepat
  • Instance dan segmentasi semantik
  • Pengenalan Objek Real-Time dengan YOLOv5
  • Melatih Detektor Objek YOLOv5
  • Bekerja dengan Transformers menggunakan KerasNLP (perpustakaan WIP kekuatan industri)
  • Mengintegrasikan Transformer dengan ConvNets untuk menghasilkan keterangan gambar
  • Deepdream

Kesimpulan

Deteksi Objek adalah bidang penting dari Computer Vision, dan sayangnya kurang dapat didekati daripada yang seharusnya.

Dalam panduan singkat ini, kami telah melihat caranya torchvision, paket Computer Vision PyTorch, memudahkan pendeteksian objek pada gambar, menggunakan RetinaNet.

Stempel Waktu:

Lebih dari penyalahgunaan