개발 관련/프로젝트

사물인식을 위한 모델 학습 시도(TensorFlow / ONNX)

by 소서리스25 2023. 12. 26.
반응형

지난번 사물인식을 위한 보완으로 파이토치를 검토하던 와중에 다른 방법도 있지 않을까 하고 검색해 봤다. 

한 가지 방법으로 시도해 봤는데,

역시나 AMD 시스템에서는 안 되는 것 같다. 있다고 해도 ROCm인 거 같은데 어떻게 활용하는지는 모르겠다.

어쨌든 집의 AMD PC(CPU : AMD 5600, GPU : RX6650XT)에서는 안 되는 것 같다는 결론을 내리고 사무실이나 노트북이 Intel과 Nvidia GPU이니까 되지 않을까 한다. 다만... GPU가 GTX1050인데....설마 여기서도? 아무튼 시도해 볼 예정이다.

 

그러면 그 한 가지 시도한 방법을 기록해 본다.

먼저, 내가 하고자 하는 것은 기존에 있는 모델들은 내가 만든 것이 아니기 때문에 여러 가지 정보들을 담고 있는 모델들이다. 따라서 무겁고 연산에 많은 영향을 준다.

특히 모바일 환경에서 속도가 많이 느려진다. 실제로 지난번 사물인식 테스트 때도 보면 속도가 많이 느렸다. 물론 스마트폰의 사양이 낮아서일 수도 있는데, 이걸 위해 고사양을 살 수도 없다. 기존의 가지고 있던 모바일 기기를 활용하는 것도 목적 중 하나다. 사용될 모바일 기종은 LG V40이다. 

 

사실 이게 맞는지는 잘 모르겠지만 어쨌든 시도해 본다.

*참고적으로 본인은 이 분야에 대해서 아는 바가 거의 없습니다. 맨땅에 헤딩하면서 하여 맞지 않을 수 있습니다.

 

1. 사물인식에 사용될 이미지들을 모아 아래의 사이트에서 학습시킨다.

Teachable Machine

 

Teachable Machine

Train a computer to recognize your own images, sounds, & poses. A fast, easy way to create machine learning models for your sites, apps, and more – no expertise or coding required.

teachablemachine.withgoogle.com

 

상기 사이트에서 내가 선택한 이미지들을 모아 모아 모아서 해당 물건을 클래스별로 여러 가지 이미지 샘플로 등록시키고 모델을 학습시킨다.

학습시킨 후 카메라를 통해 출력을 확인해 본다. 인식률이 떨어지면 학습 모델의 옵션을 조심스럽고 신중하게 약간 조정해 본다.

Teachable Machine를 통한 모델 학습하기
Teachable Machine를 통한 모델 학습하기

 

학습될 클래스들이 많아지면 그만큼 시간이 소요된다. (아직 큰 데이터를 입력하지 않아서 시간 예측은 어렵다)

 

2. 학습이 완료되면 Export 할 모델을 선택한다. 해당 모델의 기반은 모두 TensorFlow 이다.

내가 사용할 모델 유형은 파이썬을 이용하기 때문에 아래와 같이 2가지인데 둘 다 해봤으나 GPU문제로 안되었던 거 같다.

해당 모델의 경우 Keras와 Savedmodel이다. 

학습 모델 Export
학습 모델 Export

 

3. 모델 Export가 완료되면 자동으로 압축파일이 다운로드된다.

개발 코드는 위에 나타난 코드 스니펫을 활용해야 한다. 이미지 관련 코드가 작성되어 있다면 위 코드의 결과 부분과 차이점이 없는지 살펴봐야 한다.

어차피 여기서 이걸 쓸 것이 아니라 ONNX로 Convert 하여 C#에서 사용할 것이므로 참고만 한다.

 

4. Anaconda(Python 포함되어 있음)과 관련된 사항들이 준비되어 있어야 한다.

먼저, Anaconda를 본인의 시스템에 맞게 설치하여 준비한다. - 혹시 모르니 python도 링크를 공유한다.

Welcome to Python.org

 

Welcome to Python.org

The official home of the Python Programming Language

www.python.org

 

Free Download | Anaconda

 

Free Download | Anaconda

Anaconda's open-source Distribution is the easiest way to perform Python/R data science and machine learning on a single machine.

www.anaconda.com

 

다음으로 ONNX로 컨버팅 할 때 필요한 패키지들을 설치해야 한다. 특히, 편리한 기능을 제공하는 Jupyter Notebook를 설치해야 한다. 콘솔보다 훨씬 괜찮다.;;

 

일단은 아래 패키지들을 설치합니다. 

 

pip install tensorflow

 

pip install onnxruntime

 

pip install -U tf2onnx

 

pip install jupyter

 

또 뭐가 있더라....

아무튼 일단 설치해 주고, 마지막의 Jupyter Notebook을 설치하면 윈도우에서 시작프로그램에 나타나게 된다.

혹시 설치 시 오류가 날 수도 있다고 한다. 그럴 경우 업그레이드를 해 주어야 한다고 한다.

 

pip install --upgrade 

 

설치가 완료되면 기본적인 폴더가 C드라이브 루트로 설정된다. 이것을 그대로 사용해도 되는데 원하는 폴더로 바꿔주는 게 좋다.

나의 경우 D:\jupyter-notebook로 설정해 주었는데 설정방법이 다소 귀찮은 방법이다.

 

jupyter notebook --generate-config

 

위 명령어를 치게 되면 아래의 경로에 설정파일이 생성된다.

 

C:\Users\사용자\.jupyter\jupyter_notebook_config.py

 

이 파일을 메모장 또는 Notepad++로 열면 450줄 부근에 다음과 같은 문장이 있는데 앞에 #을 제거하고 저장한다.

# c.NotebookApp.notebook_dir = ''   →    c.NotebookApp.notebook_dir = ''

 

그런 다음 Jupyter Notebook의 바로가기 아이콘을 자세히 보기로 클릭하면 끝부분에 ""/USERPROFILE%/"" 이 있는데 이 부분을 본인이 원하는 폴더로 변경하면 된다.

 

그리고 Jupyter Notebook를 실행하면 본인이 설정한 폴더에서 시작하는 것을 실행해 보면 알 수 있다.

이후 입력되는 명령어들은 자동으로 저장되니 편리하다.

 

5. 학습된 모델 Convert 시도해 보기

사실, 이 부분이 잘 되는지 아직 알 수 없다. 왜냐면 현재 내 시스템에서 TensorFlow 문제로 안되었기 때문이다.

되면 다행인데 사무실이나 시스템을 갖춘 상태에서 다시 해봐야 한다.

 

앞의 학습된 모델 파일을 Jupyter Notebook의 폴더로 복사한다.

그런 다음 Jupyter Notebook에서 기본적인 컨버팅 명령어는 아래와 같다.

 

import os
os.system('python -m tf2onnx.convert --saved-model ./model.savedmodel --output model.onnx  --opset 10')

 

opset은 환경에 맞춰야 한다고 한다. 나 같은 경우 잘 몰라서 10~13까지 시도해 봤다.

 

앞서 모델 export 할 때 2가지가 있었는데, 

첫 번째는 keras.h5 파일로,

두 번째는 savedmodel로 나올 수 있다.

 

어느 것으로 해도 상관없을 것 같다. 다만 두 번째가 더 나을 것 같다.

 

컨버팅 명령과 관련된 참고 사이트는 아래와 같다. 참고해 보시기 바란다.

Christian Mills - How to Convert TensorFlow Models to ONNX with tf2onnx (christianjmills.com)

 

Christian Mills - How to Convert TensorFlow Models to ONNX with tf2onnx

This post covers how to use tf2onnx to convert a TensorFlow SavedModel to ONNX.

christianjmills.com

 

 

여기까지 시도한 상황이다.  다음 상황이 진행되면 다시 포스트 하겠다.

 

 

반응형

댓글