ກວດຈັບວັດຖຸແບບສົດໆດ້ວຍ YOLOv8: ກໍລະນີສຶກສາການກວດຈັບລົດຈັກໃນນະຄອນຫຼວງວຽງຈັນ
ກວດຈັບວັດຖຸແບບສົດໆ (Real-time Object Detection) ດ້ວຍ YOLOv8 ສຳລັບການວິເຄາະການຈະລາຈອນ
ຖ້າທ່ານເຄີຍຂັບລົດຜ່ານສີ່ແຍກໄຟອຳນາດດົງປ່າລານ ຫຼື ຖະໜົນສຸພານຸວົງໃນຊົ່ວໂມງເລັ່ງດ່ວນ ທ່ານຄົງຈະຄຸ້ນເຄີຍກັບປະລິມານລົດຈັກທີ່ຫຼວງຫຼາຍໃນນະຄອນຫຼວງວຽງຈັນ. ການນັບຈຳນວນ ແລະ ການວິເຄາະກະແສການສັນຈອນຂອງລົດຈັກເຫຼົ່ານີ້ ແມ່ນສິ່ງສຳຄັນສຳລັບການພັດທະນາລະບົບຈະລາຈອນອັດສະລິຍະ (Smart Traffic System) ໃນປະເທດລາວ.
ໃນບົດຄວາມນີ້, ເຮົາຈະເຈາະເລິກໃນລະດັບ Advanced ກ່ຽວກັບການນຳໃຊ້ Computer Vision ໂດຍສະເພາະໂມເດວ YOLOv8 ຈາກ Ultralytics ເພື່ອເຮັດການກວດຈັບລົດຈັກ (Motorbike Detection) ແບບສົດໆ (Real-time). ເຮົາຈະພິຈາລະນາເຖິງສະຖາປັດຕະຍະກຳ, ການຂຽນໂຄດດ້ວຍ Python ແລະ ການ Optimize ໂມເດວສຳລັບ Edge Devices.
ທຳຄວາມເຂົ້າໃຈກັບສະຖາປັດຕະຍະກຳຂອງ YOLOv8 (Architecture Overview)
ສຳລັບນັກພັດທະນາ Deep Learning, ທ່ານອາດຈະຄຸ້ນເຄີຍກັບ YOLO (You Only Look Once) ໃນເວີຊັ່ນກ່ອນໆ. ແຕ່ YOLOv8 ໄດ້ມີການປັບປຸງສະຖາປັດຕະຍະກຳທີ່ໜ້າສົນໃຈຫຼາຍຢ່າງເຊິ່ງເຮັດໃຫ້ມັນເໝາະກັບການກວດຈັບວັດຖຸທີ່ໜາແໜ້ນ (Dense Object Detection) ເຊັ່ນ: ກຸ່ມລົດຈັກທີ່ຈອດລໍຖ້າໄຟແດງ.
- Anchor-Free Detection: YOLOv8 ປ່ຽນມາໃຊ້ວິທີການທຳນາຍແບບ Anchor-free (ລົບລ້າງການໃຊ້ Anchor boxes ແບບເກົ່າ), ເຊິ່ງຊ່ວຍຫຼຸດຈຳນວນການຄຳນວນ (Box predictions) ລົງຢ່າງມະຫາສານ ແລະ ເພີ່ມຄວາມໄວ (Inference speed).
- C2f Module: ແທນທີ່ C3 module ດ້ວຍ C2f (Cross Stage Partial Bottleneck with 2 convolutions) ເພື່ອລວມ High-level ແລະ Low-level features ເຂົ້າກັນໄດ້ດີຂຶ້ນ, ເຮັດໃຫ້ກວດຈັບລົດຈັກທີ່ຢູ່ໄກອອກໄປໄດ້ຊັດເຈນ.
- Decoupled Head: ແຍກສ່ວນການຄຳນວນ Objectness, Classification ແລະ Regression ອອກຈາກກັນ ສຳລັບການຄຳນວນ Loss ທີ່ມີປະສິດທິພາບສູງຂຶ້ນ.
ຂັ້ນຕອນການຕິດຕັ້ງ (Environment Setup)
ເພື່ອໃຫ້ໄດ້ປະສິດທິພາບສູງສຸດໃນການປະມວນຜົນວິດີໂອ, ຄວນໝັ້ນໃຈວ່າເຄື່ອງຂອງທ່ານຕິດຕັ້ງ NVIDIA CUDA Toolkit ແລະ cuDNN ສຳລັບ GPU Acceleration ແລ້ວ.
# ສ້າງ Virtual Environment
python -m venv yolov8_env
source yolov8_env/bin/activate # ສຳລັບ Linux/Mac
# yolov8_env\Scripts\activate # ສຳລັບ Windows
# ຕິດຕັ້ງ PyTorch ແບບມີ CUDA (ປັບເວີຊັ່ນຕາມເຄື່ອງຂອງທ່ານ)
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
# ຕິດຕັ້ງ Ultralytics ແລະ OpenCV
pip install ultralytics opencv-python
ການຂຽນໂຄດເພື່ອກວດຈັບລົດຈັກ (Implementation)
ໃນ Dataset COCO ທີ່ YOLOv8 ຖືກ Train ມາພື້ນຖານນັ້ນ, ລົດຈັກ (Motorbike) ຈະຖືກກຳນົດເປັນ Class ID 3. ເຮົາຈະໃຊ້ຈຸດນີ້ເພື່ອ Filter ເອົາສະເພາະລົດຈັກເທົ່ານັ້ນ, ໂດຍຕັດລົດໃຫຍ່ ຫຼື ຄົນຍ່າງອອກ ເພື່ອປະຢັດຊັບພະຍາກອນໃນການປະມວນຜົນ.
ມາເບິ່ງໂຄດ Python ທີ່ໃຊ້ OpenCV ຮ່ວມກັບ PyTorch ເພື່ອປະມວນຜົນວິດີໂອຈະລາຈອນ:
import cv2
import torch
from ultralytics import YOLO
# ກວດສອບວ່າອຸປະກອນຮອງຮັບ GPU ຫຼື ບໍ່
device = 'cuda' if torch.cuda.is_available() else 'cpu'
print(f"Using device: {device}")
# ໂຫຼດໂມເດວ YOLOv8 (ເລືອກ yolov8s.pt ສຳລັບຄວາມສົມດຸນລະຫວ່າງຄວາມໄວ ແລະ ຄວາມຖືກຕ້ອງ)
model = YOLO('yolov8s.pt')
# ເປີດໄຟລ໌ວິດີໂອ ຫຼື ໃຊ້ RTSP Stream ຈາກກ້ອງວົງຈອນປິດແຖວສີ່ແຍກ
video_path = 'vientiane_traffic_sample.mp4'
cap = cv2.VideoCapture(video_path)
if not cap.isOpened():
print("Error: ບໍ່ສາມາດເປີດວິດີໂອໄດ້!")
exit()
while True:
ret, frame = cap.read()
if not ret:
print("ສິ້ນສຸດວິດີໂອ.")
break
# ສົ່ງ Frame ເຂົ້າໄປໃນ Model
# classes=3 ໝາຍເຖິງກວດຈັບແຕ່ "Motorbike"
# conf=0.45 ໝາຍເຖິງເອົາແຕ່ຄ່າຄວາມໝັ້ນໃຈທີ່ສູງກວ່າ 45%
results = model.predict(source=frame, classes=[3], conf=0.45, device=device, verbose=False)
# ດຶງຂໍ້ມູນ Frame ທີ່ເຮັດການແຕ້ມ Bounding Boxes ແລ້ວ
annotated_frame = results[0].plot()
# ນັບຈຳນວນລົດຈັກໃນ Frame ປັດຈຸບັນ
motorbike_count = len(results[0].boxes)
# ສະແດງຈຳນວນລົດຈັກເທິງວິດີໂອ
cv2.putText(annotated_frame, f'Motorbikes in Vientiane: {motorbike_count}',
(20, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2, cv2.LINE_AA)
# ສະແດງຜົນວິດີໂອ
cv2.imshow("Vientiane Smart Traffic Vision", annotated_frame)
# ກົດ 'q' ເພື່ອອອກຈາກໂປຣແກຣມ
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# ຄືນຄ່າຊັບພະຍາກອນ
cap.release()
cv2.destroyAllWindows()
ອະທິບາຍໂຄດເພີ່ມເຕີມ:
model.predict(..., classes=[3]): ການ Filter Class ນັບແຕ່ລະດັບ Inference ຊ່ວຍໃຫ້ເຮົາຈັດການຜົນລັບໄດ້ງ່າຍຂຶ້ນໂດຍບໍ່ຕ້ອງມາຂຽນໂຄດແຍກເພີ່ມເຕີມ.results[0].plot(): ເປັນ Method ຂອງ Ultralytics ທີ່ຊ່ວຍ Render ເສັ້ນ Bins (Bounding Boxes) ພ້ອມກັບຄ່າ Confidence ໃສ່ຮູບພາບໃຫ້ໂດຍອັດຕະໂນມັດ, ປະຢັດເວລາໃນການຂຽນ OpenCV ຫຼາຍແຖວ.
ການປັບແຕ່ງປະສິດທິພາບສູງສຸດ (Advanced Optimization ສຳລັບ Edge Devices)
ຖ້າເຮົາຕ້ອງການນຳໂຄງການນີ້ໄປຕິດຕັ້ງຢູ່ໜ້າງານຈິງ (ເຊັ່ນ: ດຶງຂໍ້ມູນຈາກກ້ອງ CCTV ຕາມເສົາໄຟຟ້າ ແລະ ປະມວນຜົນຜ່ານ NVIDIA Jetson Nano ເຊິ່ງເປັນ Edge Device), ການໃຊ້ພຽງແຕ່ .pt (PyTorch Model) ອາດຈະເຮັດໃຫ້ Frame Rate (FPS) ຫຼຸດລົງ.
ພວກເຮົາຄວນ Export Model ເປັນ TensorRT (TRT) ເພື່ອການປະມວນຜົນທີ່ໄວທີ່ສຸດເທິງ Hardware ຂອງ NVIDIA:
# Export ໂມເດວ YOLOv8 ໄປເປັນຮູບແບບ TensorRT
yolo export model=yolov8s.pt format=engine device=0 half=True
Note: ການໃຊ້ half=True ແມ່ນການເຮັດ FP16 Quantization ເຊິ່ງຈະຊ່ວຍຫຼຸດການໃຊ້ Memory ລົງເຄິ່ງໜຶ່ງ ໂດຍທີ່ຄວາມຖືກຕ້ອງ (Accuracy) ຫຼຸດລົງພຽງເລັກນ້ອຍ ແຕ່ໄດ້ FPS ເພີ່ມຂຶ້ນເກືອບ 2 ເທົ່າ.
ຫຼັງຈາກນັ້ນ, ໃນໂຄດ Python ເຮົາພຽງແຕ່ປ່ຽນການເອີ້ນໂມເດວມາເປັນ:
model = YOLO('yolov8s.engine')
Key Takeaways
- YOLOv8 ແມ່ນເຕັກໂນໂລຊີ Computer Vision ທີ່ເໝາະສົມເປັນຢ່າງຍິ່ງສຳລັບການເຮັດ Real-time Object Detection ດ້ວຍສະຖາປັດຕະຍະກຳແບບ Anchor-free.
- ການນຳໃຊ້ Computer Vision ໃນປະເທດລາວ ເຊັ່ນກໍລະນີສຶກສາການນັບຈຳນວນລົດຈັກ ສາມາດຖືກພັດທະນາຕໍ່ຍອດໄປເປັນລະບົບຄວບຄຸມໄຟອຳນາດອັດຕະໂນມັດ (Adaptive Traffic Lights) ທີ່ຊ່ວຍແກ້ໄຂບັນຫາລົດຕິດໃນວຽງຈັນໄດ້.
- ສຳລັບການໃຊ້ງານຈິງໃນລະດັບອຸດສາຫະກຳ (Production), ຢ່າລືມເຮັດ Model Optimization ດ້ວຍ TensorRT ສະເໝີ ເພື່ອລົດການນຳໃຊ້ຊັບພະຍາກອນ ແລະ ເພີ່ມຄວາມໄວໃຫ້ກັບລະບົບສູງສຸດ.
ສະຫຼຸບ
ການນຳໃຊ້ YOLOv8 ເຂົ້າໃນການວິເຄາະສະພາບການລົດຈັກໃນນະຄອນຫຼວງວຽງຈັນ ບໍ່ພຽງແຕ່ເປັນການຮຽນຮູ້ໃນທາງທິດສະດີເທົ່ານັ້ນ ແຕ່ເປັນການນຳໃຊ້ Deep Learning ເພື່ອແກ້ໄຂບັນຫາທີ່ເກີດຂຶ້ນຈິງໃນທ້ອງຖິ່ນຂອງພວກເຮົາ. ດ້ວຍເຄື່ອງມືເຫຼົ່ານີ້, ວິສະວະກອນລາວສາມາດເປັນສ່ວນໜຶ່ງໃນການສ້າງສັນນະວັດຕະກຳໃໝ່ໆ ສຳລັບ “Smart Vientiane” ໃນອະນາຄົດໄດ້ຢ່າງແນ່ນອນ. ສຳລັບໃຜທີ່ສົນໃຈ, ລອງນຳໂຄດຂ້າງເທິງໄປປັບໃຊ້ກັບກ້ອງໜ້າລົດຊ່ວງທີ່ຂັບຂີ່ໃນຕົວເມືອງເບິ່ງ ແລ້ວທ່ານຈະເຫັນເຖິງປະສິດທິຜົນອັນໜ້າທຶ່ງຂອງ AI ຍຸກໃໝ່.