모바일 어플리케이션에서 진행하기 위해 tensorflow기반의 모바일 어플리케이션을 이용했다.
학습을 위한 데이터 셋과 같은 경우에는 이전에 포스팅 했던 구글 이미지 크롤러를 이용해 데이터 세트를 수집하였다.
https://sj-d.tistory.com/12?category=867326
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
다음의 명령어를 입력하게되면 학습시킨 모델을 토데로 결과를 볼수 있다.
다음과 같은 결과를 볼수 있다.
참고
'Capstone > Capstone1 - 2019-2학기' 카테고리의 다른 글
[11] ngrok를 이용한 서버 구성 (0) | 2020.06.18 |
---|---|
[10]Android Yolo detection 구현하기 (2) | 2020.06.18 |
[8] yolo custom training (0) | 2019.12.23 |
[7] 이미지 부풀리기 (0) | 2019.12.18 |
[6] 구글 이미지 크롤러 (0) | 2019.12.18 |