카테고리 없음

[OpenCV] 1주차 - YOLOv5를 이용해 클라이밍 홀드 인식

콜라드리블 2024. 3. 14. 21:12
작성자 김명원
일 시 2024. 3. 14 (목) 18:00 ~ 21:00
장 소 복지관 b128-1호
참가자 명단 임혜진, 이재영, 성창민, 김명원, 장원준
 사 진

 

YOLO5 모델을 이용하기 위해서 공식 github 계정의 파일을 다운로드하고, 필수 라이브러리를 설치하는 명령을 입력한다.

 

Python에서 사용되는 os모듈을 이용하기 위해 현제 작업 디렉토리를 변경한다.

그 뒤 %pip 명령어를 사용해 YOLO5 모델을 실행하기 위해 필요한 Python 패키지들을 설치한다.

import os
os.chdir('/content/yolov5')
%pip install -qr requirements.txt #-qr : q(출력되는 메시지 최소화), r(requirments.txt 파일에서 패키지 목록을 읽어 설치)

결과 -

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 195.4/195.4 kB 2.0 MB/s eta 0:00:00

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 721.2/721.2 kB 8.9 MB/s eta 0:00:00

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 62.7/62.7 kB 7.8 MB/s eta 0:00:00

 

https://universe.roboflow.com/climbing-rmbhd/climbing-eeqyl/dataset/1/images

 

climbing Object Detection Dataset and Pre-Trained Model by climbing

287 open source hold images plus a pre-trained climbing model and API. Created by climbing

universe.roboflow.com

여기에 있는 클라이밍 홀드 데이터를 학습시키로 했다.

Train 데이터는 262개와 Test 데이터 15개, Vaild 데이터 10개를 이용해 모델을 학습시킬 것이다.

 

이렇게 저장한 데이터의 이름을 편의상 custom_dataset으로 바꾼 뒤

unzip 명령으로 데이터 셋 파일의 압축을 해제한다.

!unzip "../custom_dataset.zip"

 

압축 해제가 완료되면 현 작업 디렉토리가 yolo5였기 때문에 yolo5/custom_dataset/ 경로에 데이터셋이 위치하게 된다.

 

custom_dataset.yaml 파일을 만들어서 다음과 같은 설정정보를 입력한다.

-----------------------------------------------------------------------------------------------

path: /home/user/다운로드/climbing
train: train/images
val: valid/images
test: test/images

nc: 15
names: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15']

-----------------------------------------------------------------------------------------------

이 데이터에서 암벽의 다양한 색과 클라이머까지 분류했다. 총 클래스는 15개로 학습을 시킨 뒤 번호에 맞는 색을 찾아 이용할 것이다.

 

https://example.com/path/to/train.py에서 train.py 파일을 다운로드

!wget -O /content/train.py https://example.com/path/to/train.py

 

다운받은 train.py 파일을 시행시키고  /content/yolov5/custom_dataset.yaml에 있는 경로와 학습시킬 에폭 수를 전달해 모델을 학습시킨다.

!python train.py --data "/content/yolov5/custom_dataset.yaml" --epochs 100

결과 - Results saved to runs/train/exp12

exp12에 weights/last.pt와 weights/best.pt 2개의 가중치가 저장되었다. 이중 weights/best.pt를 이용해 사진과 영상에 있는 홀드를 탐지한다.

 

vaild데이터를 활용해 만들어진 모델을 검증한다.

!python val.py --data "/content/yolov5/custom_dataset.yaml" --weights "/content/yolov5/runs/train/exp12"

검증된 결과는 confusion matrix, F1 curve 등과 같은 차트로 저장된다.

 

이제 객체를 탐지할 사진이나 영상을 학습된 가중치를 통해 모델을 적용한다.

!python detect.py --weights "/content/yolov5/runs/train/exp12/weights/best.pt" --source "/content/클라이밍 6개월 실력변화.mp4"

영상은 자동으로 프레임을 나눠 프레임마다 객체를 탐지하게 된다

클라이밍 6개월 실력변화.mp4
15.19MB

객체를 탐지한 후 바운더리 박스로 분류한 영상

클라이밍 홀드를 인식하기 위해 YOLOv5를 선택했다.
객체를 탐지한 영상을 보면 탐지한 객체의 정확도가 기대한 것보다 높지 않았다.
더 많은 데이터를 수집하고 다양한 모델들을 사용한 뒤 비교해 보아야 할 것 같다.