วันพฤหัสบดีที่ 27 พฤศจิกายน พ.ศ. 2568

Model Training on reComputer Jetson

ติดตั้ง YOLO ให้เรียบร้อยก่อน หากยังไม่ได้ติดตั้ง YOLO ให้ไปอ่านบทความนี้

https://maimemory.blogspot.com/2025/11/yolov8-on-recomputer-jetson.html


นำข้อมูลคลิปวิดีโอหรือรูปภาพที่ต้องการ Train ไปทำ dataset ใน roboflow ก่อน ตามคลิปนี้



ย้าย dataset เข้าไปโฟลเดอร์โปรเจคใน Jetson ซึ่งอาจย้ายโดยใช้คำสั่ง scp ใน cmd

scp <dataset folder> <username>@<ip address>:<jetson project folder path>

เชื่อมต่อการแสดงผลภาพจากใน Docker Container กับ X11 Display ด้วยคำสั่ง

xhost +local:docker

ในกรณีที่ยังไม่ได้สร้าง Docker Container ต้องสร้างก่อนโดยสร้างตัวแปร $t และ Pull Docker Container สำหรับ Run GPU จาก Ultralytics และ Run Container โดย map volume ของโฟลเดอร์โปรเจคใน Jetson ด้วย -v พร้อมเชื่อมต่อกล้อง USB /dev/video0 และ X11 Display สำหรับแสดงผลภาพจากใน Container ด้วยคำสั่ง

t=ultralytics/ultralytics:latest-jetson-jetpack4
sudo docker pull $t && sudo docker run -it --name <container name> -v <jetson project folder>:<container project folder> --ipc=host --runtime=nvidia --device /dev/video0:/dev/video0 --env="DISPLAY" --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" $t

ในการแสดงผลภาพจากใน Container ตัวแปร DISPLAY จะต้องมีค่า default คือ  DISPLAY=:0 ด้วย สามารถตรวจสอบได้ด้วยคำสั่ง

echo $DISPLAY

ทดสอบการเชื่อมต่อระหว่าง PyTorch กับ CUDA ภายใน GPU ด้วยการ Run Console ของ Python3 และใช้คำสั่ง

python3
import torch
print(torch.__version__)
print(torch.cuda.is_available())
print(torch.cuda.device_count())
print(torch.cuda.current_device())
print(torch.cuda.get_device_name(0))
import torchvision
print(torchvision.__version__)
exit()
exit

เตรียมไฟล์ train.py (device=0, imgsz=160) ไฟล์ detect.py (best.engine,device=0) ไฟล์ engine.py (สำหรับแปลงไฟล์ .pt เป็น .engine) และสร้าง venv สำหรับ Run ใน Docker Container จากนั้น Run Docker Container และ Copy โปรเจคโฟลเดอร์เข้าไปใน Docker Container ด้วยคำสั่ง

Start Container และตรวจสอบสถานะของ Container ด้วยคำสั่ง

sudo docker start <container name>
sudo docker ps -a
sudo docker cp <project folder including all files and venv> <container name>:/home

Exec เข้าไปใน Container และ Activate venv ด้วยคำสั่ง

sudo docker exec -it <container name> bash
cd ../home/<project folder>
source venv/bin/activate
pip list

ติดตั้ง Ultralytics ภายใน Docker Container ภายใต้ venv ด้วยคำสั่ง

python3 -m pip install pip --upgrade
pip install ultralytics

ติดตั้ง nano สำหรับแก้ไขไฟล์ใน Container ด้วยคำสั่ง

apt update
apt install nano -y

Run ไฟล์ train.py เพื่อเริ่มทำการเทรน model ด้วยคำสั่ง

python3 train.py

ไฟล์ train.py
                                                        from ultralytics import YOLO
                                                        import torch
                                                        print(torch.cuda.is_available())
                                                        model = YOLO("yolov8n.pt")
                                                        trainResults = model.train(
                                                                data = "data.yaml",
                                                                epochs = 100,
                                                                imgsz = 160,
                                                                device = 0)
                                                        metrics = model.val()



รอจนกระทั่งเทรน model สำเร็จ จะได้ไฟล์ best.pt ต้องแปลงไฟล์ best.pt เป็น best.engine ด้วยการ Run ไฟล์ engine.py ด้วยคำสั่ง

python3 engine.py

ไฟล์ engine.py
                                                        from ultralytics import YOLO
                                                        model = YOLO("best.pt")
                                                        model.export(format="engine")


ทดสอบ model ที่ได้จากการเทรน ด้วยการ Run ไฟล์ detect.py ด้วยคำสั่ง

python3 detect.py

ไฟล์ detect.py
                                from ultralytics import YOLO
                                import cv2
                                print(cv2.__version__)
                                model = YOLO("best.engine")
                                cap = cv2.VideoCapture(0)
                                while(True):
                                        ret, frame = cap.read()
                                        results = model(source=frame, save=False, device=0, conf=0.7)
                                        for r in results:
                                                annotated = r.plot()
                                                cv2.imshow("Live Camera", annotated)
                                                if(cv2.waitKey(1) & 0xFF == ord('q')):
                                                        break
                                cap.release()
                                cv2.destroyAllWindows()


ออกจาก Virtual Environment และออกจาก Docker Container ด้วยคำสั่ง

deactivate
exit


กรณี Build Docker Image ด้วย Dockerfile จะทำให้ Container พร้อมใช้งานเร็วขึ้น

ไฟล์ Dockerfile
                                FROM ultralytics/ultralytics:latest-jetson-jetpack4
                                
                                WORKDIR /home

                                RUN pip uninstall opencv-python-headless -y
                                RUN pip install opencv-python
                                RUN echo "alias venvact='source venv/bin/activate'" >> ~/.bashrc

จากนั้น Build Image ด้วยคำสั่ง

sudo docker build -t <image name> .

จากนั้น Run Container ด้วยคำสั่ง

sudo docker run -it --name <container name> -v <jetson project folder>:<container project folder> --ipc=host --runtime=nvidia --device /dev/video0:/dev/video0 --env="DISPLAY" --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" <image name>

ไม่มีความคิดเห็น:

แสดงความคิดเห็น