이전 포스팅에서의 절차를 잘 밟아왔다면 필요한 데이터에 대한 전처리는 거의 모두 끝낸 상태입니다.
이제 이미지 학습에 앞서 개발 환경을 설정할 차례입니다.
https://colab.research.google.com/?hl=ko
다양한 IDE나 여러 웹 디버깅 툴이 있겠지만 구글 드라이브와 연동이 편리하고 무엇보다 GPU 개발 환경을 제공해 주는 코랩에서 진행하였습니다. 구글 계정만 있다면 쉽게 이용 가능하며 기타 자세한 팁이나 이용방법은 생략하도록 하겠습니다.
2.1 GPU 연동 및 cuDNN 설치
a. GPU 연동
코랩에서 새 노트를 생성하고 런타임 유형을 GPU로 변경합니다. 상단 목록 중 런타임을 클릭해 변경하면 됩니다.
코랩의 큰 단점은 모듈을 사용할 때마다 설치해야 하는 휘발성이라는 점 때문에 머신러닝에 필요한 다크넷 툴을 구글 드라이브에 설치하여 연동할 필요가 있습니다. 마찬가지로 GPU 환경에서의 머신러닝에 필요한 cuDNN도 버전에 맞게 설치하여 드라이브에 연동할 필요가 있습니다.
b. 구글 드라이브 연동
from google.colab import drive
drive.mount('/content/gdrive')
해당 코드로 코랩과 구글 드라이브를 연동합니다.
코드 실행 후 해당 절차에 따라 연동을 해주시면 되겠으며 연동을 마치면 아래와 같은 출력을 볼 수 있겠습니다.
c. cuDNN 설치
!/usr/local/cuda/bin/nvcc --version
cuDNN설치를 위해 현재 사용중인 코랩의 cuda 버전을 확인합니다.
저의 코랩 환경의 경우 11.1 버전임을 볼 수 있습니다. 아래의 링크를 통해 버전에 맞는 cuDNN을 다운받도록 합니다.(로그인 필요) 주의할점은 코랩의 경우 리눅스 기반의 환경이므로 반드시 for Linux 로 다운받아야 한다.
https://developer.nvidia.com/rdp/cudnn-archive
예시) 11.1 버전에 호환되는 cuDNN 8.1 for Linux 다운
해당 압축파일을 다운로드하고 구글 드라이브에서 다크넷을 다운로드할 폴더에 옮겨줍니다. 저의 경우 위 사진처럼 내 드라이브 -> darknet -> cuDNN 의 경로를 생성하여 다운로드 했습니다.
이제 코랩에서 다음의 커맨드로 cuDNN을 적용시킵니다.
!tar -xzvf gdrive/My\ Drive/darknet/cuDNN/cudnn-11.2-linux-x64-v8.1.0.77.tgz -C /usr/local/
!chmod a+r /usr/local/cuda/include/cudnn.h
설치 경로는 본인 개발환경에 맞게 설정할 필요가 있고, cuDNN 또한 자신이 다운받은 파일명에 맞게 수정합니다.
!cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
이제 최종적으로 상단의 커맨드로 해당 CUDNN_MAJOR에 대한 정보를 확임함으로써 cudnn 설치가 정상적으로 진행되었는지 확인해봅니다. (생략 가능)
2.2 다크넷 설치
!git clone https://github.com/pjreddie/darknet/
다크넷 소스 설치는 git clone 명령어를 통해 간단하게 설치를 진행합니다. 상단의 커맨드로 설치하면 되겠습니다.
%cd darknet
!ls
ls 명령어로 다크넷 파일들이 잘 저장되어 있는지 확인해봅니다.
다크넷 파일들이 잘 다운로드된 모습
!make
make 명령어로 최종적으로 설치합니다.
정상적으로 설치가 마무리되면 마지막으로 구글 드라이브에 컴파일된 다크넷을 옮길 차례입니다.
저의 경우 bin 이라는 폴더에 저장하였습니다. 코랩에서 하단 코드로 폴더 생성을 해도 무방하나 직접 드라이브에 원하는 경로에 폴더를 생성해도 무방합니다.
#-- 폴더 설치를 위한 코드, 드라이브에 직접 생성해도 무방
import os
if not os.path.exists('/content/gdrive/My Drive/darknet/bin'):
os.makedirs('/content/gdrive/My Drive/darknet/bin') #-- 경로는 꼭 본인환경에 맞게 변경할 것
하단 코드로 설치된 다크넷을 구글 드라이브에 생성한 폴더로 옮기도록 합니다.
!cp ./darknet /content/gdrive/My\ Drive/darknet/bin/darknet
3.3 다크넷 테스트
코랩 환경내에 다크넷 설치가 완료되었고 이제 정상적인 실행 여부를 확인해볼 차례입니다.
기본적으로 제공되는 example 파일을 실행해보았습니다.
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)
example 파일 실행을 위한 함수 선언
!cp -r "/content/gdrive/My Drive/darknet/weights" ./weights
또한 테스트에 필요한 weights 파일을 가져오기 위해 다음의 명령어로 폴더를 복사해옵니다.
%ls
ls 명령어로 정상적으로 복사가 되었는지 확인
이제 yolov3으로 example 파일에 대한 예측을 테스트 해봅니다.
기본적으로 주어진 dog.jpg 파일을 활용해 보았습니다.
!./darknet detect cfg/yolov3.cfg weights/yolov3.weights data/dog.jpg
imShow('predictions.jpg')
person.jpg에 대한 결과도 테스트해봅니다.
다크넷 공식 사이트의 예시와 같이 정상적으로 잘 처리된 것을 확인해 볼 수 있습니다.
이제 코랩환경에서의 학습을 위한 준비는 끝났고 다음 포스팅에서 실시해 보도록 하겠습니다.
'Project > Wall Climb Situation' 카테고리의 다른 글
[Project] 월담 행위 인식 모델 - 3. 학습 및 모델 평가 (0) | 2022.01.25 |
---|---|
[Project] 월담 행위 인식 모델 - 1. 라벨링 및 이미지 전처리 (0) | 2022.01.24 |
댓글