프로그래밍/데이터 사이언스 공부

yaml 파일 수정의 두가지 방법

이자다 2024. 1. 3. 04:46
반응형

 

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에 모델을 업로드 시 오류가 발생하여 업로드가 되지 않았다.

 

 

 

 

 

두 방법 중에선 첫번째 방법을 주로 사용하고 있다.

반응형