반응형
import yaml
# 아래는 Roboflow에서 생성한 데이터셋의 yaml 파일의 예시이다.
# names:
# - car
# - large_bus
# - large_truck
# - medium_truck
# - small_bus
# - small_truck
# nc: 6
# roboflow:
# license: BY-NC-SA 4.0
# project: car_bus_truck_detection_2
# url: https://universe.roboflow.com/cardetection2/car_bus_truck_detection_2/dataset/3
# version: 3
# workspace: cardetection2
# test: ../test/images
# train: car_bus_truck_Detection_2-3/train/images
# val: car_bus_truck_Detection_2-3/valid/images
# data 변수에 yaml 파일을 받아서 yaml 파일을 수정한다.
with open ('/content/dataset/Outside_the_intersection-4/data.yaml', 'r') as f:
data = yaml.safe_load(f)
print(data)
# yolov8 학습과 검증에 사용되는 train, valid, test 데이터가 저장되어 있는 텍스트 파일의 경로를 기재한다
# val, valid 구별 주의
data['train'] = '/content/dataset/train_images_path.txt'
data['test'] = '/content/dataset/test_images_path.txt'
data['val'] = '/content/dataset/valid_images_path.txt'
with open('/content/dataset/Outside_the_intersection-4/data.yaml', 'w') as f:
yaml.dump(data, f)
print(data)
첫 번째 방법은 해당 yaml 파일의 내용에서 원하는 항목의 내용을 수정하는 방법이다.
이 방법을 사용하면 원하는 항목만을 수정할 수 있어서 원본 yaml 파일의 훼손 가능성이 낮다.
import yaml
# 1, 2번프로젝트의 데이터셋을 설명하는 yaml파일 수정
#yolov8 학습과 검증에 사용되는 train, valid, test 데이터가 저장되어 있는 디렉토리 경로
project_dataset = {'train' : '/content/dataset/train_images_path.txt',
'val' : '/content/dataset/valid_images_path.txt',
'test' : '/content/dataset/test_images_path.txt',
'names' : ['car', 'small_truck', 'medium_truck', 'large_truck', 'small_bus', 'large_bus'],
'nc' : 6}
# detection 하고싶은 클래스 개수(6개)와 클래스에 대응되는 클래스 이름(names)
# 데이터 경로와 클래스 정보를 저장하고 있는 딕셔너리 객체인 project1_data를 yolov5 학습에 필요한 project1, 2의 데이터셋을 지닌 yaml 파일에 저장.
with open('/content/dataset/concatDataset.yaml', 'w') as f:
yaml.dump(project_dataset, f)
# project1의 yaml을 읽어서 출력
with open('/content/dataset/concatDataset.yaml', 'r') as f:
project_yaml = yaml.safe_load(f)
display(project_yaml)
두 번째 방법은 yaml 파일을 아예 다른 내용으로 덮어쓰는 코드이다.
이 방법을 사용할 때 원본 yaml 파일의 내용을 전부 기재하지 않고 일부만 기재한다면 나머지 내용들은 전부 사라지는 문제가 발생한다.
위 코드로 수정된 yaml 파일은 모델 훈련에는 전혀 문제가 없지만 수정하면서 기존 yaml 파일에 기재된 roboflow 항목의 내용이 전부 사라져서 roboflow에 모델을 업로드 시 오류가 발생하여 업로드가 되지 않았다.
두 방법 중에선 첫번째 방법을 주로 사용하고 있다.
반응형