[2022] สร้าง AI ง่ายๆ สำหรับตรวจจับวัตถุด้วย YOLOv5 (ตอนที่ 2 : สร้างแบบจำลองบน Colab)

Karn Yongsiriwit
4 min readMay 6, 2022

--

บทความนี้เป็นการสร้างแบบจำลองเพื่อตรวจจับหาพันธุ์ไม้มงคล 3 ชนิดนะครับ โดยจะเป็นตอนที่ 2 ต่อจากบทความของคุณ Thannob

ผลลัพธ์ที่ได้จะเป็นแบบจำลองที่สามารถ detect หาพันธุ์ไม้มงคลทั้ง 3 ชนิดได้ครับ ดังตัวอย่างเลยครับ ช่วงนี้ผู้เขียนกำลังอินกับเรื่องไม้มงคลครับ 555 😆

  • Aglaonema: ต้นโพธิ์อินโด
  • Rubber: ต้นยางอินเดีย
  • Spear: ต้นว่านงาช้าง

ขั้นตอนในบทความนี้จะแบ่งออกเป็น 3 ขั้นตอนนะครับ

  1. นำชุดข้อมูลขึ้น Google Drive
  2. สร้างแบบจำลองบน Colab
  3. ทดลองใช้แบบจำลอง

1. นำชุดข้อมูลขึ้น Google Drive

นำชุดข้อมูลที่มีการ label แล้วขึ้น Google Drive ดังภาพ โดยจะมีการ Mount folder ดังกล่าวใน Colab เพื่อดึงชุดข้อมูลไปใช้ในการพัฒนาแบบจำลองในหัวข้อถัดไป

2. สร้างแบบจำลองบน Colab

เปิดการใช้งาน Colab ได้ที่ https://colab.research.google.com/ โดยลงชื่อเข้าใช้งานด้วย Gmail ได้

จากนั้นทำการสร้าง notebook ด้วยการเลือก File > New notebook

ทำการเลือก Change runtime type เป็น GPU ดังภาพด้านล่าง

ทำการใส่คำสั่งด้านล่างลงไปใน Cell เพื่อทำการ clone source code yolov5 มาที่ Colab และติดตั้ง dependency ต่างๆ ของ yolov5 ด้วยคำสั่ง pip install จากนั้นกดปุ่ม Run ดังภาพ

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

กดไอคอน folder ที่แถบด้านข้าง จะเห็นได้ว่ามี folder yolov5 ขึ้นมาแสดงว่าการ clone source code yolov5 มาที่ Colab สำเร็จ

ทำการเพิ่ม cell ด้วยการกดเลือก + Code ด้านบน

ใส่ code python ด้านล่างเพื่อทำการ import package ที่จำเป็น (torch และ IPython)

import torchfrom IPython.display import Image  # to display imagesprint('Setup complete. Using torch %s %s' % (torch.__version__, torch.cuda.get_device_properties(0) if torch.cuda.is_available() else 'CPU'))

ทดลองการใช้ yolov5 เพื่อตรวจจับวัตถุในภาพตัวอย่างที่มาพร้อมกับ yolov5 และแสดงผลลัพธ์ออกมาด้านล่าง

!python detect.py --weights yolov5s.pt --img 640 --conf 0.25 --source data/images/Image(filename='runs/detect/exp/zidane.jpg', width=600)

Mount folder จาก Google Drive โดยกดปุ่มดังรูป

จากนั้นกดปุ่ม refresh folder ดังภาพ จะเห็นได้ว่ามี drive ปรากฏขึ้นมา ให้ทำการหา folder ที่จัดเก็บชุดข้อมูลที่ได้ upload ไปตอนต้นไว้ก่อน

ติดตั้ง wendb (Weights & Biases) สำหรับใช้เป็น dashboard ในการติดตามผลการสร้างแบบจำลอง โดยจะมีการให้เข้าหน้าเว็บจากการกด link ที่แสดงขึ้นมา เพื่อไปทำการลงชื่อเข้าใช้ (สามารถใช้ account GitHub ลงชื่อเข้าใช้ได้) แล้วจะได้ API key มาเพื่อมากรอกในช่องที่อยู่ถัดจาก link (กด Enter ด้วย) ตามภาพด้านล่าง

%pip install -q wandb!wandb login

สร้างไฟล์ plants-train.yaml ภายใต้ folder yolov5/data ตามภาพด้านล่าง

โดยในไฟล์ plants-train.yaml ให้ระบุถึง path ของรูป จำนวน class และชื่อของ class ซึ่งประกอบไปด้วย 3 คลาสดังนี้

  • โพธิ์อินโด (Aglaonema)
  • ยางอินเดีย (Rubber)
  • ว่านงาช้าง (Spear)
train: /content/drive/MyDrive/plants-train-dataset
val: /content/drive/MyDrive/plants-train-dataset
# number of classes
nc: 3
# class names
names: [ 'Aglaonema', 'Rubber', 'Spear' ]

กดปุ่ม Ctrl + S เพื่อทำการบันทึกไฟล์ดังกล่าง

แก้ไขไฟล์ yolov5s.yaml โดยใส่จำนวน class เป็น 3 ที่บรรทัดที่ 2 ตามภาพ (ตรงนี้ขอไม่ลงรายละเอียดนะครับ โดยจะเป็นการปรับค่า parameter ต่าง ๆ ของแบบจำลอง yolov5 ครับ)

ทำการเรียกคำสั่งเพื่อ train แบบจำลอง โดยระบุขนาดของภาพในการตรวจจับเท่ากับขนาดของภาพที่จะ train คือ 416 และจำนวน Epoch เป็น 100 ครั้ง ต้องขอบคุณ Colab ที่ให้เราใช้ GPU ทำให้ใช้เวลาไม่นานมาก 😁

%cd /content/yolov5!python train.py --img 416 --epochs 100 --data plants-train.yaml --cfg ./models/yolov5s.yaml --weights 'yolov5s.pt'

หลังจากที่เทรนจนครบ 100 Epoch สามารถดูผลลัพธ์สุดท้ายของการเทรนแบบจำลองผ่าน wandb ตาม link ที่แสดงด้านล่าง

สามารถดูตัวอย่างภาพของการทดสอบแบบจำลองได้ในช่อง Validation แล้วเลือกภาพที่ชื่อลงท้ายด้วย pred.jpg จะเห็นได้ว่าสามารถระบุชื่อของพันธุ์ไม้ได้ถูกต้อง

ผลลัพธ์ของการ prediction จะเป็นชื่อของ class และค่า confidence ของ class ดังกล่าวนะครับ (ยิ่งเข้าใกล้ 1 ยิ่งดีครับ)

3. ทดลองใช้แบบจำลอง

ไฟล์แบบจำลองที่ดีที่สุดจะสร้างไว้ที่ yolov5/runs/train/exp/weights/best.pt (โดย folder exp จะเปลี่ยนแปลงตามจำนวนครั้งที่ทำการเทรน ถ้าเทรนครั้งถัดไปจะเป็น exp2) โดยสามารถดาวน์โหลดมาใช้นอก Colab ได้ตามต้องการ

ทำการทดสอบด้วยภาพที่ถ่ายขึ้นมาใหม่ โดยให้ดาวน์โหลดไฟล์รูปภาพด้านล่างแล้วตั้งชื่อว่า plants3.jpg นำเข้าไปใส่ใน Colab ภายใต้ folder yolov5

เรียกคำสั่งด้านล่างเพื่อทดลองใช้แบบจำลองที่สร้างขึ้นเพื่อ detect หาพันธุ์ไม้ในรูปดังกล่าว (โดย folder exp จะเปลี่ยนแปลงตามจำนวนครั้งที่ทำการ detect)

!python detect.py --weights runs/train/exp/weights/best.pt --img 412 --conf 0.25 --source plants3.jpgImage(filename='runs/detect/exp2/plants3.jpg', width=600)

สามารถนำมาทดสอบนอก Colab ด้วยการใช้กับภาพจากวิดีโอได้ดังตัวอย่างผลลัพธ์ด้านล่างครับ

บทความโดย อ.ดร.กานต์ ยงศิริวิทย์
วิทยาลัยนวัตกรรมดิจิทัลเทคโนโลยี มหาวิทยาลัยรังสิต

--

--

Karn Yongsiriwit

Lecturer at Digital Innovation Technology, Rangsit University