clap0107

[YOLOv5] 커스텀 데이터 학습 - M1 Mac (3) 본문

개발/YOLOv5

[YOLOv5] 커스텀 데이터 학습 - M1 Mac (3)

clap0107 2023. 2. 6. 23:36
반응형

M1 Mac

내 로컬 환경인 M1 Mac에서 YOLOv5 커스텀 데이터 학습을 시켜보았다. Google Colab에 비해 자료가 부족해서 난항을 겪었지만 결국 해냈다.


Anaconda

Anaconda란 파이썬 배포판으로 여러 가지의 파이썬 패키지를 포함하고 있다. Anaconada를 설치하면 가상환경을 만들 수 있는데, 머신러닝 프로젝트들을 각각의 가상환경으로 분리해서 관리하는 것이 좋다. 이유는 프로젝트마다 필요한 버전이 다를 수 있는데 같은 환경에서 프로젝트들을 진행하다 보면 서로 버전이 맞지 않아 충돌할 수 있기 때문이다.

 

나는 64-Bit (M1) Graphical Installer (484 MB)를 눌러서 다운로드하였다.  아나콘다 링크: https://www.anaconda.com/products/distribution


Jupyter Notebook

Jupyter Notebook은 웹 브라우저에서 파이썬 코드를 작성하고 실행할 수 있는 앱이다. Google Colab이 Jupyter Notebook을 사용하고 있기 때문에 Google Colab을 사용해 보았다면 익숙할 것이다. Juypter Notebook의 장점은 코드를 하나하나 실행시킬 수 있기 때문에 코드의 진행을 단계 별로 볼 수 있다는 것이 장점이다. 아나콘다를 설치했다면 기본 패키지로 설치되어 있다.


PyTorch

PyTorch란 Python을 위한 오픈소스 머신 러닝 라이브러리이며 딥러닝 프레임워크 중 하나이다. 이해를 돕기 위해 프레임워크란 응용 프로그램 개발을 위해 라이브러리, 모듈 등을 모은 패키지를 뜻한다. 따라서 PyTorch는 딥러닝을 위한 프레임워크 중 하나이며 딥러닝 시스템을 구축하는 것은 어려운 일이기 때문에  PyTorch와 같은 오픈소스 프레임워크의 힘을 빌려 만든다. 더불어 gpu가속을 지원하여 보다 빠른 학습을 할 수 있도록 도와준다.


M1 Mac에서 YOLOv5 실행하기

1. Anaconda 가상환경 만들기

Anaconda를 설치하면 터미널에서 (base)라는 단어를 찾을 수 있을 것이다. base는 root 작업환경으로서 건들지 않는 것이 좋다. 따라서 새로운 가상환경을 만들어 준다. 먼저 터미널에 아래 명령어를 실행하면 지금 설치되어 있는 모든 가상환경 리스트를 볼 수 있다.

conda info --envs

다음에 create 명령어를 실행하면 가상환경을 만들 수 있는데 여기서 "Yolov5"는 가상환경의 이름이다.

conda create -n Yolov5 anaconda

activate 뒤에 만들어준 가상환경 이름을 넣어주면 새로 만들어준 가상환경에서 작업할 수 있게 된다.

conda activate Yolov5

 

2. PyTorch 설치하기

Conda에 PyTorch를 설치해 준다. PyTorch 링크: https://pytorch.org/get-started/locally/#macos-version

conda install pytorch torchvision torchaudio -c pytorch

 

3. Jupyter Notebook 실행하기

새로 만든 가상환경에서 Jupyter notebook을 실행해 준다.

Jupyter notebook

성공한다면 다음과 같은 화면을 보게 된다.

바탕화면에 YOLOv5를 위한 폴더를 만들어 주었고 New 버튼을 눌러서 새로운 python 페이지를 생성해 준다.

페이지를 생성하게 되면 다음과 같은 페이지를 볼 수 있는데 Google Colab과 같은 환경이라고 생각하면 된다.

 

4.  YOLOv5 학습시키기

이전 포스팅인 [YOLOv5 커스텀 데이터 학습 - Google Colab (1]에서 서술했던 명령어들을 차례대로 실행해 주면 된다. 코드 한 줄을 적은 다음 Run 버튼을 눌러서 실행해 주면 된다.

[YOLOv5 커스텀 데이터 학습 - Google Colab (1]과 달랐던 명령어들을 소개한다. 이번에는 내가 직접 만든 횡단보도 데이터셋을 사용하였기 때문에 코드가 약간 달랐다. 권총 데이터셋과 다르게 횡단보도 데이터셋은 train set과 valid set이 자동으로 나누어져 있었기 때문에 list를 각각 만들어주었다.

#train
%cd /
from glob import glob
train_img_list = glob('/content/dataset/train/images/*.jpg')
print(len(train_img_list))

#valid
%cd /
from glob import glob
valid_img_list = glob('/content/dataset/valid/images/*.jpg')
print(len(valid_img_list))

그리고 txt파일을 열고

with open('/content/dataset/train.txt', 'w') as f:
  f.write('\n'.join(train_img_list) + '\n')

with open('/content/dataset/val.txt', 'w') as f:
  f.write('\n'.join(valid_img_list) + '\n')

경로를 바꿔주면 학습 준비 완료!

import yaml

with open('/content/dataset/data.yaml', 'r') as f:
  data = yaml.safe_load(f)

data['train'] = '/content/dataset/train.txt'
data['val'] = '/content/dataset/val.txt'

with open('/content/dataset/data.yaml', 'w') as f:
  yaml.dump(data, f)

학습시키기 전에 M1 Mac의 gpu를 사용하기 위해서는 --device mps를 붙여줘야 한다. 원래 cpu 밖에 지원이 안되었지만 이제 gpu도 지원이 된다. 하지만 아직 M1 gpu 가속은 지원을 하지 않는 것 같다.(ARM기반 맥은 가능한 것 같이 보인다...). 그리고 python3로 실행해주어야 한다. python의 기본 환경변수가 conda의 python과 달라서 계속 에러가 떴었다 (찾는데 엄청 오래 걸렸다...).

!python3 train.py --img 416 --batch 16 --epochs 50 --data /content/dataset/data.yaml --cfg ./models/yolov5s.yaml --weights yolov5s.pt --name results

사실 gpu를 사용하지 않고 cpu를 쓰면 매우 느리다. 그래서 google colab에서 학습하는 걸 권장한다. 그리고 cpu로 학습시킬 때 cpu의 상태를 보고 싶다면, command+space에서 활성 상태 보기를 실행시키면 된다.

5.  YOLOv5 웹캠으로 실행하기

드디어 웹캠으로 YOLOv5를 실행하기 위한 모든 준비가 완료되었다. cd 명령어를 통해서 github에서 clone 한 yolov5 폴더로 디렉터리를 이동해 준다.

cd yolov5

다음 명령어를 실행해 주면 성공적으로 웹캠에서 YOLOv5를 실행할 수 있게 된다! 명령어 뒤에 "--device mps"를 붙이면 gpu로 실행할 수 있는데 아쉽게도 아직 gpu는 지원을 하지 않는 것 같다. 만약에 아이폰 12 이상을 사용한다면 맥과 아이폰 연속성으로 웹캠 대신 아이폰 카메라를 사용할 수 도 있다. 애플 링크: https://support.apple.com/ko-kr/guide/mac-help/mchl77879b8a/mac 링크에 들어가 설정을 해주면 명령어를 바꿀 필요 없이 자동으로 연결이 된다.

!python3 detect.py --weights runs/best.pt --conf 0.5 --source 0

그래서 나는 웹캠 대신 아이폰 카메라로 횡단보도를 인식해 보았다.


YOLOv5를 사용하여 처음으로 인공지능 모델을 학습시켜 보았다. 학습해 보면서 너무 신기했고 성공적으로 실행되어서 기뻤다. 인공지능 분야는 배울 게 정말 많은 것 같다. 이 글을 읽는 다른 사람들도 도움을 받아서 자신만의 모델을 만들어 봤으면 좋겠다. YOLOv5 커스텀 데이터 학습 끝!

반응형
Comments