Ultralytics YOLO 모델을 위한 Ambarella CVflow 내보내기#
본 가이드는 초기 미리보기 버전이며 아직 완료되지 않았거나 Ambarella의 검증을 거치지 않았습니다. 공급업체 피드백이 제공됨에 따라 명령어, 호환성 세부 정보 및 워크플로 단계가 변경될 수 있습니다. 현재 format="ambarella" 내보내기 대상은 존재하지 않으며, 이 워크플로는 표준 ONNX 내보내기(format="onnx")와 amba_config/amba_chipset 인수를 결합한 다음, Ambarella의 CVflow 툴체인을 사용하여 결과 ONNX 모델을 배포 가능한 AmbaPB 형식으로 오프라인 컴파일하는 방식으로 진행됩니다.
Ultralytics YOLO 모델을 Ambarella SoC에 배포하려면 CVflow® AI 엔진에 최적화된 모델 포맷이 필요합니다. 이 Ultralytics 포크는 Ambarella의 SpongeTorch 압축 툴킷을 학습, 검증, 내보내기 파이프라인에 직접 통합하므로, Ambarella 하드웨어에서 효율적으로 실행되는 가지치기(pruned) 및 양자화 최적화된 모델을 생성할 수 있습니다. 본 가이드에서는 압축 인식 학습, ONNX 내보내기, CVflow 툴체인을 사용한 컴파일, 그리고 컴파일된 AmbaPB 모델을 이용한 추론에르는 현재 객체 검출 워크플로를 설명합니다.
이 워크플로는 PyPI에서 사용할 수 없는 독점 Ambarella 툴체인 구성 요소(spongetorch, CVflow 컴파일러 및 cvflowbackend)를 요구합니다. Ambarella Developer Zone에 등록하여 Cooper™ Developer Platform을 통해 SDK 액세스 권한을 얻으십시오.
Ambarella CVflow란 무엇입니까?#
Ambarella는 IP 보안 카메라, 대시 캠, 드론, 로보틱스 및 자동차 시스템에서 널리 사용되는 저전력 AI 비전 SoC로 유명한 캘리포니아주 산타클라라 소재의 반도체 기업입니다. 이 회사의 칩은 매우 낮은 전력으로 높은 추론 처리량을 제공하는 전용 신경 벡터 처리 아키텍처(온칩 AI 가속기 또는 NPU)인 **CVflow®**를 기반으로 구축되었습니다. CV72S는 3W 미만의 전력으로 4K 보안 카메라 AI 워크로드를 실행합니다. PyTorch 같은 표준 프레임워크에서 학습된 모델은 배포 전에 Ambarella의 오프라인 툴체인을 통해 CVflow의 네이티브 형식으로 컴파일됩니다.
현재 CVflow SoC 제품군 및 일반적인 애플리케이션:
| SoC 제품군 | 일반적인 애플리케이션 |
|---|---|
| CV72 / CV75 | 4K AI 보안 카메라, 스마트 카메라, 산업용 비전 |
| CV5 / CV52 | 드론, 액션 카메라, 로봇 공학, 다중 카메라 시스템 |
| CV3-AD | 자동차 ADAS 및 자율 주행 도메인 컨트롤러 |
| N1 | 온프레미스 생성형 AI 및 다중 스트림 비디오 분석 어플라이언스 |
왜 Ambarella에 YOLO를 배포해야 합니까?#
- 와트당 성능: CVflow SoC는 상시 가동되는 엣지 AI를 위해 설계되었으며, 카메라 등급의 전력 예산 내에서 실시간 객체 검출을 실행합니다.
- 압축 인식 학습: SpongeTorch는 학습 중에 가지치기 및 양자화 인식을 최적화하므로, 모델이 NPU 친화적으로 진화하는 동시에 정확도를 유지하는 법을 학습합니다.
- 비트 정확(bit-exact) 호스트 검증: 컴파일된 AmbaPB 모델은 칩에서 실행될 때와 정확히 동일하게 워크스테이션의 Ultralytics
predict/val을 통해 실행되므로, 하드웨어를 건드리기 전에 양자화된 mAP를 측정할 수 있습니다. - 통합 카메라 파이프라인: Ambarella SoC는 AI 엔진과 ISP 및 비디오 인코더를 결합하여 AI 카메라를 위한 단일 칩 솔루션을 제공합니다.
워크플로 개요#
파이프라인은 네 단계로 구성됩니다:
- 압축 인식 학습 — SpongeKit 설정(
amba_config)으로 학습하여 SpongeTorch가 학습 중에 가지치기/양자화를 점진적으로 적용하도록 합니다. - ONNX 내보내기 — 동일한
amba_config을 사용하여 압축된 체크포인트를 내보내고, ONNX 그래프에 압축 구조를 보존합니다. - CVflow 컴파일 — CVflow 툴체인을 사용하여 ONNX 모델을 AmbaPB 아티팩트로 컴파일합니다.
- 추론 및 검증 — AmbaPB 백엔드를 통해 Ultralytics
predict/val를 거쳐 컴파일된*.ambapb.ckpt.onnx모델을 실행한 후 보드에 배포합니다.
SpongeTorch의 학습 시간 최적화가 필요하지 않은 경우, SpongeTorch 학습 및 SpongeTorch 인식 내보내기를 일반 ONNX 내보내기로 대체할 수 있습니다(SpongeTorch 없이 내보내기 참고).
사전 요구 사항#
설치#
이 Ultralytics 포크를 설치한 다음, SDK 배포판에서 Ambarella 툴체인 휠(wheel)을 설치하십시오:
!!! 팁 "설치"
# Install this Ultralytics fork from source
git clone https://github.com/Ambarella-Inc/ultralytics
cd ultralytics
git checkout amba_v8.4.46
pip install -e .
# Install Ambarella toolchain wheels from the SDK
pip install /path/to/spongetorch-*.whl
pip install /path/to/cvflowbackend-*.whlAmbaPB 추론 백엔드는 CVflow 툴체인의 tv2 명령어(tv2 -libpath cvflowbackend)를 통해 cvflowbackend을 찾으므로, 컴파일된 모델로 추론 또는 검증을 실행하기 전에 툴체인이 설치되어 있어야 하며 PATH에 포함되어 있어야 합니다.
SpongeKit 구성 파일#
SpongeTorch는 적용할 압축 패스(pruning sparsity 대상, 양자화 설정 및 압축 스케줄)를 정의하는 SpongeKit 설정 파일(protobuf-text 형식, .prototxt)에 의해 구동됩니다. Ambarella SDK 릴리스에서 예제 설정 및 일치하는 스키마 문서를 얻으십시오. 검증 시 준비되지 않은 모델을 준비해야 할 때는 항상 학습 설정을 사용하고, 압축된 체크포인트를 내보낼 때도 항상 동일한 설정을 사용하십시오.
Amba 인수#
두 개의 인수가 train, val, export 모드 전반에서 SpongeTorch 통합을 제어합니다:
| 인수 | 유형 | 기본값 | 설명 |
|---|---|---|---|
amba_config | str | None | spongetorch.prepare()에 전달되는 SpongeKit 설정의 경로입니다. 압축 인식 학습 및 SpongeTorch 인식 내보내기를 활성화합니다. |
amba_chipset | str | None | spongetorch.set_target_chipset()에 전달되는 대상 칩셋 이름(예: CV72). |
이 포크에는 다음과 같은 일반 내보내기 인수도 추가되었습니다:
| 인수 | 유형 | 기본값 | 설명 |
|---|---|---|---|
export_file | str | None | 사용자 지정 내보내기 출력 경로/이름(예: '/tmp/model.onnx' 또는 'model.onnx'). |
압축 인식 학습#
SpongeTorch 압축을 활성화하여 모델을 학습(또는 미세 조정)하십시오:
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
model.train(
data="coco8.yaml",
epochs=100,
amba_config="config.prototxt",
amba_chipset="CV72",
)amba_config이 설정되면 트레이너는 설정 단계에서 spongetorch.prepare()을 사용하여 모델과 옵티마이저를 감쌉니다. 압축은 스텝 스케줄에 따라 점진적으로 적용되므로 네트워크는 희소성(sparsity)과 양자화 친화성을 갖추는 동시에 정확도를 유지하는 법을 학습합니다. 학습된 체크포인트는 나중에 내보내기 단계에서 요구하는 SpongeTorch의 희소 상태(_orig/_mask 텐서)를 저장합니다. 설정 파일은 재현성을 위해 amba_config.prototxt로 실행 디렉토리에 복사됩니다.
best.pt과 last.pt은 SpongeTorch 압축 스케줄이 end_step를 통과할 때까지 의도적으로 저장되지 않습니다. 절반만 압축된 체크포인트는 사용할 수 없습니다. 설정의 스케줄이 완료될 수 있도록 epochs이 충분히 긴지 확인하십시오. 체크포인트 저장이 시작되면 로그에 보고됩니다. 스케줄이 완료되기 전에 학습이 끝나더라도 최종 에포크는 경고와 함께 저장되지만, 그러한 체크포인트는 배포해서는 안 됩니다.
최상의 정확도를 위해 먼저 모델을 평소대로 학습시키거나(또는 사전 학습된 체크포인트에서 시작), 학습된 가중치에 대해 amba_config을 사용하여 더 짧은 압축 파인튜닝을 실행하십시오.
압축된 체크포인트 검증#
컴파일 전 동일한 구성을 사용하여 정확도를 검증하십시오:
yolo val model=runs/detect/train/weights/best.pt data=coco8.yaml \
amba_config=config.prototxt amba_chipset=CV72검증기는 필요할 때 spongetorch.prepare()을 다시 적용하고 압축 구조가 보존되도록 Conv+BN 융합을 비활성화합니다. 압축되지 않은 베이스라인과 mAP를 비교하십시오. 정확도 저하가 너무 크면 SpongeKit 설정을 조정하고 다시 학습시키십시오.
ONNX로 내보내기#
학습에 사용된 동일한 amba_config을 사용하여 압축된 체크포인트를 내보냅니다:
from ultralytics import YOLO
model = YOLO("runs/detect/train/weights/best.pt")
model.export(
format="onnx",
amba_config="config.prototxt",
amba_chipset="CV72",
)내보내기 도구는 모델을 다시 빌드하고, 설정과 함께 spongetorch.prepare()을 다시 적용하며, 준비된 구조로 희소 체크포인트 가중치를 다시 로드하고, Conv+BN 융합이 비활성화된 상태로 ONNX를 추적하여 CVflow 컴파일러가 예상하는 정확한 형식의 그래프를 생성합니다.
모델 메타데이터 보존#
ONNX 내보내기는 모델 작업, 클래스 이름, 스트라이드 및 입력 크기를 ONNX 파일에 임베드하며, AmbaPB 백엔드는 컴파일된 모델 옆에 있는 metadata.yaml 사이드카에서 이 정보를 읽습니다. CVflow 컴파일러가 이 사이드카를 생성하지 않는 경우 컴파일 전에 ONNX 모델에서 이를 추출하십시오:
import onnx
from ultralytics.utils import YAML
model = onnx.load("model.onnx")
YAML.save("metadata.yaml", {item.key: item.value for item in model.metadata_props})metadata.yaml을 컴파일된 *.ambapb.ckpt.onnx 또는 *.ambapb.fastckpt.onnx 파일과 동일한 디렉토리에 유지하십시오.
- 체크포인트에는 SpongeTorch 압축 상태가 포함되어 있어야 합니다.
amba_config이 설정된 일반 체크포인트를 내보내려고 하면 다음과 같은 오류가 발생합니다: "Checkpoint has no SpongeTorch pruning state... Use a compressed checkpoint from amba training before export." - 구성이 학습 중에 사용된 것과 일치해야 하며, 그렇지 않으면 가중치 로드가 실패합니다.
CVflow 툴체인으로 컴파일#
SDK의 컴파일 가이드를 따라 SDK의 CVflow 컴파일러를 사용하여 대상 칩셋에 맞게 내보낸 ONNX 모델을 컴파일하십시오. 컴파일러는 그래프를 CVflow AI 엔진(양자화, 스케줄링, 메모리 계획)에 매핑하고 배포 가능한 AmbaPB 아티팩트를 생성합니다.
Ultralytics가 컴파일된 모델을 인식하려면 파일 이름이 .ambapb.ckpt.onnx 또는 .ambapb.fastckpt.onnx로 끝나야 합니다.
컴파일된 모델로 추론 실행#
컴파일된 AmbaPB 모델은 Ultralytics API를 통해 직접 로드됩니다. AutoBackend는 .ambapb 접미사를 감지하고 추론을 cvflowbackend를 통해 라우팅하여, AI 엔진에서 실행될 때와 비트 단위로 정확하게 모델을 실행합니다:
from ultralytics import YOLO
model = YOLO("model.ambapb.ckpt.onnx")
# Inference
results = model("https://ultralytics.com/images/bus.jpg")
# Validation
metrics = model.val(data="coco8.yaml")이는 모든 컴파일러 양자화 효과를 포함하여 하드웨어 배포 전 최종 정확도 검사입니다. 컴파일된 모델 옆에 metadata.yaml 파일이 있으면 백엔드는 그로부터 클래스 이름, 스트라이드 및 작업 정보를 읽습니다. 백엔드는 기본적으로 CVflow 추론 모드 acinf을 사용합니다. 디버깅을 위해 입력/출력 세부 정보를 로깅하려면 환경 변수 ULTRALYTICS_AMBAPB_DEBUG=1를 설정하십시오.
보드에 배포#
Ambarella SDK 런타임을 사용하여 Ambarella 장치에 컴파일된 모델을 로드합니다. 전처리 및 후처리는 검출 모델이 컴파일된 대상과 일치해야 합니다. 0–255 범위의 레터박스된 RGB 입력(Ultralytics AmbaPB 백엔드는 컴파일된 모델에 0–255 RGB를 공급함)과 출력에 대한 표준 YOLO 검출 디코딩이 필요합니다. 런타임 API는 SDK 배포 문서를 참조하십시오.
SpongeTorch 없이 내보내기#
SpongeTorch의 학습 시간 가지치기 및 양자화 인식 최적화가 필요하지 않은 경우, 표준 Ultralytics 파이프라인도 CVflow 컴파일이 가능한 모델을 생성합니다:
yolo export model=yolo26n.pt format=onnx학습 시 spongetorch 종속성 없이 더 간단한 워크플로를 제공하기 위해 사후 학습 양자화를 자체적으로 수행하는 CVflow 툴체인으로 결과 ONNX를 컴파일합니다. 이 경로는 일부 NPU 성능 및 양자화된 정확도를 단순화된 워크플로와 교환합니다.
실제 활용 사례#
Ambarella CVflow SoC에서 실행되는 Ultralytics YOLO 모델은 엣지에서의 상시 가동 비전을 지원합니다:
- AI 보안 카메라: 3W 미만의 전력 예산 내에서 4K IP 카메라에서 사람 및 차량 실시간 탐지.
- 드론 및 로봇 공학: CV5급 칩에서 내비게이션, 검사 및 배송을 위한 온보드 객체 탐지 및 추적.
- 자동차: CV3-AD 도메인 컨트롤러에서 보행자 및 차량 탐지와 같은 ADAS 인식 워크로드.
- 산업 및 소매 분석: 엣지 어플라이언스에서 다중 스트림 인원 계수, PPE 탐지 및 선반 모니터링.
요약#
본 미리보기 가이드는 Ambarella CVflow SoC에 Ultralytics YOLO 모델을 배포하기 위한 현재 워크플로를 개괄했습니다. SpongeTorch를 이용한 압축 인식 학습(amba_config/amba_chipset), 압축된 체크포인트의 ONNX 내보내기, CVflow 툴체인을 이용한 AmbaPB 오프라인 컴파일, 그리고 보드 배포 전 Ultralytics를 통한 컴파일된 모델의 비트 정확 검증이 포함됩니다.
기타 엣지 AI 타겟에 대해서는 관련 Hailo, Rockchip RKNN, Sony IMX500, Qualcomm QNN, DEEPX 및 Axelera 가이드를 참조하십시오. 전체 내보내기 형식 목록을 보려면 Export mode 문서와 integrations 페이지를 방문하십시오.
FAQ#
아니요.
format="ambarella"타겟은 존재하지 않습니다. ONNX로 내보낸 다음(선택적으로amba_config을 통한 SpongeTorch 압축 사용), SDK에 포함된 Ambarella의 CVflow 툴체인을 사용하여 오프라인에서 ONNX 모델을 AmbaPB로 컴파일하십시오.AI 카메라용 CV72/CV75 제품군, 드론 및 로보틱스용 CV5/CV52, 자동차용 CV3-AD를 포함하여 CVflow 툴체인에서 지원하는 모든 CVflow 기반 SoC를 타겟으로 삼을 수 있습니다.
amba_chipset인수는 SpongeTorch의 최적화 타겟을 설정하며, 컴파일 시 일치하는 타겟을 별도로 선택해야 합니다. 허용되는 칩셋 문자열과 가용성은 설치된 SDK 릴리스에 따라 다릅니다.SpongeTorch는 Ambarella의 모델 압축 툴킷으로, 가지치기 및 양자화 인식 학습을 위해 Ultralytics의 Ambarella 포크에 통합되어 있습니다. 이는 선택 사항입니다. 일반 Ultralytics ONNX 내보내기도 사후 학습 양자화를 사용하여 CVflow 툴체인으로 컴파일할 수 있지만, NPU 성능과 양자화 정확도 면에서 일부 손실이 발생할 수 있습니다.
이들은 독점적이며 PyPI에 없습니다. SDK 액세스를 요청하려면 Ambarella Developer Zone에 등록하십시오.
spongetorch및cvflowbackend휠과 CVflow 컴파일러는 SDK 배포판과 함께 제공됩니다.Ambarella 포크가 설치된 상태로
yolo val model=model.ambapb.ckpt.onnx data=your_data.yaml을 실행하십시오. AmbaPB 백엔드는 CVflow AI 엔진에서 실행될 때와 비트 단위로 정확하게 컴파일된 모델을 실행하므로, 보고된 mAP에는 모든 컴파일러 양자화 효과가 포함됩니다.