DEV Community

Cover image for การใช้ YOLO อัลกอริทึ่มในการตรวจจับวัตถุ (Object detection)
GFStealer-666
GFStealer-666

Posted on

การใช้ YOLO อัลกอริทึ่มในการตรวจจับวัตถุ (Object detection)

ก่อนอื่นเรามาทำความรู้จัก YOLO กันก่อน
YOLO คืออะไร?

YOLO ย่อมากจาก "You Only Look Once" เป็นโมเดลอัลกอริทั่มในการตรวจจับวัตถุ
ที่ถูกสร้างขึ้นโดยนายJoseph Redmon

หลักการทำงานคร่าวๆของ YOLO คือการแบ่งภาพออกเป็นช่องๆขนาด N*N หละจะใช้อัลกอริทั่มคำนวนค่าความเป็นไปได้ของข่องนั้นๆ ว่าจะเป็นวัตถุที่อยู่ใน dataset หรือไม่

Image description

หัวข้อถัดไป การตรวจจับวัตถุ
การตรวจจับวัตถุคืออะไร?

การตรวจจับวัตถุ หรือ 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

Image description

ให้ทำการสร้าง notebook อันใหม่ขึ้นมาโล่ด!
อย่าลืมเปลี่ยนชื่อ notebook ด้วยนะจะได้ไม่สับสนทีหลัง

ขั้นตอนที่ 2
โคลนลิ้ง Git hub ของ YoloV5 มาลงโฟลเดอร์ภายใน Colab โดยใช้ชุดโค้ดคำสั่งดังนี้



!git clone https://github.com/ultralytics/yolov5  
%cd yolov5
%pip install -qr requirements.txt  


Enter fullscreen mode Exit fullscreen mode

และจากนั้นจะมีโฟลเดอร์ชื่อ yolov5 มาแบบนี้

Image description

ข้อควรระวัง!!! ถ้ากดรัน Code นี้หลายๆรอบ จะทำให้โฟลเดอร์ซ้อนกันเรื่อยๆแบบนี้ จะมีปัญหาในการดึงค่า path ภายหลัง

ขั้นตอนที่ 3

รันโค้ดชุดนี้ เพื่อ import library เพิ่มเติม



import torch
from yolov5 import utils
display = utils.notebook_init() 


Enter fullscreen mode Exit fullscreen mode

ถ้าใครมีปัญหาแนะนำให้ดูเรื่อง Path ของโฟลเดอร์ yolov5 ดีๆ
รันเสร็จจะได้แบบนี้

Image description

ขั้นตอนที่ 4

จัดเตรียม dataset ในการเทรน model ของเรา
โดยในบทความครั้งนี้จะใช้ไฟล์ชื่อ coco128.yaml เนื่องจากเป็นไฟล์ที่ YOLOV5 มีในตัว ถือว่าค่อนข้างสะดวก
หรือถ้าอยากจะเทรน dataset แบบ custom สามารถไปแก้ไขภายในไฟล์ได้
ใช้โค้ดชุดนี้ในการรันคำสั่ง



!python train.py --img 640 --batch 8 --epochs 10 --data coco128.yaml --weights yolov5s.pt --cache


Enter fullscreen mode Exit fullscreen mode

โดยค่าข้างในเราสามารถปรับแต่งเองได้ ดังนี้

  1. image จะกำหนดค่าขนาดของภาพที่ใช้ในการเทรน
  2. batch จะเป็นการแบ่ง datasetให้เล็กลง ว่าจะหารเท่าไร (ในที่นี้คือ 128/8 จะได้เท่ากับ 16)
  3. epochs ให้เทรนทั้งหมดกี่ครั้งหลังจากรัน batch ทั้งหมด จะเพิ่มค่าความแม่นยำ
  4. data ไฟล์ที่จะใช้เทรนในที่นี้คือ coco128.yaml
  5. weights output ไฟล์ที่เทรนเสร็จแล้ว

ทริค!! ในส่วนของ cache ใช้คำสั่ง --cache ram หรือ --cache disk ในการทำให้เทรนเร็วขึ้นแต่กินสเปคคอมนะจ๊ะ

ขั้นตอนที่ 5

รอเทรน ใช่แล้วรอเทรนให้เสร็จยังไงหละ รออย่างเดียวจะค่อนข้างนาน
โดยจะรันทั้งหมดตามค่า epochs ว่ากี่รอบโดยเริ่มจาก 0
ในที่นี้ก็คือ 0-9 รอบ รอไป!

Image description

ใช้เวลาค่อนข้างนานยิ่งถ้าไม่ได้ใช้ ram หรือ disk หละก็อย่างต่ำครึ่งชม.ต้องมา

เทรนเสร็จแล้ว! จะได้ภาพคร่าวๆดังนี้

Image description

และดูว่าไฟล์จะไปเซฟที่ไหน ถ้าเกิดเราเทรนหลายๆครั้งและยกเลิกชื่อโฟลเดอร์จะเปลี่ยนไป
ให้หาโฟลเดอร์ชื่อ weight/ และใช้ไฟล์ best.pt แบบนี้

Image description

ขั้นตอนที่ 6

อัพภาพขึ้น Google colab สามารถข้ามตรงนี้ได้ถ้าอยากอัพไฟล์ขึ้นเอง

*โดยจะใช้โค้ดคำสั่งชุดนี้ *



from google.colab import files
uploaded = files.upload()


Enter fullscreen mode Exit fullscreen mode

Image description

หละก็อัพโหลดภาพขึ้นโหลดหลังจากนั้นจะแก้ชื่อภาพหรือย้ายไปโฟลเดอร์ไหนตามใจได้เลยจ้า

พอได้มากดคลิ๊กขวา! แหละ Copy path มันมาซะ เราจะเอาไปใช้ในขั้นตอนต่อไป!

Image description

ขั้นตอนที่ 7

ได้เวลาแห่งความจริงในการตรวจจับภาพ

Image description

ใช้โค้ดคำสั่งชุดนี้ในการรัน



!python detect.py --source /content/yolov5/myfriend.jpg --weights /content/yolov5/runs/train/exp/weights/best.pt


Enter fullscreen mode Exit fullscreen mode

โดยหาไฟล์ชื่อ detect.py ให้เจอนะ ถ้าใครไม่มี! กลับไปขั้นตอนที่ 2 ด่วน

ต่อมาคือการใช้ path ไฟล์

--source คือ ต่ำแหน่งของภาพที่ก็อปมาเมื่อกี้ มาวางตรงนี้โล่ด
--weight คือ model ที่เราเทรนเสร็จแล้ว copy path ไฟล์ best.pt มาแปะ

แล้วก็รันโล่ด!!!

Image description

จะได้ผลลัพธ์ออกมาประมาณนี้
เนื่องจากกำหนดขนาดไฟล์ภาพเป็น 640 ภาพเลยจะมีขนาดแคบกว่าปกติ

ตัวอย่างที่ 1 :
Image description

ตัวอย่างที่ 2 :

Image description

ตัวอย่างที่ 3 :

Image description

*เห็นว่าจะมี error อยู่ตรงหน้ากากปิดหน้าที่ AI ตรวจจับเป็นโทรศัพท์มือถือแทน แนะนำว่าควรเพิ่มจำนวนครั้งที่เทรน เพื่อเพิ่มค่าความแม่นยำขึ้น*

และนี้ก็เป็น Tutorial คร่าวๆสำหรับผู้เริ่มใช้ YoloV5 อัลกอริทึ่มในการทำ Object detectionแบบเริ่มต้นนะครับ ขอบคุณที่อ่านมาจนจบถึงตอนนี้ หวังว่าบทความนี้จะเป็นประโยชน์ไม่น้อยก็มากต่อผู้อ่านนะครับ ขอบคุณครับผม!

Reference ทั้งหมดที่ใช้นะ
เนื่องจากบล็อกนี้เขียนขึ้นมาใหม่เอง
เป็นการรรวมกันของหลายๆเว็บจึงมีเรฟค่อนข้างเยอะ

Top comments (1)

Collapse
 
whiangkham profile image
nitipoom

สวัสดีครับ สนใจเรียนรู้เกี่ยวกับ หัวข้อนี้อย่างลึกซึ้งครับ ไม่ทราบว่าพอจะช่วยแนะนำหรือสอนแบบหลังไมค์ได้ไม๊ครับ