본문 바로가기
AI/AI 부트캠프

[AI 부트캠프] DAY 122 - 파이널 프로젝트 13

by HOHHOH 2024. 1. 13.

[오늘의 일지]

프로젝트 - YOLO 모델 소규모 데이터 학습 성공

[상세 내용]

YOLO 모델 소규모 데이터 학습 성공

- 어제 데이터셋을 구성한 뒤에 gpu 문제로 로컬에서 학습을 돌리는 것을 실패하고 gpu 세팅을 다시 하려고 했지만 모델 학습을 성공적으로 한 사이클 시켜보는 것이 더 중요하다고 생각해서 colab 환경에서 만들어진 데이터를 옮겨서 학습을 계속해서 시도했습니다. 학습을 시도하는 동안에 여러 가지 문제점이 또 발생했고 부분적으로 수정해 가면서 한 사이클 학습에 성공한 과정을 정리해 보겠습니다.

 

bbox 좌표의 문제점

- 어제 발견했던 bbox 좌표 말고도 학습을 시도할수록 더 이상한 좌표값들을 발견했습니다. 이런 좌표값들은 어쩔 수없지만 지정 범위인 0~1의 값만 만족할 수 있도록 설정을 했습니다. 240만 개의 데이터를 하나씩 찾아가면서 좌표값을 수정하기에는 너무 시간낭비가 될 거 같은 작업이라서 그냥 범위 적용으로 특정 소수의 데이터만 버리는 방향을 선택하게 되었습니다. 어제 지정해 준 범위보다 좀 더 세밀하게 범위를 정해주었습니다. 모델의 학습을 돌려보면 YOLO모델이 좌표가 이상한 값이 존재하면 오류 때문에 돌아가지 않아서 꼭 모두 처리하는 것이 중요하다고 생각했습니다.

# 기존의 좌표값을 불러올 때 범위를 지정해서 불러주고 width, height는 절대값을 씌워주면서 시작했습니다.
x, y, width, height = ast.literal_eval(row['bbox'])
x_min, y_min = max(0, min(image_width, float(x))), max(0, min(image_height, float(y)))
width, height = max(0, min(image_width, abs(width))), max(0, min(image_height, abs(height)))
x, y = max(0, min(1, float(((x_min*2 + width) / 2) / image_width))), max(0, min(1,float(((y_min*2 + height) / 2) / image_height)))
w, h = max(0, min(1, width / image_width)), max(0, min(1, height / image_height))

 

annotation 파일 재설정

- 어제는 여러 가지 자료들을 검색해서 찾아봤을 때 순서가 ' <클래스> <x_중심> <y_중심> <너비> <높이>' 이렇게 되어있어서 그냥 <클래스> 부분에는 비엔나 코드를 적으면 될 것이라고 생각했습니다. 그런데 계속해서 오류가 발생했고 다시 한번 검색을 통해서 찾아보니 <클래스>에는 클래스 인덱스를 0부터 시작하도록 지정해서 정해줘야 되는 것을 파악했습니다. 그래서 이 부분을 수정한 뒤에 모델을 돌렸습니다.

 

모델 불러올 때 yaml 파일로 불러오기

- 저는 학습된 모델이 없었기 때문에 yaml 파일로 처음에 불러오지 않으면 계속해서 오류가 나는 것을 파악했습니다. 모델을 불러오는 방법에 대해서 아래를 보면 이해하기 좋습니다.

# 모델 불러오기(상황에 맞게 골라서 사용)
model = YOLO('yolov8n.yaml')  # YAML에서 새 모델 구축
model = YOLO('yolov8n.pt')  # 사전 훈련된 모델 불러오기 (학습용 추천)
model = YOLO('yolov8n.yaml').load('yolov8n-cls.pt')  # YAML로 구축하고 가중치 전송

 

학습 결과

- 비록 소규모로 하나의 클래스에 대해서 5 epoch만 학습을 한 결과지만 어찌 됐든 모델이 돌아가는 것을 확인했기 때문에 다행이라고 생각합니다.

 

[마무리]

 오늘은 YOLOv8 모델을 소규모 데이터로 한 사이클 돌려보는 과정에 대해서 정리해 보았습니다. 우여곡절이 있었지만 결과적으로는 돌리는 것에 성공했기 때문에 이제는 전체 데이터 셋을 구축하고 원격서버상에서 모델을 학습시킬 수 있는 과정을 진행해 보도록 하겠습니다.

반응형

댓글