일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- mysql
- C#
- FCM
- curl
- not working
- Android
- soundpool
- 자동 생성
- Mail Server
- xe
- PHP
- 우분투
- WebView
- 자바스크립트
- dovecot
- javascript
- php 취약점
- 폼메일
- 안드로이드
- android 효과음
- html5
- 안드로이드 gcm
- UML
- roundcube
- php 시큐어코딩
- chart.js
- C# IO
- 안드로이드 푸시
- 설치
- 안드로이드 푸쉬
- Today
- Total
그러냐
How to convert pt to tflite (yolov5 to tensorflow lite) tflite로 변환 본문
업데이트:
이걸로 해결
github.com/zldrobit/yolov5/blob/tf-android/models/tf.py
$ python models/tf.py --weights weights/best.pt --cfg models/yolov5s.yaml --img-size 320
yolov5로 학습된 모델을 1차적으로 Android에서 사용하고자 한다.
그럴러면 최종적으로 .pt 파일을 .tflite로 변환해야한다.
그게 한번에 되냐?
아쉽게도 pt -> onnx -> pb -> tflite 순으로 변환해야한다.
명령어 하나로 되었다면 얼마나 좋았을까..
그래서 그 과정에서 꽤 많은 삽질을 하게 되었다.
잠깐 언급하자면 tensorflow 버전과 onnx 버전의 호환성..
버전업되면서 바뀐것도 많고 알 수 없는 에러 또한 많다.
이 분야에선 너무 흔한 특징이라,
이 글에선 삽질 과정은 간단하게만 언급하겠다.
- Win10에서 python 특정 모듈의 버전을 찾을 수 없다고 해서 conda에 python3.6을 설치하려니 설치가 안되었다,
- 그래서 MacOS(카탈레나)에서 yolov5를 받아 export하려니 'google::protobuf' 관련 이유로 에러가 발생.
- 그래서 Ubuntu에서 yolov5를 받아 모듈을 설치하려니 torch 설치 실패..
그래서 최종적으로 google colab에서 작업하기로 결정!
tensorflow 2.4.0과
pip를 이용해 설치되는 모듈의 최신버전 onnx 1.6.0 onnx-tf 1.7.0으로 작업을 시작하니
pt -> onnx는 정상적으로 잘 변환 되었다.
그런데 onnx -> pb부분이 onnx-tf 버전에 따라 나오는 아웃풋 파일 양식이 달랐다.
onnx-tf 1.7.0의 경우 디렉토리가 생성되며 그 안에 saved_mode.pb가 만들어지며,
onnx-tf 1.6.0에선 지정된이름.pb 파일이 생성된다.
그에 따라 문제가 발생되거나 pb -> tflite를 위한 명령이나 코드가 달라진다.
아무튼 1.6.0이나 1.7.0이나 둘다 변환이 되질 않았다.
이걸로 정말 온갖 방법을 다 찾아보면서 시도했지만, 잘 해결되지 않았다.
onnx -> pb 부분에서 파일이 잘 만들어지긴 했는데 속이 이상해서 pb -> tflite가 안되는걸까? 등
변환 과정이 많아 의심되는 부분이 한두개가 아니었다.
결론은,
tensorflow (2.4.0 -> 2.3.0) -> 1.15.0
onnx (1.7.0 <-> 1.6.0) -> 1.8.0
onnx-tf (1.7.0 <-> 1.6.0) -> 1.8.0
torch 1.7.0
을 세팅으로 변환에 성공했다.
onnx-tensorflow : github.com/onnx/onnx-tensorflow/tree/tf-1.x
그러고보니 onnx>=1.8.0이 떡하니 적혀있다. 왜 첨엔 안됐을까.. tensorflow 2.4였어서 그런가?? (이젠 다시 확인 귀찮..)
yolov5/requirements.txt
최종 파일 구조
최종 변환된 best.tflite 파일 확인 (netron.app/)
model properities
model architecture
참 과정과 다르게 결과 코드는 간단하다...
...
먼저 yolov5로 학습된 best.pt 파일을 준비한다.
yolov5에서는 기본적으로 onnx로 변환하는 코드를 제공한다. (개꿀~)
# pt to onnx
$ python /content/yolov5/export.py --weights best.pt --img 640 --batch 1
onnx-tf를 이용해 pb파일을 만든다.
# onnx to pb
import onnx
from onnx_tf.backend import prepare
onnx_model = onnx.load("/content/best.onnx") # load onnx model
tf_rep = prepare(onnx_model) # prepare tf representation
tf_rep.export_graph("/content/output/best.pb") # export the model
tf.lite를 이용해 .tflite 파일로 변환한다.
# pb to tflite
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
graph_def_file = "/content/output/best.pb"
input_arrays = ["images"]
output_arrays = ["output"]
tflite_file = "/content/output/best.tflite"
converter = tf.lite.TFLiteConverter.from_frozen_graph(graph_def_file, input_arrays, output_arrays)
tflite_model = converter.convert()
open(tflite_file, "wb").write(tflite_model)
끝!
'AI' 카테고리의 다른 글
(미완)yolo v7 로컬에서 학습 데이터 만들기 (2) (yolov7 네트워크 설정 및 훈련) (0) | 2023.08.21 |
---|---|
yolo v7 로컬에서 학습 데이터 만들기 (1) (환경설정, 이미지데이터 다운 후 라벨링 하기) (0) | 2023.08.21 |