참고 : https://foss4g.tistory.com/1796
📌 설치
딥러닝 공부를 하며 코드 구현을 해본 적이 아직까지 없는데 YOLOv7을 통해 연습해보려 한다.
YOLOv7은 공식적으로 코드가 오픈되어 있고 블로그 참고글이 많아 좋은 연습예제가 될 듯하다.
https://github.com/WongKinYiu/yolov7
아래 코드를 이용해 YOLOv7과 필요한 프로그램을 설치하자.
git clone https://github.com/WongKinYiu/yolov7
pip install -r requirements.txt
YOLOv7은 COCO dataset으로 학습시킨 weights파일을 공유하고 있다.
이 중 yolov7.pt를 이용해보려 한다.
직접 다운로드 받는 방법, wget를 이용하여 받는 방법이 있으니 편한 방법으로 쓰면 될 듯하다.
https://github.com/WongKinYiu/yolov7/releases
import wget
wget.download('https://github.com/WongKinYiu/yolov7/releases/download/v0.1/yolov7.pt')
📌사용 방법
필요한 준비는 끝났으니 아래의 사진을 detection 해보자.
(/runs/detect/exp 폴더에서 사진을 확인할 수 있다.)
python detect.py --weights yolov7.pt --source example.jpg
여기서 motorcycle이 신뢰도 30%를 가지는데 임계치를 설정해줌으로써 detect되지 않도록 해줄 수 있다.
python detect.py --weights yolov7.pt --conf 0.4 --source example.jpg
📌 학습시켜보기
이 작업까지는 참고 블로그를 보며 실행하는데 문제가 없었으나 새로운 dataset을 학습시키는 과정에서 시간이 제법 소요되었다.
우선 roboflow(https://roboflow.com/)에서 새로운 데이터셋을 다운받았는데 여기서 문제가 생겼다.
BTS dataset을 활용하면 학습 후 image, video 모두 detect해볼 수 있을 것 같아 학습시켰는데 아무리 학습시켜도 detect가 되지 않는다..
✔️ 유의 1. METRICS
원인은 2가지정도로 보고 있는데 첫번째는 아래 사진과 같이 해당 dataset의 METRICS 수치가 낮은 걸 확인할 수 있다.
✔️ 유의 2. Argument
두번째는 train.py에서 epochs default값을 보면 300인 걸 볼 수 있는데 본인은 100으로 설정하여 학습이 잘 되지 않았던 것이 아닐까싶다.
epoch란?
에폭(epoch): 하나의 단위. 1에폭은 학습에서 훈련 데이터를 모두 소진했을 때의 횟수에 해당함.
미니 배치(mini batch): 전체 데이터 셋을 몇 개의 데이터 셋으로 나누었을 때, 그 작은 데이터 셋 뭉치
배치 사이즈(batch size): 하나의 미니 배치에 넘겨주는 데이터 갯수, 즉 한번의 배치마다 주는 샘플의 size
이터레이션(iteration): 하나의 미니 배치를 학습할 때 1iteration이라고 한다. 즉, 미니 배치 갯수 = 이터레이션 수
아무튼 이 2가지를 유의하고 학습을 시켜보도록 하자.
✔️ yaml 파일 수정
다운받은 dataset의 yaml 파일 경로를 확인하여 수정한다.
그 후 해당 dataset으로 학습을 시켰다.
이 때 GPU가 부족하더이다..ㅠ
그럴 땐 batch나 image 사이즈를 줄여보자.
본인은 batch 사이즈를 16에서 8로 줄였더니 문제 없었다!
python train.py --img 640 640 --batch 8 --epochs 300 --data data/glasses.yaml --weights yolov7.pt
학습시킬수록 P(Precision), R(Recall), mAP(Mean Average Precision)가 올라가는 것을 확인할 수 있다.
학습이 완료되고나면 /runs/train/exp/weights/best.pt를 이용하여 detect하면 끝!
'Deep Learning' 카테고리의 다른 글
L1 Norm, L2 Norm / L1 Loss, L2 Loss 이란? (0) | 2024.12.11 |
---|---|
YOLOv10 Multi-GPU DDP 사용하기 (0) | 2024.09.21 |
[밑바닥부터시작하는딥러닝2] Chapter 8. 어텐션 (0) | 2024.04.23 |
[밑바닥부터시작하는딥러닝2] Chapter 7. RNN을 사용한 문장 생성 (0) | 2024.04.22 |
[밑바닥부터시작하는딥러닝2] Chapter 6. 게이트가 추가된 RNN (0) | 2024.04.21 |