บทนำ
การตรวจจับวัตถุเป็นฟิลด์ขนาดใหญ่ในการมองเห็นด้วยคอมพิวเตอร์ และเป็นหนึ่งในแอปพลิเคชั่นที่สำคัญกว่าของการมองเห็นด้วยคอมพิวเตอร์ "ในธรรมชาติ"
การตรวจจับวัตถุไม่ได้มาตรฐานเท่ากับการจำแนกภาพ สาเหตุหลักมาจากการพัฒนาใหม่ส่วนใหญ่มักทำโดยนักวิจัย ผู้ดูแล และนักพัฒนาแต่ละคน แทนที่จะเป็นไลบรารีและเฟรมเวิร์กขนาดใหญ่ เป็นการยากที่จะจัดแพ็คเกจสคริปต์ยูทิลิตี้ที่จำเป็นในเฟรมเวิร์ก เช่น TensorFlow หรือ PyTorch และรักษาแนวทาง API ที่เป็นแนวทางในการพัฒนาจนถึงตอนนี้
สิ่งนี้ทำให้การตรวจจับวัตถุค่อนข้างซับซ้อนมากขึ้น โดยทั่วไปแล้วจะละเอียดกว่า (แต่ไม่เสมอไป) และเข้าถึงได้น้อยกว่าการจัดประเภทรูปภาพ
โชคดีสำหรับคนจำนวนมาก – Ultralytics ได้พัฒนา API การตรวจจับวัตถุที่เรียบง่าย ทรงพลัง และสวยงามรอบๆ YOLOv5 ซึ่งได้รับการขยายโดยทีมวิจัยและพัฒนาอื่นๆ ในเวอร์ชันที่ใหม่กว่า เช่น YOLOv7
ในคู่มือฉบับย่อนี้ เราจะดำเนินการ Object Detection ใน Python ด้วย YOLOv7 ที่ล้ำสมัย
ภูมิทัศน์ YOLO และ YOLOv7
YOLO (คุณมองเพียงครั้งเดียว) เป็นวิธีการเช่นเดียวกับกลุ่มของแบบจำลองที่สร้างขึ้นสำหรับการตรวจจับวัตถุ นับตั้งแต่ก่อตั้งในปี 2015 YOLOv1, YOLOv2 (YOLO9000) และ YOLOv3 ได้รับการเสนอโดยผู้เขียนคนเดียวกัน – และชุมชนการเรียนรู้เชิงลึกยังคงดำเนินต่อไปด้วยความก้าวหน้าแบบโอเพนซอร์ซในปีต่อๆ ไป
Ultralytics' YOLOv5 เป็นการนำ YOLO ไปใช้งานขนาดใหญ่ครั้งแรกใน PyTorch ซึ่งทำให้เข้าถึงได้ง่ายกว่าที่เคย แต่เหตุผลหลักที่ YOLOv5 ได้รับการตั้งหลักดังกล่าวก็คือ API ที่เรียบง่ายและทรงพลังซึ่งสร้างขึ้นโดยรอบ โปรเจ็กต์จะสรุปรายละเอียดที่ไม่จำเป็นออกไป ในขณะที่อนุญาตให้ปรับแต่งได้ ทุกรูปแบบการส่งออกที่ใช้งานได้จริง และใช้แนวทางปฏิบัติที่น่าทึ่งที่ทำให้ทั้งโปรเจ็กต์มีประสิทธิภาพและเหมาะสมที่สุดเท่าที่จะทำได้
YOLOv5 ยังคงเป็นโครงการหลักในการสร้างแบบจำลองการตรวจจับวัตถุด้วย และที่เก็บจำนวนมากที่มีจุดมุ่งหมายเพื่อพัฒนาวิธี YOLO เริ่มต้นด้วย YOLOv5 เป็นพื้นฐานและเสนอ API ที่คล้ายกัน (หรือเพียงแค่แยกโครงการแล้วสร้างต่อยอด) นั่นคือกรณีของ YOLOR (คุณเรียนรู้เพียงหนึ่งตัวแทน) และ YOLOv7 ซึ่งสร้างขึ้นบน YOLOR (ผู้เขียนคนเดียวกัน) YOLOv7 เป็นความก้าวหน้าล่าสุดในวิธีการของ YOLO และที่โดดเด่นที่สุดคือ YOLOv7 มีส่วนหัวของโมเดลใหม่ ที่สามารถส่งออกจุดสำคัญ (โครงกระดูก) และดำเนินการแบ่งส่วนอินสแตนซ์นอกเหนือจากการถดถอยของขอบเขตเท่านั้น ซึ่งไม่ได้มาตรฐานสำหรับรุ่น YOLO รุ่นก่อน
ทำให้การแบ่งส่วนอินสแตนซ์และการตรวจจับจุดสำคัญได้เร็วกว่าที่เคย!
นอกจากนี้ YOLOv7 ยังทำงานได้เร็วขึ้นและมีระดับความแม่นยำที่สูงกว่ารุ่นก่อนๆ เนื่องจากการนับพารามิเตอร์ที่ลดลงและประสิทธิภาพในการคำนวณที่สูงขึ้น:
โมเดลนี้สร้างขึ้นจากการเปลี่ยนแปลงทางสถาปัตยกรรม รวมถึงการเพิ่มประสิทธิภาพด้านการฝึกอบรม เรียกว่า "กระเป๋าของแจกฟรี" ซึ่งเพิ่มความแม่นยำโดยไม่เพิ่มต้นทุนการอนุมาน
กำลังติดตั้ง YOLOv7
การติดตั้งและใช้งาน YOLOv7 จำเป็นต้องดาวน์โหลดที่เก็บ GitHub ไปยังเครื่องท้องถิ่นของคุณและเรียกใช้สคริปต์ที่มาพร้อมกับมัน
หมายเหตุ น่าเสียดายในขณะที่เขียน YOLOv7 ไม่ได้เสนอ API แบบเป็นโปรแกรมที่สะอาดเช่น YOLOv5 ซึ่งโดยทั่วไปจะโหลดจาก torch.hub()
ผ่านที่เก็บ GitHub เข้ามา ดูเหมือนว่าจะเป็นคุณลักษณะที่ควรใช้งานได้ แต่ขณะนี้ล้มเหลว เมื่อได้รับการแก้ไข ฉันจะอัปเดตคู่มือหรือเผยแพร่คู่มือใหม่ใน API แบบเป็นโปรแกรม สำหรับตอนนี้ – เราจะเน้นที่สคริปต์การอนุมานที่มีให้ในที่เก็บ
คุณยังสามารถทำการตรวจจับแบบเรียลไทม์บนวิดีโอ รูปภาพ ฯลฯ และบันทึกผลลัพธ์ได้อย่างง่ายดาย โปรเจ็กต์นี้ใช้หลักการเดียวกันกับ YOLOv5 ซึ่งมีเอกสารประกอบมากมาย ดังนั้นคุณน่าจะพบคำตอบสำหรับคำถามเฉพาะกลุ่มเพิ่มเติมในที่เก็บ YOLOv5 หากคุณมี
มาดาวน์โหลดที่เก็บและทำการอนุมานกัน:
! git clone https://github.com/WongKinYiu/yolov7.git
สิ่งนี้จะสร้างไฟล์ yolov7
ไดเร็กทอรีในไดเร็กทอรีการทำงานปัจจุบันของคุณ ซึ่งเป็นที่เก็บโปรเจ็กต์ ไปที่ไดเร็กทอรีนั้นและดูไฟล์:
%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 runs
หมายเหตุ บน Google Colab Notebook คุณจะต้องใช้เวทมนตร์ %cd
คำสั่งในแต่ละเซลล์ที่คุณต้องการเปลี่ยนไดเร็กทอรีของคุณเป็น yolov7
ในขณะที่เซลล์ถัดไปจะนำคุณกลับไปยังไดเร็กทอรีการทำงานเดิมของคุณ บน Local Jupyter Notebooks ให้เปลี่ยนไดเร็กทอรี ครั้งเดียว ช่วยให้คุณไม่ต้องออกคำสั่งซ้ำหลายครั้ง
พื้นที่ detect.py
เป็นสคริปต์อนุมานที่เรียกใช้การตรวจจับและบันทึกผลลัพธ์ภายใต้ runs/detect/video_name
ซึ่งคุณสามารถระบุ video_name
ขณะเรียก detect.py
ต้นฉบับ export.py
ส่งออกโมเดลไปยังรูปแบบต่างๆ เช่น ONNX, TFLite เป็นต้น train.py
สามารถใช้ในการฝึกตัวตรวจจับ YOLOv7 แบบกำหนดเอง (หัวข้อของคู่มืออื่น) และ test.py
สามารถใช้ทดสอบตัวตรวจจับได้ (โหลดจากไฟล์ตุ้มน้ำหนัก)
ไดเร็กทอรีเพิ่มเติมหลายไดเร็กทอรีมีการกำหนดค่า (cfg
) ข้อมูลตัวอย่าง (inference
) ข้อมูลเกี่ยวกับการสร้างแบบจำลองและการกำหนดค่า COCO (data
) ฯลฯ
YOLOv7 ขนาด
โมเดลที่ใช้ YOLO ปรับขนาดได้ดี และโดยทั่วไปแล้วจะส่งออกเป็นโมเดลที่เล็กกว่า แม่นยำน้อยกว่า และมีขนาดใหญ่กว่าและแม่นยำกว่า สิ่งเหล่านี้จะถูกนำไปใช้กับอุปกรณ์ที่อ่อนแอกว่าหรือแข็งแกร่งกว่าตามลำดับ
YOLOv7 มีหลายขนาดและเปรียบเทียบกับ MS COCO:
ดูคู่มือเชิงปฏิบัติสำหรับการเรียนรู้ Git ที่มีแนวทางปฏิบัติที่ดีที่สุด มาตรฐานที่ยอมรับในอุตสาหกรรม และเอกสารสรุปรวม หยุดคำสั่ง Googling Git และจริงๆ แล้ว เรียน มัน!
รุ่น | ขนาดทดสอบ | APทดสอบ | AP50test | AP75test | ชุดที่ 1 fps | รุ่น 32 เวลาเฉลี่ย |
---|---|---|---|---|---|---|
โยลอฟ7 | 640 | ลด 51.4% | ลด 69.7% | ลด 55.9% | 161 FPS | ms 2.8 |
โยโลฟ7-X | 640 | ลด 53.1% | ลด 71.2% | ลด 57.8% | 114 FPS | ms 4.3 |
โยโลฟ7-W6 | 1280 | ลด 54.9% | ลด 72.6% | ลด 60.1% | 84 FPS | ms 7.6 |
โยโลฟ7-E6 | 1280 | ลด 56.0% | ลด 73.5% | ลด 61.2% | 56 FPS | ms 12.3 |
โยโลฟ7-D6 | 1280 | ลด 56.6% | ลด 74.0% | ลด 61.8% | 44 FPS | ms 15.0 |
โยโลฟ7-E6E | 1280 | ลด 56.8% | ลด 74.4% | ลด 62.1% | 36 FPS | ms 18.7 |
คุณสามารถเลือกระหว่างฮาร์ดแวร์เหล่านี้ได้ ทั้งนี้ขึ้นอยู่กับฮาร์ดแวร์พื้นฐานที่คุณคาดหวังให้โมเดลทำงานและความแม่นยำที่จำเป็น รุ่นที่เล็กที่สุดยิงได้ 160FPS บนภาพขนาด 640 บน V100! คุณสามารถคาดหวังประสิทธิภาพแบบเรียลไทม์ที่น่าพอใจบน GPU สำหรับผู้บริโภคทั่วไปได้เช่นกัน
การอนุมานวิดีโอด้วย YOLOv7
สร้าง inference-data
โฟลเดอร์สำหรับเก็บภาพและ/หรือวิดีโอที่คุณต้องการตรวจจับ สมมติว่าอยู่ในไดเร็กทอรีเดียวกัน เราสามารถเรียกใช้สคริปต์การตรวจหาด้วย:
! python3 detect.py --source inference-data/busy_street.mp4 --weights yolov7.pt --name video_1 --view-img
การดำเนินการนี้จะแจ้งวิดีโอที่ใช้ Qt บนเดสก์ท็อปของคุณ ซึ่งคุณสามารถดูความคืบหน้าและการอนุมานแบบสด ทีละเฟรม ตลอดจนส่งออกสถานะไปยังเอาต์พุตไปป์มาตรฐานของเรา:
Namespace(weights=['yolov7.pt'], source='inference-data/busy_street.mp4', img_size=640, conf_thres=0.25, iou_thres=0.45, device='', view_img=True, save_txt=False, save_conf=False, nosave=False, classes=None, agnostic_nms=False, augment=False, update=False, project='runs/detect', name='video_1', exist_ok=False, no_trace=False)
YOLOR 🚀 v0.1-112-g55b90e1 torch 1.12.1 CPU
Downloading https://github.com/WongKinYiu/yolov7/releases/download/v0.1/yolov7.pt to yolov7.pt...
100%|██████████████████████████████████████| 72.1M/72.1M [00:18<00:00, 4.02MB/s]
Fusing layers...
RepConv.fuse_repvgg_block
RepConv.fuse_repvgg_block
RepConv.fuse_repvgg_block
Model Summary: 306 layers, 36905341 parameters, 6652669 gradients
Convert model to Traced-model...
traced_script_module saved!
model is traced!
video 1/1 (1/402) /Users/macbookpro/jup/yolov7/inference-data/busy_street.mp4: 24 persons, 1 bicycle, 8 cars, 3 traffic lights, 2 backpacks, 2 handbags, Done. (1071.6ms) Inference, (2.4ms) NMS
video 1/1 (2/402) /Users/macbookpro/jup/yolov7/inference-data/busy_street.mp4: 24 persons, 1 bicycle, 8 cars, 3 traffic lights, 2 backpacks, 2 handbags, Done. (1070.8ms) Inference, (1.3ms) NMS
โปรดทราบว่าโปรเจ็กต์จะทำงานช้าบนเครื่องที่ใช้ CPU (เช่น 1000ms ต่อขั้นตอนการอนุมานในเอาต์พุตด้านบน รันบน MacBook Pro ที่ใช้ Intel ปี 2017) และเร็วขึ้นอย่างมากบนเครื่องที่ใช้ GPU (ใกล้กับ ~5ms/เฟรม) บน V100) แม้แต่ในระบบที่ใช้ CPU เช่นนี้ yolov7-tiny.pt
วิ่งที่ 172ms/frame
ซึ่งแม้ว่าจะห่างไกลจากเรียลไทม์ แต่ก็ยังเหมาะสมมากสำหรับการจัดการการทำงานเหล่านี้บน CPU
เมื่อรันเสร็จแล้ว คุณจะพบวิดีโอที่ได้ภายใต้ runs/video_1
(ชื่อที่เราระบุใน detect.py
โทร) บันทึกเป็น .mp4
:
การอนุมานเกี่ยวกับรูปภาพ
การอนุมานเกี่ยวกับรูปภาพทำให้กระบวนการเดียวกัน – จัดหา URL ให้กับรูปภาพในระบบไฟล์และเรียก detect.py
:
! python3 detect.py --source inference-data/desk.jpg --weights yolov7.pt
หมายเหตุ ขณะที่เขียน ผลลัพธ์จะไม่ปรับขนาดป้ายกำกับตามขนาดรูปภาพ แม้ว่าคุณจะตั้งค่า --img SIZE
. ซึ่งหมายความว่ารูปภาพขนาดใหญ่จะมีเส้นกรอบบางๆ และป้ายกำกับขนาดเล็ก
สรุป
ในคำแนะนำสั้น ๆ นี้ – เราได้ดูสั้น ๆ เกี่ยวกับ YOLOv7 ซึ่งเป็นความก้าวหน้าล่าสุดในตระกูล YOLO ซึ่งต่อยอดจาก YOLOR เราได้มาดูวิธีการติดตั้งพื้นที่เก็บข้อมูลบนเครื่องของคุณ และเรียกใช้สคริปต์การอนุมานการตรวจหาวัตถุด้วยเครือข่ายที่ได้รับการฝึกอบรมล่วงหน้าสำหรับวิดีโอและรูปภาพ
ในคำแนะนำเพิ่มเติม เราจะครอบคลุมการตรวจหาจุดสำคัญและการแบ่งกลุ่มอินสแตนซ์
ก้าวต่อไป – การเรียนรู้เชิงลึกเชิงปฏิบัติสำหรับคอมพิวเตอร์วิทัศน์
ธรรมชาติที่อยากรู้อยากเห็นของคุณทำให้คุณต้องการไปต่อหรือไม่? เราขอแนะนำให้ตรวจสอบของเรา คอร์ส: “การเรียนรู้เชิงลึกเชิงปฏิบัติสำหรับคอมพิวเตอร์วิทัศน์ด้วย 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
- การเพิ่มประสิทธิภาพโมเดล Deep Learning สำหรับคอมพิวเตอร์วิทัศน์