이번 포스팅에서는 이전에 세팅했던 darknet 환경을 이용해서 나만의 데이터를 가지고 yolo를 통해 object detection을 수행해 보겠다.
먼저 다시 쿠다를 설치해주고(초기화 되었으므로)
# install cuda
!tar -xzvf drive/My\ Drive/darknet/cuDNN/cudnn-11.0-linux-x64-v8.0.4.30.solitairetheme8 -C /usr/local/
쿠다를 사용할 수 있게 권한을 추가 해준다.
!chmod a+r /usr/local/cuda/include/cudnn.h
이제 DarkNet을 불러오자.
import os
if not os.path.exists('darknet'):
os.makedirs('darknet')
%cd darknet # /content/darknet 으로 작업 위치 이동
darknet 폴더에 있던(구글 드라이브) darknet을 현재 작업 위치에 불러오고 권한을 변경해준다.
!cp /content/drive/MyDrive/darknet/bin/darknet ./darknet
!chmod +x ./darknet
다음으로 YOLO를 test하기 위해 드라이브에 있던 weights,cfg,data 파일들을 현재 작업 폴더에 불러온다.
!cp -r '/content/drive/MyDrive/darknet/weights' .
!cp -r '/content/drive/MyDrive/darknet/cfg' .
!cp -r '/content/drive/MyDrive/darknet/data' .
%ls
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.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)
이제 기존 yolo의 weight로 yolo를 실행시켜보자.
!./darknet detect cfg/yolov3.cfg weights/yolov3.weights data/fruit10.jpg
imShow('predictions.jpg')
기존 yolo에는 귤의 데이터가 없기 때문에 위와같은 결과를 나타낸다.
앞으로 할 일은 직접 yolo를 학습시키는 것이다. 앞에서 custom 데이터를 만들었던 custom 폴더를 가져온다.
!cp -r /'content/drive/MyDrive/darknet/custom' .
이후 darknet53.conv.74로 학습시킨다. 이것은 학습을 위한 합성곱층들 이다.
os.makedirs('./backup')
!./darknet detector train custom/custom_data.data custom/custom-train-yolo.cfg weights/darknet53.conv.74 -dont_show
backup 폴더를 만든 이유는 특정 에포크마다 weight를 저장해두기 때문이다. 학습이 끝난 후 가중치르 이용해 map를 측정한다.
!./darknet detector map custom/custom_data.data custom/custom-train-yolo.cfg backup/custom-train-yolo_final.weights
이번에는 custom-yolo로 위 이미지를 다시 측정해보자.
!./darknet detector test custom/custom_data.data custom/custom-train-yolo.cfg backup/custom-train-yolo_final.weights data/fruit10.jpg -dont-show
imShow('predictions.jpg')
측정이 아주 잘 된 것을 볼 수 있다.
주의점!
코랩이든 로컬이든 다음 부분에서
!./darknet detector test custom/custom_data.data custom/custom-train-yolo.cfg backup/custom-train-yolo_final.weights data/fruit10.jpg -dont-show
빨간색 부분의 파일에 적혀있는
classes = 2
train =/content/gdrive/My\Drive/darknet/custom/train.txt
valid =/content/gdrive/My\Drive/darknet/custom/test.txt
names =/content/gdrive/My\Drive/darknet/custom/classes.names
backup = backup
이 것들의 경로가 매우 중요하다. 나는 현재 작업폴더가 /content/darknet 이고, 여기에 custom 폴더가 있으므로 train,valid,names 의 경로가 ./custom/~로 고쳐줘야 했다.
똑같이 test.txt와 train.txt에 들어있는 이미지들의 경로도 절대경로를 고려해서 작성해줘야 한다.
'Object Detection' 카테고리의 다른 글
object detection project - keras를 사용한 detection(2) (0) | 2021.08.26 |
---|---|
object detection project - keras를 사용한 detection(1) (0) | 2021.08.24 |
Custom YOLO project - 코랩에 darknet 불러오기 (0) | 2021.08.21 |
Custom YOLO project - 대용량 xml파일 라벨링 해주기 (0) | 2021.08.21 |
Custom YOLO project - YOLO 이미지 데이터 만들기 (0) | 2021.08.21 |