YOLO คืออะไร ?? ในงาน object detection
YOLO หรือ You Only Look Once คือ Realtime Object Detection Model ที่มีความโดดเด่นเรื่องความเร็วและความถูกต้อง
หลักการของมันคือ ถ้ามีรูปหมาน้อย, จักรยาน และรถบรรทุกอยู่ด้านหลังแบบนี้ มันก็จะพยายาม rectangle object เหล่านั้นไว้ (โดยหาจุดกึ่งกลางของแต่ละ object แล้วค่อยครอบ box เอาไว้) และบอกออกมาว่าสิ่งนั้นคืออะไร โดยมี model พื้นฐานอยู่แล้วประมาณ 80 classes ที่ถูกเทรนเอาไว้ และสามารถบอกได้ด้วยว่าความน่าจะเป็นมีเท่าไหร่ จาก model ที่มี
ความโดดเด่นของ YOLO คือ สามารถ detect แม้กระทั่งวัตถุที่มันซ้อนกันได้ด้วย โดยมีโครงสร้างที่ค่อนข้างซับซ้อนของ grid ในแต่ละชั้นที่เล็กลงเรื่อยๆในแต่ละ Layers
ปัจจุบัน YOLO มาถึง version ที่ 5 แล้วโดยมีหลายแบบจำลองให้เลือกใช้ (และมีโครงสร้างที่ไม่เหมือนกัน) => github
YOLOv5s คือ ชั้นที่น้อยที่สุด (อันบน) จะสังเกตุว่าความเร็วค่อนข้างดีมาก 416 และใช้ parameters ที่ใช้ทำแบบจำลองทั้งหมด 7.5 ล้าน
แต่ถ้าอยากให้แบบจำลองดีขึ้น อาจเลือกใช้ YOLOv5m ก็จะถูกต้องขึ้น แต่ความเร็วก้อจะตกลง
ณ ตอนนี้จะมีให้ใช้งานที่สามารถโหลด model เหล่านี้มาใช้ได้เลยคือ
YOLOv5s, m, l ,x ซึ่งเขาได้เทรนไว้หมดแล้ว
เริ่มใช้กันเลยนะคับ (Activate เข้าไปใน Python env ที่เราจะใช้งานก่อนนะคับ)
- เข้าไปโหลดที่ github เข้ามาเลย
git clone https://github.com/ultralytics/yolov5
2. ให้ติดตั้ง lib ที่ต้องใช้ทั้งหมด (กรณีที่ไม่มี pip ก้อให้ติดตั้งแยกตามไฟล์ใน requirements.txt นะคับ)
pip install -r requirements.txt
# package ที่สำคัญในการทำ machine learning ใน project นี้คือ pytorch นะคับ (ทั่วไปตอนนี้จะใช้ tensorflow กับ torch)
ถ้าลงสำเร็จแล้ว ลองเข้าไปใน python3 ทดสอบ
import torch # ต้องไม่มี error เกิดขึ้นนะ ถ้า import สำเร็จ
3. เข้าไปใน folder “yolov5” ที่ download มา และลองรันคำสั่ง (เรียกกล้องใช้งาน)
python detect.py --source 0
เมื่อเรียกใช้ source 0 จะเป็นการเรียก webcam ของ Laptop
ps: ในกรณีที่ไม่สามารถ run ได้และมี error “Error #15: Initializing libiomp5.dylib, but found libiomp5.dylib already initialized” ประมาณนี้ให้เข้าไปเพิ่ม code ใน detect.py นะคับ อ้างอิงจาก github
import os
os.environ['KMP_DUPLICATE_LIB_OK']='True'
4. จากด้านบนเป็นการ run ผ่าน VDO โดยเราสามารถเลือก import รูปเข้าไปทดสอบได้เช่นกัน โดย ให้นำรูปที่ต้องการ detect เก็บลงใน
yolov5/data/images
จากนั้นจึง run ด้วย
python detect.py
เพิ่มเติมนะคับ ในกรณีที่เราต้องการเปลี่ยน weight เพื่อให้มีความแม่นยำขึ้น เราสามารถเข้าไปเลือก download models ต่างๆตามที่เราต้องการได้ที่นี่นะคับ
เรียงตามลำดับจาก accuracy ต่ำ ถึง สูง (5l to 5x) จากนั้นนำ file.pt ที่โหลดได้มาเก็บไว้ที่ folder yolov5 (ตำแหน่งที่อยู่ของ yolo หลัก) ของเรานะคับ
ที่นี้ค่า options ต่างๆจริงๆแล้วก็มาจาก detect.py นะคับ
จะเห็นว่ามี options ต่างๆให้เรียกใช้มากมายนะคับ ขอยกตัวอย่างแบบนี้
python detect.py --weight yolov5x.pt
# เป็นการเปลี่ยน model มาใช้ yolov5x.ptpython detect.py --source
# ถ้าเราไม่ใส่จะเป็น 'data/images' นะpython detect.py --conf 0.25
# conf-thres คือ ค่าที่น้อยที่สุดที่จะโชว์ หรือ ค่าความแม่นยำ (ถ้าต่ำกว่า 0.25 จะไม่โชว์)ถ้าต้องการความแม่นยำมากๆก้อให้ตั้งให้สูงขึ้นได้ แต่ก้อจะโชว์น้อยลงpython detect.py --iou 0.45
# iou-thres คือ ค่าที่ในกรณีที่รูป intersect กัน (ซ้อนกันเยอะๆ) จะนำค่าที่มากกว่า 0.45 เท่านั้นถึงจะโชว์ python detect.py --class 0 67
# เป็นการระบุเฉพาะบาง class เท่านั้นที่ต้องการ detect เช่น เรารู้อยู่แล้วว่า class0=คน และ class67=cell phone นั่นคือจะมีการ filter เฉพาะแค่คนกับโทรศัพท์เท่านั้น
ในการเรียกใช้งาน เราสามารถเพิ่ม param เข้าไปได้เรื่อยๆเลยเช่น
python detect.py --weight yolov5x.pt --class 0 67 --conf 0.25
สำหรับ 80 classes ที่ YOLO ได้เทรนไว้ให้แล้ว มีดังนี้นะคับ