250x250
Notice
Recent Posts
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
관리 메뉴

일상 코딩

[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:35
728x90
flutter - Android Studio 환경설정

flutter realtime detection environment setting 플러터 실시간 객체탐지 환경설정

https://polarcompass.tistory.com/230

 

[Flutter/SDK/yolov2/tflite] flutter realtime detection environment setting 플러터 실시간 객체탐지 환경설정 yolov2

https://youtu.be/dMi0c7LJ4x4 flutter SDK version

polarcompass.tistory.com

darkflow 개발환경 설정(버전 설정)
tensorflow - python - nvidia driver - CUDA - cuDNN

https://polarcompass.tistory.com/231

 

[windows 10/윈도우 10] darkflow 설치 및 환경설정

설치 및 구동 환경 OS WINDOWS 10 64bit CPU i5-12400F GPU NVIDIA GTX 1080 (Pascal 아키텍쳐) RAM 64GB (이것보다 작아도 충분) 설치 할 프로그램 목록 및 순서 1 Visual Studio 2015 업데이트 3 2 Anaconda 3 Nvidia 그래픽드라

polarcompass.tistory.com

폴더 설정

C 드라이브 위치에 darkflow, data 폴더를 위치시킨다.
darkflow 폴더와 data 폴더를 같은 위치에 놓아야 나중에 학습시 상대적 위치로 파일 위치를 쉽게 정할 수 있다.

학습 데이터 파일명 주의점
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/

cfg & weights
vscode에서 파일 만든 후 파일이름 및 내용복사하여 붙여넣기한다.

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 파일 내용 변경

원본 파일을 복사 후 이름을 지어준다.
복사한 cfg 파일을 열고서, class 부분에 적용하려는 라벨 갯수를 적어주고, filters 부분에 (5 + 라벨 개수) x 5 를 해준다.

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

변환 명령어 실행 시 built_graph 폴더가 생성된 후 .pb 파일 및 .meta 파일이 생성된다.

.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

위 명령어 실행 시 built_graph 폴더에 .tflite 파일이 생성된다.

flutter realtime detection 어플에 custom training한 .tflite 파일 적용하기

복사 후 assets 폴더에 복사
labels.txt 복사 후 assets 폴더에 복사
원래 있던 파일은 container 폴더 생성 후 고이 모셔둔다. 이름을 바꾸고

yolov2-tiny-voc-cardboard-graph.tflite  -> yolov2_tiny.tflite 이름 바꾸기
labels.txt -> yolov2_tiny.txt 이름 바꾸기
참고

https://junyoung-jamong.github.io/deep/learning/2019/01/22/Darkflow%EB%A5%BC-%ED%99%9C%EC%9A%A9%ED%95%B4-YOLO%EB%AA%A8%EB%8D%B8-%EC%9D%B4%EB%AF%B8%EC%A7%80-%EB%94%94%ED%85%8D%EC%85%98-%EA%B5%AC%ED%98%84-in-windows.html

 

Darkflow를 활용하여 YOLO 모델로 이미지 디텍션 구현(윈도우 환경)

나의 데이터를 이용해 YOLO 모델을 학습시키기

junyoung-jamong.github.io

 

728x90