Ultralytics YOLO27:
Get Started

Ultralytics YOLO11용 Sony IMX500 내보내기#

이 가이드에서는 Sony IMX500 센서를 탑재한 Raspberry Pi AI Camera에 Ultralytics YOLO11 모델을 내보내고 배포하는 방법을 다룹니다.

Raspberry Pi AI Camera와 같이 연산 성능이 제한된 기기에 컴퓨터 비전 모델을 배포하는 일은 까다로울 수 있습니다. 더 빠른 성능에 최적화된 모델 형식을 사용하면 큰 차이를 만들 수 있습니다.

IMX500 모델 형식은 신경망의 빠른 성능을 제공하면서 전력 소비를 최소화하도록 설계되었습니다. 이를 통해 Ultralytics YOLO11 모델을 고속 및 저전력 추론에 맞게 최적화할 수 있습니다. 이 가이드에서는 모델을 IMX500 형식으로 내보내고 배포하는 방법과 함께, 모델이 Raspberry Pi AI Camera에서 원활하게 실행되도록 설정하는 방법을 살펴봅니다.

Raspberry Pi AI Camera with Sony IMX500 sensor

IMX500으로 내보내야 하는 이유#

Sony의 IMX500 지능형 비전 센서는 엣지 AI 처리 분야의 판도를 바꿀 하드웨어입니다. 온칩 AI 기능을 갖춘 세계 최초의 지능형 비전 센서입니다. 이 센서는 데이터 처리 병목 현상, 개인정보 보호 문제, 성능 제한 등 엣지 AI의 여러 과제를 해결하는 데 도움이 됩니다. 다른 센서가 이미지와 프레임을 전달하는 데 그치는 반면, IMX500은 전체적인 상황을 파악합니다. 센서에서 직접 데이터를 처리하므로 기기가 실시간으로 인사이트를 생성할 수 있습니다.

YOLO11 모델용 Sony IMX500 내보내기#

IMX500은 데이터를 클라우드로 보내 처리할 필요 없이 센서에서 직접 처리하도록 설계되어, 기기의 데이터 처리 방식을 혁신합니다.

IMX500은 양자화된 모델과 함께 작동합니다. 양자화는 정확도를 크게 떨어뜨리지 않으면서 모델 크기를 줄이고 속도를 높입니다. 엣지 컴퓨팅의 제한된 리소스에 적합하며, 지연 시간을 줄이고 데이터를 로컬에서 빠르게 처리함으로써 애플리케이션이 신속하게 응답할 수 있도록 합니다. 또한 데이터를 원격 서버로 전송하지 않으므로 로컬 처리를 통해 사용자 데이터의 개인정보와 보안을 유지할 수 있습니다.

IMX500 주요 기능:

  • 메타데이터 출력: 이미지만 전송하는 대신 IMX500은 이미지와 메타데이터(추론 결과)를 모두 출력할 수 있으며, 데이터 크기와 대역폭을 줄이고 비용을 절감하기 위해 메타데이터만 출력할 수도 있습니다.
  • 개인정보 보호 문제 해결: IMX500은 기기에서 데이터를 처리하여 개인정보 보호 문제를 해결하므로, 인원수 집계 및 재실 인원 추적과 같은 사람 중심 애플리케이션에 적합합니다.
  • 실시간 처리: 빠른 센서 내 처리를 통해 실시간 의사 결정을 지원하므로 자율 시스템과 같은 엣지 AI 애플리케이션에 적합합니다.

시작하기 전에: 최상의 결과를 얻으려면 모델 학습 가이드, 데이터 준비 가이드, 하이퍼파라미터 튜닝 가이드를 따라 YOLO11 모델을 내보내기에 적합하게 준비하세요.

지원 작업#

IMX500 내보내기는 Ultralytics 작업 7개 중 4개를 지원하며, YOLOv8n 및 YOLO11n에만 사용할 수 있습니다. 다른 모델 계열, 스케일 및 아키텍처는 지원되지 않으며, 시맨틱 세그멘테이션, OBB 또는 깊이 추정 모델을 내보내면 오류가 발생합니다.

작업YOLOv8YOLO11YOLO26
탐지✅✅❌
세그멘테이션✅✅❌
시맨틱❌❌❌
깊이❌❌❌
분류✅✅❌
포즈✅✅❌
OBB❌❌❌

사용 예시#

Ultralytics YOLO11 모델을 IMX500 형식으로 내보내고 내보낸 모델로 추론을 실행합니다.

IMX500 형식은 내보내기, 예측, 검증 모드를 지원합니다. 추론과 검증은 Raspberry Pi AI Camera(IMX500)에서 실행됩니다.

참고

여기서는 모델이 예상대로 작동하는지 확인하기 위해 추론을 실행합니다. 하지만 Raspberry Pi AI Camera에 배포하고 추론을 실행하려면 배포 환경에서 IMX500 내보내기 사용 섹션으로 이동하세요.

객체 감지
from ultralytics import YOLO

# YOLO11n PyTorch 모델을 로드합니다
model = YOLO("yolo11n.pt")

# 모델을 내보냅니다
model.export(format="imx", data="coco8.yaml")  # 기본적으로 PTQ 양자화를 사용해 내보냅니다

# 내보낸 모델을 로드합니다
imx_model = YOLO("yolo11n_imx_model")

# 추론 실행
results = imx_model("https://ultralytics.com/images/bus.jpg")
포즈 추정
from ultralytics import YOLO

# YOLO11n-pose PyTorch 모델을 로드합니다
model = YOLO("yolo11n-pose.pt")

# 모델을 내보냅니다
model.export(format="imx", data="coco8-pose.yaml")  # 기본적으로 PTQ 양자화를 사용해 내보냅니다

# 내보낸 모델을 로드합니다
imx_model = YOLO("yolo11n-pose_imx_model")

# 추론 실행
results = imx_model("https://ultralytics.com/images/bus.jpg")
분류
from ultralytics import YOLO

# YOLO11n-cls PyTorch 모델을 로드합니다
model = YOLO("yolo11n-cls.pt")

# 모델을 내보냅니다
model.export(format="imx", data="imagenet10")  # 기본적으로 PTQ 양자화를 사용해 내보냅니다

# 내보낸 모델을 로드합니다
imx_model = YOLO("yolo11n-cls_imx_model")

# 추론 실행
results = imx_model("https://ultralytics.com/images/bus.jpg", imgsz=224)
인스턴스 분할
from ultralytics import YOLO

# YOLO11n-seg PyTorch 모델을 로드합니다
model = YOLO("yolo11n-seg.pt")

# 모델을 내보냅니다
model.export(format="imx", data="coco8-seg.yaml")  # 기본적으로 PTQ 양자화를 사용해 내보냅니다

# 내보낸 모델을 로드합니다
imx_model = YOLO("yolo11n-seg_imx_model")

# 추론 실행
results = imx_model("https://ultralytics.com/images/bus.jpg")
검증
from ultralytics import YOLO

# 내보낸 IMX500 모델을 로드합니다
model = YOLO("yolo11n_imx_model")

# COCO8 데이터셋에서 정확도 검증
metrics = model.val(data="coco8.yaml")
경고

IMX 내보내기는 Python 3.9 이상을 사용하는 Linux에서만 지원되며 Java 17 이상이 필요합니다. Ultralytics 패키지는 실행 중에 추가 내보내기 종속 항목을 설치합니다. 내보내기 명령을 처음 실행할 때 올바르게 작동하도록 콘솔을 다시 시작해야 할 수 있습니다.

내보내기 인수#

인수유형기본값설명
formatstr'imx'내보낸 모델의 대상 형식으로, 다양한 배포 환경과의 호환성을 정의합니다.
imgszint 또는 tuple640모델 입력에 사용할 이미지 크기입니다. 정사각형 이미지에는 정수를 사용하고, 특정 크기에는 튜플 (height, width)을 사용할 수 있습니다.
quantizeint 또는 str8/auto양자화 정밀도입니다. IMX500에는 8(INT8/PTQ)이 필요하며 자동으로 활성화됩니다. FP32 및 FP16 전용 내보내기는 지원되지 않습니다. 더 이상 사용되지 않는 half/int8 플래그를 대체합니다.
datastrNone데이터셋 YAML 경로로, 양자화에 필수입니다. 분류 작업에서는 데이터셋 디렉터리 또는 내장 데이터셋 이름을 사용합니다. 생략하면 Ultralytics가 모델 작업에 맞는 기본 보정 데이터셋을 선택합니다.
fractionfloat, int 또는 list1.0비율, 이미지 수 또는 [train, val, test] 비율/개수로 지정하는 보정 하위 집합입니다. 항목이 두 개인 목록에서는 test이 전체로 설정되고, 0는 건너뜁니다.
nmsbool, 선택 사항None원시 출력(None, 기본값), 내장 NMS(True) 또는 NMS가 없는 헤드(False)를 선택합니다. IMX는 detect, segment, pose 작업에 nms=True이 필요하며 이를 자동으로 선택합니다.
devicestrNone내보내기에 사용할 디바이스를 지정합니다. GPU(device=0) 또는 CPU(device=cpu)입니다.
팁

CUDA를 지원하는 GPU에서 내보내는 경우 더 빠르게 내보내려면 device=0 인수를 전달하세요.

내보내기 프로세스에 관한 자세한 내용은 내보내기에 관한 Ultralytics 문서 페이지를 참조하세요.

내보내기 과정에서 양자화 검증용 ONNX 모델과 <model-name>_imx_model이라는 디렉터리가 생성됩니다. 이 디렉터리에는 IMX500 하드웨어에 배포할 모델을 패키징하는 데 필요한 packerOut.zip 파일이 포함됩니다. 또한 <model-name>_imx_model 폴더에는 모델과 관련된 모든 레이블이 나열된 텍스트 파일(labels.txt)이 포함됩니다.

폴더 구조
yolo11n_imx_model
├── dnnParams.xml
├── labels.txt
├── packerOut.zip
├── model_imx.onnx
├── model_imx_MemoryReport.json
└── model_imx.pbtxt

배포 환경에서 IMX500 내보내기 사용#

Ultralytics YOLO11n 모델을 IMX500 형식으로 내보낸 후 Raspberry Pi AI Camera에 배포하여 추론을 실행할 수 있습니다.

하드웨어 사전 요구 사항#

다음 하드웨어가 있는지 확인하세요.

  1. Raspberry Pi 5 또는 Raspberry Pi 4 Model B
  2. Raspberry Pi AI Camera

Raspberry Pi AI Camera를 Raspberry Pi의 15핀 MIPI CSI 커넥터에 연결한 다음 Raspberry Pi의 전원을 켭니다.

소프트웨어 사전 요구 사항#

참고

이 가이드는 Raspberry Pi 5에서 실행되는 Raspberry Pi OS Bookworm을 사용해 테스트했습니다.

1단계: 터미널 창을 열고 다음 명령을 실행하여 Raspberry Pi 소프트웨어를 최신 버전으로 업데이트합니다.

sudo apt update && sudo apt full-upgrade

2단계: IMX500 센서를 작동하는 데 필요한 IMX500 펌웨어를 설치합니다.

sudo apt install imx500-all

3단계: 변경 사항을 적용하려면 Raspberry Pi를 재부팅합니다.

sudo reboot

4단계: Aitrios Raspberry Pi 애플리케이션 모듈 라이브러리를 설치합니다.

pip install git+https://github.com/SonySemiconductorSolutions/aitrios-rpi-application-module-library.git

5단계: aitrios-rpi-application-module-library 예제에 있는 아래 스크립트를 사용해 YOLO11 객체 감지, 포즈 추정, 분류 및 세그멘테이션을 실행합니다.

참고

이 스크립트를 실행하기 전에 환경에 맞게 model_file 및 labels.txt 디렉터리를 바꾸세요.

Python 스크립트
import numpy as np
from modlib.apps import Annotator
from modlib.devices import AiCamera
from modlib.models import COLOR_FORMAT, MODEL_TYPE, Model
from modlib.models.post_processors import pp_od_yolo_ultralytics

class YOLO(Model):
    """YOLO model for IMX500 deployment."""

    def __init__(self):
        """Initialize the YOLO model for IMX500 deployment."""
        super().__init__(
            model_file="yolo11n_imx_model/packerOut.zip",  # replace with proper directory
            model_type=MODEL_TYPE.CONVERTED,
            color_format=COLOR_FORMAT.RGB,
            preserve_aspect_ratio=False,
        )

        self.labels = np.genfromtxt(
            "yolo11n_imx_model/labels.txt",  # replace with proper directory
            dtype=str,
            delimiter="\n",
        )

    def post_process(self, output_tensors):
        """Post-process the output tensors for object detection."""
        return pp_od_yolo_ultralytics(output_tensors)

device = AiCamera(frame_rate=16)  # Optimal frame rate for maximum FPS of the YOLO model running on the AI Camera
model = YOLO()
device.deploy(model)

annotator = Annotator()

with device as stream:
    for frame in stream:
        detections = frame.detections[frame.detections.confidence > 0.55]
        labels = [f"{model.labels[class_id]}: {score:0.2f}" for _, score, class_id, _ in detections]

        annotator.annotate_boxes(frame, detections, labels=labels, alpha=0.3, corner_radius=10)
        frame.display()

벤치마크#

아래 YOLOv8n, YOLO11n, YOLOv8n-pose, YOLO11n-pose, YOLOv8n-cls 및 YOLO11n-cls 벤치마크는 Ultralytics 팀이 Raspberry Pi AI Camera에서 imx 모델 형식을 사용해 속도와 정확도를 측정한 결과입니다.

모델형식크기(픽셀)packerOut.zip의 크기(MB)mAP50-95(B)추론 시간(ms/이미지)
YOLOv8nimx6402.10.47058.79
YOLO11nimx6402.20.51758.82
YOLOv8n-poseimx6402.00.68758.79
YOLO11n-poseimx6402.10.78862.50
모델형식크기(픽셀)packerOut.zip의 크기(MB)정확도(top1)정확도(top5)추론 시간(ms/이미지)
YOLOv8n-clsimx2242.30.250.533.31
YOLO11n-clsimx2242.30.250.41733.31
참고

위 벤치마크의 검증에는 감지 모델에 COCO128 데이터셋, 포즈 추정 모델에 COCO8-Pose 데이터셋, 분류 모델에 ImageNet10을 사용했습니다.

내부 작동 방식#

Sony IMX500 YOLO model deployment workflow

Sony 모델 압축 툴킷(MCT)#

Sony의 모델 압축 툴킷(MCT)은 양자화와 가지치기를 통해 딥러닝 모델을 최적화하는 강력한 도구입니다. 다양한 양자화 방법을 지원하며, 정확도를 크게 저하시키지 않으면서 모델 크기와 계산 복잡도를 줄이는 고급 알고리즘을 제공합니다. MCT는 리소스가 제한된 디바이스에 모델을 배포하는 데 특히 유용하며, 효율적인 추론과 지연 시간 감소를 보장합니다.

MCT에서 지원하는 기능#

Sony의 MCT는 신경망 모델을 최적화하도록 설계된 다양한 기능을 제공합니다.

  1. 그래프 최적화: 배치 정규화와 같은 레이어를 이전 레이어에 통합하는 등의 방법으로 모델을 더 효율적인 형태로 변환합니다.
  2. 양자화 파라미터 검색: 평균 제곱 오차, 클리핑 없음, 평균 절대 오차와 같은 지표를 사용하여 양자화 노이즈를 최소화합니다.
  3. 고급 양자화 알고리즘:
    • 음수 시프트 보정: 대칭 활성화 양자화로 인한 성능 문제를 해결합니다.
    • 이상치 필터링: z-score를 사용하여 이상치를 탐지하고 제거합니다.
    • 클러스터링: 분포 일치도를 높이기 위해 비균일 양자화 그리드를 사용합니다.
    • 혼합 정밀도 검색: 민감도를 기준으로 레이어마다 서로 다른 양자화 비트 폭을 할당합니다.
  4. 시각화: TensorBoard를 사용하여 모델 성능 인사이트, 양자화 단계 및 비트 폭 구성을 확인합니다.

양자화#

MCT는 모델 크기를 줄이고 추론 속도를 높이기 위해 여러 양자화 방법을 지원합니다.

  1. 학습 후 양자화(PTQ):
    • Keras 및 PyTorch API를 통해 사용할 수 있습니다.
    • 복잡도: 낮음
    • 계산 비용: 낮음(CPU 기준 수분)
  2. 그래디언트 기반 학습 후 양자화(GPTQ):
    • Keras 및 PyTorch API를 통해 사용할 수 있습니다.
    • 복잡도: 중간
    • 계산 비용: 보통(GPU 기준 2~3시간)
  3. 양자화 인식 학습(QAT):
    • 복잡도: 높음
    • 계산 비용: 높음(GPU 기준 12~36시간)

MCT는 가중치와 활성화에 대해 다양한 양자화 방식을 지원합니다.

  1. 2의 거듭제곱(하드웨어 친화적)
  2. 대칭
  3. 균일

구조적 가지치기#

MCT는 특정 하드웨어 아키텍처에 맞게 설계된 구조적 하드웨어 인식 모델 가지치기를 도입합니다. 이 기법은 SIMD 그룹을 가지치기하여 타깃 플랫폼의 단일 명령 다중 데이터(SIMD) 기능을 활용합니다. 이를 통해 모델 크기와 복잡도를 줄이는 동시에 채널 활용률을 최적화하고, 가중치 메모리 사용량을 타깃 리소스 활용에 맞춰 SIMD 아키텍처에 정렬합니다. Keras 및 PyTorch API를 통해 사용할 수 있습니다.

IMX500 변환기 도구(컴파일러)#

IMX500 변환기 도구는 IMX500 툴셋의 핵심 구성 요소로, Sony의 IMX500 센서(예: Raspberry Pi AI Camera)에 배포할 모델을 컴파일할 수 있습니다. 이 도구는 Ultralytics 소프트웨어로 처리한 Ultralytics YOLO11 모델을 변환하여 지정된 하드웨어와 호환되고 효율적으로 작동하도록 지원합니다. 모델 양자화 후 진행되는 내보내기 과정에서는 필수 데이터와 디바이스별 구성을 포함하는 바이너리 파일을 생성하여 Raspberry Pi AI Camera에 배포하는 절차를 간소화합니다.

실제 활용 사례#

IMX500 형식으로 내보내는 기능은 다양한 산업 분야에서 폭넓게 활용할 수 있습니다. 몇 가지 예를 살펴보겠습니다.

  • 엣지 AI 및 IoT: 저전력 디바이스에서 실시간 처리가 필수적인 드론이나 보안 카메라에서 객체 감지를 구현합니다.
  • 웨어러블 디바이스: 건강 모니터링 웨어러블에서 소규모 AI 처리를 위해 최적화된 모델을 배포합니다.
  • 스마트 시티: IMX500으로 내보낸 YOLO11 모델을 사용하여 더 빠른 처리와 최소한의 지연 시간으로 교통 모니터링 및 안전 분석을 수행합니다.
  • 리테일 분석: 판매 시점 관리 시스템이나 스마트 선반에 최적화된 모델을 배포하여 매장 내 모니터링을 향상합니다.

결론#

Ultralytics YOLO11 모델을 Sony의 IMX500 형식으로 내보내면 IMX500 기반 카메라에서 효율적인 추론을 수행하도록 모델을 배포할 수 있습니다. 고급 양자화 기법을 활용하면 정확도를 크게 저하시키지 않으면서 모델 크기를 줄이고 추론 속도를 높일 수 있습니다.

자세한 정보와 가이드라인은 Sony의 IMX500 웹사이트를 참조하세요.

자주 묻는 질문#

  • YOLO11 모델을 IMX500 형식으로 내보내려면 Python API 또는 CLI 명령을 사용하세요.

    from ultralytics import YOLO
    
    model = YOLO("yolo11n.pt")
    model.export(format="imx")  # 기본적으로 PTQ 양자화를 사용하여 내보냅니다.

    내보내기 과정에서 배포에 필요한 파일이 포함된 디렉터리가 생성되며, 여기에는 packerOut.zip이 포함됩니다.

  • IMX500 형식은 엣지 배포에 여러 가지 중요한 이점을 제공합니다.

    • 온칩 AI 처리를 통해 지연 시간과 전력 소비를 줄입니다.
    • 이미지만 출력하는 대신 이미지와 메타데이터(추론 결과)를 모두 출력합니다.
    • 클라우드에 의존하지 않고 데이터를 로컬에서 처리하여 개인정보 보호를 강화합니다.
    • 시간에 민감한 애플리케이션에 적합한 실시간 처리 기능을 제공합니다.
    • 리소스가 제한된 디바이스에서 효율적으로 모델을 배포할 수 있도록 양자화를 최적화합니다.
  • IMX500 모델을 배포하려면 다음이 필요합니다.

    하드웨어:

    • Raspberry Pi 5 또는 Raspberry Pi 4 Model B
    • IMX500 센서가 탑재된 Raspberry Pi AI Camera

    소프트웨어:

    • Raspberry Pi OS Bookworm
    • IMX500 펌웨어 및 도구(sudo apt install imx500-all)
  • Raspberry Pi AI Camera에서 수행한 Ultralytics 벤치마크 기준:

    • YOLO11n은 이미지당 추론 시간 58.82ms를 달성합니다.
    • COCO128 데이터셋에서 mAP50-95는 0.517입니다.
    • 양자화 후 모델 크기는 2.2MB에 불과합니다.

    이는 IMX500 형식이 엣지 AI 애플리케이션에 적합한 우수한 정확도를 유지하면서 효율적인 실시간 추론을 제공함을 보여줍니다.

댓글