일상 코딩
[Windows 10/darkflow] darkflow tiny YOLO V2 custom training command / tiny YOLO v2 커스텀 학습 방법 및 명령어 본문
딥러닝/darkflow - YOLO
[Windows 10/darkflow] darkflow tiny YOLO V2 custom training command / tiny YOLO v2 커스텀 학습 방법 및 명령어
polarcompass 2022. 12. 14. 17:35728x90
flutter - Android Studio 환경설정
flutter realtime detection environment setting 플러터 실시간 객체탐지 환경설정
https://polarcompass.tistory.com/230
darkflow 개발환경 설정(버전 설정)
tensorflow - python - nvidia driver - CUDA - cuDNN
https://polarcompass.tistory.com/231
폴더 설정
학습 데이터 파일명 주의점
O | box_1.png 1_box.r.png |
X | box-1.png 1-box.r.png |
절대로 '-'을 파일명에 쓰면 안된다.
cfg & weight 파일 구하기
tiny-YOLO-v2.cfg
tiny-YOLO-v2.weights
https://pjreddie.com/darknet/yolov2/
yolov2-tiny-voc.cfg | https://github.com/pjreddie/darknet/blob/master/cfg/yolov2-tiny-voc.cfg |
yolov2-tiny-voc.weights | https://pjreddie.com/media/files/yolov2-tiny-voc.weights |
cfg 파일 내용 변경
filters = (5 + 라벨 개수) x 5
명령어
첫 학습시 명령어
python venv(가상환경) | DFGPU (내 경우) |
tensorflow version | 1.4.0 |
# 명령어 개념 설명
python flow \
--model ./cfg/yolov2-tiny-voc-cardboard.cfg \ # 변경한 cfg 파일
--labels ./labels.txt \ # 라벨 파일
--trainer adam \
--dataset ../data/roboflow/cardboard/yolov2/data/ \ # 학습 데이터 폴더
--annotation ../data/roboflow/cardboard/yolov2/label/ \ # 라벨 데이터 폴더
--train \
--summary ./logs \
--batch 5 \
--epoch 1000 \
--lr 1e-01 \ # Learning Rate 설정
--gpu 1.0
# 실제 터미널 입력시 일자로 만들어주고 입력한다.
# 윈도우 기준.
# 리눅스 / 맥에선 위에처럼 입력해도 작동할 수 있다.
python flow --model ./cfg/yolov2-tiny-voc-cardboard.cfg --labels ./labels.txt --trainer adam --dataset ../data/roboflow/cardboard/yolov2/data/ --annotation ../data/roboflow/cardboard/yolov2/label/ --train --summary ./logs --batch 5 --epoch 1000 --lr 1e-01 --gpu 1.0
학습 후 bounding Box가 잘 생성되는지 확인
python venv(가상환경) | DFGPU (내 경우) |
tensorflow version | 1.4.0 |
python flow \
--imgdir ../data/roboflow/cardboard/test/images/ \ # 테스트 이미지 폴더
--model ./cfg/yolov2-tiny-voc-cardboard.cfg \ # 적용할 cfg 파일
--load -1 \ # 마지막 학습 데이터를 활용
--batch 1 \
--threshold 0.4
# 윈도우에선 일자로 만들어준 후 입력 및 실행
python flow --imgdir ../data/roboflow/cardboard/test/images/ --model ./cfg/yolov2-tiny-voc-cardboard.cfg --load -1 --batch 1 --threshold 0.4
학습이 끝날때마다 테스트를 진행하여 LR을 낮출때마다 개선되는게 있는지 확인해준다.
명령어
후속 학습시 명령어
(첫 학습 후 LR을 낮춰가면서 학습시 적용하는 명령어)
python venv(가상환경) | DFGPU (내 경우) |
tensorflow version | 1.4.0 |
python flow \
--model ./cfg/yolov2-tiny-voc-cardboard.cfg \
--labels ./labels.txt \
--trainer adam \
--dataset ../data/roboflow/cardboard/yolov2/data/ \
--annotation ../data/roboflow/cardboard/yolov2/label/ \
--train \
--summary ./logs \
--batch 5 \
--epoch 1000 \
--lr 1e-02 \ # LR을 낮춰가면서 이어서 학습해준다.
--gpu 1.0 \
--load -1 # 마지막 학습 후 이어서 학습하라는 명령어
# 윈도우에선 일자로 만든 후 적용 및 실행한다.
python flow --model ./cfg/yolov2-tiny-voc-cardboard.cfg --labels ./labels.txt --trainer adam --dataset ../data/roboflow/cardboard/yolov2/data/ --annotation ../data/roboflow/cardboard/yolov2/label/ --train --summary ./logs --batch 5 --epoch 1000 --lr 1e-10 --gpu 1.0 --load -1
.pb 파일 생성
darkflow/ckpt 폴더 위치에 있는 학습 파일을 .pb 파일로 변경해준다.
python venv(가상환경) | DFGPU (내 경우) |
tensorflow version | 1.4.0 |
1.학습한 파일을 .pb로 변환
python flow \
--model cfg/yolo-new.cfg \
--load -1 \ # 마지막 학습 데이터 적용
--savepb # 중요
# 이 역시 윈도우에서 적용시 일자로 만들어준다.
# 학습하다 loss 부분값이 nan(Not a Number)이 나올 경우 즉시 중단하고
# 중단시 ctrl + c 적용
# 직전 학습 파일 숫자를 --load에 적용해준다.
# 예시
python flow \
--model cfg/yolo-new.cfg \
--load 96600 \ # 학습 파일명이 아닌 숫자만 적용한다.
--savepb
2. weights 파일을 .pb로 변환
python flow \
--model ./cfg/yolo.cfg \
--load ./bin/yolo.weights \ # weights 파일
--savepb
.pb -> .tflite 로 변환
가상환경 변경 및 tensorflow 버전도 바꿔준다.
이유는 tflite_convert 명령어가 1.13.2에서부터 적용 가능해서이다.
python venv(가상환경) | tf113 (내 경우) |
tensorflow version | 1.13.2 |
tflite_convert \
--graph_def_file=./built_graph/yolov2-tiny-voc-cardboard.pb \ # 위에서 변환한 .pb 파일 경로를 적어준다.
--output_file=./built_graph/yolov2-tiny-voc-cardboard-graph.tflite \ # .pb 파일 변환 후 .tflite 파일 이름을 임의대로 정해준다.
--input_format=TENSORFLOW_GRAPHDEF \
--output_format=TFLITE \
--input_shape=1,416,416,3 \
--input_array=input \
--output_array=output \
--inference_type=FLOAT \
--input_data_type=FLOAT
# 윈도우에선 일자로 만들어서 적용해준다.
# 리눅스 및 맥에선 위에 형태로 입력해도 작동 될 것이다.
tflite_convert --graph_def_file=./built_graph/yolov2-tiny-voc-cardboard.pb --output_file=./built_graph/yolov2-tiny-voc-cardboard-graph.tflite --input_format=TENSORFLOW_GRAPHDEF --output_format=TFLITE --input_shape=1,416,416,3 --input_array=input --output_array=output --inference_type=FLOAT --input_data_type=FLOAT
flutter realtime detection 어플에 custom training한 .tflite 파일 적용하기
yolov2-tiny-voc-cardboard-graph.tflite | -> | yolov2_tiny.tflite 이름 바꾸기 |
labels.txt | -> | yolov2_tiny.txt 이름 바꾸기 |
참고
728x90
'딥러닝 > darkflow - YOLO' 카테고리의 다른 글
[windows 10/윈도우 10] darkflow 설치 및 환경설정 (0) | 2022.12.05 |
---|