บทนำ
การตรวจจับวัตถุเป็นฟิลด์ขนาดใหญ่ในการมองเห็นด้วยคอมพิวเตอร์ และเป็นหนึ่งในแอปพลิเคชั่นที่สำคัญกว่าของการมองเห็นด้วยคอมพิวเตอร์ "ในธรรมชาติ" ด้านหนึ่ง สามารถใช้เพื่อสร้างระบบอัตโนมัติที่นำทางตัวแทนผ่านสภาพแวดล้อมได้ ไม่ว่าจะเป็นหุ่นยนต์ที่ทำงานหรือรถยนต์ที่ขับด้วยตนเอง แต่สิ่งนี้ต้องแยกกับสาขาอื่น อย่างไรก็ตาม การตรวจจับสิ่งผิดปกติ (เช่น ผลิตภัณฑ์ที่มีข้อบกพร่องในสายการผลิต) การระบุตำแหน่งวัตถุภายในภาพ การตรวจจับใบหน้า และการใช้งานการตรวจจับวัตถุอื่นๆ สามารถทำได้โดยไม่ต้องตัดกับช่องอื่นๆ
การตรวจจับวัตถุไม่ได้มาตรฐานเท่ากับการจำแนกภาพ สาเหตุหลักมาจากการพัฒนาใหม่ส่วนใหญ่มักทำโดยนักวิจัย ผู้ดูแล และนักพัฒนาแต่ละคน แทนที่จะเป็นไลบรารีและเฟรมเวิร์กขนาดใหญ่ เป็นการยากที่จะจัดแพ็คเกจสคริปต์ยูทิลิตี้ที่จำเป็นในเฟรมเวิร์ก เช่น TensorFlow หรือ PyTorch และรักษาแนวทาง API ที่เป็นแนวทางในการพัฒนาจนถึงตอนนี้
สิ่งนี้ทำให้การตรวจจับวัตถุค่อนข้างซับซ้อนมากขึ้น โดยทั่วไปแล้วจะละเอียดกว่า (แต่ไม่เสมอไป) และเข้าถึงได้น้อยกว่าการจัดประเภทรูปภาพ ประโยชน์หลักๆ ประการหนึ่งของการอยู่ในระบบนิเวศคือช่วยให้คุณไม่ต้องค้นหาข้อมูลที่เป็นประโยชน์เกี่ยวกับแนวปฏิบัติ เครื่องมือ และแนวทางที่ดีในการใช้งาน ด้วยการตรวจจับวัตถุ คนส่วนใหญ่ต้องทำการวิจัยเพิ่มเติมเกี่ยวกับภูมิทัศน์ของสนามเพื่อให้ได้การยึดเกาะที่ดี
โชคดีสำหรับคนจำนวนมาก – Ultralytics ได้พัฒนา API การตรวจจับวัตถุที่เรียบง่าย ทรงพลัง และสวยงามรอบการใช้งาน YOLOv5
ในคู่มือฉบับย่อนี้ เราจะดำเนินการ Object Detection ใน Python โดย YOLOv5 สร้างขึ้นโดย Ultralytics ใน PyTorch โดยใช้ชุดตุ้มน้ำหนักที่ได้รับการฝึกฝนล่วงหน้าบน MS COCO
โยลอฟ5
YOLO (คุณมองเพียงครั้งเดียว) เป็นวิธีการเช่นเดียวกับกลุ่มของแบบจำลองที่สร้างขึ้นสำหรับการตรวจจับวัตถุ นับตั้งแต่ก่อตั้งในปี 2015 YOLOv1, YOLOv2 (YOLO9000) และ YOLOv3 ได้รับการเสนอโดยผู้เขียนคนเดียวกัน – และชุมชนการเรียนรู้เชิงลึกยังคงดำเนินต่อไปด้วยความก้าวหน้าแบบโอเพนซอร์ซในปีต่อๆ ไป
Ultralytics' YOLOv5 เป็นการนำ YOLO ไปใช้งานขนาดใหญ่ครั้งแรกใน PyTorch ซึ่งทำให้เข้าถึงได้ง่ายกว่าที่เคย แต่เหตุผลหลักที่ YOLOv5 ได้รับการตั้งหลักดังกล่าวก็คือ API ที่เรียบง่ายและทรงพลังซึ่งสร้างขึ้นโดยรอบ โปรเจ็กต์จะสรุปรายละเอียดที่ไม่จำเป็นออกไป ในขณะที่อนุญาตให้ปรับแต่งได้ ทุกรูปแบบการส่งออกที่ใช้งานได้จริง และใช้แนวทางปฏิบัติที่น่าทึ่งที่ทำให้ทั้งโปรเจ็กต์มีประสิทธิภาพและเหมาะสมที่สุดเท่าที่จะทำได้ แท้จริงแล้วมันคือตัวอย่างความงามของการนำซอฟต์แวร์โอเพ่นซอร์สมาใช้งาน และวิธีที่ซอฟต์แวร์นี้ขับเคลื่อนโลกที่เราอาศัยอยู่
โปรเจ็กต์จัดเตรียมการตุ้มน้ำหนักล่วงหน้าบน MS COCO ซึ่งเป็นชุดข้อมูลหลักบนออบเจ็กต์ในบริบท ซึ่งสามารถใช้ได้กับทั้งการวัดประสิทธิภาพและสร้างระบบตรวจจับวัตถุทั่วไป แต่ที่สำคัญที่สุด สามารถใช้เพื่อถ่ายโอนความรู้ทั่วไปของออบเจ็กต์ในบริบทไปยังแบบกำหนดเอง ชุดข้อมูล
การตรวจจับวัตถุด้วย YOLOv5
ก่อนจะก้าวไปข้างหน้า จงแน่ใจว่าคุณมี torch
และ torchvision
ติดตั้ง:
! python -m pip install torch torchvision
YOLOv5 มีเอกสารประกอบที่ละเอียดและไร้สาระและ API ที่เรียบง่ายสวยงามดังที่แสดงบน repo เองและในตัวอย่างต่อไปนี้:
import torch
model = torch.hub.load('ultralytics/yolov5', 'yolov5s')
img = 'https://i.ytimg.com/vi/q71MCWAEfL8/maxresdefault.jpg'
results = model(img)
fig, ax = plt.subplots(figsize=(16, 12))
ax.imshow(results.render()[0])
plt.show()
อาร์กิวเมนต์ที่สองของ hub.load()
method ระบุน้ำหนักที่เราต้องการใช้ โดยเลือกที่ใดก็ได้ระหว่าง yolov5n
ไปยัง yolov5l6
– เรากำลังโหลดในตุ้มน้ำหนักที่ฝึกไว้ล่วงหน้าของ MS COCO สำหรับรุ่นที่กำหนดเอง:
model = torch.hub.load('ultralytics/yolov5', 'custom', path='path_to_weights.pt')
ไม่ว่าในกรณีใด เมื่อคุณส่งข้อมูลผ่านโมเดล วัตถุที่ส่งคืนจะมีวิธีการที่เป็นประโยชน์ในการตีความผลลัพธ์ และเราได้เลือก render()
ซึ่งส่งคืนอาร์เรย์ NumPy ที่เราสามารถรวมเข้ากับ an imshow()
เรียก. ส่งผลให้มีรูปแบบที่สวยงาม:
การบันทึกผลลัพธ์เป็นไฟล์
คุณสามารถบันทึกผลลัพธ์ของการอนุมานเป็นไฟล์ได้โดยใช้ปุ่ม results.save()
วิธี:
results.save(save_dir='results')
สิ่งนี้จะสร้างไดเร็กทอรีใหม่หากยังไม่มีอยู่ และบันทึกภาพเดิมที่เราเพิ่งลงจุดเป็นไฟล์
การครอบตัดวัตถุ
คุณยังสามารถตัดสินใจครอบตัดออบเจ็กต์ที่ตรวจพบออกเป็นไฟล์แต่ละไฟล์ ในกรณีของเรา สำหรับทุกป้ายกำกับที่ตรวจพบ สามารถแยกรูปภาพจำนวนหนึ่งได้ ทำได้โดยง่ายผ่าน results.crop()
วิธีการ ซึ่งสร้าง a runs/detect/
ไดเรกทอรีด้วย expN/crops
(โดยที่ N เพิ่มขึ้นสำหรับการรันแต่ละครั้ง) ซึ่งไดเร็กทอรีที่มีภาพที่ครอบตัดถูกสร้างขึ้นสำหรับแต่ละป้ายกำกับ:
results.crop()
Saved 1 image to runs/detect/exp2
Saved results to runs/detect/exp2
[{'box': [tensor(295.09409),
tensor(277.03699),
tensor(514.16113),
tensor(494.83691)],
'conf': tensor(0.25112),
'cls': tensor(0.),
'label': 'person 0.25',
'im': array([[[167, 186, 165],
[174, 184, 167],
[173, 184, 164],
คุณยังสามารถตรวจสอบโครงสร้างไฟล์เอาต์พุตด้วย:
ดูคู่มือเชิงปฏิบัติสำหรับการเรียนรู้ Git ที่มีแนวทางปฏิบัติที่ดีที่สุด มาตรฐานที่ยอมรับในอุตสาหกรรม และเอกสารสรุปรวม หยุดคำสั่ง Googling Git และจริงๆ แล้ว เรียน มัน!
! ls runs/detect/exp2/crops
! ls runs/detect/exp2/crops
การนับวัตถุ
ตามค่าเริ่มต้น เมื่อคุณทำการตรวจจับหรือพิมพ์ results
วัตถุ – คุณจะได้จำนวนภาพที่ทำการอนุมานสำหรับสิ่งนั้น results
ออบเจ็กต์ (YOLOv5 ใช้งานได้กับชุดรูปภาพด้วย) ความละเอียดและจำนวนของแต่ละป้ายกำกับที่ตรวจพบ:
print(results)
ผลลัพธ์นี้ใน:
image 1/1: 720x1280 14 persons, 1 car, 3 buss, 6 traffic lights, 1 backpack, 1 umbrella, 1 handbag
Speed: 35.0ms pre-process, 256.2ms inference, 0.7ms NMS per image at shape (1, 3, 384, 640)
การอนุมานด้วยสคริปต์
อีกวิธีหนึ่ง คุณสามารถเรียกใช้สคริปต์การตรวจหา detect.py
โดยการโคลนที่เก็บ YOLOv5:
$ git clone https://github.com/ultralytics/yolov5
$ cd yolov5
$ pip install -r requirements.txt
แล้ววิ่ง:
$ python detect.py --source img.jpg
อีกวิธีหนึ่ง คุณสามารถระบุ URL, ไฟล์วิดีโอ, พาธไปยังไดเร็กทอรีที่มีหลายไฟล์, glob ในพาธเพื่อจับคู่เฉพาะไฟล์บางไฟล์, ลิงก์ YouTube หรือสตรีม HTTP อื่นๆ ผลลัพธ์จะถูกบันทึกไว้ใน runs/detect
ไดเรกทอรี
ก้าวต่อไป – การเรียนรู้เชิงลึกเชิงปฏิบัติสำหรับคอมพิวเตอร์วิทัศน์
ธรรมชาติที่อยากรู้อยากเห็นของคุณทำให้คุณต้องการไปต่อหรือไม่? เราขอแนะนำให้ตรวจสอบของเรา คอร์ส: “การเรียนรู้เชิงลึกเชิงปฏิบัติสำหรับคอมพิวเตอร์วิทัศน์ด้วย Python”.
หลักสูตร 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
สรุป
ในคู่มือฉบับย่อนี้ เราได้มาดูวิธีที่คุณสามารถดำเนินการตรวจจับวัตถุด้วย YOLOv5 ที่สร้างโดยใช้ PyTorch