※ 물체 탐지(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 |