Google Colab에서 YOLOv3을 사용하여 물체를 감지했습니다.
16988 단어 파이썬colaboratoryYOLO물체 감지기계 학습
소개
Google Colaboratory에서, 물체 검출 시스템으로서 유명한 YOLO v3를 움직여 보았으므로 정리했습니다.
목차
Google Colab에서 YOLO v3
YOLO v3이란?
YOLO는 실시간 물체 감지 시스템입니다.
Darknet이라는 신경망 프레임워크의 일부입니다.
YOLO라는 말은, 「You only look once(한 번 밖에 보지 않는다)」의 이니셜을 취한 것입니다.
YOLO v3은 YOLO의 version3입니다 (자세한 내용은 공식 페이지 참조).
Google Colab에서 YOLO v3
환경
이번에 사용할 환경은 Google 공동체입니다.
기타 버전은 다음과 같습니다.
import platform
import cv2
print("Python " + platform.python_version())
print("OpenCV " + cv2.__version__)
# Python 3.6.9
# OpenCV 4.1.2
준비
이미지를 표시하는 데 필요한 라이브러리를 가져옵니다.
import cv2
import matplotlib.pyplot as plt
%matplotlib inline
import matplotlib
YOLO 설정
이제 Google Colab에서 YOLO v3을 설정해 봅시다.
작업 디렉토리를 만들고 그 안에서 작업하기로 결정합니다.
덧붙여 이 셋업은 최초의 1회만 실시하면 이후 불필요합니다 (그 때문에, 작업 디렉토리 아래에서 작업합니다).
import os
os.mkdir(working_dir) # working_dir は作業ディレクトリ
os.chdir(working_dir)
darknet을 복제합니다.
!git clone https://github.com/pjreddie/darknet
복제가 완료되면 darknet 디렉토리 아래로 이동하여 make를 실행합니다.
os.chdir(working_dir + 'darknet')
!make
make가 끝나면 학습된 모델(의 가중치)을 다운로드합니다.
!wget https://pjreddie.com/media/files/yolov3.weights
이것으로 Google Colab에 YOLO v3 설정이 완료됩니다.
YOLO를 움직여 보자.
그럼 YOLO를 움직여 물체 검출을 해봅시다.
이미 준비된 샘플 이미지를 사용합니다.
샘플 이미지는 darknet/data 아래에 있습니다.
!./darknet detect cfg/yolov3.cfg yolov3.weights 'data/dog.jpg'
# layer filters size input output
# 0 conv 32 3 x 3 / 1 608 x 608 x 3 -> 608 x 608 x 32 0.639 BFLOPs
# 1 conv 64 3 x 3 / 2 608 x 608 x 32 -> 304 x 304 x 64 3.407 BFLOPs
# 2 conv 32 1 x 1 / 1 304 x 304 x 64 -> 304 x 304 x 32 0.379 BFLOPs
# 3 conv 64 3 x 3 / 1 304 x 304 x 32 -> 304 x 304 x 64 3.407 BFLOPs
# 4 res 1 304 x 304 x 64 -> 304 x 304 x 64
# 5 conv 128 3 x 3 / 2 304 x 304 x 64 -> 152 x 152 x 128 3.407 BFLOPs
# 6 conv 64 1 x 1 / 1 152 x 152 x 128 -> 152 x 152 x 64 0.379 BFLOPs
# 7 conv 128 3 x 3 / 1 152 x 152 x 64 -> 152 x 152 x 128 3.407 BFLOPs
# 8 res 5 152 x 152 x 128 -> 152 x 152 x 128
# .........
# 97 upsample 2x 38 x 38 x 128 -> 76 x 76 x 128
# 98 route 97 36
# 99 conv 128 1 x 1 / 1 76 x 76 x 384 -> 76 x 76 x 128 0.568 BFLOPs
# 100 conv 256 3 x 3 / 1 76 x 76 x 128 -> 76 x 76 x 256 3.407 BFLOPs
# 101 conv 128 1 x 1 / 1 76 x 76 x 256 -> 76 x 76 x 128 0.379 BFLOPs
# 102 conv 256 3 x 3 / 1 76 x 76 x 128 -> 76 x 76 x 256 3.407 BFLOPs
# 103 conv 128 1 x 1 / 1 76 x 76 x 256 -> 76 x 76 x 128 0.379 BFLOPs
# 104 conv 256 3 x 3 / 1 76 x 76 x 128 -> 76 x 76 x 256 3.407 BFLOPs
# 105 conv 255 1 x 1 / 1 76 x 76 x 256 -> 76 x 76 x 255 0.754 BFLOPs
# 106 yolo
# Loading weights from yolov3.weights...Done!
# data/dog.jpg: Predicted in 22.825540 seconds.
# dog: 100%
# truck: 92%
# bicycle: 99%
물체 검출이 끝났습니다.
이제 이미지를 표시하고 확인해 봅시다.
물체 감지 결과를 그린 이미지는 darknet/predictions.jpg 입니다.
img_in = cv2.imread('data/dog.jpg')
img_out = cv2.imread('predictions.jpg')
plt.figure(figsize=[20,10])
plt.subplot(121);plt.imshow(img_in[:,:,::-1]);plt.axis('off')
plt.subplot(122);plt.imshow(img_out[:,:,::-1]);plt.axis('off')
「개」 「자전거」 「차」를 검출할 수 있습니다.
다른 이미지도 확인해 봅시다.
!./darknet detect cfg/yolov3.cfg yolov3.weights 'data/horses.jpg'
img_in = cv2.imread('data/horses.jpg')
img_out = cv2.imread('predictions.jpg')
plt.figure(figsize=[20,10])
plt.subplot(121);plt.imshow(img_in[:,:,::-1]);plt.axis('off')
plt.subplot(122);plt.imshow(img_out[:,:,::-1]);plt.axis('off')
!./darknet detect cfg/yolov3.cfg yolov3.weights 'data/person.jpg'
img_in = cv2.imread('data/person.jpg')
img_out = cv2.imread('predictions.jpg')
plt.figure(figsize=[20,10])
plt.subplot(121);plt.imshow(img_in[:,:,::-1]);plt.axis('off')
plt.subplot(122);plt.imshow(img_out[:,:,::-1]);plt.axis('off')
!./darknet detect cfg/yolov3.cfg yolov3.weights 'data/kite.jpg'
img_in = cv2.imread('data/kite.jpg')
img_out = cv2.imread('predictions.jpg')
plt.figure(figsize=[20,10])
plt.subplot(121);plt.imshow(img_in[:,:,::-1]);plt.axis('off')
plt.subplot(122);plt.imshow(img_out[:,:,::-1]);plt.axis('off')
요약
이번에는 Google Colaboratory 환경에서 YOLO v3을 실행해 보았습니다.
이미 준비되어 있는 샘플 화상으로 물체 검출을 실시했습니다.
다양한 이미지를 준비하고 물체 검출해 보면 재미 있다고 생각합니다.
참고문헌
환경
이번에 사용할 환경은 Google 공동체입니다.
기타 버전은 다음과 같습니다.
import platform
import cv2
print("Python " + platform.python_version())
print("OpenCV " + cv2.__version__)
# Python 3.6.9
# OpenCV 4.1.2
준비
이미지를 표시하는 데 필요한 라이브러리를 가져옵니다.
import cv2
import matplotlib.pyplot as plt
%matplotlib inline
import matplotlib
YOLO 설정
이제 Google Colab에서 YOLO v3을 설정해 봅시다.
작업 디렉토리를 만들고 그 안에서 작업하기로 결정합니다.
덧붙여 이 셋업은 최초의 1회만 실시하면 이후 불필요합니다 (그 때문에, 작업 디렉토리 아래에서 작업합니다).
import os
os.mkdir(working_dir) # working_dir は作業ディレクトリ
os.chdir(working_dir)
darknet을 복제합니다.
!git clone https://github.com/pjreddie/darknet
복제가 완료되면 darknet 디렉토리 아래로 이동하여 make를 실행합니다.
os.chdir(working_dir + 'darknet')
!make
make가 끝나면 학습된 모델(의 가중치)을 다운로드합니다.
!wget https://pjreddie.com/media/files/yolov3.weights
이것으로 Google Colab에 YOLO v3 설정이 완료됩니다.
YOLO를 움직여 보자.
그럼 YOLO를 움직여 물체 검출을 해봅시다.
이미 준비된 샘플 이미지를 사용합니다.
샘플 이미지는 darknet/data 아래에 있습니다.
!./darknet detect cfg/yolov3.cfg yolov3.weights 'data/dog.jpg'
# layer filters size input output
# 0 conv 32 3 x 3 / 1 608 x 608 x 3 -> 608 x 608 x 32 0.639 BFLOPs
# 1 conv 64 3 x 3 / 2 608 x 608 x 32 -> 304 x 304 x 64 3.407 BFLOPs
# 2 conv 32 1 x 1 / 1 304 x 304 x 64 -> 304 x 304 x 32 0.379 BFLOPs
# 3 conv 64 3 x 3 / 1 304 x 304 x 32 -> 304 x 304 x 64 3.407 BFLOPs
# 4 res 1 304 x 304 x 64 -> 304 x 304 x 64
# 5 conv 128 3 x 3 / 2 304 x 304 x 64 -> 152 x 152 x 128 3.407 BFLOPs
# 6 conv 64 1 x 1 / 1 152 x 152 x 128 -> 152 x 152 x 64 0.379 BFLOPs
# 7 conv 128 3 x 3 / 1 152 x 152 x 64 -> 152 x 152 x 128 3.407 BFLOPs
# 8 res 5 152 x 152 x 128 -> 152 x 152 x 128
# .........
# 97 upsample 2x 38 x 38 x 128 -> 76 x 76 x 128
# 98 route 97 36
# 99 conv 128 1 x 1 / 1 76 x 76 x 384 -> 76 x 76 x 128 0.568 BFLOPs
# 100 conv 256 3 x 3 / 1 76 x 76 x 128 -> 76 x 76 x 256 3.407 BFLOPs
# 101 conv 128 1 x 1 / 1 76 x 76 x 256 -> 76 x 76 x 128 0.379 BFLOPs
# 102 conv 256 3 x 3 / 1 76 x 76 x 128 -> 76 x 76 x 256 3.407 BFLOPs
# 103 conv 128 1 x 1 / 1 76 x 76 x 256 -> 76 x 76 x 128 0.379 BFLOPs
# 104 conv 256 3 x 3 / 1 76 x 76 x 128 -> 76 x 76 x 256 3.407 BFLOPs
# 105 conv 255 1 x 1 / 1 76 x 76 x 256 -> 76 x 76 x 255 0.754 BFLOPs
# 106 yolo
# Loading weights from yolov3.weights...Done!
# data/dog.jpg: Predicted in 22.825540 seconds.
# dog: 100%
# truck: 92%
# bicycle: 99%
물체 검출이 끝났습니다.
이제 이미지를 표시하고 확인해 봅시다.
물체 감지 결과를 그린 이미지는 darknet/predictions.jpg 입니다.
img_in = cv2.imread('data/dog.jpg')
img_out = cv2.imread('predictions.jpg')
plt.figure(figsize=[20,10])
plt.subplot(121);plt.imshow(img_in[:,:,::-1]);plt.axis('off')
plt.subplot(122);plt.imshow(img_out[:,:,::-1]);plt.axis('off')
「개」 「자전거」 「차」를 검출할 수 있습니다.
다른 이미지도 확인해 봅시다.
!./darknet detect cfg/yolov3.cfg yolov3.weights 'data/horses.jpg'
img_in = cv2.imread('data/horses.jpg')
img_out = cv2.imread('predictions.jpg')
plt.figure(figsize=[20,10])
plt.subplot(121);plt.imshow(img_in[:,:,::-1]);plt.axis('off')
plt.subplot(122);plt.imshow(img_out[:,:,::-1]);plt.axis('off')
!./darknet detect cfg/yolov3.cfg yolov3.weights 'data/person.jpg'
img_in = cv2.imread('data/person.jpg')
img_out = cv2.imread('predictions.jpg')
plt.figure(figsize=[20,10])
plt.subplot(121);plt.imshow(img_in[:,:,::-1]);plt.axis('off')
plt.subplot(122);plt.imshow(img_out[:,:,::-1]);plt.axis('off')
!./darknet detect cfg/yolov3.cfg yolov3.weights 'data/kite.jpg'
img_in = cv2.imread('data/kite.jpg')
img_out = cv2.imread('predictions.jpg')
plt.figure(figsize=[20,10])
plt.subplot(121);plt.imshow(img_in[:,:,::-1]);plt.axis('off')
plt.subplot(122);plt.imshow(img_out[:,:,::-1]);plt.axis('off')
요약
이번에는 Google Colaboratory 환경에서 YOLO v3을 실행해 보았습니다.
이미 준비되어 있는 샘플 화상으로 물체 검출을 실시했습니다.
다양한 이미지를 준비하고 물체 검출해 보면 재미 있다고 생각합니다.
참고문헌
Reference
이 문제에 관하여(Google Colab에서 YOLOv3을 사용하여 물체를 감지했습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/shoku-pan/items/542915604bd5d073286b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)