Ultralytics YOLO11용 Sony IMX500 내보내기#
이 가이드에서는 Sony IMX500 센서가 탑재된 Raspberry Pi AI Camera로 Ultralytics YOLO11 모델을 내보내고 배포하는 방법을 다룹니다.
Raspberry Pi AI Camera와 같이 연산 성능이 제한된 디바이스에 컴퓨터 비전 모델을 배포하는 작업은 까다로울 수 있습니다. 더 빠른 성능에 최적화된 모델 형식을 사용하면 큰 차이를 만들 수 있습니다.
IMX500 모델 형식은 신경망에 빠른 성능을 제공하면서도 최소한의 전력만 사용하도록 설계되었습니다. 이를 통해 고속 및 저전력 추론을 위해 Ultralytics YOLO11 모델을 최적화할 수 있습니다. 이 가이드에서는 모델을 IMX500 형식으로 내보내고 배포하는 방법을 설명하며, Raspberry Pi AI Camera에서 모델이 효율적으로 실행되도록 지원합니다.
IMX500으로 내보내야 하는 이유#
Sony의 IMX500 Intelligent Vision Sensor는 엣지 AI 처리 분야의 판도를 바꾸는 하드웨어입니다. 이 제품은 온칩 AI 기능을 갖춘 세계 최초의 지능형 비전 센서입니다. 이 센서는 데이터 처리 병목, 개인정보 보호 문제, 성능 제한 등 엣지 AI의 여러 문제를 해결하는 데 도움을 줍니다. 다른 센서가 단순히 이미지와 프레임을 전달하기만 하는 것과 달리 IMX500은 데이터 전체를 처리합니다. 센서에서 직접 데이터를 처리하므로 디바이스가 실시간으로 인사이트를 생성할 수 있습니다.
YOLO11 모델용 Sony IMX500 내보내기#
IMX500은 클라우드로 데이터를 전송해 처리할 필요 없이 센서에서 직접 데이터를 처리하는 방식을 혁신하도록 설계되었습니다.
IMX500은 양자화된 모델과 함께 작동합니다. 양자화를 사용하면 정확도를 크게 낮추지 않으면서 모델을 더 작고 빠르게 만들 수 있습니다. 이는 엣지 컴퓨팅의 제한된 리소스에 적합하며, 지연 시간을 줄이고 클라우드에 의존하지 않고 로컬에서 데이터를 신속하게 처리하여 애플리케이션이 빠르게 응답하도록 합니다. 로컬 처리는 사용자 데이터를 원격 서버로 전송하지 않으므로 개인정보를 안전하게 보호할 수 있습니다.
IMX500 주요 기능:
- 메타데이터 출력: IMX500은 이미지만 전송하는 대신 이미지와 메타데이터(추론 결과)를 모두 출력할 수 있으며, 데이터 크기와 대역폭 및 비용을 줄이기 위해 메타데이터만 출력할 수도 있습니다.
- 개인정보 보호 문제 해결: 디바이스에서 데이터를 처리하는 IMX500은 개인정보 보호 문제를 해결하므로 사람 수 카운팅 및 점유율 추적과 같은 사람 중심 애플리케이션에 적합합니다.
- 실시간 처리: 빠른 센서 내 처리는 실시간 의사 결정을 지원하므로 자율 시스템과 같은 엣지 AI 애플리케이션에 적합합니다.
시작하기 전에: 최상의 결과를 얻으려면 모델 학습 가이드, 데이터 준비 가이드, 하이퍼파라미터 튜닝 가이드를 따라 YOLO11 모델을 내보내기에 적합한 상태로 준비했는지 확인하세요.
지원되는 작업#
IMX500 내보내기는 7가지 Ultralytics 작업 중 4가지를 지원하며, YOLOv8n 및 YOLO11n에서만 사용할 수 있습니다. 다른 모델 제품군, 스케일 및 아키텍처는 지원되지 않으며, 의미론적 세그멘테이션, OBB 또는 깊이 추정 모델을 내보내면 오류가 발생합니다.
사용 예시#
Ultralytics YOLO11 모델을 IMX500 형식으로 내보내고 내보낸 모델로 추론을 실행합니다.
IMX500 형식은 내보내기, 예측, 검증 모드를 지원합니다. 추론 및 검증은 Raspberry Pi AI Camera(IMX500)에서 실행됩니다.
여기서는 모델이 예상대로 작동하는지 확인하기 위해 추론만 수행합니다. 그러나 Raspberry Pi AI Camera에서 배포 및 추론을 수행하려면 배포에서 IMX500 내보내기 사용 섹션으로 이동하세요.
from ultralytics import YOLO
# Load a YOLO11n PyTorch model
model = YOLO("yolo11n.pt")
# Export the model
model.export(format="imx", data="coco8.yaml") # exports with PTQ quantization by default
# Load the exported model
imx_model = YOLO("yolo11n_imx_model")
# Run inference
results = imx_model("https://ultralytics.com/images/bus.jpg")from ultralytics import YOLO
# Load a YOLO11n-pose PyTorch model
model = YOLO("yolo11n-pose.pt")
# Export the model
model.export(format="imx", data="coco8-pose.yaml") # exports with PTQ quantization by default
# Load the exported model
imx_model = YOLO("yolo11n-pose_imx_model")
# Run inference
results = imx_model("https://ultralytics.com/images/bus.jpg")from ultralytics import YOLO
# Load a YOLO11n-cls PyTorch model
model = YOLO("yolo11n-cls.pt")
# Export the model
model.export(format="imx", data="imagenet10") # exports with PTQ quantization by default
# Load the exported model
imx_model = YOLO("yolo11n-cls_imx_model")
# Run inference
results = imx_model("https://ultralytics.com/images/bus.jpg", imgsz=224)from ultralytics import YOLO
# Load a YOLO11n-seg PyTorch model
model = YOLO("yolo11n-seg.pt")
# Export the model
model.export(format="imx", data="coco8-seg.yaml") # exports with PTQ quantization by default
# Load the exported model
imx_model = YOLO("yolo11n-seg_imx_model")
# Run inference
results = imx_model("https://ultralytics.com/images/bus.jpg")from ultralytics import YOLO
# Load the exported IMX500 model
model = YOLO("yolo11n_imx_model")
# Validate accuracy on the COCO8 dataset
metrics = model.val(data="coco8.yaml")Ultralytics 패키지는 런타임에 추가 내보내기 종속 항목을 설치합니다. 내보내기 명령을 처음 실행할 때 올바르게 작동하도록 콘솔을 다시 시작해야 할 수 있습니다.
내보내기 인수#
| 인수 | 유형 | 기본값 | 설명 |
|---|---|---|---|
format | str | 'imx' | 내보낸 모델의 대상 형식으로, 다양한 deployment environment와의 호환성을 정의합니다. |
imgsz | int 또는 tuple | 640 | 모델 입력에 사용할 이미지 크기입니다. 정사각형 이미지에는 정수를 사용하고, 특정 크기에는 (height, width) tuple을 사용할 수 있습니다. |
quantize | int 또는 str | 8/auto | 양자화 정밀도입니다. IMX500에서는 8 (INT8/PTQ)이 자동으로 활성화되며, "w8a16"은 FP16 활성화와 함께 INT8 가중치를 내보냅니다. FP32 및 FP16 전용 내보내기는 지원되지 않습니다. 더 이상 사용되지 않는 half/int8 플래그를 대체합니다. |
data | str | None | 양자화에 필요한 데이터셋 YAML 경로입니다. 분류의 경우 데이터셋 디렉터리 또는 기본 제공 데이터셋 이름을 사용합니다. quantize=8 또는 'w8a16'와 함께 생략하면 Ultralytics가 모델 작업에 적합한 기본 보정 데이터셋을 선택합니다. |
fraction | float, int 또는 list | 1.0 | Calibration subset은 비율, 이미지 수 또는 [train, val, test] 비율/개수로 지정합니다. 두 항목으로 구성된 목록에서는 test을 전체로 유지하고 0를 건너뜁니다. |
nms | bool, 선택 사항 | None | 원시 출력(None, 기본값), 임베디드 NMS(True) 또는 NMS 미포함 헤드(False)를 선택합니다. IMX는 감지, 분할 및 포즈에 nms=True을 필요로 하며 이를 자동으로 선택합니다. |
device | str | None | 내보내기에 사용할 장치를 지정합니다: 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에 배포하여 추론을 실행할 수 있습니다.
하드웨어 사전 요구 사항#
다음 하드웨어가 있는지 확인하세요.
- Raspberry Pi 5 또는 Raspberry Pi 4 Model B
- 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-upgrade2단계: IMX500 센서를 작동하는 데 필요한 IMX500 펌웨어를 설치합니다.
sudo apt install imx500-all3단계: 변경 사항을 적용하려면 Raspberry Pi를 재부팅합니다.
sudo reboot4단계: Aitrios Raspberry Pi 애플리케이션 모듈 라이브러리를 설치합니다.
pip install git+https://github.com/SonySemiconductorSolutions/aitrios-rpi-application-module-library.git5단계: aitrios-rpi-application-module-library 예제에 제공된 다음 스크립트를 사용하여 YOLO11 객체 감지, 포즈 추정, 분류 및 세그멘테이션을 실행합니다.
이러한 스크립트를 실행하기 전에 환경에 맞게 model_file 및 labels.txt 디렉터리를 교체하세요.
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/im) |
|---|---|---|---|---|---|
| YOLOv8n | imx | 640 | 2.1 | 0.470 | 58.79 |
| YOLO11n | imx | 640 | 2.2 | 0.517 | 58.82 |
| YOLOv8n-pose | imx | 640 | 2.0 | 0.687 | 58.79 |
| YOLO11n-pose | imx | 640 | 2.1 | 0.788 | 62.50 |
| 모델 | 형식 | 크기(픽셀) | packerOut.zip 크기(MB) | acc (top1) | acc (top5) | 추론 시간 (ms/im) |
|---|---|---|---|---|---|---|
| YOLOv8n-cls | imx | 224 | 2.3 | 0.25 | 0.5 | 33.31 |
| YOLO11n-cls | imx | 224 | 2.3 | 0.25 | 0.417 | 33.31 |
위 벤치마크에 대한 검증은 객체 검출 모델의 경우 COCO128 데이터셋을, 자세 추정 모델의 경우 COCO8-Pose 데이터셋을, 분류 모델의 경우 ImageNet10 데이터셋을 사용하여 수행되었습니다.
내부 작동 원리#
Sony 모델 압축 툴킷(MCT)#
Sony의 모델 압축 툴킷(MCT)은 양자화 및 가지치기를 통해 딥러닝 모델을 최적화하는 강력한 도구입니다. 다양한 양자화 방법을 지원하고, 정확도를 크게 희생하지 않으면서 모델 크기와 계산 복잡도를 줄이는 고급 알고리즘을 제공합니다. MCT는 리소스가 제한된 디바이스에 모델을 배포할 때 특히 유용하며, 효율적인 추론과 짧은 지연 시간을 보장합니다.
MCT 지원 기능#
Sony의 MCT는 신경망 모델을 최적화하도록 설계된 다양한 기능을 제공합니다.
- 그래프 최적화: 배치 정규화와 같은 레이어를 앞선 레이어에 폴딩하여 모델을 더 효율적인 버전으로 변환합니다.
- 양자화 파라미터 검색: 평균 제곱 오차, 클리핑 없음, 평균 절대 오차와 같은 메트릭을 사용하여 양자화 노이즈를 최소화합니다.
- 고급 양자화 알고리즘:
- 음수 시프트 보정: 대칭 활성화 양자화로 인한 성능 문제를 해결합니다.
- 이상치 필터링: z-score를 사용하여 이상치를 감지하고 제거합니다.
- 클러스터링: 더 나은 분포 매칭을 위해 비균일 양자화 그리드를 사용합니다.
- 혼합 정밀도 검색: 민감도에 따라 레이어별로 서로 다른 양자화 비트 폭을 할당합니다.
- 시각화: TensorBoard를 사용하여 모델 성능 인사이트, 양자화 단계 및 비트 폭 구성을 확인합니다.
양자화#
MCT는 모델 크기를 줄이고 추론 속도를 향상하기 위해 여러 양자화 방법을 지원합니다.
- 학습 후 양자화(PTQ):
- Keras 및 PyTorch API를 통해 사용할 수 있습니다.
- 복잡도: 낮음
- 계산 비용: 낮음(CPU 기준 수분)
- 그래디언트 기반 학습 후 양자화(GPTQ):
- Keras 및 PyTorch API를 통해 사용할 수 있습니다.
- 복잡도: 중간
- 계산 비용: 중간(GPU 기준 2~3시간)
- 양자화 인식 학습(QAT):
- 복잡도: 높음
- 계산 비용: 높음(GPU 기준 12~36시간)
MCT는 가중치와 활성화를 위한 다양한 양자화 방식을 지원합니다.
- 2의 거듭제곱(하드웨어 친화적)
- 대칭
- 균일
구조적 가지치기#
MCT는 특정 하드웨어 아키텍처에 맞게 설계된 구조적이고 하드웨어를 고려한 모델 가지치기를 도입합니다. 이 기법은 SIMD 그룹을 가지치기하여 대상 플랫폼의 단일 명령어 다중 데이터(SIMD) 기능을 활용합니다. 이를 통해 모델 크기와 복잡도를 줄이는 동시에 채널 활용을 최적화하고, 가중치 메모리 사용량을 대상으로 한 리소스 활용을 위해 SIMD 아키텍처에 맞춥니다. Keras 및 PyTorch API를 통해 사용할 수 있습니다.
IMX500 변환기 도구(컴파일러)#
IMX500 Converter Tool은 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 웹사이트를 참조하세요.
FAQ#
YOLO11 모델을 IMX500 형식으로 내보내려면 Python API 또는 CLI 명령을 사용하세요.
from ultralytics import YOLO model = YOLO("yolo11n.pt") model.export(format="imx") # Exports with PTQ quantization by default내보내기 프로세스에서는
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 애플리케이션에서 우수한 정확도를 유지하면서 효율적인 실시간 추론을 제공한다는 것을 보여줍니다.