본문 바로가기

딥러닝

[YOLOv7] yolov7에서 커스텀 학습하기

 

안녕하세요. 오늘은 yolov7에서 제가 직접 라벨링한 사진들을 이용하여 커스텀학습을 진행 할 예정입니다.

 

저의 컴퓨터 구성환경은 아래와 같습니다.

 

anaconda 가상환경(python=3.10.13)

CUDA=11.4

cudnn=8.5

pytorch=1.12.0

torchvision=0.13.0

 

 

github를 참고 하였습니다.

https://github.com/WongKinYiu/yolov7

 

GitHub - WongKinYiu/yolov7: Implementation of paper - YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time

Implementation of paper - YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors - WongKinYiu/yolov7

github.com

 

 

학습을 위해서는 train, test, val 각각 이미지가 필요합니다.

이때, 비율은 train, test, val 각각 8:1:1로 해주는 것이 적당합니다.

예를들면 train 이미지 800개, test이미지 100개, val이미지 100개가 필요합니다.

 

꼭 8:1:1딱 지킬필요는 없고 그정도라고 봐주시면 됩니다

 

 

train, test, val이미지를 모두 라벨링하는 작업이 필요합니다. 

저는 라벨링 프로그램으로 yolomark를 사용하였고 라벨링 작업이 안되신분들은 아래링크로 가셔서 라벨링작업을 하시고 진행하시면 됩니다.

https://jin-00.tistory.com/5

 

[Yolo_mark] yolomark 설치 및 사용법

이번 포스팅에서는 라벨링 작업을 위한 yolomark설치 방법과 사용법에 대해 다루겠습니다. 먼저 cmake는 필수적으로 설치되어 있어야 하므로 설치가 안되신분은 아래링크를 클릭하여 설치를 하시

jin-00.tistory.com

 

 

 

 

 

 

먼저 yolov7 -> data 폴더에 train, test, val 폴더를 생성해줍니다.

train, test, val 폴더 생성

 

 

그리고 생성된 train, test, val폴더안에 모두 images, labels 폴더를 만들어 줍니다.

test폴더 내부

 

train 폴더 내부

 

val 폴더 내부

 

 

 

 

 

 

 

그리고 images폴더 내부에는 사진을 넣고 labels 폴더 내부에는 이미지를 라벨링하면 생성되는 txt파일을 넣어줍니다.

이때, 적당히 8:1:1비율로 넣어주시면 됩니다.

 

 

아래 사진처럼 넣어주면 됩니다.

train -> images
train -> labels

 

 

 

여기까지 했으면 절반은 완료 하였습니다.

 

data 폴더 안에 있는 coco.yaml파일을 똑같이 한개더 만들어서 이름을 custom_data1.yaml로 바꾸어 줍니다.

그리고 custom_data1.yaml파일을 켜서 자신의 조건에 맞게 만들어 줍니다.

 

train, test, val 경로는 아래와 똑같이 만들어 줍니다. 이전에 만든 폴더의 경로 입니다.

 

nc는 클래스의 갯수로 저는 fire하나여서 1로 하였습니다.

 

names역시 'fire' 하나만 하였습니다.

custom_data1.yaml코드

 

 

 

 

그 다음 단계는  cfg파일안에 있는 yolov7-yaml파일을 똑같이 하나더 만들어 줍니다. 

이름은 yolov7-custom.yaml로 하였습니다.

 

추가로 조금더 좋은 학습성능을 내고 싶으며 yolov7-d6, yolov7-e6등을 사용하시면 됩니다.

 

cfg내부 폴더

 

 

 

 

그다음 yolov7-custom.yaml파일 내부에서 nc를 자신의 클래스 갯수에 맞게 바꾸어 줍니다. 저는 fire하나이므로 1로 바꾸었습니다.

yolov7-custom.yaml코드

 

 

이제 모든 파일의 수정은 다끝났습니다.

최종적으로 아래의 명령만 터미널창에 입력해주면 됩니다.

 

python train.py --workers 12 --device 0 --batch-size 14 --epochs 100 --img 640 640 --data data/custom_data1.yaml --hyp data/hyp.scratch.custom.yaml --cfg cfg/training/yolov7-custom.yaml --name yolov7_custom --weights yolov7.pt

 

저는 학습을 100회반복하는 것으로 하였습니다.

가중치파일은 기본적인 yolov7을 사용하였습니다.

 

위코드에서 각자 학습조건에 맞게 파라미터를 변경하시면 됩니다.

 

 

 

 

 

터미널창에 입력해줍니다.

 

---- 만약 (코어 덤프됨) 이라는 말이 나오면 batch-size를 줄여보시기 바랍니다.

 

 

 

 

입력하게 되면 아래와 같이 학습이 진행되게 됩니다.

 

 

 

 

 

 

 

 

 

학습이 완료 되면  yolov7 -> runs -> train -> yolov7_custom -> weights 폴더안에 생성된 가중치파일 best.pt를 복사하여 yolov7 폴더안에 붙여 넣습니다.

 

그다음 아래의 코드를 실행 합니다.

python detect.py --weights best.pt --source 0

 

 

 

이전에는 yolov7에서 기본적으로 제공되는 coco데이터셋을 이용해서 detect를 해보았지만 

 

현재 detect하는 것은 제가 직접라벨링한 데이터를 인식하게 됩니다.