전체 source code는 아래 github 주소에 있습니다.
https://github.com/jyu9551/SmartBoardGame
GitHub - jyu9551/SmartBoardGame
Contribute to jyu9551/SmartBoardGame development by creating an account on GitHub.
github.com
스마트보드게임판 관련 글
2023.05.20 - [Projects] - [스마트 보드게임판] 1. 딥러닝을 이용해 아날로그와 디지털을 결합한 보드게임
2023.05.21 - [Projects] - [스마트 보드게임판] 2. 라즈베리파이 환경 구축 (OS설치, 원격접속)
2023.06.14 - [Projects] - [스마트 보드게임판] 3. 라즈베리파이에서 Yolov5 (설치, 학습)
2024.06.23 - [Projects] - [스마트 보드게임판] 4. 시리얼 통신, 모터 제어하기
1. 라즈베리파이에 yolo v5 설치하기
yolo v5 를 설치하는 과정이 꽤나 까다로웠다. 구글에 나오는 설치 방법들도 여러가지이고 파이썬이나 각종 라이브러리 버전이 중요하다보니, 현재 시점으로는 다음과 같은 설치방법을 사용하면 정상 설치 가능하다!
(1) 설치 과정은 다음 링크를 참고하였다. https://qengineering.eu/install-pytorch-on-raspberry-pi-4.html
링크에 나와있는 설명처럼
$ uname -a
$ gcc -v
$ free -m
으로 설치환경을 체크한다.
swap 메모리가 부족하면, 이에 메모리를 할당해주는 글은 많이 나온다!
(2) Torch 는 1.9.0, Torch vision 은 0.10.0 을 설치한다.
이 때,
$ cat /etc/os-release
로 자신의 OS 버전을 확인한다.
![](https://blog.kakaocdn.net/dn/4iuTz/btskAGOInWS/4CHZmXyffKUaKQrTP3jBy0/img.png)
OS 버전에 무관하게 아래 과정은 동일하고,
# get a fresh start
$ sudo apt-get update
$ sudo apt-get upgrade
# install the dependencies (if not already onboard)
$ sudo apt-get install python3-pip libjpeg-dev libopenblas-dev libopenmpi-dev libomp-dev
# above 58.3.0 you get version issues
$ sudo -H pip3 install setuptools==58.3.0
$ sudo -H pip3 install Cython
# install gdown to download from Google drive
$ sudo -H pip3 install gdown
자신의 OS가 Buster 이면,
Buster OS
# download the wheel
$ gdown https://drive.google.com/uc?id=18KztAf3W_kqFYP2f9uqLj3HBdhoMvVe4
# install PyTorch 1.9.0
$ sudo -H pip3 install torch-1.9.0a0+gitd69c22d-cp37-cp37m-linux_aarch64.whl
# clean up
$ rm torch-1.9.0a0+gitd69c22d-cp37-cp37m-linux_aarch64.whl
자신의 OS가 Bullseye 이면 아래 방법으로 설치한다.
or Bullseye OS
# download the wheel
$ gdown https://drive.google.com/uc?id=1p9Sp5YmCJwIkmQIWkpuIkE4NgeYPOr-U
# install PyTorch 1.9.0
$ sudo -H pip3 install torch-1.9.0a0+gitd69c22d-cp39-cp39-linux_aarch64.whl
# clean up
$ rm torch-1.9.0a0+gitd69c22d-cp39-cp39-linux_aarch64.whl
(3) requirements.txt 로 패키지 설치하기
requirements.txt는 패키지 목록이 나열되어 있는 텍스트 파일로 다음 명령어로 패키지들을 한번에 설치 가능하다.
$ pip install -r requirements.txt
2. yolo v5 학습시키기
게임판 위에 주사위 값을 인식하는 것이 어려운 환경은 아니라서 직접 모델을 만들어도 되고 가벼운 모델을 사용해도 되지만 비교적 정보가 많은 yolo v5 딥러닝 모델을 사용했다.
학습은 코랩에서 진행했고 학습시킬 때는 train.py를 사용하면 된다.
train.py --img 756 --batch 16 --epochs50 --data /content/dice_data.yaml --cfg /models/yolov5s.yaml --weights yolov5s.pt --name dice_yolov5s_result 로 옵션을 주고 학습시켰다.
![](https://blog.kakaocdn.net/dn/wNLix/btsH8EVp9Pj/cCKuKm92gmNGEBkmHhfMvk/img.png)
먼저 이미지 데이터는 roboflow에서 주사위 이미지 데이터 300개정도, 직접 보드게임판에서 찍은 이미지 데이터 180개를 직접 라벨링하여 학습시켰다. 왼쪽 사진이 이미지 데이터, 오른쪽 사진이 레이블 파일이다. 레이블 파일에는 정답 class값과 주사위의 위치를 기입해줬다.
![](https://blog.kakaocdn.net/dn/cuVdov/btsH979DSld/13Kafao6d4RiwF7WZkhl31/img.png)
![](https://blog.kakaocdn.net/dn/bmJDFx/btsH8xIR2k5/qjPlfhJWIBtnd9mecgLny0/img.png)
data.yaml 파일에는 이미지와 레이블들의 경로, Classification을 위한 정보 등을 담고있다.
![](https://blog.kakaocdn.net/dn/cHCXe6/btsH8Eny3kA/SuTbAW8JfIBNjqVMTpUuwK/img.png)
batch나 epochs은 학습된 모델 성능에 큰 영향을 주진 않을 것 같아 기본값을 사용했다. 학습시킨 모델의 정확도가 활용하기에 낮다고 판단되면 조금씩 변경해가며 조절하면 되는 하이퍼파라미터 값이다. 특히 weights 값은 상대적으로 가벼운 yolov5s를 사용했다. 학습하는데 Colab GPU 기준으로 40분 정도 소요됐고 dice.pt 파일을 얻을 수 있었다. dice.pt 파일에는 학습시킨 모델의 가중치 값들, 즉 파라미터 값들이 저장되어 있을 것이고 이를 detect.py의 옵션으로 사용해 주사위 값을 감지하면 된다.
라즈베리파이에서 python3 detect.py --source http://localhost:8080/?action=stream/ --weights dice.pt --conf 0.25f
옵션으로 실시간으로 웹캠에서 얻은 이미지 데이터의 detect 결과를 얻을 수 있는 것이다.
프로젝트 특성상 detect.py에서 주사위 값 결과를 데스트톱 게임으로 보내는 시리얼통신 코드가 포함되어 있다.
'Projects' 카테고리의 다른 글
[스마트 보드게임판] 4. 시리얼 통신, 모터 제어하기 (0) | 2024.06.23 |
---|---|
[스마트 보드게임판] 2. 라즈베리파이 환경 구축 (OS설치, 원격접속) (0) | 2023.05.21 |
[스마트 보드게임판] 1. 딥러닝을 이용해 아날로그와 디지털을 결합한 보드게임 (0) | 2023.05.20 |