๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๋”ฅ๋Ÿฌ๋‹๐Ÿค–/YOLO, Opencv ๐Ÿข

[YOLO]#2 YOLO๋ฅผ ํ™œ์šฉํ•œ ๊ฐ์ฒด ํƒ์ง€ (Customํ•˜๊ธฐ)&๊ตฌ๊ธ€์ฝ”๋žฉ

by @ENFJ 2022. 11. 7.

1. ๊ตฌ๊ธ€ ๋“œ๋ผ์ด๋ธŒ ๋งˆ์šดํŠธ

ํ”„๋กœ์ ํŠธ ์ฒ˜์Œ ์‹œ์ž‘์€ ๋งˆ์šดํŠธ!

๊ตฌ๊ธ€ ์ฝ”๋žฉ์—์„œ ์ง€๋‚œ ์‹œ๊ฐ„ ์‚ฌ์šฉํ–ˆ๋˜ content/gdrive ํด๋”๋ฅผ ์ธ์‹์‹œ์ผœ์ฃผ๋Š” ์ž‘์—…์„ ํ•ด์ค€๋‹ค.

from google.colab import drive
drive.mount('/content/gdrive')
!ls -la "/content/gdrive/My Drive/darknet"

ls ๋Š” ๊ฒฝ๋กœ์˜ ๋””๋ ‰ํ„ฐ๋ฆฌor ํŒŒ์ผ์˜ ๋ฆฌ์ŠคํŠธ ์ถœ๋ ฅ

a ์˜ต์…˜: all์˜ ์ค„์ž„๋ง๋กœ ๋ชจ๋“  ํŒŒ์ผํ˜•์‹์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

l ์˜ต์…˜: long ์˜ ์ค„์ž„๋ง๋กœ, ํŒŒ์ผ ์ถœ๋ ฅ ํ˜•์‹์„ ๊ธด ๋ชฉ๋ก ํ˜•์‹์œผ๋กœ ์ถœ๋ ฅํ•œ๋‹ค.

2.cuDNN

๋‹ค์Œ์œผ๋กœ ์šฐ๋ฆฌ๊ฐ€ ํ•ด์ค„๊ฑด cuda ๊ด€๋ จ ๋ชจ๋“ˆ์ธ cuDNN ์„

๊ตฌ๊ธ€๋“œ๋ผ์ด๋ธŒ์—์„œ colab์— usr/local/cuda ํด๋”๋กœ cuDNN์˜ ์••์ถ•์„ ํ‘ธ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

!tar -xzvf /content/gdrive/My\ Drive/darknet/cuDNN/cudnn-11.2-linux-x64-v8.1.1.33.tgz -C /usr/local/
!chmod a+r /usr/local/cuda/include/cudnn.h

!cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2

 

์™œ๋ƒํ•˜๋ฉด Cuda ํ™˜๊ฒฝ์„  ์ด๋ฏธ ๊ตฌ๊ธ€ ์ฝ”๋žฉ์—์„œ ์ œ๊ณตํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ์— ๋งž๋Š” ๋ฒ„์ „์˜ cuDNN์„ ์„ค์น˜ํ•˜์—ฌ ์šฐ๋ฆฌ๋Š” ๋„ฃ์–ด์ฃผ๋ฉด ๋˜๊ธฐ๋•Œ๋ฌธ์ด๋‹ค.

3. darknet ์ ์žฌ(์ƒ์„ฑ)

import os
if not os.path.exists('darknet'):
    os.makedirs('darknet')
%cd darknet
%ls

darknet ํด๋”๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๊ณ (mkdirs) darknet ํด๋”๋กœ ์ด๋™ํ•œ๋‹ค. [ํ˜„์žฌ ์œ„์น˜๋Š” darknet]

์œ„ ๋ช…๋ น์–ด ๊ฒฐ๊ณผ

 

!ls -la '/content/gdrive/My Drive/darknet/bin/darknet'

!cp /content/gdrive/My\ Drive/darknet/bin/darknet ./darknet

!chmod +x ./darknet

๊ตฌ๊ธ€ ๋“œ๋ผ์ด๋ธŒ์— darknet ํŒŒ์ผ์„  content/ darknet ํด๋” ์•„๋ž˜์— ๋ณต์‚ฌํ•ด์ค€๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๊ถŒํ•œ ์„ค์ •ํ•ด์คŒ.

!cp -r '/content/gdrive/My Drive/darknet/weights' .
!cp -r '/content/gdrive/My Drive/darknet/cfg' .
!cp -ar '/content/gdrive/My Drive/darknet/data' .
%ls

๊ทธ ํ›„ ,, ๊ตฌ๊ธ€๋“œ๋ผ์ด๋ธŒ์— ์žˆ๋Š” weights ์™€ cfg , data ๋ฅผ  .(ํ˜„์žฌ์œ„์น˜:content / darknet ํด๋”) 

๋กœ ๋ณต์‚ฌํ•ด์„œ ๋ถ™์—ฌ์คŒ.

๊ทธ๋ฆฌ๊ณ  ls ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด์„œ ์ž˜ ๋ณต์‚ฌํ•ด์„œ ๊ฐ€์ ธ์™”๋Š”์ง€ ํ™•์ธํ•ด๋ณด๋ฉด 

cfg, data, weights ํด๋”๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ์Œ์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋‹ค.๐Ÿ˜

 

 

def imShow(path):
  import cv2
  import matplotlib.pyplot as plt
  %matplotlib inline

  image = cv2.imread(path)
  height, width = image.shape[:2]
  resized_image = cv2.resize(image,(3*width, 3*height), interpolation = cv2.INTER_CUBIC)

  fig = plt.gcf()
  fig.set_size_inches(18, 10)
  plt.axis("off")
  #plt.rcParams['figure.figsize'] = [10, 5]
  plt.imshow(cv2.cvtColor(resized_image, cv2.COLOR_BGR2RGB))
  plt.show()
  
  
def upload():
  from google.colab import files
  uploaded = files.upload() 
  for name, data in uploaded.items():
    with open(name, 'wb') as f:
      f.write(data)
      print ('saved file', name)
def download(path):
  from google.colab import files
  files.download(path)

์œ„ imshow ํ•จ์ˆ˜ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์˜ˆ์‹œํŒŒ์ผ์„ ์‹คํ–‰์‹œ์ผœ๋ณด๊ธฐ ์œ„ํ•ด ์ฝ”๋“œ ์‹คํ–‰์„ ํ†ตํ•˜์—ฌ ํ•จ์ˆ˜ ์„ ์–ธํ•ด์ฃผ๊ณ ,,

!./darknet detect cfg/yolov3.cfg weights/yolov3.weights data/fruit10.jpg
imShow('predictions.jpg')

 

fruit10.jpg

์‹คํ–‰์‹œ์ผœ๋ณด๋ฉด fruit10.jpg ์‚ฌ์ง„ ํŒŒ์ผ์ด ์•„๋ž˜์™€ ๊ฐ™์ด ๊ฐ์ฒด ํƒ์ง€ ๋˜์—ˆ์Œ์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋‹ค.

fruit10.jpg


4. Custom YOLO

์ด์ œ ์ด๋ฅผ ์‘์šฉํ•ด์„œ custom ํ•˜์—ฌ YOLO๋ฅผ ์‹คํ–‰์‹œ์ผœ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

!cp -r "/content/gdrive/My Drive/darknet/custom" .

๊ตฌ๊ธ€๋“œ๋ผ์ด๋ธŒ ์— custom ํด๋”์˜ ๋‚ด์šฉ๋“ค์„ ํ˜„์žฌ ์œ„์น˜(content/darknet)์— ๋ณต์‚ฌํ•ด์„œ ๊ฐ€์ ธ์˜ค๋Š” ๋ช…๋ น์–ด์ด๋‹ค.

์™œ ๋ณต์‚ฌํ•˜๋ƒ?? ์šฐ๋ฆฌ๊ฐ€ ์ง€๊ธˆ ํ• ๊ฒŒ yolo์—์„œ ์ง€์›ํ•ด์ฃผ๋Š” weights? ๊ฐ€ ์•„๋‹Œ ์šฐ๋ฆฌ๊ฐ€ ์ง์ ‘ ๋งŒ๋“  weights ๋ฅผ ๊ฐ€์ง€๊ณ  ์‹คํ–‰์‹œ์ผœ๋ณด๊ธฐ ์œ„ํ•ด์„œ ์ด๋‹ค. ๊ทธ๋ ‡๊ธฐ์— ๊ตฌ๊ธ€๋“œ๋ผ์ด๋ธŒ์— ์—…๋กœ๋“œ ํ•ด๋‘” ํŒŒ์ผ๋“ค์„ yolo ์‹คํ–‰ํ™˜๊ฒฝ์ธ darknetํด๋”๋กœ ๋ณต์‚ฌํ•ด์„œ ๋ถ™์—ฌ๋„ฃ๋Š” ๊ณผ์ •์ด๋‹ค.

 

!./darknet detector train custom/custom_data.data custom/custom-train-yolo.cfg weights/darknet53.conv.74 -dont_show

์ด์ œ ์œ„ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์ปค์Šคํ…€ํ™” ์‹œํ‚จ ๋ฐ์ดํ„ฐ๋ฅผ ํ•™์Šต์‹œ์ผœ๋ณด์ž.

๋ช…๋ น์–ด์— train์ด ์žˆ๋‹ค๋Š” ๊ฒƒ๋งŒ ๋ด๋„ ํ•™์Šต์‹œํ‚จ๋‹ค๋Š” ๊ฒƒ์„ ๋Œ€์ถฉ ๋ˆˆ์น˜ ์ฑŒ ์ˆ˜ ์žˆ๋‹ค.

 

darknet ํด๋”์•ˆ์— ๋ฐฉ๊ธˆ์ „ ๋ณต์‚ฌํ•ด์„œ ๊ฐ€์ ธ์˜จ custom ํด๋”์•ˆ์— custom_data.data ํŒŒ์ผ๊ณผ custom-train-yolo.cfgํŒŒ์ผ

๊ทธ๋ฆฌ๊ณ  weights ํด๋”์•ˆ์— darknet53.conv.74 ๋ฅผ ์ด์šฉํ•ด์„œ train ์‹œํ‚ค๋Š”๊ฒƒ ๊ฐ™๋‹ค.

 

๋งŒ์•ฝ ์œ„ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰์‹œ์ผฐ๋Š”๋ฐ ์•„๋ž˜์™€ ๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ๋œฌ๋‹ค๋ฉด ์•„๋ž˜ ํฌ์ŠคํŠธ ๊ธ€ ์ฐธ๊ณ !

๋ฌธ์ œ ํ•ด๊ฒฐ ํฌ์ŠคํŠธ: https://couchcoding.tistory.com/326

 

Couldn't open file: ./content/gdrive/My\Drive/darknet/custom/train.txt

1. ๋ฌธ์ œ ๊ตฌ๊ธ€ ์ฝ”๋žฉ์—์„œ ํ”„๋กœ์ ํŠธ ์ง„ํ–‰์ค‘ ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด train ์‹œํ‚ค๋Š” ๊ณผ์ •์—์„œ !./darknet detector train custom/custom_data.data custom/custom-train-yolo.cfg weights/darknet53.conv.74 -dont_show Couldn't open file: ./content/g

couchcoding.tistory.com