Notice
Recent Posts
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
관리 메뉴

이우의 개발일지

STM32 임베디드용 ML 모델 개발하기 (Tiny yolo, SSD Mobile net) 본문

Embeded

STM32 임베디드용 ML 모델 개발하기 (Tiny yolo, SSD Mobile net)

공대이우 2024. 7. 17. 15:34

약 3주란 시간 동안 임베디드용 머신러닝 모델 개발에 시간을 투자했다.

AI 쪽 ML 학습은 생소한 분야라서 학습 시키는게 더 어려웠던 것 같다. 

 

 

STM32 보드를 이용해 딸기를 인식하는 ML 모델 개발하기

AI가 유행인만큼 ML 모델 레퍼런스가 어느정도 있어 처음에는 이렇게 어려울지 몰랐다. 

그러한 경험을 상세히 녹여볼려고 한다.

 

이용할 보드 및 카메라 : STM32H747I-DISCO, B-CAMS-OMV 

https://www.st.com/en/evaluation-tools/b-cams-omv.html

 


데이터셋 찾기 or 만들기

딸기는 솔직히 흔해서 데이터셋이 많은 줄 알았는데 아니였다.. 

위처럼 다양한 데이터셋 사이트가 많은 것처럼 보이지만, 막상 까보면 사진이 정말 이상하거나 바운딩박스 좌표가 한 TXT 파일에 뭉쳐있어 쓰지 못하는 데이터셋들이 태반이다.. 

 

결국, 우리는 직접 데이터셋을 만들기로 했다. 꿀팁을 하나주자면 밑에 사이트가 정말 바운딩 박스도 만들기 편하고 일정 크레딧 안에서 AI가 바운딩 박스를 잡아줘서 사진만 잘찍으면 된다..! (쓰다보니 광고같네 ㅋㅋ광고 아닙니다..)

https://roboflow.com/

 

Roboflow: Computer vision tools for developers and enterprises

Everything you need to build and deploy computer vision models, from automated annotation tools to robust, device-agnostic deployment solutions.

roboflow.com

꿀팁 투척~

 

이런식으로 찍은 데이터셋을 가지고, 라벨링을 해줬다.

경험상으로 train : 606 validation : 174 test : 87 이정도 데이터셋만 넣어줘도 어느정도 모델이 잘 인식했다. 

이후에 더 찍어서 총 1000장이 넘는 딸기를 넣기도 했다.

 

(혹시나 딸기 데이터셋이 필요한 사람들은 댓글에 남겨주시면, 소정의 수고비를 받고 넘겨주도록 하겠다.)

 

ML 모델 선정 및 생성하기

 

https://github.com/STMicroelectronics/stm32ai-modelzoo

 

GitHub - STMicroelectronics/stm32ai-modelzoo: AI Model Zoo for STM32 devices

AI Model Zoo for STM32 devices. Contribute to STMicroelectronics/stm32ai-modelzoo development by creating an account on GitHub.

github.com

 

우리는 STM32 회사에서 제공하는 레퍼런스인 stm32 model-zoo를 이용했다. 

장단점을 말해주자면,

  • 장점 : 모든 코드가 짜져있어서, 조금의 수정만 해주면 된다.
  • 단점 : 현재 시중에 나와있는 버전이 달라 버전 수정에 애를 많이 먹었다. 

우리는 처음 모델을 ST SSD MobileNet v1 0.25 으로 생성을 했다.

 


구글 코랩 사용하기 

 

먼저 모델을 이용할려면, GPU 환경이 있어야해서 구글 코랩을 사용하였다.

구글 코랩에서 일정량의 GPU를 제공해서 좋았다. 좋은줄 알았다... (결국엔 2번이나 pro 결제해서 사용했다..ㅋㅋ 장사잘하네 구글)

 

git hub에서 다운 받은 파일들을 구글 드라이브에 올려 연동해서 사용하였다. 

from google.colab import drive
drive.mount('/content/drive')

-----------------------------------------------------------
%cd /content/drive/My Drive/DeepLearning/stm32ai-modelzoo
!pip install -r requirements.txt
!pip install keras==2.15.0
%cd object_detection/src
%run stm32ai_main.py

 

위 코드를 바탕으로 우리가 설정한 모델을 학습시켰다. 

 

첫 학습 완료 ! 

 

과연 모델은... 두구두구

 

실패!

 

항상 느끼지만 한번에 원하는데로 잘 되지 않는다.. ㅎㅎ

 

이렇게 정리를 했는데, 모델이 약간 버벅이면 모르겠는데 아예 잘 작동하지 못하는 느낌이라 모델을 바꿨다.

(위에는 3번을 적어놨지만, 적어도 6번은 모델을 학습시켰다..ㅋㅋ)

 

이후 tiny_yolo_2로 모델을 바꿔서 학습시켰다. 학습 과정은 크게 다를건 없었지만, 모델을 테스트하는 과정에서 코드가 달라서 거기서도 조금 헤맸다. 

하지만 결과는... 성공!! 

 

ssd_mobilenet_v1을 돌릴 때는 데이터셋 수가 너무 작나라고 생각했지만, 모델이 문제였다. 

ssd_mobilnet_v1의 layer는 100~200이고, tiny_yolo_2의 layer는 200~300이라고 한다. 훨씬 복잡한 layer를 가져서 그런지 학습이 더 잘 이루어졌다. 

 

 


이제 이 학습 시킨 것을 바탕으로 모델을 임베디드, stm32보드에 탑재해보는 연구를 해볼 예정이다.

추후 진행이 순차적으로 될 때 정리하도록 하겠다.

 

팟팅!

 

반응형