0. 서론
변환시킬 파일 : best_s.pt
yolov8s 모델로 학습을 시킨 파일이라 이를 구분하고자 파일 마지막에 _s를 붙였다.
1. PT → ONNX 변환
from ultralytics import YOLO
model = YOLO("./runs/detect/train/weights/best_s.pt")
model.export(format = "onnx")
ONNX 변환은 YOLO에서 export 기능을 지원하기 때문에 위와 같이 간단하게 변환시킬 수 있다.
사진처럼 ONNX 파일이 추출된 것을 확인할 수 있다.
2. ONNX → HEF 변환
대략적인 큰 그림을 그리자면
host에서 HEF 파일 변환을 하고, on device에서 hef파일 실행할 것이다.
내 프로젝트 같은 경우는 host가 내 로컬 pc, on device는 라즈베리파이5이다.
파일 변환을 하기 위해선 hailo사에서 제공하는 sw compiler 툴을 다운 받아야한다.
각 host와 on-device에 설치해야 하는 sw은 아래와 같다.
Host(Local PC) 링크 | On Device (Rasberrypi 5) | |
1 | Dataflow Compiler | PCIe Driver |
2 | HailoRT | HailoRT |
3 | Hailo Model Zoo | TAPPAS |
4 | TAPPAS |
On Device 부분은 이 글 참고해서 잘 설치하면 된다. 아마 문제없을거다
요약하자면 sudo apt install hailo-all 하면 저거 3개 다 알아서 설치해 준다.
참고로 이번 프로젝트에서 라즈베리파이에 설치된 hailoRT 버전은 4.20.0이다.
그러므로 이 글은 Host부분만 다룰 것이다.
2-1. WSL2 설치
host에 설치할 sw중 하나인 Dataflow Compiler(이하 DFC라 명칭)이 지원하는 환경이 다음과 같다.
시스템 사양(2025. 03. 02기준, v3.30.0버전)
- Ubuntu 20.04/22.04, 64-bit (supported also on Windows, under WSL2)
- 16+ GB RAM (32+ GB recommended)
- Python 3.8/3.9/3.10, including pip and virtualenv
- python3.X-dev and python3.X-distutils (according to the Python version), python3-tk, graphviz, and libgraphviz-dev packages. Use the command sudo apt-get install PACKAGE for installation.
- (Optional) Node.js (minimum version: v20.9.0) to start DFC Studio part of SDK package.
주목해야 할 부분은 1번이다. Window OS 지원을 안 한다.
짱구를 좀 굴려서 "엥? ㅋㅋ 그럼 라즈베리파이에서 설치하면 되는 거 아닌교?" 라고 생각을 했지만 지원하는 아키텍처가 x86 만 지원한다. 라즈베리파이는 arm.. 그리고 hef로 컴파일할 때 하루종일 걸릴 듯;
다행히도 hailo사에서 WSL2 환경에서의 Linux를 지원하므로 WSL2에 우분투 22.04를 설치하면 된다. 설치하는 방법은 알아서 구글링 ㄱㄱ
맥은 몰루? 전 윈도우11써가지고 ㅎ;
저는 22.04.5 버전 사용 중입니다.
sudo apt update && sudo apt upgrade -y 이건 다들 알잘딱 ㄱㄱ
2-2. Docker Container 설치
이제 리눅스 환경도 갖췄겠다. 이제 저 위에 4개 sw(DFC, HailoRT, Model Zoo, TAPPAS)만 설치하면 되는 거네? 드가자~ 하고 설치하면 패키지 충돌 난다.
더보기는 제가 대충 삽질한 내용이니 참고하실 분들은 참고하길 바란다. 알고 싶지 않았다.
1. DFC와 Model Zoo를 설치하는 데 있어 구성 패키지인 numpy에서 버전 충돌이 일어나는데 패키지를 업그레이드를 하던 다운그레이드를 하던 계속 충돌 난다. (관련자료)
2. 여자저차 hef파일로 변환은 성공했지만 host와 ondevice에서 hailoRT 버전이 달라 정작 hef파일을 on device에서 execute하질 못했다.
자잘한 삽질도 많았지만 메인 삽질은 저 두 문제였다. 혹시라도 이 글을 읽는 분들은 이러한 고생을 안 했으면 좋겠다.
Hailo사에서는 이런 불상사를 막기 위해 Hailo AI Software Suite라고 도커 컨테이너를 제공한다. 근데 x86만 지원한다. arm이나 amd 쓰는 사람들은 엄.. 아돈노
아무튼 이 도커 컨테이너를 사용하여 패키지 충돌을 방지하고 일관된 개발 환경에서 작업할 수 있다.
우선 도커를 설치해야 하는데 이건 알아서 구글링하고 설치하길 바란다. 저는 이거 참고했어요
docker --version
sudo usermod -aG docker jaewon
도커 사용자 추가.
jaewon부분에 본인 계정이름을 넣으면 된다.
Hailo AI Softer Suite docker를 다운로드한다.
저거 눌러서 다운받으면 된다. 파일 10기가 넘어 시간이 좀 걸린다. 밑에 있는 PCIe driver는 Hailo8와 통신하기 위한 드라이버인데 저건 hailo8과 물리적으로 연결된 경우만 설치가 필요하다.(== 이 말은 즉슨 라즈베리파이에서는 설치가 필요하다는 의미다. 근데 이미 설치했을거임 ㅇ)
이번 프로젝트 같은 경우는 host에서는 단순 hef 파일로 컴파일만 할 예정이기 때문에 딱히 필요 없다.
이제 다운로드한 hailo_ai_sw_suite_2025-01_docker파일을 리눅스 환경으로 옮겨주자.
나는 vscode로 작업 중이라 그냥 드래그해서 옮겼다. 옮기는데 시간 좀 걸리니 딴짓 좀 하고 오면 된다.
unzip hailo_ai_sw_suite_2025-01_docker.zip
이제 옮긴 zip파일을 압축해제한다. zip파일명과 일치해야 한다.
./hailo_ai_sw_suite_docker_run.sh
docker 컨테이너 접속.
./hailo_ai_sw_suite_docker_run.sh --help
을 통해 여러 명령어를 확인할 수 있다.
2-3. Docker Container " Hailo DFC, HailoRT 버전 확인
Hailo -h을 통해 버전을 확인할 수 있다. HailoRT 버전이 4.20.0으로 라즈베리파이 환경이랑 같은 버전이다.
2-4. Docker Container : best_s.onnx, host → container 전송
이제 전에 준비해 둔 best_s.onnx파일을 도커 컨테이너 내부로 옮겨줘야 한다.
일단 wsl2 환경에 onnx파일을 옮겨준다.
현재 컨테이너 내부에는 onnx파일이 없다.
다음 명령어를 통해 파일을 host에서 도커로 전송한다. 참고로 컨테이너 내부에서 실행하면 파일 못 찾으니 exit을 통해 컨테이너를 나간 뒤에 실행하자
docker cp /home/jaewon/best_s.onnx hailo_ai_sw_suite_2025-01_container:/local/workspace
잘 전송된 것을 확인할 수 있다.
2-5-1. Compile : ONNX → HAR 파일 변환
hailomz parse --hw-arch hailo8 --ckpt ./best_s.onnx yolov8s
다음 명령어로 ONNX파일을 HAR파일로 변환시킨다. best_s은 yolov8s모델로 학습시켰으므로 마지막에 yolov8s를 붙인다.
yolov8s.har이라는 파일이 생성된 것을 확인할 수 있다.
2-5-2. Compile : HAR파일 최적화(Optimize)
예전에 roboflow에서 다운로드하였던 train 폴더를 도커 컨테이너로 옮겨주자.
hailomz optimize --hw-arch hailo8 --har ./yolov8s.har yolov8s --calib-path ./train/images --classes 2
--calib-path는 har모델을 최적화할 때 필요한 보정 데이터 경로를 지정하는 데 사용된다.
양자화는 32비트(float) 크기인 모델을 8비트 정수형으로 변환해 주는 과정인데 이 과정에 보정 데이터가 필요하다.
경로는 train폴더 안에 있는 사진들로 했다. 보정데이터는 TFRecord파일 또는 JPG/PNG 이미지 폴더로 지정할 수 있음
--classes는 사용할 클래스 개수를 지정하는 건데 내 모델에서는 eyes와 pupils 총 두 개의 클래스만 있으니 2로 지정
쭉쭉쭉
2-5-3. Compile : HEF파일로 컴파일
hailomz compile yolov8s --hw-arch hailo8 --har ./yolov8s.har
이제 컴파일해주자.
2-6. HEF파일 확인
hailo parse-hef yolov8s.hef
2-7. Docker Container : best_s.onnx, container→ host 전송
docker cp hailo_ai_sw_suite_2025-01_container:/local/workspace/yolov8s.hef /home/jaewon/
경로 지정 알아서 잘해주고 컨테이너 외부에서 실행하면 된다.
이로써 pt파일을 hef파일로 변환(컴파일)하는 방법을 알아보았다.
이제 해당 hef파일을 라즈베리파이5에서 돌려보자
'2025(학부 3학년) > [project]미숙련자를 위한 운전 피드백 디바이스' 카테고리의 다른 글
현재 겪고 있는 문제와 해결 방안 (0) | 2025.03.16 |
---|---|
[Hailo8] 라즈베리파이에서 HEF파일 실행시켜보기 (0) | 2025.03.16 |
[Hailo8] Dataflow Compiler (0) | 2025.03.02 |
[Hailo8] 기본 세팅 (0) | 2025.02.27 |
[라즈베리파이5, Hailo8] 구매 및 조립 (0) | 2025.02.27 |