Yolov4-tiny를 쓰기 위해 코드
git hub : https://github.com/AlexeyAB/darknet
패키지는 yolov5 requirement.txt 와 같은 패키지를 사용하고 있음
gpu : RTX 3090(24GB)
CUDA : 11.1
nvidia-driver : 455.55
cudnn : 8.0.4
tensorRT : 7.2.3.4
os : Ubuntu 18.04
( 만약 cmake 없다면 설치해줘야 함)
Yolov4-tiny를 사용하기 위해서 {darknet(yolov4)}/cfg/yolov4-tiny.cfg 를 수정해서 사용(복사하고 나서 원하는 이름으로 변경후에 사용하는걸 추천) config 파일에서 배치들을 수정해서 사용하면 됨 (모델구조는 costum layer를 사용하지 않으면 바꾸지 않고 진행 혹시나 변경하게 되면 pretrained weight를 사용할 수 없음)
그리고 yolov4-tiny pretrained weight : https://github.com/AlexeyAB/darknet/releases/download/darknet_yolo_v4_pre/yolov4-tiny.weights
- hange line batch to batch=64
- change line subdivisions to subdivisions=16
change line max_batches to (classes*2000, but not less than number of training images and not less than 6000), f.e. max_batches=6000 if you train for 3 classes- change line steps to 80% and 90% of max_batches, f.e. steps=4800,5400
- set network size width=416 height=416 or any value multiple of 32:
https://github.com/AlexeyAB/darknet/blob/0039fd26786ab5f71d5af725fc18b3f521e7acfd/cfg/yolov3.cfg#L8-L9- change line classes=80 to your number of objects in each of 3 [yolo]-layers:
https://github.com/AlexeyAB/darknet/blob/0039fd26786ab5f71d5af725fc18b3f521e7acfd/cfg/yolov3.cfg#L610- change [filters=255] to filters=(classes + 5)x3 in the 3 [convolutional] before each [yolo] layer, keep in mind that it only has to be the last [convolutional] before each of the [yolo] layers.
https://github.com/AlexeyAB/darknet/blob/0039fd26786ab5f71d5af725fc18b3f521e7acfd/cfg/yolov3.cfg#L603- when using [Gaussian_yolo] layers, change [filters=57] filters=(classes + 9)x3 in the 3 [convolutional] before each [Gaussian_yolo] layer
https://github.com/AlexeyAB/darknet/blob/6e5bdf1282ad6b06ed0e962c3f5be67cf63d96dc/cfg/Gaussian_yolov3_BDD.cfg#L604
바꿔야하는 기준에 대해서 github에 작성되어 있다
{darknet(yolov4)}/data/fire.data
{darknet(yolov4)}/data/fire.name
를 수정해야하는데 fire.data에는 데이터 경로와 class 이름들이 들어가 있는 fire.name의 경로 클래스 갯수등이 들어가고 train 결과가 backup/ 밑으로 가도록 경로를 설정해준다
fire.name에는 라벨링 class의 이름들을 적어준다
$ vi ./data/fire.data
classes= 2
train = data/fire_train.txt
valid = data/fire_val.txt
#difficult = data/fire_test.txt
names = data/fire.names
backup = backup/
$ vi ./data/fire.name
fire
smoke
라벨링 데이터의 경우
[object-class][x_center] [y_center][width] [height] 순으로 적혀 있다.
train 실행
$ ./darknet detector train data/fire.data cfg/yolov4-tiny.cfg yolov4-tiny.conv.29
demo 실행
$ ./darknet detector demo data/fire.data cfg/yolov4-tiny.cfg /backup/yolov4-tiny_best.weights /{data_path}/fire.mp4
'딥러닝모델' 카테고리의 다른 글
Yolov4-tiny TensorRT(tkDNN빌드 과정) (0) | 2021.06.28 |
---|---|
Multi object Tracking Study - FairMOT-2 (0) | 2021.06.27 |
Multi object Tracking Study - FairMOT (0) | 2021.06.27 |
Yolov5 Train 및 TensorRT (0) | 2021.06.27 |