Ultralytics YOLO11을 위한 Sony IMX500 내보내기#
이 가이드는 Ultralytics YOLO11 모델을 Sony IMX500 센서가 탑재된 Raspberry Pi AI Camera로 내보내고 배포하는 방법을 다룹니다.
연산 능력이 제한된 디바이스(예: Raspberry Pi AI Camera)에 컴퓨터 비전 모델을 배포하는 것은 까다로울 수 있습니다. 더 빠른 성능을 위해 최적화된 모델 포맷을 사용하면 큰 차이를 만들 수 있습니다.
IMX500 모델 포맷은 신경망에 빠른 성능을 제공하면서 최소한의 전력을 소비하도록 설계되었습니다. 이를 통해 Ultralytics YOLO11 모델을 고속 및 저전력 추론에 최적화할 수 있습니다. 본 가이드에서는 Raspberry Pi AI Camera에서 모델이 잘 작동하도록 지원하면서 IMX500 포맷으로 모델을 내보내고 배포하는 과정을 안내합니다.
왜 IMX500으로 내보내야 합니까?#
소니의 IMX500 Intelligent Vision Sensor는 엣지 AI 프로세싱 분야에서 판도를 바꿀 혁신적인 하드웨어입니다. 이 제품은 온칩 AI 기능을 갖춘 세계 최초의 지능형 비전 센서입니다. 이 센서는 데이터 처리 병목 현상, 개인정보 보호 우려, 성능 한계를 포함하여 엣지 AI의 많은 과제를 극복하는 데 도움을 줍니다. 다른 센서들이 단순히 이미지와 프레임을 전달하는 것에 그치는 반면, IMX500은 전체적인 맥락을 제공합니다. 센서에서 직접 데이터를 처리하므로 디바이스가 실시간으로 인사이트를 생성할 수 있습니다.
YOLO11 모델을 위한 Sony IMX500 내보내기#
IMX500은 처리를 위해 데이터를 클라우드로 보낼 필요 없이 센서에서 직접 데이터를 처리하는 방식을 혁신하도록 설계되었습니다.
IMX500은 양자화된 모델과 함께 작동합니다. 양자화는 accuracy를 크게 저하시키지 않으면서 모델을 더 작고 빠르게 만듭니다. 이는 엣지 컴퓨팅의 제한된 리소스에 이상적이며, 클라우드 의존성 없이 로컬에서 빠르게 데이터를 처리하고 대기 시간을 줄여 애플리케이션이 신속하게 응답할 수 있도록 합니다. 또한 로컬 처리는 원격 서버로 전송되지 않으므로 사용자 데이터를 비공개로 안전하게 유지합니다.
IMX500 주요 특징:
- 메타데이터 출력: 이미지만 전송하는 대신 IMX500은 이미지와 메타데이터(추론 결과)를 모두 출력할 수 있으며, 데이터 크기를 최소화하고 대역폭을 줄이며 비용을 낮추기 위해 메타데이터만 출력할 수도 있습니다.
- 개인정보 보호 문제 해결: 장치에서 데이터를 처리함으로써 IMX500은 개인정보 보호 문제를 해결하며, 인원 계수 및 점유 추적과 같은 사람 중심 애플리케이션에 이상적입니다.
- 실시간 처리: 빠른 온센서 처리는 실시간 의사결정을 지원하며 자율 시스템과 같은 엣지 AI 애플리케이션에 완벽합니다.
시작하기 전에: 최상의 결과를 위해 Model Training Guide, Data Preparation Guide, Hyperparameter Tuning Guide에 따라 YOLO11 모델이 내보내기에 적합하게 준비되어 있는지 확인하세요.
지원되는 작업#
IMX500 내보내기는 Ultralytics의 7가지 태스크 중 4가지만 지원하며, YOLOv8n과 YOLO11n에서만 사용할 수 있습니다. 다른 모델 패밀리, 스케일, 아키텍처는 지원되지 않으며, 세그멘테이션, OBB 또는 깊이 추정 모델을 내보내려고 하면 오류가 발생합니다.
사용 예제#
Ultralytics YOLO11 모델을 IMX500 형식으로 내보내고 내보낸 모델로 추론을 실행합니다.
IMX500 포맷은 Export, Predict, Validate 모드를 지원합니다. 추론과 검증은 Raspberry Pi AI Camera(IMX500)에서 실행됩니다.
여기서는 모델이 예상대로 작동하는지 확인하기 위해 추론을 수행합니다. 그러나 Raspberry Pi AI Camera에서의 배포 및 추론을 위해서는 Using IMX500 Export in Deployment 섹션으로 이동해 주세요.
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' | 내보낸 모델의 대상 형식이며, 다양한 배포 환경과의 호환성을 정의합니다. |
imgsz | int 또는 tuple | 640 | 모델 입력에 사용할 원하는 이미지 크기입니다. 정방형 이미지의 경우 정수일 수 있으며, 특정 치수의 경우 튜플 (height, width)일 수 있습니다. |
quantize | int 또는 str | 8/auto | 양자화 정밀도. 8(INT8/PTQ)은 IMX500용으로 자동 활성화되며, "w8a16"은 FP16 활성화와 함께 INT8 가중치를 내보냅니다. FP32 및 FP16 전용 내보내기는 지원되지 않습니다. 지원 중단된 half/int8 플래그를 대체합니다. |
data | str | None | dataset YAML의 경로로 양자화에 필수적이며, 분류의 경우 데이터셋 디렉토리 또는 내장 데이터셋 이름을 대신 사용합니다. quantize=8 또는 'w8a16'에서 생략할 경우, Ultralytics는 모델 태스크에 맞는 기본 캘리브레이션 데이터셋을 선택합니다. |
fraction | float, int, 또는 list | 1.0 | 비율, 이미지 수 또는 [train, val] 비율/수를 나타내는 캘리브레이션 서브셋입니다. 리스트는 train 또는 val를 제한하는 반면, test은 전체 상태로 유지됩니다. |
nms | bool | False | 내보낸 모델에 NMS(Non-Maximum Suppression)를 추가합니다. True, conf, iou, agnostic_nms도 허용됩니다. |
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 카메라를 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 reboot단계 4: Aitrios Raspberry Pi application module library 설치
pip install git+https://github.com/SonySemiconductorSolutions/aitrios-rpi-application-module-library.git단계 5: aitrios-rpi-application-module-library examples에서 제공되는 아래 스크립트를 사용하여 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 팀이 imx 모델 포맷을 사용하여 Raspberry Pi AI Camera에서 속도와 정확도를 측정하며 실행한 결과입니다.
| 모델 | 형식 | 크기 (픽셀) | 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's Model Compression Toolkit (MCT)는 양자화와 프루닝을 통해 딥러닝 모델을 최적화하기 위한 강력한 도구입니다. 다양한 양자화 방법을 지원하며, 정확도를 크게 희생하지 않으면서 모델 크기와 연산 복잡도를 줄이는 고급 알고리즘을 제공합니다. MCT는 리소스가 제한된 디바이스에 모델을 배포하고, 효율적인 추론을 보장하며, 대기 시간을 줄이는 데 특히 유용합니다.
MCT의 지원 기능#
Sony의 MCT는 신경망 모델을 최적화하기 위해 설계된 다양한 기능을 제공합니다:
- 그래프 최적화: 배치 정규화와 같은 레이어를 이전 레이어로 폴딩하여 모델을 더 효율적인 버전으로 변환합니다.
- 양자화 파라미터 검색: 평균 제곱 오차(MSE), No-Clipping, 평균 절대 오차와 같은 지표를 사용하여 양자화 노이즈를 최소화합니다.
- 고급 양자화 알고리즘:
- Shift Negative Correction: 대칭 활성화 양자화로 인한 성능 문제를 해결합니다.
- 이상치 필터링: z-score를 사용하여 이상치를 감지하고 제거합니다.
- 클러스터링: 더 나은 분포 일치를 위해 비균등 양자화 그리드를 활용합니다.
- 혼합 정밀도 검색: 민감도에 따라 레이어별로 다른 양자화 비트 너비를 할당합니다.
- 시각화: TensorBoard를 사용하여 모델 성능 인사이트, 양자화 단계 및 비트 너비 구성을 관찰합니다.
양자화#
MCT는 모델 크기를 줄이고 추론 속도를 향상시키기 위해 여러 양자화 방법을 지원합니다:
- 학습 후 양자화(PTQ):
- Keras 및 PyTorch API를 통해 사용할 수 있습니다.
- 복잡성: 낮음
- 계산 비용: 낮음(CPU 몇 분)
- 기울기 기반 학습 후 양자화(GPTQ):
- Keras 및 PyTorch API를 통해 사용할 수 있습니다.
- 복잡성: 중간
- 계산 비용: 보통(GPU 2-3시간)
- 양자화 인식 학습(QAT):
- 복잡성: 높음
- 계산 비용: 높음(GPU 12-36시간)
MCT는 또한 가중치 및 활성화에 대한 다양한 양자화 방식을 지원합니다:
- Power-of-Two (하드웨어 친화적)
- Symmetric (대칭)
- Uniform (균일반)
구조적 가지치기(Structured Pruning)#
MCT는 특정 하드웨어 아키텍처에 맞게 설계된 구조적, 하드웨어 인식 모델 가지치기를 도입합니다. 이 기술은 SIMD 그룹을 가지치기하여 대상 플랫폼의 SIMD(Single Instruction, Multiple Data) 기능을 활용합니다. 이는 가중치 메모리 사용량의 목표 리소스 활용을 위해 SIMD 아키텍처에 맞춰 채널 활용도를 최적화하면서 모델 크기와 복잡성을 줄입니다. Keras 및 PyTorch API를 통해 사용할 수 있습니다.
IMX500 변환 도구(컴파일러)#
IMX500 변환 도구는 Sony의 IMX500 센서(예: Raspberry Pi AI Camera)에 배포할 모델을 컴파일할 수 있게 해주는 IMX500 도구 세트의 필수 구성 요소입니다. 이 도구는 Ultralytics 소프트웨어를 통해 처리된 Ultralytics YOLO11 모델의 전환을 용이하게 하며, 지정된 하드웨어에서 호환성과 효율적인 성능을 보장합니다. 모델 양자화 후의 내보내기 절차에는 필수 데이터와 장치별 구성을 포함하는 바이너리 파일 생성이 포함되어 Raspberry Pi AI Camera에서의 배포 프로세스를 간소화합니다.
실제 활용 사례#
IMX500 형식으로의 내보내기는 산업 전반에 걸쳐 광범위하게 적용될 수 있습니다. 몇 가지 예는 다음과 같습니다.
- 엣지 AI 및 IoT: 저전력 장치에서의 실시간 처리가 필수적인 드론이나 보안 카메라에서 객체 탐지를 활성화합니다.
- 웨어러블 장치: 건강 모니터링 웨어러블에서 소규모 AI 처리에 최적화된 모델을 배포합니다.
- 스마트 시티: 더 빠른 처리와 최소한의 지연 시간으로 교통 모니터링 및 안전 분석을 수행하기 위해 IMX500으로 내보낸 YOLO11 모델을 사용합니다.
- 리테일 분석: 최적화된 모델을 POS 시스템이나 스마트 선반에 배포하여 매장 내 모니터링을 강화합니다.
결론#
Ultralytics YOLO11 모델을 Sony의 IMX500 형식으로 내보내면 IMX500 기반 카메라에서 효율적인 추론을 위해 모델을 배포할 수 있습니다. 고급 양자화 기술을 활용하여 정확도를 크게 저하시키지 않으면서 모델 크기를 줄이고 추론 속도를 향상시킬 수 있습니다.
자세한 정보와 상세한 지침은 소니의 IMX500 website를 참조하세요.
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 애플리케이션을 위해 좋은 정확도를 유지하면서 효율적인 실시간 추론을 제공함을 보여줍니다.