Ultralytics YOLO 모델용 Hailo 내보내기#
Hailo AI 가속기는 Raspberry Pi AI HAT+ 및 AI HAT+ 2와 같은 엣지 디바이스에서 컴파일된 Hailo 실행 파일 형식(HEF) 모델을 실행합니다. Ultralytics는 Hailo 데이터플로 컴파일러(DFC)를 사용하여 YOLO 탐지, 분할, 시맨틱 분할, 깊이 추정, 분류, 포즈 및 OBB 모델을 HEF로 직접 내보냅니다.
Hailo 배포는 클라우드로 모든 프레임을 전송하지 않고 로컬에서 객체를 감지해야 하는 카메라, 로봇, 산업 시스템, 게이트웨이 및 기타 디바이스를 위한 엣지 컴퓨터 비전으로 설계되었습니다. 컴파일된 HEF에는 선택한 가속기에 필요한 양자화된 네트워크, 하드웨어 할당, 스케줄링 및 선택적 HailoRT 후처리가 포함됩니다.
Ultralytics YOLO를 Hailo에 배포하는 이유#
Ultralytics YOLO와 Hailo 신경망 처리 장치(NPU)를 결합하면 모델 학습에서 엣지 AI 추론까지 실용적으로 구현할 수 있습니다. 일반적인 사용 사례는 다음과 같습니다.
- 스마트 카메라 및 비디오 분석: 보안, 소매, 교통 및 점유 감지 애플리케이션을 위해 카메라 근처에서 실시간 객체 감지를 실행합니다.
- 로보틱스 및 자율 시스템: 지속적인 클라우드 연결에 의존하지 않고 사람, 차량, 소포, 도구 또는 장애물을 감지합니다.
- 산업용 컴퓨터 비전: 검사, 계수, 안전 모니터링 및 품질 관리를 위해 맞춤형 YOLO 모델을 배포합니다.
- Raspberry Pi AI 프로젝트: AI HAT+ 또는 AI HAT+ 2를 사용하여 Raspberry Pi 시스템에 가속 비전 추론 기능을 추가합니다.
- 엣지 게이트웨이 및 AI PC: 대역폭과 클라우드 컴퓨팅 요구 사항을 줄이면서 여러 비디오 또는 센서 스트림을 로컬에서 처리합니다.
이미지가 배포 디바이스에 남아 있으므로 로컬 추론은 개인정보 보호와 응답 시간을 개선할 수 있습니다. 실제 처리량, 지연 시간 및 전력 사용량은 YOLO 모델 크기, 입력 해상도, Hailo 아키텍처, 호스트 시스템 및 애플리케이션 파이프라인에 따라 달라집니다.
Hailo 내보내기 작동 방식#
Ultralytics는 format="hailo"의 전체 내보내기 워크플로를 관리합니다.
YOLO (.pt) -> ONNX -> Hailo parse -> INT8 optimization -> HEF compile내보내기는 다음 단계를 자동으로 수행합니다.
- 컴파일러와 호환되는 설정으로 정적 ONNX 그래프를 내보냅니다.
- 모델 아키텍처에 맞는 헤드 출력을 선택합니다.
- 정규화, 활성화 및 후처리 지시문을 생성합니다.
- 대표 보정 스트림을 구성하고 모델을 INT8로 양자화합니다.
- 선택한 Hailo 가속기에 맞게 최적화된 그래프를 컴파일합니다.
- Ultralytics 메타데이터와 함께 HEF를 저장하고 중간 ONNX 파일을 제거합니다.
YOLOv8 및 YOLO11 감지 모델은 컴파일된 파이프라인에서 HailoRT YOLO NMS를 사용합니다. YOLO26은 원시 감지 헤드 텐서를 컴파일합니다. Ultralytics는 기본 one-to-many 출력을 대상으로 NMS를 적용하거나 nms=False을 사용하여 NMS가 필요 없는 one-to-one 출력을 디코딩합니다. YOLOv8/YOLO11 분할, 포즈 및 OBB는 원시 헤드 텐서를 컴파일하며, Ultralytics가 추론 중에 이를 디코딩합니다. YOLOv8/YOLO11/YOLO26 분류는 칩에서 softmax를 실행하므로 HEF가 클래스 확률을 직접 반환합니다. YOLO26 시맨틱 분할의 경우 내보내기는 가속기에 맞춰 처리합니다. Hailo-8/8L(DFC v3.x)은 호스트에서 업샘플링 및 축소할 분류기 로짓을 반환하는 반면, Hailo-10H/15(DFC v5.x)는 멀티클래스 ArgMax 헤드를 칩에서 컴파일하여 압축된 클래스 맵을 반환합니다. 단일 클래스 헤드는 ArgMax 대신 임계값이 필요하므로 모든 대상에서 호스트 로짓 경로를 사용합니다. YOLO26 깊이 모델은 a16에서 조밀한 로짓 컨브를 컴파일하고, 헤드 뒤에 이어지는 clamp/exp 및 학습된 log-affine 보정 처리를 포함해 호스트에서 미터법 깊이 맵을 재구성하므로 양자화기는 원시 로짓에 가장 넓은 범위를 유지합니다. 사용자는 ONNX 끝 노드를 찾거나 Hailo 모델 스크립트(.alls)를 작성하거나 NMS JSON을 직접 만들 필요가 없습니다.
설치#
Ultralytics를 설치하고 Hailo Developer Zone에서 대상 하드웨어용 DFC 휠을 다운로드합니다(무료 등록 필요).
pip install ultralytics
pip install /path/to/hailo_dataflow_compiler-*.whlHailo 컴파일에는 Linux x86_64가 필요합니다. 지원되는 워크스테이션에서 모델을 컴파일한 다음 출력 디렉터리를 대상 디바이스에 복사합니다. 추론에는 DFC가 필요하지 않습니다.
Hailo-8 및 Hailo-8L은 DFC v3.x를 사용합니다. Hailo-10H 및 Hailo-15는 DFC v5.x를 사용합니다. 대상 가속기에 맞는 컴파일러 세대를 설치합니다.
Ultralytics Platform은 관리형 Hailo 내보내기를 제공하므로 로컬 Hailo 계정이나 DFC 설치가 필요하지 않습니다.
Hailo HEF 모델 내보내기#
format="hailo"을 사용하고 name로 대상 가속기를 선택합니다.
from ultralytics import YOLO
model = YOLO("yolo11n.pt")
output = model.export(format="hailo", name="hailo8")
print(output) # yolo11n_hailo_model/이에 해당하는 CLI 명령은 다음과 같습니다.
yolo export model=yolo11n.pt format=hailo name=hailo8Hailo 내보내기는 INT8만 지원합니다. data을 지정하지 않으면 Ultralytics가 작업별 보정 데이터셋을 자동으로 다운로드합니다. 맞춤형 모델에는 대표 학습 이미지 또는 검증 이미지를 사용합니다.
Ultralytics는 DFC 최적화 수준을 2로 고정하고 실제 보정 데이터셋 크기에 맞춰 미세 조정을 구성합니다. Hailo는 다양성을 갖춘 이미지 1,024장 이상을 권장합니다. 기본 제공되는 경량 데이터셋은 수준 2에서 컴파일되지만 프로덕션 도메인을 대표하지 않을 수 있습니다. 프로덕션용 HEF를 내보낼 때는 data="path/to/dataset.yaml"을 사용하여 대표 데이터셋을 전달합니다.
model.export(format="hailo", name="hailo8", data="path/to/dataset.yaml")컴파일에는 입력 형태가 고정되어 사용됩니다. 디바이스에서 사용할 해상도로 imgsz을 설정합니다.
model.export(format="hailo", name="hailo8", imgsz=640)지원 모델 및 하드웨어#
Hailo 생태계는 다양한 컴퓨터 비전 워크로드를 지원하지만, Ultralytics format="hailo" 내보내기는 현재 표준 YOLO 감지, 분할, 시맨틱 분할, 깊이 추정, 분류, 포즈 및 OBB 헤드를 검증합니다. 작업 표에는 사용 가능한 내보내기 경로가 설명되어 있으며, 하드웨어 검증 정보는 아래에 별도로 나와 있습니다.
| Ultralytics 작업 | Hailo 직접 내보내기 | 지원되는 모델 계열 | 참고 |
|---|---|---|---|
| 객체 탐지 | ✅ | YOLOv8, YOLO11, YOLO26 | 맞춤형 모델을 포함한 표준 Ultralytics Detect 헤드 |
| 인스턴스 분할 | ✅ | YOLOv8, YOLO11 | 원시 헤드 텐서는 추론 중 Ultralytics가 디코딩합니다. YOLO26-seg는 현재 지원되지 않습니다. |
| 시맨틱 분할 | ✅ | YOLO26 | Hailo-8/8L 및 단일 클래스 헤드는 로짓을 반환하고, Hailo-10H/15는 멀티클래스 맵을 내장합니다. |
| 깊이 추정 | ✅ | YOLO26 | 조밀한 로짓은 a16에서 컴파일되며, Ultralytics는 추론 시 미터법 깊이 맵을 재구성합니다. |
| 이미지 분류 | ✅ | YOLOv8, YOLO11, YOLO26 | 칩에서 softmax를 실행하며 HEF가 클래스 확률을 직접 반환합니다. |
| 포즈 추정 | ✅ | YOLOv8, YOLO11 | 원시 헤드 텐서는 추론 중 Ultralytics가 디코딩합니다. YOLO26-pose는 현재 지원되지 않습니다. |
| 방향성 객체 감지 | ✅ | YOLOv8, YOLO11 | 원시 헤드 텐서는 추론 중 Ultralytics가 디코딩합니다. YOLO26-OBB는 현재 지원되지 않습니다. |
YOLOv10, YOLO-World, YOLOE, RT-DETR과 같은 특수 감지 모델 계열은 현재 Ultralytics format="hailo" 경로를 통해 ❌ 지원되지 않습니다. Ultralytics는 검증되지 않은 HEF를 생성하는 대신 컴파일 전에 이러한 작업 및 모델 계열을 거부합니다.
| 모델 계열 | Hailo-8 / Hailo-8L | Hailo-10H / Hailo-15 | 출력 |
|---|---|---|---|
| YOLOv8 / YOLO11 감지 | ✅ | ✅ | HailoRT YOLO NMS가 포함된 HEF |
| YOLO26 감지 | ✅ | ✅ | 원시 감지 텐서. 기본적으로 호스트에서 NMS를 수행하며, nms=False을 사용하면 NMS가 필요 없습니다. |
| YOLOv8-seg / YOLO11-seg | ✅ | ✅ | 원시 분할 텐서. 추론 중 Ultralytics가 디코딩합니다. |
| YOLOv8-pose / YOLO11-pose | Hailo-8L 검증 완료 | 검증되지 않음 | 원시 포즈 텐서. 추론 중 Ultralytics가 디코딩합니다. |
| YOLOv8-obb / YOLO11-obb | Hailo-8L 검증 완료 | 검증되지 않음 | 원시 OBB 텐서. 추론 중 Ultralytics가 디코딩합니다. |
| YOLOv8-cls / YOLO11-cls / YOLO26-cls | Hailo-8L 검증 완료 | 검증되지 않음 | 칩 내 softmax. HEF가 클래스 확률을 반환합니다. |
| YOLO26-sem | Hailo-8L 검증 완료 | 검증되지 않음 | 로짓 또는 Hailo-10H/15의 내장 멀티클래스 맵 |
| YOLO26-depth | Hailo-8L 검증 완료 | 검증되지 않음 | 조밀한 로짓. Ultralytics가 미터법 깊이 맵을 디코딩합니다. |
포즈, OBB, 분류, YOLO26 시맨틱 분할 및 YOLO26 깊이 추정(Hailo-8/8L 경로)은 HailoRT 4.23 및 DFC 3.33을 사용하는 Hailo-8L에서 검증되었습니다. 내보내기는 그 밖에 나열된 대상도 허용하지만, 새 작업 경로는 프로덕션에서 사용하기 전에 해당 컴파일러 및 디바이스에서 검증해야 합니다.
다음 name 값 중 하나를 선택합니다.
name | 대상 가속기 |
|---|---|
hailo8 | Hailo-8 |
hailo8l | Hailo-8L |
hailo10h | Hailo-10H |
hailo15h | Hailo-15H |
hailo15l | Hailo-15L |
name을 생략하면 hailo8l이 기본값으로 사용됩니다. 배포할 가속기로 name를 설정합니다. 선택한 대상에 맞는 DFC 세대를 설치합니다.
Hailo 하드웨어 및 SDK 세대#
Hailo 가속기 계열마다 서로 다른 컴파일러 세대를 사용합니다. 생성된 HEF는 대상 하드웨어와 일치해야 하므로 내보내기를 수행하는 머신이 아니라 추론을 실행할 디바이스에 맞는 name을 선택합니다.
| 하드웨어 계열 | DFC 세대 |
|---|---|
| Hailo-8 / Hailo-8L | DFC v3.x |
| Hailo-10H | DFC v5.x |
| Hailo-15H / Hailo-15L | DFC v5.x |
컴파일러는 Linux x86_64에서 실행되며, 결과 HEF는 HailoRT를 통해 Hailo 디바이스에서 실행됩니다. 이처럼 분리되어 있으므로 워크스테이션이나 Ultralytics Platform에서 컴파일한 후 작은 런타임 아티팩트를 ARM 또는 x86 엣지 호스트에 배포할 수 있습니다.
호환성 참고 사항#
Hailo 컴파일은 하드웨어별로 다르며 고정된 입력 형태를 사용합니다. 다음 제약 사항에 유의하세요.
- 선택한
name은 배포 대상 가속기와 일치해야 합니다. - 보정 이미지는 프로덕션에서 예상되는 조명, 시점, 객체 및 배경을 대표해야 합니다.
- 각 HEF는 고정된
imgsz에 맞춰 컴파일됩니다. 여러 해상도를 제공하려면 호스트에서 프레임 크기를 컴파일된 크기로 조정하거나 해상도별로 별도의 HEF를 컴파일합니다. - Ultralytics가 모델 메타데이터에서 후처리 구성을 생성하므로 맞춤형 클래스 수를 지원합니다.
- 표준 Ultralytics
Detect헤드를 사용하는 감지 모델, YOLOv8/YOLO11 분할·포즈·OBB 모델, YOLOv8/YOLO11/YOLO26 분류 모델, YOLO26 시맨틱 분할 및 깊이 추정 모델을 지원합니다. YOLO26 인스턴스 분할, 포즈 및 방향성 바운딩 박스와 YOLO-World, YOLOE, YOLOv10 및 RT-DETR 내보내기는 현재 지원되지 않습니다. - Hailo-8/8L 및 Hailo-10H/15 아티팩트는 서로 다른 DFC 세대에서 컴파일되므로 서로 호환되지 않습니다.
보정 및 INT8 양자화#
Hailo HEF 내보내기는 INT8 양자화를 사용하여 YOLO 네트워크를 가속기에 효율적으로 매핑합니다. 보정 데이터셋은 활성화 범위를 추정하며, 컴파일 중 모델을 다시 학습하거나 레이블을 사용할 필요는 없습니다.
Hailo 하드웨어와 Dataflow Compiler는 INT4, INT8, INT16 정밀도를 지원합니다. Ultralytics의 format="hailo" 경로는 INT8로 컴파일하며, 더 넓은 범위가 필요한 작업에는 16비트 활성화(a16)를 적용합니다.
data을 생략하면 Ultralytics는 탐지용 COCO128, 시맨틱 세그멘테이션용 cityscapes8, 깊이 추정용 depth8과 같이 작업별 경량 보정 데이터셋을 사용합니다. 조밀한 깊이 헤드는 보정 도메인에 특히 민감합니다. 관련 없는 탐지 이미지로 깊이 모델을 보정하면 예측 맵이 평탄해지고, 도메인에 더 잘 맞는 대규모 데이터셋을 사용하면 충실도가 향상됩니다. 사용자 지정 컴퓨터 비전 모델의 경우, 실제 배포 도메인을 대표하는 이미지를 컴파일러가 참조할 수 있도록 data을 해당 데이터셋 YAML로 지정합니다:
model.export(format="hailo", name="hailo8", data="my_dataset.yaml")fraction은 보정에 사용할 비율 또는 이미지 수를 선택합니다. [train, val, test] 목록은 각 분할의 제한을 지정하며, 항목이 두 개인 목록은 test를 전체로 유지하고 0은 테스트를 건너뜁니다. 이미지 수를 늘리는 것은 배포 도메인을 대표하는 경우에만 도움이 됩니다. 도메인 외 이미지는 양자화 정확도를 낮추고 최적화 시간을 늘릴 수 있습니다. INT8 HEF의 정확도가 원본 PyTorch 모델보다 낮다면, 먼저 모델이나 런타임 설정을 변경하기 전에 보정 데이터를 개선합니다.
모델 계열별 정확도 기대치#
도메인 내 보정(COCO128, 128개 이미지)을 사용해 Hailo-8L에서 측정한 결과, INT8 HEF 내보내기는 동일한 평가 프로토콜에서 PyTorch mAP50의 다음 비율을 유지합니다:
| 모델 | 유지율(mAP50) | 참고 |
|---|---|---|
| YOLOv8n | ~100% | 온칩 NMS를 사용하는 DFL 헤드 |
| YOLO11n | ~96% | 백본의 어텐션 블록은 INT8에 더 민감합니다 |
| YOLO26n | ~93% | 엔드투엔드 헤드와 어텐션을 사용합니다. 신뢰도 관련 참고 사항을 확인하세요. |
유지율은 두 모델을 동일한 신뢰도 임계값에서 비교합니다. YOLOv8 및 YOLO11 HEF는 내보내기 시점의 conf(기본값 0.25)을 온칩 NMS에 적용하므로, 기본 낮은 임계값을 사용하는 PyTorch 기준 모델과 비교해 검증하면 정밀도-재현율 곡선의 더 넓은 부분을 통합하여 양자화 격차를 실제보다 크게 평가하게 됩니다.
탐지 외에도 세그멘테이션, 포즈, OBB, 분류 내보내기 경로를 동일한 Hailo-8L(DFC 3.33, HailoRT 4.23)에서 검증했습니다. 각 INT8 HEF를 동일한 검증 분할의 PyTorch 체크포인트와 비교했으며, 도메인 내 보정을 사용했습니다:
| 작업 | 지표(검증 분할) | YOLOv8n | YOLO11n |
|---|---|---|---|
| 인스턴스 분할 | 마스크 mAP50 유지율(COCO128-seg) | 98.0% | 93.6% |
| 포즈 | 박스 mAP50 유지율(COCO8-pose) | 98.1% | 90.8% |
| 방향 지정 바운딩 박스 | mAP50 유지율(DOTA128) | ~100% | 96.9% |
| 분류 | top-1 유지율(ImageNet val) | 92.6% | 95.4% |
세그멘테이션, 포즈, OBB는 각 작업의 기본 도메인 내 데이터셋(COCO128-seg, COCO8-pose, DOTA128)으로 보정했고, 분류는 ImageNet100으로 보정했습니다. 이러한 기본값에는 두 가지 주의 사항이 있습니다. COCO8-pose는 이미지가 8개뿐이므로 포즈 결과는 참고용으로만 보아야 하며, 프로덕션에서는 더 큰 data=을 전달해야 합니다. 또한 DOTA8에서는 두 모델 모두 mAP50이 거의 100%에 도달하므로 OBB 평가는 DOTA128을 사용합니다. 분류는 YOLO11이 YOLOv8보다 높은 유지율을 보이는 유일한 작업입니다. 다른 작업에서는 YOLO11의 어텐션 백본이 INT8에 더 민감합니다.
디바이스 측정 결과에 따른 실용적인 규칙은 다음 세 가지입니다:
- 항상 도메인 내 데이터로 보정합니다. 도메인 외 이미지로 미세 조정하는 것은 미세 조정을 완전히 비활성화하는 것과 같습니다. 도메인 외 이미지 1,238개로 보정한 YOLO26n은 미세 조정 없이 컴파일한 모델과 동일한 정확도(85.7%)를 유지합니다. 도메인 내 소규모 데이터셋이 도메인 외 대규모 데이터셋보다 낫습니다.
- YOLO26 배포에서는
conf을 약 0.05 낮춥니다. 양자화는 YOLO26 점수를 평균 약 0.05 낮추므로, PyTorch에서 조정한 임계값을 사용하면 HEF에서 유효한 탐지가 누락됩니다. 디바이스에서conf=0.20을 사용하면conf=0.25의 PyTorch 탐지 개수와 일치하며, 임계값을 조금 더 낮추면(약conf=0.15) 낮은 신뢰도의 탐지가 더 많이 발생하는 대신 남은 mAP50 격차를 사실상 모두 회복합니다. 양자화는 탐지 결과의 순위도 약 20% 재정렬합니다. 이는 어떤 임계값으로도 되돌릴 수 없는 순서 변경이지만, 낮은 임계값으로 mAP50을 회복하는 데 방해가 되지는 않습니다. - Hailo-8/8L(DFC 3.33)에서는 어텐션 페널티가 구조적으로 발생합니다. 어텐션 블록은 컴파일러가 제공하는 모든 모드에서 INT8 활성화 입력을 유지하는
matmul연산으로 컴파일됩니다. 이 그래프에서는 16비트 출력 모드의 할당이 실패하며, 주변 레이어의 정밀도를 높여도 도움이 되지 않습니다. matmul이 입력을 다시 INT8로 양자화하기 때문입니다(깊이별 및 출력 합성곱을 16비트로 보호해도 테스트에서 mAP는 변하지 않았습니다). 정확도가 우선이고 모델을 서로 대체할 수 있다면, 현재 이 환경에서는 YOLO11이 YOLO26보다 양자화 성능이 좋습니다. 최신 Hailo 세대(DFC 5.x)는 혼합 정밀도 옵션을 더 많이 제공하므로 결과가 다를 수 있습니다.
내보낸 아티팩트#
내보내기를 실행하면 배포 가능한 HEF와 Ultralytics 메타데이터가 포함된 디렉터리가 생성됩니다:
yolo11n_hailo_model/
├── yolo11n.hef
├── metadata.yaml
└── nms_config.json*.hef은 HailoRT가 로드하는 컴파일된 모델입니다.metadata.yaml은 모델 이름, 작업, 입력 크기, 스트라이드, Hailo 대상 정보를 보존합니다.nms_config.json은 YOLOv8 및 YOLO11 탐지 모델용으로 생성된 HailoRT NMS 구성을 기록합니다. YOLO26 탐지와 탐지 이외의 모든 작업(세그멘테이션, 시맨틱 세그멘테이션, 깊이, 분류, 포즈, OBB)은 이 파일을 사용하지 않습니다.
컴파일 후 중간 ONNX 그래프는 제거됩니다.
Hailo 하드웨어에서 추론 실행#
대상 디바이스에 HailoRT를 설치합니다. Raspberry Pi AI HAT+ 및 AI HAT+ 2 사용자는 Raspberry Pi AI 소프트웨어 가이드를 참고할 수 있습니다. Raspberry Pi OS에서는 두 패키지 세트를 함께 설치할 수 없으므로, 하드웨어에 맞는 블록만 실행한 다음 재부팅합니다.
AI HAT+(Hailo-8 / Hailo-8L)의 경우:
sudo apt install dkms
sudo apt install hailo-all
sudo rebootAI HAT+ 2(Hailo-10H, Raspberry Pi OS Trixie 이상)의 경우:
sudo apt install dkms
sudo apt install hailo-h10-all
sudo reboot재부팅한 후 가속기가 감지되는지 확인합니다:
hailortcli fw-control identifyhailo-all 및 hailo-h10-all 패키지는 Raspberry Pi OS에서만 HailoRT를 설치합니다. 다른 호스트에서는 DFC와 동일한 출처인 Hailo Developer Zone에서 HailoRT 패키지를 다운로드해 설치합니다.
metadata.yaml이 HEF 옆에 유지되도록 내보내기 디렉터리 전체를 디바이스에 복사합니다. Ultralytics는 HailoRT를 사용해 내보낸 디렉터리에서 predict 및 val를 직접 실행합니다:
from ultralytics import YOLO
model = YOLO("yolo11n_hailo_model")
results = model.predict("path/to/image.jpg")탐지 모델의 경우 백엔드는 YOLOv8/YOLO11 HailoRT NMS 출력을 변환하고 YOLO26 헤드를 자동으로 디코딩합니다. 기본 일대다 출력은 predictor의 NMS를 거칩니다. 세그멘테이션, 포즈, OBB의 원시 텐서를 디코딩하고, 온칩 분류 확률을 반환하며, Hailo-8/8L에서는 호스트 측 축소 연산으로 시맨틱 클래스 맵을 생성합니다. 또한 다중 클래스 Hailo-10H/15 헤드에서는 온칩 ArgMax를 사용하고, 모든 단일 클래스 헤드에서도 시맨틱 클래스 맵을 생성합니다. 애플리케이션별 파이프라인에는 TAPPAS, GStreamer, Raspberry Pi picamera2.devices.Hailo 헬퍼도 계속 사용할 수 있습니다.
GStreamer 배포의 경우 HEF를 hailonet에 전달합니다:
gst-launch-1.0 filesrc location=video.mp4 ! decodebin ! videoconvert ! \
hailonet hef-path=yolo11n_hailo_model/yolo11n.hef ! \
hailofilter function-name=yolov8 ! hailooverlay ! autovideosinkHailo 배포 옵션#
HEF는 여러 Hailo 런타임 인터페이스에서 동일하게 사용할 수 있는 배포 모델 아티팩트입니다. 애플리케이션에 적합한 인터페이스를 선택합니다:
| 런타임 옵션 | 적합한 용도 |
|---|---|
| HailoRT Python 또는 C/C++ API | 사용자 지정 애플리케이션 및 추론 직접 제어 |
Raspberry Pi picamera2.devices.Hailo | Raspberry Pi의 Camera Module 프로젝트 |
| GStreamer 및 Hailo 애플리케이션 | 실시간 비디오 스트림 및 다단계 파이프라인 |
hailortcli | 디바이스 점검, HEF 검사, 벤치마킹 |
애플리케이션에서 Ultralytics 클래스 이름, 입력 크기, 스트라이드 또는 기타 모델 정보가 필요하다면 metadata.yaml을 HEF와 함께 보관합니다. HEF 자체는 카메라 캡처, 시각화, 추적, 알림, 저장을 위한 애플리케이션 수준 로직을 대체하지 않습니다.
Hailo 디바이스 및 HEF 확인#
카메라 또는 비디오 파이프라인을 통합하기 전에 런타임과 가속기를 각각 검증합니다:
hailortcli fw-control identify
hailortcli parse-hef yolo11n_hailo_model/yolo11n.hef디바이스만 사용하는 성능 측정은 비디오 디코딩, 이미지 크기 조정, 그리기, 애플리케이션 I/O와 Hailo 추론을 분리합니다. 엔드투엔드 지연 시간이나 초당 프레임 수를 추정할 때는 전체 애플리케이션을 별도로 측정합니다.
벤치마크#
Ultralytics 팀은 YOLO26 모델을 벤치마크하여 PyTorch와 Hailo 간 속도와 정확도를 비교했습니다.
| 모델 | 형식 | 상태 | 크기(MB) | metrics/mAP50-95(B) | 추론 시간(ms/이미지) |
|---|---|---|---|---|---|
| YOLO26n | PyTorch | ✅ | 5.3 | 0.477 | 364.6 |
| YOLO26n | Hailo | ✅ | 7.3 | 0.455 | 21.7 |
| 모델 | 형식 | 상태 | 크기(MB) | metrics/mIoU | 추론 시간(ms/이미지) |
|---|---|---|---|---|---|
| YOLO26n-sem | PyTorch | ✅ | 3.3 | 0.611 | 831.2 |
| YOLO26n-sem | Hailo | ✅ | 6.2 | 0.611 | 34.8 |
| 모델 | 형식 | 상태 | 크기(MB) | metrics/delta1 | metrics/abs_rel | metrics/rmse | 추론 시간(ms/이미지) |
|---|---|---|---|---|---|---|---|
| YOLO26n-depth | PyTorch | ✅ | 12.4 | 0.8535 | 0.0983 | 0.2047 | 2133.4 |
| YOLO26n-depth | Hailo | ✅ | 9.9 | 0.8241 | 0.1232 | 0.2554 | 29.6 |
| 모델 | 형식 | 상태 | 크기(MB) | 정확도(top1) | 정확도(top5) | 추론 시간(ms/이미지) |
|---|---|---|---|---|---|---|
| YOLO26n-cls | PyTorch | ✅ | 5.5 | 0.431 | 0.716 | 33.8 |
| YOLO26n-cls | Hailo | ✅ | 3.5 | 0.441 | 0.716 | 2.0 |
위 벤치마크의 검증에는 객체 감지에 COCO128, 시맨틱 세그멘테이션에 Cityscapes8, 깊이 추정에 Depth8, 분류에 ImageNet100을 사용했습니다. Cityscapes8과 Depth8에는 각각 검증 이미지가 4개뿐이므로, 해당 시맨틱 세그멘테이션 및 깊이 정확도 값은 정확도 유지 측정치가 아닌 스모크 테스트 결과로 간주해야 합니다. 정확도에 대한 결론을 내리기 전에 Cityscapes 또는 NYU Depth V2와 같은 전체 데이터셋으로 검증하세요. 추론 시간에는 전처리 및 후처리가 포함되지 않습니다.
다른 YOLO 내보내기 형식과 Hailo 비교#
모델을 실행할 하드웨어에 따라 내보내기 형식을 선택합니다. HEF는 하드웨어별 형식이므로 최종 디바이스에 이미 Hailo 가속기가 탑재된 경우에 선택해야 하며, 범용 형식이나 자동으로 가장 빠른 엣지 형식으로 간주해서는 안 됩니다.
| 배포 대상 또는 우선순위 | 권장 Ultralytics 형식 | Hailo와의 비교 |
|---|---|---|
| 기존 Hailo NPU 또는 Raspberry Pi HAT | Hailo HEF(format="hailo") | 설치된 Hailo 가속기와 HailoRT 스택을 사용합니다 |
| 전력 제약이 있는 신규 M.2 또는 SBC NPU | DeepX | 더 높은 YOLO 성능과 와트당 성능 향상을 원한다면 여기서 시작합니다 |
| 높은 처리량의 다중 스트림 엣지 NPU | Axelera | 최신 가속기 하드웨어에서 더 많은 스트림과 높은 처리량을 원할 때 평가합니다 |
| NVIDIA GPU | TensorRT | 별도의 NPU 대신 FP16 및 INT8 옵션이 포함된 NVIDIA GPU 커널을 사용합니다 |
| Intel CPU, GPU 또는 NPU | OpenVINO | Intel 시스템에 이미 통합된 가속기를 대상으로 합니다 |
| Apple 하드웨어 | CoreML | 기본 Apple 런타임을 통해 Apple Neural Engine, GPU, CPU를 사용합니다 |
| Qualcomm Snapdragon NPU | QNN | 외부 가속기 없이 Qualcomm의 온디바이스 NPU용으로 컴파일합니다 |
| Rockchip NPU | RKNN | 저렴한 SBC 및 임베디드 시스템에서 널리 사용됩니다 |
| Huawei Ascend NPU | Ascend | Atlas 보드 및 OrangePi AIPro의 Ascend AI Core용 CANN .om 모델을 컴파일합니다 |
| Google Coral Edge TPU | Edge TPU | Hailo 모듈 대신 Coral 가속기에서 INT8 LiteRT 모델을 실행합니다 |
| Ambarella CVflow SoC | Ambarella | Ambarella 카메라 및 임베디드 비전 SoC용으로 컴파일합니다 |
| Raspberry Pi AI Camera | Sony IMX500 | 호스트에 연결된 Hailo 가속기 대신 카메라 센서에서 네트워크를 실행합니다 |
| 모바일 또는 임베디드 CPU/GPU | NCNN | 전용 지원 NPU를 사용할 수 없을 때 경량의 이식성 있는 런타임을 제공합니다 |
| 이식 가능한 크로스 런타임 배포 | ONNX | 런타임 간 이식성을 유지합니다. HailoRT는 ONNX를 HEF로 먼저 컴파일하지 않으면 실행할 수 없습니다. |
NPU라는 이유만으로 Hailo가 더 빠르거나 전력 효율이 높다고 가정하지 마세요. 신규 M.2 배포에서는 DeepX가 더 높은 YOLO 성능과 와트당 성능 향상을 제공할 가능성이 높은 후보이며, Axelera는 훨씬 높은 다중 스트림 처리량을 목표로 합니다. Rockchip은 SBC 및 임베디드 시스템 전반에서 인기 있는 저비용 옵션입니다. 공급업체의 TOPS 및 전력 수치는 애플리케이션 벤치마크와 직접 비교할 수 없으므로, 하드웨어를 구매하기 전에 후보 디바이스에서 동일한 YOLO 체크포인트, 입력 크기, 정확도, 호스트, 전체 비디오 파이프라인을 검증하세요.
Hailo 컴퓨터 비전 성능 최적화#
모델 및 파이프라인 선택은 컴파일러 플래그보다 중요한 경우가 많습니다:
- 작은 YOLO 모델로 시작하고 정확도에 필요한 경우에만 모델 크기를 늘립니다.
- 애플리케이션에 중요한 객체를 보존하면서 사용할 수 있는 가장 낮은 고정
imgsz을 선택합니다. - 가능하면 실제 카메라와 환경에서 얻은 보정 이미지를 사용합니다.
- 매번 추론할 때 HEF를 다시 열지 말고, 프레임 간에 Hailo 네트워크를 활성 상태로 유지합니다.
- 디바이스 추론 시간을 전처리, 비디오 디코딩, 후처리, 시각화, 네트워크 I/O와 분리합니다.
- 지속적인 비디오 처리 작업에는 GStreamer와 같은 스트리밍 파이프라인을 사용합니다.
- 프로덕션에서 사용할 가속기와 HailoRT 버전에서 내보낸 HEF를 정확히 검증합니다.
내보내기 인수#
| 인수 | 유형 | 기본값 | 설명 |
|---|---|---|---|
name | str | hailo8l | 대상 Hailo 가속기 아키텍처 |
imgsz | int, list | 640 | 고정 모델 입력 크기 |
data | str | None | 보정 데이터셋 YAML입니다. 분류 작업에서는 데이터셋 디렉터리 또는 기본 제공 데이터셋 이름을 사용합니다. 생략하면 Ultralytics가 작업별 보정 데이터셋을 선택합니다. |
fraction | float, int 또는 list | 1.0 | 비율, 이미지 수 또는 [train, val, test] 비율/개수로 지정하는 보정 하위 집합입니다. 항목이 두 개인 목록에서는 test이 전체로 설정되고, 0는 건너뜁니다. |
quantize | int | 8 | Hailo 내보내기에서는 INT8 양자화를 사용합니다. |
simplify | bool | True | 중간 ONNX 그래프를 단순화합니다. |
conf | float | 0.25 | YOLOv8/YOLO11 HailoRT NMS 신뢰도 임계값 |
iou | float | 0.7 | YOLOv8/YOLO11 HailoRT NMS IoU 임계값 |
device | str | None | 중간 ONNX 내보내기 단계에 사용할 장치이며, 기본값은 CPU입니다(device=cpu). Dataflow Compiler 단계에서는 이 설정을 사용하지 않습니다. |
YOLOv8/YOLO11 탐지 모델을 내보내면 HailoRT NMS가 적용됩니다. YOLO26은 호스트 NMS용 원시 one-to-many 출력을 기본으로 사용하며, nms=False을 지정하면 NMS가 필요 없는 one-to-one 출력을 사용합니다. 세그멘테이션, 포즈, OBB는 원시 헤드 텐서를 사용하고, 분류는 칩 내 확률을 반환합니다. 시맨틱 세그멘테이션은 Hailo-8/8L 및 모든 단일 클래스 헤드에서 원시 로짓을 반환하고, 다중 클래스 Hailo-10H/15 헤드에서는 미리 구워진 클래스 맵을 반환합니다. 깊이 추정은 원시 깊이 로짓을 반환하며, Ultralytics는 추론 시 이를 미터 단위 깊이 맵으로 디코딩합니다. 동적 셰이프, 임베디드 Ultralytics NMS, FP16 및 FP32는 지원되지 않습니다.
Hailo 내보내기 문제 해결#
Hailo Dataflow Compiler 가져오기 오류#
내보내기 중 hailo_sdk_client이 없다는 메시지가 표시되면 대상 하드웨어 세대에 맞는 DFC 휠을 Ultralytics와 동일한 Python 환경에 설치합니다. Hailo-8/8L과 Hailo-10H/15에는 서로 다른 컴파일러 세대가 필요합니다.
지원되지 않는 운영 체제 또는 아키텍처#
HEF 컴파일은 Linux x86_64에서 지원됩니다. 로컬 컴퓨터가 macOS, Windows, Raspberry Pi 또는 다른 ARM 시스템이라면 Ultralytics Platform을 통해 내보내거나 호환되는 워크스테이션을 사용합니다.
내보내는 데 시간이 오래 걸립니다#
DFC 최적화는 가장 많은 비용이 드는 단계입니다. 컴파일 시간은 모델 크기, 입력 해상도, 보정 데이터에 따라 늘어납니다. 지원되는 GPU를 사용하면 최적화 속도를 높일 수 있지만, CPU만 사용하는 컴파일은 상당히 느릴 수 있습니다.
양자화된 모델의 정확도가 떨어집니다#
프로덕션 입력과 유사하고 중요한 객체, 스케일, 조명 조건, 배경을 포함하는 보정 이미지를 사용합니다. 배포 전에 동일한 검증 세트에서 원본 PyTorch 모델과 내보낸 HEF를 비교합니다. 보정을 잘 수행해도 모델 계열에 따라 어느 정도 성능 차이가 남습니다. 측정된 기준값은 모델 계열별 정확도 기대치를 참조합니다.
장치에서 HEF를 불러오지 못합니다#
name이 실제 Hailo 아키텍처와 일치하는지, 장치 드라이버, 펌웨어, HailoRT 패키지가 서로 호환되는지 확인합니다. hailortcli parse-hef로 아티팩트를 검사하고 hailortcli fw-control identify로 가속기를 확인합니다.
출력 파싱이 올바르지 않습니다#
Ultralytics가 일치하는 YOLOv8, YOLO11 또는 YOLO26 후처리 경로를 선택할 수 있도록 metadata.yaml을 HEF와 함께 둡니다. 사용자 지정 HailoRT 애플리케이션에서도 내보낸 모델 계열에 맞는 후처리를 사용해야 합니다.
요약#
Ultralytics Hailo 내보내기는 학습된 YOLO 모델을 배포 가능한 HEF로 직접 변환하는 경로를 제공합니다:
- YOLOv8, YOLO11 또는 YOLO26 탐지/분류 모델, YOLOv8/YOLO11 세그멘테이션·포즈·OBB 모델 또는 YOLO26 시맨틱 세그멘테이션·깊이 추정 모델을 불러옵니다.
format="hailo"으로 내보내고 대상 아키텍처를 선택합니다.- 일치하는 DFC를 사용해 로컬에서 보정 및 컴파일하거나 Ultralytics Platform에서 관리형 내보내기를 사용합니다.
- HEF와
metadata.yaml을 Hailo 기반 엣지 장치에 복사합니다. - HailoRT, Raspberry Pi Picamera2 또는 GStreamer 비디오 파이프라인으로 추론을 실행합니다.
다른 컴퓨터 비전 배포 대상을 알아보려면 내보내기 모드, 벤치마크 모드, 통합 가이드를 참조합니다. 관련 하드웨어 가이드로는 DeepX, Axelera, ONNX, OpenVINO, TensorRT, NCNN, RKNN, Sony IMX500, Qualcomm QNN이 있습니다.
자주 묻는 질문#
아니요. 지원되는 Linux x86_64 시스템에서 DFC를 실행한 다음 결과 HEF를 Raspberry Pi에 배포합니다.
지원되는 GPU를 사용하면 DFC 최적화 시간을 크게 단축할 수 있습니다. CPU 컴파일도 가능하지만 시간이 상당히 오래 걸릴 수 있습니다.
직접 내보내기는 표준 YOLOv8, YOLO11 또는 YOLO26 탐지 헤드를 사용하는 탐지 모델, YOLOv8/YOLO11 세그멘테이션·포즈·OBB 모델, YOLOv8/YOLO11/YOLO26 분류 모델을 지원합니다. 여기에는 해당 표준 아키텍처를 기반으로 사용자 지정 학습한 모델도 포함됩니다. YOLO26 시맨틱 세그멘테이션 및 깊이 추정 모델도 지원합니다. YOLO26 인스턴스 세그멘테이션·포즈·OBB와 YOLOv10, YOLO-World, YOLOE, RT-DETR은 검증되지 않은 HEF를 생성하는 대신 거부됩니다.
예. 사용자 지정
.pt가중치와 함께 동일한format="hailo"명령을 사용하고, 대표성 있는 INT8 보정을 위해 학습 데이터셋 YAML을data로 전달합니다. 클래스 이름과 클래스 수는 모델 메타데이터에서 읽어옵니다.각 HEF는 고정된 입력 셰이프로 컴파일되므로 단일 HEF의 크기를 동적으로 조정할 수 없습니다. 일반적으로 호스트에서 입력 크기를 컴파일된 크기로 조정하거나 필요한 해상도별로 여러 HEF를 컴파일할 수 있습니다. 배포 파이프라인에 맞게 내보내기 시
imgsz을 선택합니다.YOLO26은 DFL을 사용하지 않는 박스 회귀를 적용하므로 두 헤드 모두 YOLOv8 방식의 HailoRT NMS 파이프라인 대신 원시 텐서로 컴파일됩니다. Ultralytics는 기본적으로 텐서를 디코딩하고 NMS를 적용하며,
nms=False을 지정해 내보내면 NMS가 없는 탐지 결과를 반환합니다.Hailo Dataflow Compiler는 Linux x86_64 빌드 머신에서 모델을 변환하고 양자화하여 하드웨어별 HEF를 생성합니다. HailoRT는 대상 장치에서 HEF를 불러와 실행합니다.
컴파일된 HEF를 Hailo 런타임에 배포합니다. ONNX는 내보내기 중에 사용하는 중간 표현이며, 컴파일이 성공하면 삭제됩니다.
Hailo Developer Zone에서 하드웨어 세대에 맞는 컴파일러 휠을 다운로드합니다. 컴파일러는 HEF를 생성할 때만 필요하며, 대상 가속기에서는 HailoRT가 HEF를 실행합니다.