Ultralytics YOLO11용 Sony IMX500 내보내기
이 가이드에서는 Sony IMX500 센서가 탑재된 Raspberry Pi AI 카메라에 Ultralytics YOLO11 모델을 내보내고 배포하는 방법을 다룹니다.
Raspberry Pi AI Camera와 같이 컴퓨팅 성능이 제한된 장치에 컴퓨터 비전 모델을 배포하는 것은 까다로울 수 있습니다. 더 빠른 성능에 최적화된 모델 형식을 사용하면 큰 차이를 만들 수 있습니다.
IMX500 모델 형식은 신경망에 대해 빠른 성능을 제공하면서 전력 소비를 최소화하도록 설계되었습니다. 이를 통해 Ultralytics YOLO11 모델을 최적화하여 고속 및 저전력 추론을 수행할 수 있습니다. 이 가이드에서는 모델이 Raspberry Pi AI 카메라에서 잘 작동하도록 지원하면서 모델을 IMX500 형식으로 내보내고 배포하는 과정을 안내합니다.
IMX500으로 내보내야 하는 이유
Sony의 IMX500 지능형 비전 센서는 에지 AI 처리 분야에서 판도를 바꾸는 하드웨어입니다. 온칩 AI 기능이 탑재된 세계 최초의 지능형 비전 센서입니다. 이 센서는 데이터 처리 병목 현상, 개인 정보 보호 문제 및 성능 제한을 포함하여 에지 AI의 여러 문제를 해결하는 데 도움이 됩니다.
다른 센서는 이미지와 프레임을 전달하기만 하지만 IMX500은 전체 스토리를 전달합니다. 센서에서 직접 데이터를 처리하여 장치가 실시간으로 통찰력을 생성할 수 있도록 합니다.
YOLO11 모델용 Sony의 IMX500 내보내기
IMX500은 데이터를 처리하기 위해 클라우드로 전송할 필요 없이 센서에서 직접 데이터를 처리하는 방식을 혁신하도록 설계되었습니다.
IMX500은 양자화된 모델과 함께 작동합니다. 양자화는 정확도를 크게 잃지 않으면서 모델을 더 작고 빠르게 만듭니다. 이는 에지 컴퓨팅의 제한된 리소스에 이상적이며, 지연 시간을 줄이고 클라우드 종속성 없이 로컬에서 빠른 데이터 처리를 가능하게 하여 애플리케이션이 신속하게 응답할 수 있도록 합니다. 로컬 처리는 원격 서버로 전송되지 않으므로 사용자 데이터를 비공개로 안전하게 유지합니다.
IMX500 주요 기능:
- 메타데이터 출력: IMX500은 이미지뿐만 아니라 메타데이터(추론 결과)를 출력할 수 있으며, 데이터 크기를 최소화하고 대역폭을 줄이며 비용을 낮추기 위해 메타데이터만 출력할 수도 있습니다.
- 개인 정보 보호 문제 해결: IMX500은 장치에서 데이터를 처리하여 개인 정보 보호 문제를 해결하며, 이는 사람 수 계산 및 점유 추적과 같은 인간 중심 애플리케이션에 이상적입니다.
- 실시간 처리: 빠르고 온-센서 처리는 자율 시스템과 같은 에지 AI 애플리케이션에 적합한 실시간 의사 결정을 지원합니다.
시작하기 전에: 최상의 결과를 얻으려면 모델 학습 가이드, 데이터 준비 가이드 및 하이퍼파라미터 튜닝 가이드에 따라 YOLO11 모델이 내보내기를 위해 잘 준비되었는지 확인하십시오.
지원되는 작업
현재 다음 작업을 포함하는 모델만 IMX500 형식으로 내보낼 수 있습니다.
사용 예시
Ultralytics YOLO11 모델을 IMX500 형식으로 내보내고 내보낸 모델로 추론을 실행합니다.
참고
여기서는 모델이 예상대로 작동하는지 확인하기 위해 추론을 수행합니다. 그러나 Raspberry Pi AI 카메라에서 배포 및 추론을 하려면 배포에서 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")
# Export a YOLO11n PyTorch model to imx format with Post-Training Quantization (PTQ)
yolo export model=yolo11n.pt format=imx data=coco8.yaml
# Run inference with the exported model
yolo predict model=yolo11n_imx_model source='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")
# Export a YOLO11n-pose PyTorch model to imx format with Post-Training Quantization (PTQ)
yolo export model=yolo11n-pose.pt format=imx data=coco8-pose.yaml
# Run inference with the exported model
yolo predict model=yolo11n-pose_imx_model source='https://ultralytics.com/images/bus.jpg'
경고
Ultralytics 패키지는 런타임에 추가 내보내기 종속성을 설치합니다. 내보내기 명령을 처음 실행할 때 올바르게 작동하는지 확인하려면 콘솔을 다시 시작해야 할 수 있습니다.
인수 내보내기
인수 | 유형 | 기본값 | 설명 |
---|---|---|---|
format |
str |
'imx' |
다양한 배포 환경과의 호환성을 정의하는 내보낸 모델의 대상 형식입니다. |
imgsz |
int 또는 tuple |
640 |
모델 입력에 대한 원하는 이미지 크기입니다. 정사각형 이미지의 경우 정수이거나 튜플일 수 있습니다. (height, width) 특정 크기의 경우. |
int8 |
bool |
True |
INT8 양자화를 활성화하여 모델을 더욱 압축하고 정확도 손실을 최소화하면서 추론 속도를 높입니다(주로 에지 장치용). |
data |
str |
'coco8.yaml' |
다음 경로: 데이터 세트 구성 파일(기본값: coco8.yaml ), 양자화에 필수적입니다. |
fraction |
float |
1.0 |
INT8 양자화 보정에 사용할 데이터 세트의 비율을 지정합니다. 전체 데이터 세트의 하위 집합에서 보정할 수 있으므로 실험이나 리소스가 제한적일 때 유용합니다. INT8을 활성화한 상태에서 지정하지 않으면 전체 데이터 세트가 사용됩니다. |
device |
str |
None |
내보내기할 장치를 지정합니다: GPU (device=0 ), CPU (device=cpu )입니다. |
팁
CUDA를 지원하는 GPU에서 내보내는 경우 다음 인수를 전달하세요. device=0
더 빠른 내보내기를 위해.
내보내기 프로세스에 대한 자세한 내용은 내보내기에 대한 Ultralytics 문서 페이지를 참조하십시오.
내보내기 프로세스는 양자화 유효성 검사를 위한 ONNX 모델과 함께 다음 이름의 디렉터리를 생성합니다. <model-name>_imx_model
. 이 디렉토리에는 다음이 포함됩니다. packerOut.zip
파일은 IMX500 하드웨어에 배포하기 위해 모델을 패키징하는 데 필수적입니다. 또한, <model-name>_imx_model
폴더에는 텍스트 파일이 포함됩니다(labels.txt
)은 모델과 연결된 모든 레이블을 나열합니다.
폴더 구조
yolo11n_imx_model
├── dnnParams.xml
├── labels.txt
├── packerOut.zip
├── yolo11n_imx.onnx
├── yolo11n_imx_MemoryReport.json
└── yolo11n_imx.pbtxt
yolo11n-pose_imx_model
├── dnnParams.xml
├── labels.txt
├── packerOut.zip
├── yolo11n-pose_imx.onnx
├── yolo11n-pose_imx_MemoryReport.json
└── yolo11n-pose_imx.pbtxt
배포 시 IMX500 내보내기 사용
Ultralytics YOLO11n 모델을 IMX500 형식으로 내보낸 후 추론을 위해 Raspberry Pi AI 카메라에 배포할 수 있습니다.
하드웨어 필수 조건
다음 하드웨어가 있는지 확인하십시오.
- Raspberry Pi 5 또는 Raspberry Pi 4 Model B
- Raspberry Pi AI 카메라
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-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 DPS 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()
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_yolo_pose_ultralytics
class YOLOPose(Model):
"""YOLO pose estimation model for IMX500 deployment."""
def __init__(self):
"""Initialize the YOLO pose estimation model for IMX500 deployment."""
super().__init__(
model_file="yolo11n-pose_imx_model/packerOut.zip", # replace with proper directory
model_type=MODEL_TYPE.CONVERTED,
color_format=COLOR_FORMAT.RGB,
preserve_aspect_ratio=False,
)
def post_process(self, output_tensors):
"""Post-process the output tensors for pose estimation."""
return pp_yolo_pose_ultralytics(output_tensors)
device = AiCamera(frame_rate=17) # Optimal frame rate for maximum DPS of the YOLO-pose model running on the AI Camera
model = YOLOPose()
device.deploy(model)
annotator = Annotator()
with device as stream:
for frame in stream:
detections = frame.detections[frame.detections.confidence > 0.4]
annotator.annotate_keypoints(frame, detections)
annotator.annotate_boxes(frame, detections, corner_length=20)
frame.display()
벤치마크
YOLOv8n, YOLO11n, YOLOv8n-pose 및 YOLO11n-pose 벤치마크는 Ultralytics 팀에서 Raspberry Pi AI Camera를 사용하여 실행했습니다. imx
속도와 정확도를 측정하는 모델 형식입니다.
모델 | 형식 | 상태 | 크기 packerOut.zip (MB) |
mAP50-95(B) | 추론 시간 (ms/im) |
---|---|---|---|---|---|
YOLOv8n | imx | ✅ | 2.1 | 0.470 | 58.79 |
YOLO11n | imx | ✅ | 2.2 | 0.517 | 58.82 |
YOLOv8n-pose | imx | ✅ | 2.0 | 0.687 | 58.79 |
YOLO11n-pose | imx | ✅ | 2.1 | 0.788 | 62.50 |
참고
위 벤치마크에 대한 유효성 검사는 감지 모델의 경우 COCO128 데이터 세트, 포즈 추정 모델의 경우 COCO8-Pose 데이터 세트를 사용하여 수행되었습니다.
내부 구조
Sony 모델 압축 툴킷(MCT)
Sony의 모델 압축 툴킷 (MCT)은 양자화 및 가지치기를 통해 딥러닝 모델을 최적화하는 강력한 도구입니다. 다양한 양자화 방법을 지원하고 정확도를 크게 희생하지 않으면서 모델 크기와 계산 복잡성을 줄이는 고급 알고리즘을 제공합니다. MCT는 특히 리소스가 제한된 장치에 모델을 배포하는 데 유용하며 효율적인 추론과 지연 시간 단축을 보장합니다.
MCT 지원 기능
Sony의 MCT는 신경망 모델을 최적화하도록 설계된 다양한 기능을 제공합니다.
- 그래프 최적화: 배치 정규화와 같은 레이어를 이전 레이어로 통합하여 모델을 보다 효율적인 버전으로 변환합니다.
- 양자화 파라미터 검색: 평균 제곱 오차, 클리핑 없음 및 평균 절대 오차와 같은 메트릭을 사용하여 양자화 노이즈를 최소화합니다.
- 고급 양자화 알고리즘:
- Shift Negative Correction (음수 이동 보정):
- 이상치 필터링: z-점수를 사용하여 이상치를 감지하고 제거합니다.
- 클러스터링: 더 나은 분포 매칭을 위해 불균일 양자화 그리드를 활용합니다.
- 혼합 정밀도 검색: 민감도에 따라 레이어별로 다른 양자화 비트 폭을 할당합니다.
- 시각화: TensorBoard를 사용하여 모델 성능 통찰력, 양자화 단계 및 비트 폭 구성을 관찰합니다.
양자화
MCT는 모델 크기를 줄이고 추론 속도를 향상시키기 위해 여러 양자화 방법을 지원합니다.
- 사후 훈련 양자화 (PTQ):
- Keras 및 PyTorch API를 통해 사용 가능
- 복잡성: 낮음
- 계산 비용: 낮음(CPU 분 단위)
- Gradient 기반 사후 훈련 양자화(GPTQ):
- Keras 및 PyTorch API를 통해 사용 가능
- 복잡성: 중간
- 계산 비용: 보통(GPU 시간 2-3시간)
- 양자화 인식 훈련(QAT):
- 복잡성: 높음
- 계산 비용: 높음(GPU 시간 12-36시간)
MCT는 가중치 및 활성화를 위한 다양한 양자화 방식을 지원합니다.
- 2의 거듭제곱 (하드웨어 친화적)
- 대칭
- 균일
구조적 가지치기
MCT는 특정 하드웨어 아키텍처를 위해 설계된 구조화된 하드웨어 인식 모델 가지치기를 도입합니다. 이 기술은 SIMD 그룹을 가지치기하여 대상 플랫폼의 SIMD(Single Instruction, Multiple Data) 기능을 활용합니다. 이는 모델 크기와 복잡성을 줄이는 동시에 채널 활용률을 최적화하여 가중치 메모리 공간의 대상 리소스 활용을 위한 SIMD 아키텍처에 맞춰 조정합니다. Keras 및 PyTorch API를 통해 사용할 수 있습니다.
IMX500 변환기 도구(컴파일러)
IMX500 변환기 도구는 IMX500 툴세트의 필수적인 부분으로, Sony의 IMX500 센서(예: Raspberry Pi AI 카메라)에 배포할 모델 컴파일을 지원합니다. 이 도구는 Ultralytics 소프트웨어를 통해 처리된 Ultralytics YOLO11 모델의 전환을 용이하게 하여 지정된 하드웨어에서 호환되고 효율적으로 작동하도록 보장합니다. 모델 양자화 후 내보내기 절차에는 필수 데이터와 장치별 구성을 캡슐화하는 바이너리 파일 생성이 포함되어 Raspberry Pi AI 카메라에서 배포 프로세스를 간소화합니다.
실제 사용 사례
IMX500 형식으로 내보내기는 여러 산업 분야에서 널리 적용될 수 있습니다. 몇 가지 예는 다음과 같습니다.
- 엣지 AI 및 IoT: 저전력 장치에서 실시간 처리가 필수적인 드론 또는 보안 카메라에서 객체 감지를 활성화합니다.
- 웨어러블 장치: 건강 모니터링 웨어러블에서 소규모 AI 처리에 최적화된 모델을 배포합니다.
- 스마트 시티: 더 빠른 처리 속도와 최소한의 지연 시간으로 교통 모니터링 및 안전 분석을 위해 IMX500에서 내보낸 YOLO11 모델을 사용합니다.
- 소매 분석: POS(Point-of-Sale) 시스템 또는 스마트 선반에 최적화된 모델을 배포하여 매장 내 모니터링을 강화합니다.
결론
Ultralytics YOLO11 모델을 Sony의 IMX500 형식으로 내보내면 IMX500 기반 카메라에서 효율적인 추론을 위해 모델을 배포할 수 있습니다. 고급 양자화 기술을 활용하여 정확도를 크게 저하시키지 않으면서 모델 크기를 줄이고 추론 속도를 향상시킬 수 있습니다.
자세한 정보 및 자세한 지침은 Sony의 IMX500 웹사이트를 참조하세요.
FAQ
Raspberry Pi AI 카메라용 IMX500 형식으로 YOLO11 모델을 내보내려면 어떻게 해야 합니까?
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
.
에지 AI 배포에 IMX500 형식을 사용하는 주요 이점은 무엇인가요?
IMX500 형식은 에지 배포에 중요한 여러 가지 이점을 제공합니다.
- 온칩 AI 프로세싱은 지연 시간과 전력 소비를 줄여줍니다.
- 이미지만이 아닌 이미지와 메타데이터(추론 결과)를 모두 출력합니다.
- 클라우드 종속성 없이 로컬에서 데이터를 처리하여 개인 정보 보호 강화
- 시간에 민감한 애플리케이션에 이상적인 실시간 처리 기능
- 리소스가 제한된 장치에서 효율적인 모델 배포를 위한 최적화된 양자화
IMX500 배포에 필요한 하드웨어 및 소프트웨어 전제 조건은 무엇입니까?
IMX500 모델을 배포하려면 다음이 필요합니다.
하드웨어:
- Raspberry Pi 5 또는 Raspberry Pi 4 Model B
- IMX500 센서가 탑재된 Raspberry Pi AI 카메라
소프트웨어:
- Raspberry Pi OS Bookworm
- IMX500 펌웨어 및 도구(
sudo apt install imx500-all
)
IMX500에서 YOLO11 모델의 성능은 어느 정도입니까?
Raspberry Pi AI 카메라에 대한 Ultralytics 벤치마크를 기반으로 함:
- YOLO11n은 이미지당 62.50ms의 추론 시간을 달성합니다.
- COCO128 데이터 세트에서 0.492의 mAP50-95
- 양자화 후 모델 크기가 3.2MB에 불과
이는 IMX500 형식이 에지 AI 애플리케이션에 적합한 정확도를 유지하면서 효율적인 실시간 추론을 제공함을 보여줍니다.