Ultralytics YOLO 모델을 위한 Ambarella CVflow 내보내기#
Ultralytics YOLO 모델을 Ambarella SoC에 배포하려면 Ambarella의 컴파일 도구로 모델을 컴파일해야 하며, CVflow 아키텍처에 최적화된 모델은 추론 시 더 나은 성능을 발휘합니다. 이 Ultralytics 포크는 Ambarella의 SpongeTorch 압축 툴킷을 학습, 검증, 내보내기 파이프라인에 직접 통합하여 개발자가 Ambarella 하드웨어에 효율적으로 배포할 수 있는 최적화된 모델을 생성하도록 지원합니다.
이 가이드에서는 압축 인식 학습부터 디바이스 내 추론까지 현재 객체 탐지 배포 워크플로를 다룹니다. 전체 파이프라인은 워크플로 개요를 참조하세요.
AmbaPB 체크포인트 형식은 CVflow 연산 프리미티브를 지원하고 SDK 도구로 생성된 아티팩트를 패키징하는 Ambarella 전용 ONNX IR 사양 확장입니다. 이는 배포 전에 컴파일된 모델의 정확도를 검증하는 데 사용하는 호스트 측 아티팩트이며, 대상 디바이스용으로 별도 생성되는 Cavalry 바이너리가 보드에서 실행됩니다.
이 워크플로는 PyPI에서 제공되지 않는 독점 Ambarella SDK 구성 요소에 의존합니다. 필요한 SDK 패키지를 받으려면 Ambarella Developer Zone에 등록하고 Cooper™ Developer Platform을 통해 액세스를 요청하세요.
이 통합은 Ambarella에서 유지 관리합니다. 포크, SpongeTorch 또는 SDK 관련 문제는 Ambarella 지원팀에 문의하세요.
Ambarella는 어떤 회사인가요?#
캘리포니아주 산타클라라에 본사를 둔 Ambarella는 엣지 AI SoC를 설계하는 반도체 기업입니다. 이미지 신호 처리, 비디오 인코딩, 온칩 AI 연산 기능을 결합한 프로세서를 개발하며, 해당 프로세서는 보안, 자동차, 로봇공학, 산업 및 소비자용 디바이스에 사용됩니다.
CVflow란 무엇인가요?#
CVflow는 Ambarella의 비전 처리 아키텍처입니다. CPU 및 GPU와 분리된 전용 비전 엔진을 사용하여 컴퓨터 비전 및 신경망 워크로드를 실행합니다. PyTorch와 같은 프레임워크로 학습한 모델은 엔진에서 실행하기 전에 Ambarella SDK를 사용해 CVflow 네이티브 형식으로 컴파일합니다.
현재 CVflow SoC 제품군과 일반적인 적용 분야:
| SoC 제품군 | 일반적인 적용 분야 |
|---|---|
| CV72 / CV75 | 4K AI 보안 카메라, 스마트 카메라, 산업용 비전 |
| CV5 / CV52 | 드론, 액션 카메라, 로봇공학, 멀티 카메라 시스템 |
| N1-655 | 온프레미스 생성형 AI 및 멀티 스트림 비디오 분석 어플라이언스 |
Ambarella에 YOLO를 배포해야 하는 이유#
- 와트당 성능: CVflow SoC는 상시 작동하는 엣지 AI용으로 설계되어, 카메라급 전력 예산 내에서 실시간 객체 탐지를 실행합니다.
- 압축 인식 학습: SpongeTorch는 학습 중 가지치기를 적용하여 모델이 정확도를 유지하면서 희소성이 높고 CVflow 배포에 더욱 효율적인 모델이 되도록 지원합니다.
- 통합 카메라 파이프라인: Ambarella SoC는 이미지 신호 프로세서(ISP), 초고화질 비디오 인코딩 및 CVflow를 결합해 저전력으로 다양한 카메라 시스템을 구현합니다. 따라서 단일 Ambarella SoC가 전체 AI 카메라 파이프라인을 처리합니다.
워크플로 개요#
파이프라인은 다음 여섯 단계로 구성됩니다:
- 압축 인식 학습 — SpongeKit 구성(
amba_config)으로 학습하여 SpongeTorch가 학습 중 비구조적 가지치기를 점진적으로 적용하도록 합니다. 학습 후 양자화(PTQ)의 정확도가 허용 수준에 미치지 못하는 경우 SpongeTorch는 양자화 인식 학습(QAT)도 지원하지만, 해당 경로는 아직 이 Ultralytics 통합에 연결되지 않았으며 향후 릴리스에서 제공될 예정입니다. - ONNX 내보내기 — 압축된 체크포인트를 동일한
amba_config으로 내보내고, ONNX 그래프에서 압축 구조를 보존합니다. - 컴파일 — SDK 컴파일 도구를 사용해 ONNX 모델을 AmbaPB 체크포인트로 컴파일합니다. 이 과정에서 CVflow 엔진을 위해 PTQ가 적용됩니다.
- 호스트 검증 — 배포 전에 AmbaPB 백엔드를 통해 Ultralytics
predict/val로 컴파일된*.ambapb.ckpt.onnx모델을 실행해 정확도를 검증합니다. - Cavalry 변환 — SDK 도구를 사용해 검증된 AmbaPB 체크포인트를 Cavalry 바이너리로 변환합니다.
- 디바이스에서 실행 — Ambarella SDK 런타임 라이브러리를 사용해 디바이스에서 Cavalry 바이너리를 실행합니다.
SpongeTorch 학습 및 내보내기 워크플로는 선택 사항이며 일반 ONNX 내보내기로 대체할 수 있습니다(SpongeTorch 없이 내보내기 참조).
사전 요구 사항#
설치#
이 Ultralytics 포크를 설치한 다음, 컴파일 도구와 cvflowbackend 라이브러리가 포함된 Ambarella CVflow SDK를 설정하고, 함께 배포된 spongetorch 휠을 설치하세요:
# 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 .
# Access and set up the Ambarella SDK compilation tools
# After the environment is ready, install the spongetorch library
pip install /path/to/spongetorch-*.whlAutoBackend는 SDK 컴파일 도구의 tv2 명령(tv2 -libpath cvflowbackend)을 통해 cvflowbackend을 찾습니다. 따라서 컴파일된 모델로 추론이나 검증을 실행하기 전에 SDK 컴파일 도구를 설치하고 PATH에 추가해야 합니다.
SpongeKit 구성 파일#
SpongeTorch는 가지치기 패스, 희소성 목표, 압축 일정을 정의하는 SpongeKit 구성 파일(protobuf 텍스트 형식, .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()을 사용해 모델과 옵티마이저를 래핑합니다. 압축은 단계별 일정에 따라 점진적으로 적용되므로 네트워크는 희소성이 높아지는 동안에도 정확도를 유지하도록 학습됩니다. 학습된 체크포인트에는 SpongeTorch의 희소 상태(_orig/_mask 텐서)가 저장되며, 이후 내보내기 단계에서 이 상태가 필요합니다. 재현성을 위해 구성 파일은 amba_config.prototxt로 실행 디렉터리에 복사됩니다.
SpongeTorch 압축 일정이 end_step에 도달할 때까지 best.pt과 last.pt은 의도적으로 저장되지 않습니다. 압축이 절반만 진행된 체크포인트는 사용할 수 없기 때문입니다. 구성의 일정이 완료될 만큼 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 트레이스를 수행하여 SDK 컴파일 도구가 예상하는 정확한 형식의 그래프를 생성합니다.
모델 메타데이터 보존#
ONNX 내보내기는 모델 작업, 클래스 이름, 스트라이드, 입력 크기를 ONNX 파일에 삽입합니다. 반면 AmbaPB 백엔드는 컴파일된 모델 옆에 있는 metadata.yaml 사이드카에서 이 정보를 읽습니다. SDK 컴파일 도구가 이 사이드카를 생성하지 않는 경우, 컴파일 전에 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이 설정된 상태에서 압축되지 않은 체크포인트를 내보내려고 하면 다음 오류가 발생합니다: "체크포인트에 SpongeTorch 가지치기 상태가 없습니다... 내보내기 전에 amba 학습에서 생성된 압축 체크포인트를 사용하세요." - 구성은 학습에 사용한 구성과 일치해야 합니다. 다른 구성을 사용하면 체크포인트 가중치가 올바르게 로드되지 않을 수 있습니다.
SDK 도구로 컴파일#
SDK 컴파일 도구를 사용하여 내보낸 ONNX 모델을 대상 칩셋용으로 컴파일하고, SDK 컴파일 가이드의 안내를 따르세요. 도구는 그래프를 CVflow AI 엔진에 매핑하면서 PTQ, 스케줄링, 메모리 계획을 적용하고, 호스트 검증을 위한 AmbaPB 체크포인트를 생성합니다.
PTQ는 보정 이미지(SDK 컴파일 가이드에 설명된 방식으로 준비)를 사용하여 INT8 양자화를 적용하며, 컴파일 도구는 정확도와 런타임 지연 시간 간의 균형을 맞춥니다. 더 많은 연산을 INT8로 매핑하면 지연 시간이 줄어들 수 있지만 정확도가 낮아질 수 있으며, 더 많은 연산을 FP16으로 유지하면 지연 시간이 늘어나는 대신 정확도가 보존됩니다. PTQ로는 지연 시간 예산에 필요한 INT8 수준에서 목표 정확도를 달성할 수 없는 경우, SpongeTorch를 사용한 QAT가 권장되는 해결 방법입니다. QAT는 더 공격적인 INT8 양자화를 견디도록 모델을 학습시켜 지연 시간이 더 낮은 작동 지점에서 정확도를 회복합니다. 이 통합에서는 아직 QAT를 사용할 수 없으며 향후 릴리스에 포함될 예정입니다.
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 파일이 있으면 백엔드가 해당 파일에서 클래스 이름, stride, 작업 정보를 읽습니다. 백엔드는 기본적으로 CVflow 추론 모드 acinf을 사용합니다. 디버깅을 위해 입력/출력 세부 정보를 기록하려면 환경 변수 ULTRALYTICS_AMBAPB_DEBUG=1를 설정하세요.
Cavalry 바이너리로 변환#
AmbaPB 체크포인트가 호스트 검증을 통과한 후 SDK 컴파일 도구를 사용하여 대상 장치용 Cavalry 바이너리로 변환하고, SDK 컴파일 가이드의 안내를 따르세요. Cavalry 바이너리는 보드에서 SDK 런타임 라이브러리가 실행하는 형식입니다.
보드에 배포#
Ambarella SDK 런타임을 사용하여 Ambarella 장치에 Cavalry 바이너리를 로드하세요. 전처리와 후처리는 탐지 모델을 컴파일할 때 지정한 설정과 일치해야 합니다. 입력은 0–255 범위의 레터박싱된 RGB 이미지여야 하며, 출력에는 표준 YOLO 탐지 디코딩을 적용해야 합니다. 런타임 API에 관한 내용은 SDK 배포 문서를 참조하세요.
SpongeTorch 없이 내보내기#
학습 중 SpongeTorch 가지치기를 사용하지 않아도 되는 경우, 표준 Ultralytics 파이프라인으로도 SDK 도구가 컴파일할 수 있는 모델을 생성할 수 있습니다:
yolo export model=yolo26n.pt format=onnx생성된 ONNX를 SDK 컴파일 도구로 컴파일하세요. 이 도구는 자체적으로 학습 후 양자화를 수행합니다. 이 방법은 학습 시 spongetorch에 의존하지 않는 간단한 워크플로를 제공하는 대신, 런타임 성능과 양자화된 모델의 정확도가 다소 낮아질 수 있습니다.
실제 애플리케이션#
Ambarella CVflow SoC에서 실행되는 Ultralytics YOLO 모델은 엣지에서 상시 동작하는 비전 기능을 지원합니다:
- AI 보안 카메라: 4K IP 카메라에서 3W 미만의 전력 예산으로 사람과 차량을 실시간 탐지합니다.
- 드론 및 로보틱스: CV5급 칩에서 내비게이션, 검사, 배송을 위한 온보드 객체 탐지 및 추적을 수행합니다.
- 산업 및 리테일 분석: 엣지 어플라이언스에서 다중 스트림 인원 계수, PPE 탐지, 매대 모니터링을 수행합니다.
요약#
이 가이드에서는 Ambarella CVflow SoC에 Ultralytics YOLO 모델을 배포하는 현재 워크플로를 설명했습니다. 여기에는 SpongeTorch를 사용한 압축 인식 학습(amba_config/amba_chipset), 압축된 체크포인트의 ONNX 내보내기, SDK 도구를 사용해 AmbaPB 체크포인트로 오프라인 컴파일, Ultralytics를 통한 호스트 검증, 그리고 Ambarella SDK를 사용한 온디바이스 배포용 Cavalry 바이너리 변환이 포함됩니다.
다른 엣지 AI 대상에 관한 내용은 관련 Hailo, Rockchip RKNN, Sony IMX500, Qualcomm QNN, DEEPX, Axelera 가이드를 참조하세요. 전체 내보내기 형식 목록은 내보내기 모드 문서와 통합 페이지를 확인하세요.
자주 묻는 질문#
아니요.
format="ambarella"대상은 없습니다. ONNX로 내보낸 다음(선택적으로amba_config을 통해 SpongeTorch 압축 적용), Ambarella SDK 컴파일 도구를 사용해 ONNX 모델을 오프라인에서 AmbaPB로 컴파일하세요.SDK 컴파일 도구가 지원하는 CVflow 기반 SoC라면 모두 대상으로 지정할 수 있습니다. AI 카메라용 CV72/CV75 제품군과 드론 및 로보틱스용 CV5/CV52가 포함됩니다.
amba_chipset인수는 SpongeTorch 최적화 대상을 설정하며, 컴파일 시에는 별도로 일치하는 대상을 선택해야 합니다. 사용할 수 있는 칩셋 문자열과 지원 여부는 설치된 SDK 릴리스에 따라 다릅니다.SpongeTorch는 Ambarella의 SpongeKit 모델 압축 라이브러리의 PyTorch 버전입니다(Caffe 및 TensorFlow 버전도 있음). 학습 중 비구조적 가지치기를 위해 Ultralytics의 Ambarella 포크에 통합되어 있으며, 양자화 인식 학습은 향후 릴리스에 포함될 예정입니다. SpongeTorch는 선택 사항입니다. 일반 Ultralytics ONNX 내보내기도 SDK 컴파일 도구로 컴파일할 수 있으며, 이 도구가 직접 양자화를 수행합니다. 이 경우 런타임 성능과 양자화된 모델의 정확도가 다소 낮아질 수 있습니다.
두 제품은 독점 소프트웨어이며 PyPI에서 제공되지 않습니다. Ambarella Developer Zone에 등록하여 SDK 액세스를 요청하세요. SDK에는 컴파일 도구(
cvflowbackend)가 포함되어 있으며, 별도로 배포되는spongetorch휠도 SDK와 함께 제공됩니다.Ambarella 포크가 설치된 상태에서
yolo val model=model.ambapb.ckpt.onnx data=your_data.yaml을 실행하세요. AmbaPB 백엔드는 컴파일된 모델을 CVflow AI 엔진에서 실행되는 방식 그대로 실행하므로, 보고된 mAP에는 컴파일러의 모든 양자화 효과가 반영됩니다.