📌 이 글은 권철민님의 딥러닝 컴퓨터 비전 완벽 가이드 강의를 바탕으로 정리한 내용입니다.
목차
- Ultralytics YOLO v3 설치하기
- wandb(weight and bias) 모듈 설치
- Ultralytics YOLO Train 개요 - coco128 Dataset
- Ultralytics YOLO Dataset 개요
- Ultralytics YOLO Annotation 포맷
- Config 개요
- Dataset config와 Pretrained model을 사용할 때 weight 파일의 상대 경로, 절대 경로
Ultralytics YOLO v3 설치하기
colab 환경에서 진행하였다.
!git clone https://github.com/ultralytics/yolov3
!cd yolov3;pip install -qr requirements.txt
설치가 완료되면 위와 같이 깔린다.
웬만한 것들은 train.py 로 처리할 수 있다고 한다.
wandb(weight and bias) 모듈 설치
!pip install wandb
%cd yolov3
!python train.py --img 640 --batch 16 --epochs 3 --data coco128.yaml --weights yolov3.pt --nosave
wandb 관련 로그를 처리하기 위해서 위의 코드를 미리 한번 돌려보자.
wandb 관련 로그가 뜬다면?
(3)을 입력해도 된다. 좀더 시각적으로 보기 위한 옵션은 (2)을 입력하면 된다.
단, wandb.ai 사이트에 들어가서 회원 가입을 먼저 해주어야 한다.
Colab 환경에서 YOLO를 이용한다면, Colab을 쓰는 구글 아이디로 회원가입 해주면 된다.
(2)를 입력한다면 로그에 뜨는 https://wandb.ai/authorize 를 클릭해서, API key를 복사해서 입력 해준다.
그러면 작업한 내역이 wandb 인터페이스에 기록이 된다.
Ultralytics YOLO Train 개요 - coco128 Dataset
%cd yolov3
!python train.py --img 640 --batch 16 --epochs 3 --data coco128.yaml --weights yolov3.pt --nosave
- Ultralytics 학습용 데이터 포맷으로 annotation 생성하고, 이미지와 annotation 디렉토리를 적절하게 구성한다.
- Dataset 과 관련된 옵션은 .yaml 로 한다.
- --data 옵션에 dataset.yaml 형태로 입력한다.
- yolov3/data 디렉토리 안에 있는 것을 참조한다.
- yaml 파일을 기본으로 데이터셋을 참조한다.
- 데이터가 없어도 yaml 옵션을 주고 코드를 실행하면 자동으로 데이터를 다운 받는다.
- Yolo 모델 지정
- Yolo v3, Tiny Yolo v3, Yolo v3 SPP 모델 등이 있다.
- --weight 옵션에 yolov3.pt 로 지정하면 저절로 yolo v3 모델로 지정된다.
- train.py에 image size, batch size, epochs 등을 인자로 입력하여 학습을 수행한다.
Ultralytics YOLO Dataset 개요
1개의 이미지별로 1개의 Annotation을 가진다.
coco28 dataset yaml 파일을 보면 train, valid data를 가리키고, 이미지 데이터 디렉토리를 가리킨다.
그런데 train 주소는 보이는데 annotation(label 주소)이 안보이는데?
label 디렉토리는 지정하지 않아도 image 디렉토리 이름에서 마지막에 있는 ‘images’ 를 ‘labels’ 로 변환한 디렉토리로 자동 지정된다.
즉, 코드 안에 녹아져 있기 때문에 자동으로 지정된다.
그렇기 때문에 Ultralytics YOLO를 돌릴 때, 꼭 디렉토리 구조를 아래처럼 만들어줘야 한다.
따라서 이미지 디렉토리는 반드시 ‘images’ 문자열을 포함해야 하고, label 디렉토리는 반드시 ‘labels’ 문자열을 포함해야 한다.
Ultralytics YOLO Annotation 포맷
1개의 이미지별로 1개의 Annotation을 가진다.
annotation 파일의 확장자는 .txt 이다.
annotation 파일을 하나 뜯어보면, 아래 그림처럼 5개의 값이 공백으로 분리되어 있는 것을 확인할 수 있다.
- 0부터 시작하는 class id
- Bounding box의 중심 x 좌표
- Bounding box의 중심 y 좌표
- 너비(Width)
- 높이 (Height) 이며
각 위치 값은 이미지의 너비, 높이 대비 값으로 Normalization된 0 ~ 1 사이 값이다.
중심 좌표 값 Normalization의 장점
- Yolo는 내부 알고리즘이 Loss 및 Predict 계산 시 Bounding Box의 중심 좌표(Center X, Center Y) 그리고 너비, 높이를 기반으로 적용
- 좌표값을 이미지 크기 대비 0~1 사이로 Normalization 하게 되면, 서로 다른 이미지 크기들의 Bounding box 좌표 값을 다시 재조정 할 필요 없다.
Config 개요
- dataset.yaml : 데이터셋 위치, 클래스명/갯수
- hyp.scratch.xml : 학습율, loss, augmentation 등의 하이퍼 파라미터
- batch 크기, epochs, image 크기 : train.py의 인자로 입력
- model config : yolov3.yaml, yolov3-tiny.yaml, yolov3-spp.yaml
Dataset config와 Pretrained model을 사용할 때 weight 파일의 상대 경로, 절대 경로
$ python train.py --img 640 --batch 16 --epochs 3 --data coco128.yaml --weights yolov3.pt --nosave --cache
- --data
- train.py의 data option값으로 Dataset config yaml 파일을 지정할 수 있다.
- 파일명만 입력할 경우는 yolov3/data 디렉토리 아래에서 해당 파일을 찾는다.
- 절대 경로로 입력할 경우 해당 경로에서 찾는다.
- --weights
- weights option의 경우 파일명만 입력할 경우 yolov3 디렉토리에서 해당 파일을 찾는다.
- 해당 파일이 없을 경우 자동으로 해당 파일을 https://github.com/ultralytics/yolov3/releases 에서 Download 한다.
- 절대 경로를 입력한 경우 해당 경로에서 파일을 찾되 파일이 없으면 해당 경로로 자동 Download 한다.
- weights 파일은 yolov3.pt, yolov3-tiny.pt, yolov3-spp.pt
- --nosave : epoch마다 체크포인트 별로 weight를 저장하지 않고, 가장 마지막 것만 save 한다.
- --cache : 이미지를 한번 읽으면 캐싱화 시킨다. 그러면 cpu 메모리에 저장돼서 다음 번에 가져올 때 훨씬 더 빠르게 가져온다.
'🖼 Computer Vision > Object Detection' 카테고리의 다른 글
CV - Focal loss (0) | 2022.06.02 |
---|---|
CV - Ultralytics YOLO v3 (Oxford Pet Dataset) (0) | 2022.05.27 |
CV - YOLO V1, V2, V3 (You Only Look Once) (0) | 2022.05.19 |
CV - SSD (Single Shot Detector) (0) | 2022.05.17 |
CV - 60분 컷 Image Classifier 파이토치 튜토리얼 (0) | 2022.05.13 |