9럼 이제 꼬랩으로 학습시키겠습니다!
얘는 꼬렛입니다. 헷갈림에 주의해주세요.
아래의 과정을 잘 따라와주시고, 혹시 뭔가가 안된다면 제 깃허브에 방문하셔서 코드를 복붙해보세요. 제 실행결과를 보고 비교해 보실수도 있어요!
https://github.com/BUZZINGPolarBear/YOLO_KickBoard_helmet_Detection
0. 우리가 만들었던 파일을 압축해주세요.
1. 구글 드라이브 새로 만들기에서 Google Colaboratory를 만들어주세요.
요걸 누르고...
더보기 -> google Colaboratory를 클릭해주세요.
이렇게요!
발등을 벅벅긁다보니 이런 화면이 나왔습니다.
2. Colab 환경설정
Yolo를 학습시킬때 GPU를 사용할 수 있도록 설정해줄거에요.
수정 -> 노트 설정을 클릭해주세요.
그리고... 이렇게!
GPU를 설정해주시고 저장해주세요.
3. Colab에 Google Drive를 연결합니다.
저는 한번 했던거라서... 아래의 메세지가 다를 수도 있어요. 로그인을 한번 해주셔야 합니다.
drive를 왜 연결하냐면요, Google Drive에 올린 우리의 다크넷 압축파일을 사용하려구요!
이렇게 drive폴더가 생성될거에요.
복붙해서 사용하세요. 고맙죠????
from google.colab import drive
drive.mount('/content/drive')
4. 우리가 0번에서 만들었던 압축파일의 압축을 해제해주세요.
아까 우리가 0번에서 만들었던 압축파일 있죠?? 저는 킥보드 디텍션이라는 의미를 가진
예를 들어, 이런 식으로 업로드 해주시면 되겠죠??
이제 코드를 통해 /content/darknet이라는 하위 폴더를 생성하고, 압축해제를 시켜줄거에요.
darknet이라는 이름으로 압축이 해제될 것입니다.
물론, 여러분의 압축파일 이름에 따라 바꿔주는 부분도 있어야겠죠!!
!mkdir /content/darknet
!unzip "/content/drive/MyDrive/Colab Notebooks/kb_Detection_Darknet.zip" -d "/content/darknet"
압축 해제가 완료되면, darknet이 OPENCV와 GPU를 사용할 수 있도록 Makefile을 변경 및 실행해줄거에요.
복붙해주시면 됩니다.
%cd /content/darknet
!sed -i 's/OPENCV=0/OPENCV=1/' Makefile
!sed -i 's/GPU=0/GPU=1/' Makefile
!sed -i 's/CUDNN=0/CUDNN=1/' Makefile
!sed -i 's/CUDNN_HALF=0/CUDNN_HALF=1/' Makefile
!sed -i 's/LIBSO=0/LIBSO=1' Makefile
!make
!chmod +x ./darknet
5. Colab에 구글 드라이브 연결하기
위로 스크롤을 한번 올렸다가 내렸습니다. 이번 넘버링은 5군요...
Darknet으로 학습시 생기는 backup파일이 'YOLOv4-tiny'디렉토리 내의 'backup'파일에 싱크될 수 있도록 설정해줍니다.
그리고 Darknet 내의 training데이터를 검사합니다.
친절한 제가 복붙하실 수 있도록 코드를 적어놓겠습니다.
!rm -rf /content/darknet/backup
!ln -s /content/drive/'MyDrive'/YOLOv4-tiny/backup /content/darknet
!sudo apt install dos2unix
!dos2unix ./data/list/train.txt
!dos2unix ./data/list/valid.txt
!dos2unix ./data/list/test.txt
!dos2unix ./data/ClassNames.names
!dos2unix ./data/kbDatas.data
!dos2unix ./cfg/yolov4-tiny-custom.cfg
6. 써먹을 function 정의하기!
코랩에서 학습 진행시 생성될 이미지 확인 및 다운로드의 편의를 위한 function을 선언해줍니다. 이것은 복붙하여 사용해주세요.
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)
그리고 우리가 써먹을 yolov4 tiny모델을 다운받아줍니다.
%cd /content/darknet
!wget https://github.com/AlexeyAB/darknet/releases/download/darknet_yolo_v4_pre/yolov4-tiny.conv.29
저는 이렇게 나왔어요. 잘 따라오셨나요??
7. 그럼 학습을 시작합니다!!
%cd /content/darknet
!time ./darknet detector train data/kbDatas.data cfg/yolov4-tiny-custom.cfg yolov4-tiny.conv.29 -dont_show -map l tee train.log
!cp -r /content/darknet/train.log /content/drive/'MyDrive'/YOLOv4-tiny/backup/
중간의 경로는 여러분의 경로에 맞게 변경될수도 있습니다.
이렇게 작성하시고 블럭을 실행하면 학습이 시작됩니다.
time: training후 총 걸린시간 출력
-dont_show: Loss-Window를 띄우지 않는 옵션
-map: training시 modle의 mAP를 계산해서 보여줌과 동시에 마지막 결과값을 그래프로 저장
tee train.log: Training시 출력되는 로그를 train.log 파일에 저장
8. 학습이 종료된후
연극이 끝나고 난뒤~~ 혼자서 객석에 앉아~~
우리는 학습이 종료되면 결과를 확인해야 합니다.
학습 결과가 좋지 않네요.... 데이터를 많이 준비하시기 바랍니다.
!time ./darknet detector test data/kbDatas.data cfg/yolov4-tiny-custom.cfg backup/yolov4-tiny-custom_final.weights -dont_show -ext_output <data/list/test.txt> result_v4.txt
download('result_v4.txt')
이렇게도 작성하셔서 확인해보세요.
9. Retraining
코랩에 문제가 생겼거나(빌어먹을 런타임으로 인해 코랩이 종료되거나 고양이가 냥냥펀치로 컴퓨터 전원을 눌러버린 경우) 모델의 문제로 Retraining이 필요한 경우 backup 파일의 weight파일을 사용하여 트레이닝이 가능합니다.
!time ./darknet detector train data/kbDatas.data cfg/yolov4-tiny-custom.cfg backup/yolov4-tiny-custom_5000.weights -dont_show -map l tee train.log
이건 제가 안해본 부분이라 작동이 안될수도 있어요.
10. 사진으로 확인하기
우리가 가진 데이터에 YOLO를 적용시켜봅시다.
사진 경로는 바꿔주셔야 하는거!! 아시죠ㅕ???
저는 이렇게 나왔습니다.
!time ./darknet detector test data/kbDatas.data cfg/yolov4-tiny-custom.cfg backup/yolov4-tiny-custom_final.weights data/images/0026_jpg.rf.c601665d01f806d12713012ab951e697.jpg
imShow('predictions.jpg')
download('predictions.jpg')
끝~~~ 수고하셨습니다.
'머신러닝 > JetsonNANO와 YOLO!' 카테고리의 다른 글
(중) Colab과 Darknet으로 YOLO를 학습시켜보자! (1) | 2021.11.17 |
---|---|
(상) Colab과 Darknet으로 YOLO를 학습시켜보자! (8) | 2021.10.05 |
YOLO Darknet을 학습해야 하는데 XML이나 Json으로 라벨을 붙인 나를 위한 Roboflow! (9) | 2021.10.04 |
이미지 라벨링 쉽게하기! Labelme (0) | 2021.10.03 |
[YOLO 논문 리뷰] 그래서 YOLO가 뭔데??? (0) | 2021.10.03 |