🔨 실행환경: Jetson Origin Nano 8GB
roboflow에서 라벨링함


Download Dataset 누르고 → Format: YOLOv8, Show download code 선택

주피터 코드 실행하면 데이터셋 다운로드됨

data.yaml 열어서 train이랑 test에 경로 맞게 넣기
1. validation set 만들어줌
val 만들고 data.yaml가서 val 경로도 추가해줌
import os
import shutil
from sklearn.model_selection import train_test_split
# 경로 설정
train_images_dir = "/home/ircv/projects/deep_daiv/ultralytics/deepdrive_yolo_1/train/images"
train_labels_dir = "/home/ircv/projects/deep_daiv/ultralytics/deepdrive_yolo_1/train/labels"
val_images_dir = "/home/ircv/projects/deep_daiv/ultralytics/deepdrive_yolo_1/val/images"
val_labels_dir = "/home/ircv/projects/deep_daiv/ultralytics/deepdrive_yolo_1/val/labels"
# 폴더 생성
os.makedirs(val_images_dir, exist_ok=True)
os.makedirs(val_labels_dir, exist_ok=True)
# 이미지와 라벨 파일 리스트
image_files = sorted(os.listdir(train_images_dir))
label_files = sorted(os.listdir(train_labels_dir))
# 파일 쌍 확인
image_label_pairs = [
(os.path.join(train_images_dir, img), os.path.join(train_labels_dir, img.replace('.jpg', '.txt')))
for img in image_files
if os.path.exists(os.path.join(train_labels_dir, img.replace('.jpg', '.txt')))
]
# 데이터 나누기 (80% train, 20% val)
train_split, val_split = train_test_split(image_label_pairs, test_size=0.2, random_state=42)
# val 데이터 이동
for image_path, label_path in val_split:
shutil.move(image_path, os.path.join(val_images_dir, os.path.basename(image_path)))
shutil.move(label_path, os.path.join(val_labels_dir, os.path.basename(label_path)))
print("Validation data has been created.")
2. 하이퍼파라미터 조정
/home/ircv/projects/deep_daiv/ultralytics/ultralytics/cfg/default.yaml 가면 조정할 수 있다.

batch 기본적으로 16으로 되어 있었는데 커널 충돌해서 학습 자꾸 끊겨서 8로 바꿨더니 돌아감.
epoch 기본적으로 100인데 20 정도로 설정했다.
fliplr 0으로 설정했다. (표지판 글씨 좌우반전 때문에)
3. train !
from ultralytics import YOLO
model = YOLO("yolov8s.pt")
model.train(data="/home/ircv/projects/deep_daiv/ultralytics/deepdrive_yolo_1/data.yaml")
data.yaml 경로 넣고 훈련시키기
