Ultralytics YOLO27:

Ultralytics YOLO 모델용 Ambarella CVflow 내보내기#

Ultralytics YOLO 모델을 Ambarella SoC에 배포하려면 Ambarella 컴파일 도구를 사용해 모델을 컴파일해야 하며, CVflow 아키텍처에 최적화된 모델은 추론 시 더 높은 성능을 발휘합니다. 이 Ultralytics 포크는 Ambarella의 SpongeTorch 압축 툴킷을 학습, 검증, 내보내기 파이프라인에 직접 통합하여 개발자가 Ambarella 하드웨어에 효율적으로 배포할 수 있는 최적화된 모델을 생성하도록 지원합니다.

이 가이드에서는 전체 파이프라인을 확인할 수 있는 워크플로 개요를 참고하여, 압축을 고려한 학습부터 디바이스 내 추론까지 현재의 객체 탐지 배포 워크플로를 설명합니다.

AmbaPB 체크포인트 형식은 CVflow 계산 프리미티브를 지원하고 SDK 도구가 생성한 아티팩트를 패키징하는 ONNX IR 사양의 Ambarella 전용 확장입니다. 이는 배포 전에 컴파일된 모델의 정확도를 검증하는 데 사용하는 호스트 측 아티팩트이며, 타깃 디바이스용으로 별도 생성되는 Cavalry 바이너리가 보드에서 실행됩니다.

참고

이 워크플로에는 PyPI에서 제공되지 않는 독점 Ambarella SDK 구성 요소가 필요합니다. 필요한 SDK 패키지를 받으려면 Ambarella Developer Zone에 등록하고 Cooper™ Developer Platform을 통해 액세스를 요청하세요.

지원

이 통합은 Ambarella에서 유지 관리합니다. 포크, SpongeTorch 또는 SDK 관련 문제는 Ambarella 지원팀에 문의하세요.

Ambarella란 무엇인가요?#

캘리포니아주 산타클라라에 본사를 둔 Ambarella는 엣지 AI SoC를 설계하는 반도체 기업입니다. Ambarella 프로세서는 이미지 신호 처리, 비디오 인코딩, 온칩 AI 연산을 결합하며, 보안, 자동차, 로보틱스, 산업 및 소비자용 디바이스에 사용됩니다.

CVflow란 무엇인가요?#

CVflow는 Ambarella의 비전 처리 아키텍처입니다. CPU 및 GPU와 별도로 전용 비전 엔진을 사용하여 컴퓨터 비전 및 신경망 워크로드를 실행합니다. PyTorch와 같은 프레임워크로 학습한 모델은 엔진에서 실행하기 전에 Ambarella SDK를 사용해 CVflow 네이티브 형식으로 컴파일합니다.

현재 CVflow SoC 제품군과 일반적인 적용 분야:

SoC 제품군일반적인 적용 분야
CV72 / CV754K AI 보안 카메라, 스마트 카메라, 산업용 비전
CV5 / CV52드론, 액션 카메라, 로보틱스, 멀티 카메라 시스템
N1-655온프레미스 생성형 AI 및 멀티 스트림 비디오 분석 장치

Ambarella에 YOLO를 배포하는 이유#

  • 와트당 성능: CVflow SoC는 상시 작동하는 엣지 AI를 위해 설계되었으며, 카메라급 전력 예산 내에서 실시간 객체 탐지를 수행합니다.
  • 압축을 고려한 학습: SpongeTorch는 학습 중 가지치기를 적용하여 CVflow 배포에 적합하도록 모델을 더 희소하고 효율적으로 만들면서도 정확도를 유지하도록 지원합니다.
  • 통합 카메라 파이프라인: Ambarella SoC는 이미지 신호 프로세서(ISP), 초고화질 비디오 인코딩, CVflow를 결합하여 낮은 전력 소비로 다양한 카메라 시스템을 지원하므로, 단일 Ambarella SoC가 전체 AI 카메라 파이프라인을 처리합니다.

워크플로 개요#

파이프라인은 6단계로 구성됩니다:

  1. 압축을 고려한 학습 — SpongeKit 구성 파일(amba_config)을 사용하여 학습하면 SpongeTorch가 학습 중 점진적으로 비구조적 가지치기를 적용합니다. 학습 후 양자화(PTQ)의 정확도가 허용 수준에 미치지 못하는 경우 SpongeTorch는 양자화 인식 학습(QAT)도 지원하지만, 해당 경로는 아직 이 Ultralytics 통합에 연결되지 않았으며 향후 릴리스에 포함될 예정입니다.
  2. ONNX 내보내기 — 동일한 amba_config을 사용하여 압축된 체크포인트를 내보내고, ONNX 그래프에 압축 구조를 보존합니다.
  3. 컴파일 — SDK 컴파일 도구로 ONNX 모델을 AmbaPB 체크포인트로 컴파일하면, CVflow 엔진용 PTQ가 적용됩니다.
  4. 호스트 검증 — AmbaPB 백엔드를 통해 컴파일된 *.ambapb.ckpt.onnx 모델을 Ultralytics predict/val로 실행하여 배포 전 정확도를 확인합니다.
  5. Cavalry 변환 — 검증된 AmbaPB 체크포인트를 SDK 도구로 Cavalry 바이너리로 변환합니다.
  6. 디바이스에서 실행 — 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-*.whl

AutoBackend는 SDK 컴파일 도구의 tv2 명령(tv2 -libpath cvflowbackend)을 통해 cvflowbackend을 찾으므로, 컴파일된 모델을 사용해 추론이나 검증을 수행하기 전에 SDK 컴파일 도구를 설치하고 PATH에 추가해야 합니다.

SpongeKit 구성 파일#

SpongeTorch는 가지치기 단계, 희소성 목표, 압축 일정을 정의하는 SpongeKit 구성 파일(protobuf 텍스트 형식, .prototxt)을 사용합니다. Ambarella SDK 릴리스에서 예제 구성 파일과 해당 스키마 문서를 확인하세요. 학습, 검증, 배포 간 일관성을 유지하려면 검증 중 모델을 다시 준비해야 할 때 학습 구성을 사용하고, 압축된 체크포인트를 내보낼 때도 항상 동일한 구성을 사용하세요.

Amba 인수#

두 인수가 train, val, export 모드에서 SpongeTorch 통합을 제어합니다:

인수유형기본값설명
amba_configstrNonespongetorch.prepare()에 전달되는 SpongeKit 구성 파일 경로입니다. 압축을 고려한 학습과 SpongeTorch 기반 내보내기를 활성화합니다.
amba_chipsetstrNonespongetorch.set_target_chipset()에 전달되는 타깃 칩셋 이름입니다(예: CV72).

이 포크에는 범용 내보내기 인수도 추가되어 있습니다:

인수유형기본값설명
export_filestrNone사용자 지정 내보내기 출력 경로/이름입니다(예: '/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 컴파일 가이드에 따라 SDK 컴파일 도구를 사용하여 내보낸 ONNX 모델을 타깃 칩셋용으로 컴파일합니다. 도구는 CVflow AI 엔진에 그래프를 매핑하면서 PTQ, 스케줄링, 메모리 계획을 적용하고, 호스트 검증용 AmbaPB 체크포인트를 생성합니다.

PTQ는 보정 이미지(SDK 컴파일 가이드에 설명된 대로 준비)를 사용해 INT8 양자화를 적용합니다. 컴파일 도구는 정확도와 런타임 지연 시간 간 균형을 맞춥니다. 더 많은 연산을 INT8로 매핑하면 지연 시간이 줄어들지만 정확도가 낮아질 수 있으며, 더 많은 연산을 FP16으로 유지하면 지연 시간이 늘어나는 대신 정확도가 보존됩니다. 지연 시간 예산에 필요한 INT8 수준에서 PTQ가 정확도 목표를 달성하지 못하면 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 파일이 컴파일된 모델 옆에 있으면 백엔드는 해당 파일에서 클래스 이름, 스트라이드, 작업 정보를 읽습니다. 백엔드는 기본적으로 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에 의존하지 않는 더 간단한 워크플로를 제공하는 대신 런타임 성능과 양자화 후 정확도가 일부 낮아질 수 있습니다.

실제 적용 사례#

Ambarella CVflow SoC에서 실행되는 Ultralytics YOLO 모델은 엣지에서 상시 작동하는 비전 기능을 지원합니다:

  • AI 보안 카메라: 3W 미만의 전력 예산으로 4K IP 카메라에서 사람과 차량을 실시간 탐지합니다.
  • 드론 및 로보틱스: CV5급 칩에서 탐색, 검사, 배송을 위한 온보드 객체 탐지 및 추적을 수행합니다.
  • 산업 및 소매 분석: 엣지 장치에서 멀티 스트림 인원 계수, PPE 탐지, 선반 모니터링을 수행합니다.

요약#

이 가이드에서는 Ultralytics YOLO 모델을 Ambarella CVflow SoC에 배포하는 현재 워크플로를 설명했습니다. 여기에는 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로 내보낸 다음(SpongeTorch를 통해 amba_config을 사용한 압축은 선택 사항), 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에는 컴파일러의 모든 양자화 효과가 반영됩니다.

댓글