Ultralytics YOLO 모델용 Ambarella CVflow 내보내기#
Ambarella SoC에 Ultralytics YOLO 모델을 배포하려면 Ambarella의 컴파일 도구를 사용한 모델 컴파일이 필요하며, CVflow 아키텍처에 최적화된 모델은 추론 시 더 나은 성능을 발휘합니다. 이 Ultralytics 포크는 Ambarella의 SpongeTorch 압축 툴킷을 학습, 검증, 내보내기 파이프라인에 직접 통합하여 개발자가 Ambarella 하드웨어에서 효율적으로 배포할 수 있는 최적화된 모델을 생성할 수 있도록 지원합니다.
이 가이드는 압축 인식 학습부터 온디바이스 추론에 이르기까지 현재의 객체 감지 배포 워크플로를 다룹니다(전체 파이프라인은 워크플로 개요 참조).
AmbaPB 체크포인트 형식은 CVflow 연산 기본 primitives를 지원하고 SDK 도구가 생성한 아티팩트를 패키징하는 ONNX IR 사양의 Ambarella 전용 확장입니다. 배포 전에 컴파일된 모델의 정확도를 검증하는 데 사용되는 호스트 측 아티팩트이며, 타겟 장치를 위해 생성된 별도의 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는 학습 중에 가지치기(pruning)를 적용하여 모델이 정확도를 유지하는 동시에 CVflow 배포를 위해 더 희소하고 효율적으로 만들어 줍니다.
- 통합 카메라 파이프라인: Ambarella SoC는 이미지 신호 Processor(ISP), 울트라 HD 비디오 인코딩, CVflow를 결합하여 저전력 소비로 다양한 카메라 시스템을 구현하므로, 단일 Ambarella SoC가 전체 AI 카메라 파이프라인을 처리합니다.
워크플로 개요#
파이프라인은 6단계로 구성됩니다:
- 압축 인식 학습 — SpongeKit 설정(
amba_config)으로 학습하여 SpongeTorch가 학습 중에 비정형 가지치기를 점진적으로 적용하도록 합니다. 사후 학습 양자화(PTQ) 정확도가 허용되지 않는 경우, SpongeTorch는 양자화 인식 학습(QAT)도 지원하지만 해당 경로는 아직 이 Ultralytics 통합에 연결되지 않았으며 향후 릴리스에 예정되어 있습니다. - ONNX 내보내기 — 동일한
amba_config을 사용하여 압축된 체크포인트를 내보내고, ONNX 그래프에 압축 구조를 보존합니다. - 컴파일 — CVflow 엔진을 위해 PTQ를 적용하는 SDK 컴파일 도구를 사용하여 ONNX 모델을 AmbaPB 체크포인트로 컴파일합니다.
- 호스트 검증 — 배포 전에 정확도를 확인하기 위해 AmbaPB 백엔드를 통해 Ultralytics
predict/val를 사용하여 컴파일된*.ambapb.ckpt.onnx모델을 실행합니다. - Cavalry 변환 — SDK 도구를 사용하여 검증된 AmbaPB 체크포인트를 Cavalry 바이너리로 변환합니다.
- 장치에서 실행 — Ambarella의 SDK 런타임 라이브러리를 사용하여 장치에서 Cavalry 바이너리를 실행합니다.
SpongeTorch 학습 및 내보내기 워크플로는 선택 사항이며 일반 ONNX 내보내기로 대체할 수 있습니다(SpongeTorch 없이 내보내기 참조).
필수 조건#
설치#
이 Ultralytics 포크를 설치한 다음, 컴파일 도구와 cvflowbackend 라이브러리가 포함된 Ambarella CVflow SDK를 설정하고 그 옆에 배포된 spongetorch 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 .
# 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 설정 파일(프로토부 텍스트 형식, .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로 실행 디렉토리에 복사됩니다.
best.pt 및 last.pt은 SpongeTorch 압축 일정이 end_step를 통과할 때까지 의도적으로 저장되지 않습니다 — 절반만 압축된 체크포인트는 사용할 수 없습니다. 구성의 일정이 완료될 수 있도록 epochs이 충분히 긴지 확인하십시오. 로그에는 체크포인트 저장이 시작되는 시점이 표시됩니다. 일정이 완료되기 전에 학습이 종료되면 경고와 함께 마지막 epoch가 저장되지만, 이러한 체크포인트는 배포해서는 안 됩니다.
최상의 정확도를 얻으려면 먼저 모델을 정상적으로 학습하거나 사전 학습된 체크포인트에서 시작한 다음, 학습된 가중치에 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로 Export#
학습에 사용한 동일한 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 컴파일 가이드에 따라 SDK 컴파일 도구를 사용하여 타겟 칩셋용으로 내보낸 ONNX 모델을 컴파일합니다. 도구는 PTQ, 스케줄링, 메모리 계획을 적용하여 그래프를 CVflow AI 엔진에 매핑하고 호스트 검증을 위한 AmbaPB 체크포인트를 생성합니다.
PTQ는 (SDK의 컴파일 가이드에 설명된 대로 준비된) 보정 이미지를 사용하여 INT8 양자화를 적용하며, 컴파일 도구는 런타임 지연 시간에 대해 정확도의 균형을 맞춥니다. 더 많은 연산을 INT8에 매핑하면 지연 시간은 줄어들지만 정확도가 떨어질 수 있는 반면, 더 많은 연산을 FP16에 유지하면 지연 시간이 길어지는 대신 정확도가 유지됩니다. PTQ가 지연 시간 예산에 필요한 INT8 수준에서 정확도 목표에 도달할 수 없는 경우, SpongeTorch를 사용한 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 및 task 정보를 읽습니다. 백엔드는 기본적으로 CVflow 추론 모드 acinf을 사용합니다. 디버깅을 위해 입력/출력 세부 정보를 로그로 기록하려면 환경 변수 ULTRALYTICS_AMBAPB_DEBUG=1를 설정하십시오.
Cavalry 바이너리로 변환#
AmbaPB 체크포인트가 호스트 검증을 통과한 후, SDK 컴파일 가이드에 따라 SDK 컴파일 도구를 사용하여 타겟 장치용 Cavalry 바이너리로 변환합니다. 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 종속성이 없는 더 간단한 워크플로를 위해 일부 런타임 성능 및 양자화된 accuracy를 희생합니다.
실제 애플리케이션#
Ambarella CVflow SoC에서 실행되는 Ultralytics YOLO 모델은 엣지에서 상시 작동하는 비전 기능을 제공합니다:
- AI 보안 카메라: 3W 미만의 전력 예산으로 4K IP 카메라에서 사람과 차량을 실시간으로 감지합니다.
- 드론 및 로보틱스: 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 가이드를 참조하십시오. 전체 내보내기 형식 목록은 내보내기 모드 문서와 통합 페이지를 참조하십시오.
FAQ#
아니요.
format="ambarella"대상은 없습니다. ONNX로 내보내고(선택적으로amba_config을 통해 SpongeTorch 압축 사용), Ambarella SDK 컴파일 도구를 사용하여 오프라인으로 ONNX 모델을 AmbaPB로 컴파일합니다.AI 카메라용 CV72/CV75 제품군과 드론 및 로보틱스용 CV5/CV52를 포함하여 SDK 컴파일 도구가 지원하는 모든 CVflow 기반 SoC를 타겟으로 지정할 수 있습니다.
amba_chipset인수는 SpongeTorch의 최적화 타겟을 구성하며, 컴파일할 때 일치하는 타겟을 별도로 선택하십시오. 허용되는 칩셋 문자열 및 가용성은 설치된 SDK 릴리스에 따라 다릅니다.SpongeTorch는 (Caffe 및 TensorFlow 변형도 있는) Ambarella의 SpongeKit 모델 압축 라이브러리의 PyTorch 버전이며, 학습 시간 비정형 가지치기(양자화 인식 학습은 향후 릴리스 예정)를 위해 Ambarella 포크의 Ultralytics에 통합되어 있습니다. 이는 선택 사항입니다. 일반 Ultralytics ONNX 내보내기도 자체적으로 양자화를 수행하는 SDK 컴파일 도구로 컴파일할 수 있으며, 이 경우 런타임 성능과 양자화된 accuracy에 약간의 비용이 발생합니다.
이들은 독점적이며 PyPI에 없습니다. Ambarella Developer Zone에 등록하여 SDK 액세스를 요청하십시오. SDK에는 컴파일 도구(
cvflowbackend포함)가 포함되어 있으며, 별도로 배포되는spongetorchwheel이 함께 제공됩니다.Ambarella 포크가 설치된 상태로
yolo val model=model.ambapb.ckpt.onnx data=your_data.yaml을 실행합니다. AmbaPB 백엔드는 CVflow AI 엔진에서 실행될 때와 같이 컴파일된 모델을 실행하므로, 보고된 mAP에는 모든 컴파일러 양자화 효과가 포함됩니다.