Hailo API를 이용한 커스텀 YOLOv8 모델을 Hailo에서 동작가능한 바이너리파일(.hef)로 컴파일 및 테스트

개요


실행환경

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

사전설치

Dataflow Compiler (DFC)

Hailo Model Zoo


준비물

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)로 변환하는 과정.
  • CKPTONNX 포맷을 지원하며 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

모델 확인

+full