ก่อนอื่นเรามาทำความรู้จัก YOLO กันก่อน
YOLO คืออะไร?
YOLO ย่อมากจาก "You Only Look Once" เป็นโมเดลอัลกอริทั่มในการตรวจจับวัตถุ
ที่ถูกสร้างขึ้นโดยนายJoseph Redmon
หลักการทำงานคร่าวๆของ YOLO คือการแบ่งภาพออกเป็นช่องๆขนาด N*N หละจะใช้อัลกอริทั่มคำนวนค่าความเป็นไปได้ของข่องนั้นๆ ว่าจะเป็นวัตถุที่อยู่ใน dataset หรือไม่
หัวข้อถัดไป การตรวจจับวัตถุ
การตรวจจับวัตถุคืออะไร?
การตรวจจับวัตถุ หรือ Object Detection คือความสามารถในการตรวจจับวัตถุและบ่งบอกว่าวัตถุนั้นคืออะไรได้อย่างถูกต้อง
โดยเป็นหนึ่งในหน้าที่การทำงานของเทคโนโลยี Computer vision ที่จะทำการฝึกฝนระบบ AI คอมพิวเตอร์
ให้สามารถมองเห็นและเข้าใจในสิ่งที่มนุษย์สามารถทำได้ผ่านการรับค่ารูปภาพ วิดิโอต่างๆ โดยเป็น Object detection
นั้นเป็น Machine learning แบบ Deep learning เนื่องจากเป็นการสอนและฝึกฝนAI ให้ทำหน้าที่ได้เหมือนมนุษย์
โดย ณ ปัจจุบัน YOLO มีถึง Version 8 ในบทความนี้เราจะใช้ YOLOV5 โดยจะต่างกันตรง Feature ที่เพิ่มเข้ามาในเวอร์ชั่นหลังๆนั้นเอง
เอาหละ เมื่อเกริ่นคร่าวๆเสร็จแล้วเรามาเริ่มกันเลยดีกว่า!
ขั้นตอนแรก
เปิด Google Colab ใช่แล้วเราจะใช้ Google Colab ในบทความนี้ เนื่องจากว่าเป็นภาษา Python และจำเป็นติดตั้ง Library ค่อนข้างเยอะ
เราเลยตัดปัญหาใช้ Google colabเลยง่ายดี ลิ้งไป Google Colab
ให้ทำการสร้าง notebook อันใหม่ขึ้นมาโล่ด!
อย่าลืมเปลี่ยนชื่อ notebook ด้วยนะจะได้ไม่สับสนทีหลัง
ขั้นตอนที่ 2
โคลนลิ้ง Git hub ของ YoloV5 มาลงโฟลเดอร์ภายใน Colab โดยใช้ชุดโค้ดคำสั่งดังนี้
!git clone https://github.com/ultralytics/yolov5
%cd yolov5
%pip install -qr requirements.txt
และจากนั้นจะมีโฟลเดอร์ชื่อ yolov5 มาแบบนี้
ข้อควรระวัง!!! ถ้ากดรัน Code นี้หลายๆรอบ จะทำให้โฟลเดอร์ซ้อนกันเรื่อยๆแบบนี้ จะมีปัญหาในการดึงค่า path ภายหลัง
ขั้นตอนที่ 3
รันโค้ดชุดนี้ เพื่อ import library เพิ่มเติม
import torch
from yolov5 import utils
display = utils.notebook_init()
ถ้าใครมีปัญหาแนะนำให้ดูเรื่อง Path ของโฟลเดอร์ yolov5 ดีๆ
รันเสร็จจะได้แบบนี้
ขั้นตอนที่ 4
จัดเตรียม dataset ในการเทรน model ของเรา
โดยในบทความครั้งนี้จะใช้ไฟล์ชื่อ coco128.yaml เนื่องจากเป็นไฟล์ที่ YOLOV5 มีในตัว ถือว่าค่อนข้างสะดวก
หรือถ้าอยากจะเทรน dataset แบบ custom สามารถไปแก้ไขภายในไฟล์ได้
ใช้โค้ดชุดนี้ในการรันคำสั่ง
!python train.py --img 640 --batch 8 --epochs 10 --data coco128.yaml --weights yolov5s.pt --cache
โดยค่าข้างในเราสามารถปรับแต่งเองได้ ดังนี้
- image จะกำหนดค่าขนาดของภาพที่ใช้ในการเทรน
- batch จะเป็นการแบ่ง datasetให้เล็กลง ว่าจะหารเท่าไร (ในที่นี้คือ 128/8 จะได้เท่ากับ 16)
- epochs ให้เทรนทั้งหมดกี่ครั้งหลังจากรัน batch ทั้งหมด จะเพิ่มค่าความแม่นยำ
- data ไฟล์ที่จะใช้เทรนในที่นี้คือ coco128.yaml
- weights output ไฟล์ที่เทรนเสร็จแล้ว
ทริค!! ในส่วนของ cache ใช้คำสั่ง --cache ram หรือ --cache disk ในการทำให้เทรนเร็วขึ้นแต่กินสเปคคอมนะจ๊ะ
ขั้นตอนที่ 5
รอเทรน ใช่แล้วรอเทรนให้เสร็จยังไงหละ รออย่างเดียวจะค่อนข้างนาน
โดยจะรันทั้งหมดตามค่า epochs ว่ากี่รอบโดยเริ่มจาก 0
ในที่นี้ก็คือ 0-9 รอบ รอไป!
ใช้เวลาค่อนข้างนานยิ่งถ้าไม่ได้ใช้ ram หรือ disk หละก็อย่างต่ำครึ่งชม.ต้องมา
เทรนเสร็จแล้ว! จะได้ภาพคร่าวๆดังนี้
และดูว่าไฟล์จะไปเซฟที่ไหน ถ้าเกิดเราเทรนหลายๆครั้งและยกเลิกชื่อโฟลเดอร์จะเปลี่ยนไป
ให้หาโฟลเดอร์ชื่อ weight/ และใช้ไฟล์ best.pt แบบนี้
ขั้นตอนที่ 6
อัพภาพขึ้น Google colab สามารถข้ามตรงนี้ได้ถ้าอยากอัพไฟล์ขึ้นเอง
*โดยจะใช้โค้ดคำสั่งชุดนี้ *
from google.colab import files
uploaded = files.upload()
หละก็อัพโหลดภาพขึ้นโหลดหลังจากนั้นจะแก้ชื่อภาพหรือย้ายไปโฟลเดอร์ไหนตามใจได้เลยจ้า
พอได้มากดคลิ๊กขวา! แหละ Copy path มันมาซะ เราจะเอาไปใช้ในขั้นตอนต่อไป!
ขั้นตอนที่ 7
ได้เวลาแห่งความจริงในการตรวจจับภาพ
ใช้โค้ดคำสั่งชุดนี้ในการรัน
!python detect.py --source /content/yolov5/myfriend.jpg --weights /content/yolov5/runs/train/exp/weights/best.pt
โดยหาไฟล์ชื่อ detect.py ให้เจอนะ ถ้าใครไม่มี! กลับไปขั้นตอนที่ 2 ด่วน
ต่อมาคือการใช้ path ไฟล์
--source คือ ต่ำแหน่งของภาพที่ก็อปมาเมื่อกี้ มาวางตรงนี้โล่ด
--weight คือ model ที่เราเทรนเสร็จแล้ว copy path ไฟล์ best.pt มาแปะ
แล้วก็รันโล่ด!!!
จะได้ผลลัพธ์ออกมาประมาณนี้
เนื่องจากกำหนดขนาดไฟล์ภาพเป็น 640 ภาพเลยจะมีขนาดแคบกว่าปกติ
ตัวอย่างที่ 2 :
ตัวอย่างที่ 3 :
*เห็นว่าจะมี error อยู่ตรงหน้ากากปิดหน้าที่ AI ตรวจจับเป็นโทรศัพท์มือถือแทน แนะนำว่าควรเพิ่มจำนวนครั้งที่เทรน เพื่อเพิ่มค่าความแม่นยำขึ้น*
และนี้ก็เป็น Tutorial คร่าวๆสำหรับผู้เริ่มใช้ YoloV5 อัลกอริทึ่มในการทำ Object detectionแบบเริ่มต้นนะครับ ขอบคุณที่อ่านมาจนจบถึงตอนนี้ หวังว่าบทความนี้จะเป็นประโยชน์ไม่น้อยก็มากต่อผู้อ่านนะครับ ขอบคุณครับผม!
Reference ทั้งหมดที่ใช้นะ
เนื่องจากบล็อกนี้เขียนขึ้นมาใหม่เอง
เป็นการรรวมกันของหลายๆเว็บจึงมีเรฟค่อนข้างเยอะ
- https://www.datacamp.com/blog/yolo-object-detection-explained
- https://www.analyticsvidhya.com/blog/2022/06/yolo-algorithm-for-custom-object-detection/
- https://github.com/ultralytics/yolov5/wiki#tutorials
- https://www.v7labs.com/blog/yolo-object-detection#:~:text=YOLO%20(You%20Only%20Look%20Once,for%20its%20speed%20and%20accuracy.
- https://docs.ultralytics.com/yolov5/train_custom_data/
- https://medium.com/@model.predict/epoch
Top comments (1)
สวัสดีครับ สนใจเรียนรู้เกี่ยวกับ หัวข้อนี้อย่างลึกซึ้งครับ ไม่ทราบว่าพอจะช่วยแนะนำหรือสอนแบบหลังไมค์ได้ไม๊ครับ