본문 바로가기

딥러닝

[YOLOv9] yolov9커스텀 학습하기

 

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

 

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

 

anaconda 가상환경(python=3.10.13)

CUDA=11.4

cudnn=8.5

pytorch=1.12.0

torchvision=0.13.0

 

 

 

깃허브를 참고 하여 글을 작성 하였습니다.

https://github.com/WongKinYiu/yolov9

 

GitHub - WongKinYiu/yolov9: Implementation of paper - YOLOv9: Learning What You Want to Learn Using Programmable Gradient Inform

Implementation of paper - YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information - WongKinYiu/yolov9

github.com

 

 

 

 

 

 

 

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

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

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

 

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

 

 

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

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

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

 

[Yolo_mark] yolomark 설치 및 사용법

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

jin-00.tistory.com

 

 

 

 

 

 

 

그리고 저는 yolov9이 이미 깔려 있고 detect했었다는 상황에서 진행을 하겠습니다.

yolov9이 깔려 있지 않다면 아래링크로가서 yolov9을 다운받고 detect까지 한 번 해보시면 좋겠습니다.

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

 

[YOLOv9] ubuntu환경에서 yolov9 실시간 인식

yolov9이 출시 되었습니다. 원래 바로 포스팅하고 싶었는데 바빠서 이제 하네요ㅠ yolov9은 yolov7과 동일한 사람이 개발하였습니다. 아래 사진을 보시면 yolov9성능이 더 뛰어난것을 관찰할 수 있습니

jin-00.tistory.com

 

 

 

 

 

 

 

 

yolov9 -> data폴더 안에 각각 train, test, val 각각 폴더를 생성 합니다.

data 폴더내부

 

 

 

 

train, test, val 각각 폴더 안에 images, labels 폴더를 만들어 줍니다.

test 폴더 내부
train 폴더 내부
val 폴더 내부

 

 

 

 

 

이렇게 폴더를 만들었으면 각각폴더 imges, labels의 경로를 지정하여 줍니다.

 

coco.yaml파일을 똑같이 하나더 만들어 아래 사진과 같이 이름을 custom_data.yaml로 지정 합니다.

 

custom_data.yaml

 

 

 

 

그다음 custom_data.yaml파일로 들어가서 아래와 같이 경로를 지정 합니다.

경로는 똑같이 작성하면되고 저는 fire라는 클래스 하나만 학습시키므로 클래스 하나만 작성 했습니다.

만약 더많은 클래스를 학습한다면 더 추가해주시면 됩니다.

custom_data.yaml 수정

 

 

 

 

 

 

 

그다음 각각 train, val, test 폴더 안에 images, labels 를 넣어 주어야 합니다.

 

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

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

 

 

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

train -> images
train -> labels

 

 

 

 

 

 

그 다음 yolov9 -> models -> detect 로 들어갑니다.

yolov9.yaml파일과 똑같은 것을 하나더 만들어 이름을 yolov9-custom.yaml로 지정합니다.

그리고나서 yolov9-custom.yaml 파일을 열어 아래와 같이 nc를 수정합니다.

 

저는 클래스 1개만사용하므로 1로 지정했습니다.

나머지는 안건들여도 됩니다.

yolov9-custom.yaml

 

 

 

 

 

 

 

여기 까지 완료하면 설정은 다 끝났습니다.

아래와 같이 터미널에 입력해줍니다.

python train_dual.py --workers 12 --device 0 --batch 8 --data data/custom_data.yaml --img 640 --cfg models/detect/yolov9-custom.yaml --weights yolov9-e.pt --name yolov9-custom --hyp hyp.scratch-high.yaml --min-items 0 --epochs 130 --close-mosaic 15

 

위 코드는 저의조건에 맞춘것이고 컴퓨터 사양에 따라 weights파일, batch size등 설정 하시면 됩니다.

 

 

 

 

 

 

이렇게 입력해주면

학습명령어 입력

 

 

 

 

아래와 같이 진행 됩니다. 

커스텀 학습 진행

 

 

 

 

 

 

학습이 완료 되면 yolov9 -> runs -> train -> yolov9-custom -> weights로 들어가서 best.pt를 yolov9위치에 복사 붙여넣기 합니다.

 

그 다음 아래의 코드를 실행하면 웹캠으로 내가 학습한 물체를 인식할 수 있습니다.

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