Shakerato

딥러닝 객체인식 네트워크 retinanet 내 데이터셋으로 학습하는 방법 본문

Research

딥러닝 객체인식 네트워크 retinanet 내 데이터셋으로 학습하는 방법

Shakeratto 2019. 1. 17. 00:56

참고: https://github.com/fizyr/keras-retinanet


1. 실행 환경 구축

 1.1. Anaconda (python=3.6) 개발 환경 생성

      conda create -n myenv python=3.6

 1.2. Anaconda 개발 환경 활성화 (윈도우)

      activate myenv

 1.3. 관리자 권한으로 cmd 실행

 1.4. python setup.py install

 1.5. pip install Keras==2.2.4


2. 학습할 데이터셋 만들기

 2.1. 학습할 이미지 준비하기

 2.2. 학습할 이미지에 있는 인식할 객체의 Bounding Box 위치 알아내기

 2.3. 모든 학습할 이미지를 특정 폴더에 path/to/image.jpg 모두 저장

 2.4. Annotations format 파일 만들기

      path/to/image.jpg,x1,y1,x2,y2,class_name 순으로 CSV파일 만들기

 2.5. Class mapping format 파일 만들기

      class_name,id 순으로 CSV파일 만들기

 2.6. 내 학습 데이터 체크 (스페이스바로 다음 이미지 넘어가기)

      python keras_retinanet/bin/debug.py csv mydataset_annoation.CSV mydataset_classmapping.CSV


3. 학습하기

 3.1. 학습 시작

      python keras_retinanet/bin/train.py csv mydataset_annoation.CSV mydataset_classmapping.CSV

 3.2. 학습 epoch, step 조절

      python keras_retinanet/bin/train.py --gpu=0 --epochs=2 --steps=1000 --workers=0 csv mydataset_annoation.CSV mydataset_classmapping.CSV

 3.3. training model을 inference model로 바꾸기

      python keras_retinanet/bin/convert_model.py snapshots/resnet50_csv_01.h5 snapshots/mymodel.h5


4. 테스트하기

 4.1. examples/ResNet50RetinaNet.ipynb를 jupyter로 오픈하거나 .py로 컨버팅하여 실행

      (아래 url의 예제 코드를 복사하여 .py 파일을 만들면 됨)

      https://github.com/fizyr/keras-retinanet/blob/master/examples/ResNet50RetinaNet.ipynb


      (.py로 실행할때는 아래 코드 주석처리)

      #%matplotlib inline

      #%load_ext autoreload

      #%autoreload 2


 4.2. 적절한 경로를 지정하고, class 개수에 맞게 labels_to_names 딕셔너리를 바꾸기

 4.3. read_image_bgr('테스트할 이미지 경로')와 같이 수정 하여 코드 실행



4. 평가하기(evaluation)

python keras_retinanet/bin/evaluate.py csv [어노테이션csv파일] [class맵핑csv파일] 학습된모델(.h5)

python keras_retinanet/bin/evaluate.py csv mydataset_annoation.CSV mydataset_classmapping.CSV snapshots/mymodel.h5



(에러)  No module named 'keras_retinanet.utils.compute_overlap'

(해결법) python setup.py build_ext --inplace


(에러) TypeError: can't pickle generator objects (multiprocessing 문제)

(해결법) python keras_retinanet/bin/train.py --workers=0 csv mydataset_annoation.CSV mydataset_classmapping.CSV


(예제) 내데이터셋 준비 (아이유, 손흥민), 이미지 사이즈는 크게 중요하지 않은 듯


(예제) 인물의 얼굴 위치 바운딩박스(Bounding Box)를 어노테이션함

(윈도우 그림판으로 사진을 열면 왼쪽하단에 픽셀 좌표 나옴)


(예제) 인식결과


Comments