흐성진 2020. 6. 18. 19:34
반응형

모바일 어플리케이션에서 진행하기 위해 tensorflow기반의 모바일 어플리케이션을 이용했다.

Darknet

YOLO(You Only Look Once)

학습을 위한 데이터 셋과 같은 경우에는 이전에 포스팅 했던 구글 이미지 크롤러를 이용해 데이터 세트를 수집하였다.

https://sj-d.tistory.com/12?category=867326

 

[6] 구글 이미지 크롤러

전에 설명하였던 yolo를 통해 자신의 데이터를 학습 시키기 위해 데이터 세트를 수집하는 방법에 대해 설명드리겠습니다. 저와 같은 경우 구글에 이미지 검색을 통해 나오는 이미지를 학습에 사�

sj-d.tistory.com

 

Image labeling

YOLO모델을 supervised learning에 속한다. 따라서, 가중치 학습을 위해 각각의 학습 이미지에 desired output 즉, 정답을 할당해주어야 한다. Object Detection 문제의 경우 정답 레이블은 각 객체의 class label과 boundary-box의 쌍들로 구성되며 이를 Annotation이라 부른다. 이미지에 Annotation을 할당하기 용이하도록 돕는 다양한 도구들이 존재한다. 여기서는 labelImg라는 Python 및 Pyqt 기반의 프로그램을 사용한다.

      labelImg : 이미지 labeling을 위한 도구(깃 허브 링크를 통해 설치 가능)

깃 허브 페이지에 다양한 OS에 따른 설치 방법을 따라 설치를 진행 하면 된다.

다운로드 받은 labelImg 압축파일을 압축해제 한 후 가장 먼저 할 일은 data 폴더 내의 predefined_classes.txt 파일에 자신의 클래스 목록으로 수정하는 것이다.

 

cd data
vi predefined_classes.txt

다음 명령어를 입력하게 되면 다음과같이 초기 클래스 목록들이 있다.

이 목록을 지운후 자신이 원하는 클래스 목록으로 수정하면 된다.

 

그다음 경로를 labelImg.py가 있는곳으로 이동후 실행 시킨다.

cd ..
python labelImg.py 

그 다음 Open Dir 버튼을 눌러 이미지가 있는 디렉토리를 누른후 라벨링 작업을 실시해주면 된다.

 

라벨링 예제

 

학습을 위한 Darkflow 준비

git clone https://github.com/thtrieu/darkflow.git

git clone 을 이용해 darkflow를 설치해준다.

darkflow 폴더로 이동하여 setup.py를 빌드 해준다.

python setup.py build_ext --inplace

pip install .

 

학습

학습에 필요한 cfg와 같은경우는 저희 프로젝트와 같은 경우에는 모바일에서 진행하기위해

처음에 yolo v1 을 학습진행했는데 모델이 무거워 yolo-tiny 로 다시 학습을 진행하여 어플리케이션에 적용하였다.

cd cfg
vi yolo-tiny.cfg

수정 해야될 부분은 classes 를 수정해야 된다.

만약 calsses 가 1개 인 경우

filters = (1 + 5) * 5 = 30 으로 수정해준다. 

다음의 filters와 classes를 수정해준다.

 

수정을 완료해 준 다음 학습을 진행해준다.

 

처음 학습을 시작하는 경우

python flow --model ./cfg/tiny-yolo.cfg --labels ./labels.txt --trainer adam --dataset ../data/dataset/ --annotation ../data/annotations/ --train --summary ./logs --batch 5 --epoch 100 --save 50 --keep 5 --lr 1e-04 --gpu 0.5

이전의 학습을 이어서 학습시키는 경우

python flow --model ./cfg/tiny-yolo.cfg --labels ./labels.txt --trainer adam --dataset ../data/dataset/ --annotation ../data/annotations/ --train --summary ./logs --batch 5 --epoch 100 --save 50 --keep 5 --lr 1e-04 --gpu 0.5 --load -1

 

–trainer : optimizer 설정

–lr : learning rate로 1e-04는 0.0001을 의미한다.

–gpu : gpu 사용 여부, gpu가 없는 환경이라면 옵션을 제외하면 된다.

–load : 이전 학습 가중치를 이어서 학습하겠다는 옵션으로 -1은 마지막 save를 불러온다. 특정 step부터 시작할 경우 저장된 step의 값을 명시적으로 입력하면 된다.

학습이 다음과 같이 진행되면 정상적으로 학습이 진행되는 것 이다.

 

탐지(Detection)

python flow --imgdir ../data/testset/ --model ./cfg/tiny-yolo.cfg --load -1 --batch 1 --threshold 0.5

다음의 명령어를 입력하게되면 학습시킨 모델을 토데로 결과를 볼수 있다.

다음과 같은 결과를 볼수 있다.

 

 

참고

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

 

반응형