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

Karn Yongsiriwit
5 min readFeb 21, 2021

--

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

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

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

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

  1. นำชุดข้อมูลขึ้น GitHub สามารถข้ามได้นะครับ ถ้าจะใช้ชุดข้อมูลที่ผู้เขียนเตรียมไว้ตาม link ด้านล่างนะครับ
  2. สร้างแบบจำลองบน Colab
  3. ทดลองใช้แบบจำลอง

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

สามารถข้ามขั้นตอนนี้ไปได้นะครับถ้าจะใช้ชุดข้อมูลรูปภาพไม้มงคล 3 ชนิด ที่ผู้เขียนบทความเตรียมไว้ให้

เพื่อให้สามารถนำชุดข้อมูลที่จัดเตรียมจากตอนที่แล้ว มาใช้ train สร้างแบบจำลองตรวจจับวัตถุบน colab ได้ ผู้เขียนขอแนะนำให้นำขึ้น GitHub ครับ (หรือจะใช้อย่างอื่นก็ได้นะครับที่เป็นที่เป็น git แชร์ source code ครับ)

โดยจะมีการใช้ git ในบทความนี้ ถ้าที่เครื่องยังไม่ได้ติดตั้ง git สามารถติดตั้งได้จาก https://git-scm.com/

สมัคร account GitHub ที่ https://github.com/ เมื่อลงชื่อเข้าใช้งาน GitHub แล้ว ให้เลือกสร้าง Repository โดยการกดปุ่ม New ดังรูป

  • ใส่ชื่อ Repository name ตามต้องการ โดยชุดข้อมูลจากบทความตอนที่แล้วจะเป็นเกี่ยวกับรูปภาพไม้มงคล 3 ชนิด เลยจะใส่เป็น plants-train-dataset
  • จากนั้นตั้ง Repository ให้เป็น Public (สามารถตั้งให้เป็น Private ได้เช่นกันแต่จะต้องมีการระบุ user/password ตอน clone มาใช้งาน)
  • เลือก Create repository เป็นอันเสร็จสิ้น

หลังจากนั้นจะมีหน้าแสดงบอกวิธีการนำ source code/file ขึ้น Repository โดยให้บันทึก URL ของ Repository ไว้ดังภาพ เพื่อนำไปใช้ต่อไป

เปิด Command prompt (Windows) หรือ Terminal (Mac/Linx) ขึ้นมา จากนั้นทำการเปลี่ยนไปอยู่ directory ที่ชุดข้อมูลรูปภาพไม้มงคล 3 ชนิดที่จัดเตรียมไว้จากบทความที่แล้ว โดยจากรูปจะเป็นการเปลี่ยนไปที่ drive d จากนั้น cd (change directory) ไปที่ directory plants-train-dataset

จากนั้นเรียกใช้คำสั่งด้านล่าง เพื่อทำการอัพโหลดไฟล์ชุดข้อมูลขึ้นไปยัง GitHub Repository ที่สร้างไว้ข้างต้น โดยเปลี่ยน <<YOUR GITHUB REPOSITORY URL>> ให้เป็น URL ของเราเอง

echo "# plants-train-dataset" >> README.md
git init
git add .
git commit -m "first commit"
git branch -M main
git remote add origin <<YOUR GITHUB REPOSITORY URL>>
git push -u origin main

เมื่อกลับมาดู Repository ของเราใน GitHub จะเห็นได้ว่ามีชุดข้อมูลนำขึ้นเรียบร้อยแล้ว

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)

clone ชุดข้อมูลรูปภาพไม้มงคล 3 ชนิด

  • ทำการ clone ชุดข้อมูลรูปภาพไม้มงคล 3 ชนิด
% cd /content!git clone <<YOUR GITHUB REPOSITORY URL>>
  • หรือถ้าจะใช้ชุดข้อมูลที่เตรียมโดยผู้เขียนบทความสามารถใช้เป็นคำสั่งกับ URL ตามด้านล่างก็ได้ครับ
% cd /content!git clone https://github.com/KarnYong/plants-train-dataset.git

จากนั้นกดปุ่ม refresh folder ดังภาพ จะเห็นได้ว่ามี folder plants-train-dataset ที่เป็นชุดข้อมูลภาพไม้มงคล 3 ชนิดที่ clone มาจาก GitHub

ติดตั้ง 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: ../plants-train-dataset/images/
val: ../plants-train-dataset/images/
# 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
Karn Yongsiriwit

Written by Karn Yongsiriwit

Lecturer at Digital Innovation Technology, Rangsit University

Responses (1)