[오늘의 일지]
프로젝트 - YOLO 모델을 위한 데이터셋 알아보기
[상세 내용]
YOLO 모델을 위한 데이터셋
- 다른 모델과는 다르게 딥러닝 모델들은 각 모델에 맞는 데이터셋을 잘 구축하는 것이 중요합니다. 제대로 된 데이터셋을 구축하지 않으면 모델이 제대로 학습되지 않기 때문입니다. 그래서 오늘은 YOLO 모델에 맞는 데이터셋을 구축하는 과정에 대해서 정리해 보겠습니다. 오늘은 아마도 일부만 정리하고 나머지는 내일 정리할 것 같습니다.
특징
- 여러 가지 사이트를 검색해 본 결과 YOLO 모델은 예를 들면 하나의 이미지가 존재한다면 하나의 annotation 파일이 존재해야지 학습이 가능한 것으로 파악을 했습니다. annotation이라는 단어는 그 자체로 주석이라는 뜻을 가지는데 YOLO 모델의 annotation 안에는 다음과 같은 순서로 값이 존재해야 한다는 것을 알게 되었습니다.
# annotation 내용
<클래스> <x_중심> <y_중심> <너비> <높이>
데이터셋 구축 코드 예시 (데이콘 대회에 올라온 코드 참고)
- 여기서는 annotation 파일을 txt형식으로 저장해서 사용한 것으로 파악했습니다. 다른 형식으로 저장해도 되는지는 저도 알아봐야 할 것 같습니다.
def make_yolo_dataset(image_paths, txt_paths, type="train"):
for image_path, txt_path in tqdm(zip(image_paths, txt_paths if not type == "test" else image_paths), total=len(image_paths)):
source_image = cv2.imread(image_path, cv2.IMREAD_COLOR)
image_height, image_width, _ = source_image.shape
target_image_path = f"../data/yolo/{type}/{os.path.basename(image_path)}"
cv2.imwrite(target_image_path, source_image)
if type == "test":
continue
with open(txt_path, "r") as reader:
yolo_labels = []
for line in reader.readlines():
line = list(map(float, line.strip().split(" ")))
class_name = int(line[0])
x_min, y_min = float(min(line[5], line[7])), float(min(line[6], line[8]))
x_max, y_max = float(max(line[1], line[3])), float(max(line[2], line[4]))
x, y = float(((x_min + x_max) / 2) / image_width), float(((y_min + y_max) / 2) / image_height)
w, h = abs(x_max - x_min) / image_width, abs(y_max - y_min) / image_height
yolo_labels.append(f"{class_name} {x} {y} {w} {h}")
target_label_txt = f"../data/yolo/{type}/{os.path.basename(txt_path)}"
with open(target_label_txt, "w") as writer:
for yolo_label in yolo_labels:
writer.write(f"{yolo_label}\n")
[마무리]
오늘은 YOLO 모델의 데이터셋을 구성하는 방법에 대해서 알아보았습니다. 내용은 짧은 것 같아도 자세하게 파악하기까지 시간이 생각보다 오래 걸렸던 것 같습니다. 그냥 코드만 보고 파악하느라 더 오래 걸린 것 같습니다. 내일은 데이터셋을 구성해서 모델을 간단하게 학습하는 것까지 해볼 수 있으면 좋을 거 같습니다.
반응형
'AI > AI 부트캠프' 카테고리의 다른 글
[AI 부트캠프] DAY 122 - 파이널 프로젝트 13 (1) | 2024.01.13 |
---|---|
[AI 부트캠프] DAY 121 - 파이널 프로젝트 12 (0) | 2024.01.12 |
[AI 부트캠프] DAY 119 - 파이널 프로젝트 10 (0) | 2024.01.10 |
[AI 부트캠프] DAY 118 - 파이널 프로젝트 9 (1) | 2024.01.09 |
[AI 부트캠프] DAY 117 - 파이널 프로젝트 8 (0) | 2024.01.06 |
댓글