การตรวจจับวัตถุ RetinaNet ด้วย PyTorch และ torchvision PlatoBlockchain Data Intelligence ค้นหาแนวตั้ง AI.

การตรวจจับวัตถุ RetinaNet ด้วย PyTorch และ torchvision

บทนำ

การตรวจจับวัตถุเป็นฟิลด์ขนาดใหญ่ในการมองเห็นด้วยคอมพิวเตอร์ และเป็นหนึ่งในแอปพลิเคชั่นที่สำคัญกว่าของการมองเห็นด้วยคอมพิวเตอร์ "ในธรรมชาติ" ด้านหนึ่ง สามารถใช้เพื่อสร้างระบบอัตโนมัติที่นำทางตัวแทนผ่านสภาพแวดล้อมได้ ไม่ว่าจะเป็นหุ่นยนต์ที่ทำงานหรือรถยนต์ที่ขับด้วยตนเอง แต่สิ่งนี้ต้องแยกกับสาขาอื่น อย่างไรก็ตาม การตรวจจับสิ่งผิดปกติ (เช่น ผลิตภัณฑ์ที่มีข้อบกพร่องในสายการผลิต) การระบุตำแหน่งวัตถุภายในภาพ การตรวจจับใบหน้า และการใช้งานการตรวจจับวัตถุอื่นๆ สามารถทำได้โดยไม่ต้องตัดกับช่องอื่นๆ

การตรวจจับวัตถุไม่ได้มาตรฐานเท่ากับการจำแนกภาพ สาเหตุหลักมาจากการพัฒนาใหม่ส่วนใหญ่มักทำโดยนักวิจัย ผู้ดูแล และนักพัฒนาแต่ละคน แทนที่จะเป็นไลบรารีและเฟรมเวิร์กขนาดใหญ่ เป็นการยากที่จะจัดแพ็คเกจสคริปต์ยูทิลิตี้ที่จำเป็นในเฟรมเวิร์ก เช่น TensorFlow หรือ PyTorch และรักษาแนวทาง API ที่เป็นแนวทางในการพัฒนาจนถึงตอนนี้

สิ่งนี้ทำให้การตรวจจับวัตถุค่อนข้างซับซ้อนมากขึ้น โดยทั่วไปแล้วจะละเอียดกว่า (แต่ไม่เสมอไป) และเข้าถึงได้น้อยกว่าการจัดประเภทรูปภาพ ประโยชน์หลักๆ ประการหนึ่งของการอยู่ในระบบนิเวศคือช่วยให้คุณไม่ต้องค้นหาข้อมูลที่เป็นประโยชน์เกี่ยวกับแนวปฏิบัติ เครื่องมือ และแนวทางที่ดีในการใช้งาน ด้วยการตรวจจับวัตถุ ส่วนใหญ่ต้องทำการวิจัยเพิ่มเติมเกี่ยวกับภูมิทัศน์ของสนามเพื่อให้ได้การยึดเกาะที่ดี

การตรวจจับวัตถุด้วย RetinaNet ของ PyTorch/TorchVision

torchvision เป็นโปรเจ็กต์ Computer Vision ของ PyTorch และมีเป้าหมายเพื่อทำให้การพัฒนาโมเดล CV แบบอิง PyTorch ง่ายขึ้น โดยการจัดหาสคริปต์การแปลงและการเพิ่มข้อมูล สวนสัตว์จำลองที่มีตุ้มน้ำหนัก ชุดข้อมูล และยูทิลิตี้ที่ฝึกไว้ล่วงหน้าซึ่งมีประโยชน์สำหรับผู้ปฏิบัติงาน

ในขณะที่ยังอยู่ในช่วงเบต้าและอยู่ในช่วงทดลองอย่างมาก – torchvision เสนอ Object Detection API ที่ค่อนข้างง่ายโดยมีโมเดลให้เลือกไม่กี่แบบ:

  • R-CNN ที่เร็วขึ้น
  • เรติน่าเน็ต
  • FCOS (RetinaNet ที่โค้งงอได้อย่างสมบูรณ์)
  • SSD (แกนหลัก VGG16… ใช่)
  • SSDLite (แกนหลัก MobileNetV3)

แม้ว่า API จะไม่ขัดเกลาหรือเรียบง่ายเหมือน API ของบริษัทอื่น แต่ก็เป็นจุดเริ่มต้นที่ดีมากสำหรับผู้ที่ยังคงต้องการความปลอดภัยในการอยู่ในระบบนิเวศที่พวกเขาคุ้นเคย ก่อนดำเนินการต่อ ตรวจสอบให้แน่ใจว่าคุณติดตั้ง PyTorch และ Torchvision:

$ pip install torch torchvision

มาโหลดฟังก์ชั่นยูทิลิตี้บางอย่างกันเถอะ เช่น read_image(), draw_bounding_boxes() และ to_pil_image() เพื่อให้อ่าน วาด และส่งออกรูปภาพได้ง่ายขึ้น ตามด้วยการนำเข้า RetinaNet และตุ้มน้ำหนักที่ฝึกไว้ล่วงหน้า (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 ใช้ ResNet50 backbone และ Feature Pyramid Network (FPN) ที่ด้านบน แม้ว่าชื่อคลาสจะละเอียด แต่ก็บ่งบอกถึงสถาปัตยกรรม ลองดึงภาพโดยใช้ requests ไลบรารี่และบันทึกเป็นไฟล์ในไดรฟ์ในเครื่องของเรา:

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 = RetinaNet_ResNet50_FPN_V2_Weights.DEFAULT
model = retinanet_resnet50_fpn_v2(weights=weights, score_thresh=0.35)

model.eval()

preprocess = weights.transforms()

พื้นที่ score_thresh อาร์กิวเมนต์กำหนดเกณฑ์ที่ตรวจพบวัตถุเป็นวัตถุของคลาส ตามสัญชาตญาณ มันคือเกณฑ์ความเชื่อมั่น และเราจะไม่จัดประเภทอ็อบเจ็กต์ที่เป็นของคลาส หากโมเดลมีความมั่นใจน้อยกว่า 35% ว่าเป็นของคลาส

มาประมวลผลภาพล่วงหน้าโดยใช้การแปลงจากน้ำหนักของเรา สร้างแบทช์และเรียกใช้การอนุมาน:

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

แค่นั้นแหละ .ของเรา prediction พจนานุกรมถือคลาสอ็อบเจ็กต์ที่อนุมานและสถานที่! ตอนนี้ ผลลัพธ์ไม่เป็นประโยชน์สำหรับเราในแบบฟอร์มนี้ เราจะต้องการแยกป้ายกำกับที่เกี่ยวข้องกับข้อมูลเมตาออกจากน้ำหนักและวาดกรอบกรอบ ซึ่งสามารถทำได้ผ่าน 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()

ผลลัพธ์นี้ใน:

RetinaNet จำแนกคนที่แอบมองหลังรถจริงๆ! เป็นการจำแนกที่ค่อนข้างยาก

ดูคู่มือเชิงปฏิบัติสำหรับการเรียนรู้ Git ที่มีแนวทางปฏิบัติที่ดีที่สุด มาตรฐานที่ยอมรับในอุตสาหกรรม และเอกสารสรุปรวม หยุดคำสั่ง Googling Git และจริงๆ แล้ว เรียน มัน!

คุณสามารถเปลี่ยน RetinaNet ไปเป็น FCOS (RetinaNet แบบหมุนได้ทั้งหมด) โดยการแทนที่ retinanet_resnet50_fpn_v2 กับ fcos_resnet50_fpnและใช้ FCOS_ResNet50_FPN_Weights น้ำหนัก:

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

ก้าวต่อไป – การเรียนรู้เชิงลึกเชิงปฏิบัติสำหรับคอมพิวเตอร์วิทัศน์

ธรรมชาติที่อยากรู้อยากเห็นของคุณทำให้คุณต้องการไปต่อหรือไม่? เราขอแนะนำให้ตรวจสอบของเรา คอร์ส: “การเรียนรู้เชิงลึกเชิงปฏิบัติสำหรับคอมพิวเตอร์วิทัศน์ด้วย Python”.

การตรวจจับวัตถุ RetinaNet ด้วย PyTorch และ torchvision PlatoBlockchain Data Intelligence ค้นหาแนวตั้ง AI.

หลักสูตร Computer Vision อื่น?

เราจะไม่ทำการจำแนกตัวเลข MNIST หรือแฟชั่น MNIST พวกเขาทำหน้าที่ส่วนของตนเมื่อนานมาแล้ว ทรัพยากรการเรียนรู้จำนวนมากเกินไปมุ่งเน้นไปที่ชุดข้อมูลพื้นฐานและสถาปัตยกรรมพื้นฐาน ก่อนปล่อยให้สถาปัตยกรรมกล่องดำขั้นสูงรับภาระด้านประสิทธิภาพ

เราต้องการที่จะมุ่งเน้นไปที่ การทำให้ลึกลับ, การปฏิบัติจริง, ความเข้าใจ, ปรีชา และ โครงการจริง. ต้องการเรียน อย่างไร คุณสามารถสร้างความแตกต่าง? เราจะพาคุณเดินทางตั้งแต่วิธีที่สมองของเราประมวลผลภาพไปจนถึงการเขียนตัวแยกประเภทการเรียนรู้เชิงลึกระดับการวิจัยสำหรับมะเร็งเต้านม ไปจนถึงเครือข่ายการเรียนรู้เชิงลึกที่ "หลอน" สอนหลักการและทฤษฎีแก่คุณผ่านการทำงานจริง เพื่อให้คุณมี ความรู้และเครื่องมือในการเป็นผู้เชี่ยวชาญในการประยุกต์ใช้การเรียนรู้เชิงลึกเพื่อแก้ปัญหาคอมพิวเตอร์วิทัศน์

อะไรอยู่ข้างใน?

  • หลักการมองเห็นเบื้องต้นและวิธีการสอนคอมพิวเตอร์ให้ “มองเห็น”
  • งานต่างๆ และการประยุกต์ใช้คอมพิวเตอร์วิทัศน์
  • เครื่องมือการค้าที่จะทำให้งานของคุณง่ายขึ้น
  • การค้นหา การสร้าง และการใช้ชุดข้อมูลสำหรับคอมพิวเตอร์วิทัศน์
  • ทฤษฎีและการประยุกต์ใช้ Convolutional Neural Networks
  • การจัดการการเปลี่ยนแปลงโดเมน การเกิดขึ้นร่วม และอคติอื่นๆ ในชุดข้อมูล
  • ถ่ายทอดการเรียนรู้และใช้เวลาฝึกอบรมและทรัพยากรการคำนวณของผู้อื่นเพื่อประโยชน์ของคุณ
  • การสร้างและฝึกอบรมผู้จำแนกมะเร็งเต้านมที่ล้ำสมัย
  • วิธีการใช้ความสงสัยที่ดีต่อสุขภาพกับแนวคิดกระแสหลักและทำความเข้าใจกับความหมายของเทคนิคที่นำมาใช้กันอย่างแพร่หลาย
  • การแสดงภาพ "พื้นที่แนวคิด" ของ ConvNet โดยใช้ t-SNE และ PCA
  • กรณีศึกษาวิธีที่บริษัทต่างๆ ใช้เทคนิคการมองเห็นด้วยคอมพิวเตอร์เพื่อให้ได้ผลลัพธ์ที่ดีขึ้น
  • การประเมินแบบจำลองที่เหมาะสม การสร้างภาพพื้นที่แฝง และการระบุความสนใจของแบบจำลอง
  • ดำเนินการวิจัยโดเมน ประมวลผลชุดข้อมูลของคุณเอง และสร้างการทดสอบแบบจำลอง
  • สถาปัตยกรรมล้ำสมัย ความก้าวหน้าของแนวคิด สิ่งที่ทำให้มีเอกลักษณ์เฉพาะตัว และวิธีนำไปใช้
  • KerasCV – ไลบรารี WIP สำหรับสร้างไปป์ไลน์และโมเดลที่ทันสมัย
  • วิธีแยกวิเคราะห์และอ่านเอกสารและนำไปใช้เอง
  • การเลือกรุ่นขึ้นอยู่กับการใช้งานของคุณ
  • การสร้างไปป์ไลน์การเรียนรู้ของเครื่องแบบ end-to-end
  • ภูมิทัศน์และสัญชาตญาณในการตรวจจับวัตถุด้วย R-CNN ที่เร็วกว่า, RetinaNets, SSD และ YOLO
  • การแบ่งกลุ่มตัวอย่างและความหมาย
  • การจดจำวัตถุแบบเรียลไทม์ด้วย YOLOv5
  • การฝึกอบรมเครื่องตรวจจับวัตถุ YOLOv5
  • การทำงานกับ Transformers โดยใช้ KerasNLP (ไลบรารี WIP ที่มีความแข็งแกร่งในอุตสาหกรรม)
  • การรวม Transformers เข้ากับ ConvNets เพื่อสร้างคำบรรยายภาพ
  • Deepdream

สรุป

การตรวจจับวัตถุเป็นสาขาสำคัญของ Computer Vision และน่าเสียดายที่เข้าถึงได้น้อยกว่าที่ควรจะเป็น

ในคำแนะนำสั้นๆ นี้ เราได้มาดูวิธีการ torchvisionแพ็คเกจ Computer Vision ของ PyTorch ทำให้การตรวจจับวัตถุบนรูปภาพทำได้ง่ายขึ้นโดยใช้ RetinaNet

ประทับเวลา:

เพิ่มเติมจาก สแต็ค