Hailo API를 이용한 커스텀 YOLOv8 모델을 Hailo에서 동작가능한 바이너리파일(
.hef
)로 컴파일 및 테스트
개요
- Hailo 컴파일 파이프라인에 따라 Hailo Model Zoo에서 제공하지 않는 Siamese Network 의 바닐라 모델을 커스텀 데이터로 학습하고, 수정된 Hailo API를 통해 양자화 및 컴파일함.
실행환경
Build PC
- CPU: Intel i7-1355U
- RAM: 16G
- OS: Ubuntu-22.04 LTS
- Target Hailo System: Hailo8
Hailo Version
- Hailo DFC: 3.27.0
- Hailo Model Zoo: 2.11.0
사전설치
- (Hailo) Hailo Dataflow Compiler 설치의 내용을 참고하여 설치.
- 혹은 (Hailo) 커스텀 U-Net 컴파일 방법 , (Hailo) 커스텀 YOLOv8 컴파일 방법 참고.
Dataflow Compiler (DFC)
- Dataflow Compiler v3.27.0 Install guid 를 따라 가상환경 생성 후 라이브러리 설치.
Hailo Model Zoo
- GitHub - hailo-ai/hailo_model_zoo: The Hailo Model Zoo includes pre-trained models and a full building and evaluation environment 데이터플로우 가상환경에서 설치.
준비물
0. Pretrained Model
- Siamese Network에서 동일한 두 베이스 CNN Network에서 출력되는 각 특징의 distance를 계산하고, 이를 이용해 베이스 CNN Network를 학습을 시킨다.
- Hailo 에서 제공하지 않는 모델의 경우, 네트워크의 입출력 처리를 직접구현해야 하며 이러한 번거로움을 줄이기 위해 Siamese Network에서 두 베이스 Network에서 출력되는 각 특징을 multiply 한 뒤, FC layer 와 Sigmoid 함수를 이용해 0-1 범위의 출력이 되도록 만들어 전체 네트워크를 구성하였다. (End-to-End Network로 만들기 위해)
- 해당 네트워크의 BCE(Binary Cross-Entropy) loss를 사용하여 학습한다.
1. ONNX
- 사전학습된 End-to-End Siamese 네트워크를 ONNX 표준으로 변환한
onnx
파일.
2. 스크립트 파일
- Hailo DFC 에서 양자화 및 컴파일에 사용되는
.alls
파일. (입력 레이어에 normalization 추가 등 Hailo에서 지원하는 전처리 및 후처리를 위한 네트워크 수정용도)
3. 데이터셋
- 양자화 가중치 calibration을 위한 학습에 사용한 데이터셋의 일부.
- Hailo에서 제공하는 random 이미지 데이터셋 사용하도록 설정 가능.
최적화 및 컴파일
- 네트워크 수정, 최적화 및 컴파일에 대한 상세 스크립트 및 코드는 생략함.
1. 파싱 (Parsing)
- 헤일로에서 이해하는 구문파일(
.har
)로 변환하는 과정. CKPT
및ONNX
포맷을 지원하며hailomz parse
또는hailo parser
명령어를 통해 실행함.- parsing에 실패하는 경우, 헤일로 DFC 에서 지원하지 않는 레이어 표준(또는 이름)을 사용한 것으로 네트워크 수정이 필요.
parse
# hailomz
$ hailomz parse --ckpt custom_siamese.onnx --yaml custom_siamese.yaml
# hailo
$ hailo parser onnx custom_siamese.onnx
2. 최적화 (Optimization)
- 파싱 과정을 통해 변환된
.har
파일을 파라미터 양자화하며 에러를 줄이는 과정. - 양자화 성능 보장을 위해 기존 모델의 훈련 시 사용한 일부 데이터셋이 필요.
.alls
파일 최적화 관련 함수들이 적용됨.
optimize
# hailomz
$ hailomz optimize --har custom_siamese.har --yaml custom_siamese.yaml
# hailo
$ hailo optimize custom_siamese.har --model-script custom_siamese.alls
3. 컴파일 (Compile)
- Optimize 완료된
.har
파일을 헤일로에서 실행가능한 바이너리파일인.hef
파일로 컴파일하는 과정. ONNX
파일을 입력으로, 파싱, 최적화, 컴파일 과정을 한꺼번에 실행도 가능..alls
파일 컴파일 관련 함수들이 적용됨.
compile
# hailomz
$ hailomz compile --har custom_siamese.har --yaml custom_siamese.yaml
# hailo
$ hailo compiler custom_siamese.har --model-script custom_siamese.alls
결과 및 실행
- 컴파일이 완료되면
.hef
파일과 함께 컴파일까지의 메타데이터를 저장한 모델.har
이 생성됨
결과 확인
profiler
- 컴파일된
.har
파일을 이용해 최종 네트워크 구조를 시각화함
hailo profiler custom_siamese_compiled.har