วันพฤหัสบดีที่ 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 ด้วยคำสั่ง

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

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

sudo docker start <container name>
sudo docker ps -a

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>

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

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