object_detection_yolo_keras

ro_ot ㅣ 2020. 1. 22. 16:46

※ 물체 탐지(Object detection) - YOLO Keras

     *  DarkNet의 모델을 Keras로 변환하여 물체 탐지 실행.

 

▶ 버전 다운로드

* 버전 업데이트가 안돼서 2.1.5로 내려서 다운로드하고 y를 누른다.

!pip uninstall keras
!pip install keras==2.1.5
import keras
print(keras.__version__)

▶ 프로젝트 다운로드

%cd /content

!rm -rf keras-yolo3

!git clone https://github.com/qqwweee/keras-yolo3

▶ YOLO3 모델 다운로드

%cd /content/keras-yolo3
!wget wget https://pjreddie.com/media/files/yolov3.weights

▶ 모델 파일 변환

1. DarkNet의 모델파일을 Keras에서 사용할 수 있는 모델 파일로 변환한다.

  • convert.py : 변환 실행 파일
  • yolov3.cfg : Darknet에서 사용하는 모델 구조 정의 파일
  • yolov3.weight : Darknet으로 학습된 모델 파일

2. 실행 결과로 다음의 h5 파일로 변환된다.

  • yolov3.h5 : 변환된 모델 파일
!head -40 yolov3.cfg 
# 실행하기전 기존것이 있다면 삭제
!rm -rf yolov3.h5

# 실행 
%run convert.py yolov3.cfg yolov3.weights yolov3.h5

▶물체 탐지 실행

  * 다음의 파일이 사용된다.

  • yolov3.h5 : 모델 파일
  • model_data/coco_classes.txt : 클래스 이름
  •  
!wget -O street_view.jpg http://beltlineorg-wpengine.netdna-ssl.com/wp-content/uploads/2012/12/IMG_5669-flickr-websized.jpg

from IPython.display import Image, display
display(Image(filename='street_view.jpg')) 

!cat model_data/coco_classes.txt
from IPython.display import display 
from PIL import Image
from yolo import YOLO

def do_object_detection(file, model_path, class_path):
  
  yolo = YOLO(model_path=model_path, classes_path=class_path)

  image = Image.open(file)
  result_image = yolo.detect_image(image)

  display(result_image)
do_object_detection('street_view.jpg', 'yolov3.h5', 'model_data/coco_classes.txt')

※커스텀 데이터 학습

 

▶ 커스터 데이터 다운로드

   *  standford dogs 데이터셋 중 10개 클래스만 추린 데이터

 

%cd /content/keras-yolo3

!rm -rf dogs.tar.gz

!wget https://github.com/dhrim/bmac_seminar/raw/master/material/dogs.tar.gz
%cd /content/keras-yolo3

!rm -rf dogs

!tar xfz dogs.tar.gz

!ls -al dogs | head -10

▶ 데이터 준비

*  2개의 파일

  • 클래스 파일
  • 레이블링 파일

*  그리고 이미지 파일들

!wget https://github.com/dhrim/bmac_seminar/raw/master/material/dogs_classes.txt
!wget https://github.com/dhrim/bmac_seminar/raw/master/material/dogs_annotations.txt
  
!cat dogs_classes.txt
!wc dogs_annotations.txt
!head -10 dogs_annotations.txt

▶ 학습 실행

*  학습에 필요한 파일은 3개이다.

  • 클래스 파일
  • 레이블링 파일
  • 기반 학습 모델

   그런데 2019/08/07 현재 이 파일 이름들은 train.py안에 하드코딩 되어있다.

  • 클래스 파일 : model_data/voc_classes.txt
  • 레이블링 파일 : train.txt
  • 기반 학습 모델 : model_data/yolo_weights.h5

   하드 코딩된 바 데로 이를음 변경하고 실행한다.

![ ! -f model_data/voc_classes.txt.org ] && mv model_data/voc_classes.txt model_data/voc_classes.txt.org
![ ! -f train.txt.org ] && mv train.txt train.txt.org
![ ! -f model_data/yolo_wieghts.org ] && mv model_data/yolo_weights.h5 model_data/yolo_wieghts.h5.org

![ ! -f model_data/voc_classes.txt ] && cp dogs_classes.txt model_data/voc_classes.txt
![ ! -f train.txt ] && cp dogs_annotations.txt train.txt
![ ! -f model_data/yolo_weights.h5 ] && cp yolov3.h5 model_data/yolo_weights.h5
!ls -al *.txt
!python3 train.py

* 출처 : https://github.com/dhrim

'Deep learning > Code' 카테고리의 다른 글

분류 classification  (0) 2020.01.23
2020_01_23 KNN  (0) 2020.01.23
object_detection_yolo_darknet  (0) 2020.01.22
2020_01_22 VGG16  (0) 2020.01.22
2020_01_22 CIFAR10  (0) 2020.01.22