Ultralytics YOLO27:

ExecuTorch를 사용한 모바일 및 엣지용 YOLO26 배포#

스마트폰, 태블릿, 임베디드 시스템과 같은 엣지 디바이스에 컴퓨터 비전 모델을 배포하려면 성능과 리소스 제약의 균형을 맞추는 최적화된 런타임이 필요합니다. ExecuTorch는 PyTorch의 엣지 컴퓨팅 솔루션으로, Ultralytics YOLO 모델의 효율적인 온디바이스 추론을 지원합니다.

이 가이드에서는 Ultralytics YOLO 모델을 ExecuTorch 형식으로 내보내고, 최적화된 성능으로 모바일 및 엣지 디바이스에 배포하는 방법을 설명합니다.

ExecuTorch로 내보내야 하는 이유#

PyTorch ExecuTorch mobile inference framework

ExecuTorch는 모바일 및 엣지 디바이스 전반에서 온디바이스 추론 기능을 지원하는 PyTorch의 엔드 투 엔드 솔루션입니다. 이식성과 효율성을 목표로 설계된 ExecuTorch는 다양한 컴퓨팅 플랫폼에서 PyTorch 프로그램을 실행하는 데 사용할 수 있습니다.

ExecuTorch의 주요 기능#

ExecuTorch는 엣지 디바이스에 Ultralytics YOLO 모델을 배포할 수 있도록 다음과 같은 강력한 기능을 제공합니다.

  • 이식 가능한 모델 형식: ExecuTorch는 리소스가 제한된 디바이스에서 크기와 로딩 속도에 최적화된 .pte (PyTorch ExecuTorch) 형식을 사용합니다.

  • XNNPACK 백엔드: XNNPACK와의 기본 통합을 통해 모바일 CPU에서 고도로 최적화된 추론을 제공하며, 특수 하드웨어 없이도 뛰어난 성능을 구현합니다.

  • 양자화 지원: ExecuTorch 생태계는 모델 크기를 줄이고 추론 속도를 향상하는 양자화 기법을 지원합니다. 현재 Ultralytics는 XNNPACK 백엔드를 통해 FP32 모델을 내보냅니다.

  • 메모리 효율성: 최적화된 메모리 관리로 런타임 메모리 사용량을 줄여 RAM이 제한된 디바이스에 적합합니다.

  • 모델 메타데이터: 내보낸 모델에는 간편한 통합을 위해 이미지 크기, 클래스 이름 등의 메타데이터가 별도의 YAML 파일에 포함됩니다.

ExecuTorch를 사용한 배포 옵션#

ExecuTorch 모델은 다양한 엣지 및 모바일 플랫폼에 배포할 수 있습니다.

  • 모바일 애플리케이션: iOS 및 Android 애플리케이션에 네이티브 성능으로 배포하여 모바일 앱에서 실시간 객체 탐지를 지원합니다.

  • 임베디드 시스템: Raspberry Pi, NVIDIA Jetson 및 기타 ARM 기반 시스템과 같은 임베디드 Linux 디바이스에서 최적화된 성능으로 실행할 수 있습니다.

  • 엣지 AI 디바이스: 가속 추론을 위한 사용자 지정 delegate를 지원하는 특수 엣지 AI 하드웨어에 배포할 수 있습니다.

  • IoT 디바이스: 클라우드 연결 없이 온디바이스 추론을 수행하도록 IoT 디바이스에 통합할 수 있습니다.

지원되는 작업#

ExecuTorch 내보내기는 Ultralytics의 7가지 작업을 모두 지원합니다. 시맨틱 세그멘테이션과 깊이 추정은 해당 헤드를 제공하는 유일한 제품군인 YOLO26에서만 사용할 수 있습니다.

태스크YOLOv8YOLO11YOLO26
검출
세그먼트
시맨틱
깊이
분류
포즈
OBB

Ultralytics YOLO26 모델을 ExecuTorch로 내보내기#

Ultralytics YOLO26 모델을 ExecuTorch 형식으로 변환하면 모바일 및 엣지 디바이스에 효율적으로 배포할 수 있습니다.

설치#

ExecuTorch 내보내기에는 Python 3.10~3.13 및 PyTorch >= 2.9.0과 함께 executorch 패키지가 필요합니다.

설치
# Install Ultralytics package
pip install ultralytics

설치 과정과 관련된 자세한 지침 및 모범 사례는 YOLO26 설치 가이드를 확인하세요. YOLO26에 필요한 패키지를 설치하는 동안 문제가 발생하면 일반적인 문제 가이드에서 해결 방법과 팁을 확인하세요.

사용법#

YOLO26 모델을 ExecuTorch로 내보내는 과정은 간단합니다.

ExecuTorch 형식은 내보내기, 예측, 검증 모드를 지원합니다. 모델을 내보낸 다음 내보낸 모델을 로드하여 추론을 실행하거나 정확도를 검증하세요.

내보내기
from ultralytics import YOLO

# Load a YOLO26 model
model = YOLO("yolo26n.pt")

# Export the model to ExecuTorch format
model.export(format="executorch")  # creates 'yolo26n_executorch_model'
Prediction
from ultralytics import YOLO

# Load the exported ExecuTorch model
model = YOLO("yolo26n_executorch_model")

# Run inference
results = model("https://ultralytics.com/images/bus.jpg")
검증
from ultralytics import YOLO

# Load the exported ExecuTorch model
model = YOLO("yolo26n_executorch_model")

# Validate accuracy on the COCO8 dataset
metrics = model.val(data="coco8.yaml")

ExecuTorch 내보내기는 .pte 파일과 메타데이터가 포함된 디렉터리를 생성합니다. 모바일 또는 임베디드 애플리케이션에서 ExecuTorch 런타임을 사용하여 .pte 모델을 로드하고 추론을 수행하세요.

내보내기 인수#

ExecuTorch 형식으로 내보낼 때 다음 인수를 지정할 수 있습니다.

인수유형기본값설명
formatstr'executorch'내보낸 모델의 대상 형식으로, 다양한 deployment environment와의 호환성을 정의합니다.
imgszint 또는 tuple640모델 입력에 사용할 이미지 크기입니다. 정사각형 이미지에는 정수를 사용하고, 특정 크기에는 (height, width) tuple을 사용할 수 있습니다.
quantizeint 또는 strNone고정된 FP32 내보내기입니다. ExecuTorch 내보내기는 내보내기 시점의 FP16, INT8 또는 W8A16 정밀도 변환을 지원하지 않습니다.
batchint1내보낼 모델의 배치 추론 크기 또는 predict 모드에서 내보낸 모델이 동시에 처리할 최대 이미지 수를 지정합니다.
devicestrNone내보내기에 사용할 device를 지정합니다: GPU (device=0), CPU (device=cpu), Apple silicon용 MPS (device=mps).

출력 구조#

ExecuTorch 내보내기는 모델과 메타데이터가 포함된 디렉터리를 생성합니다.

yolo26n_executorch_model/
├── model.pte               # ExecuTorch model file
└── metadata.yaml           # Model metadata (classes, image size, etc.)

내보낸 ExecuTorch 모델 사용#

모델을 내보낸 후에는 ExecuTorch 런타임을 사용하여 대상 애플리케이션에 통합해야 합니다.

모바일 통합#

모바일 애플리케이션(iOS/Android)의 경우 다음 작업을 수행해야 합니다.

  1. ExecuTorch 런타임 추가: 모바일 프로젝트에 ExecuTorch 런타임 라이브러리를 포함합니다.
  2. 모델 로드: 애플리케이션에서 .pte 파일을 로드합니다.
  3. 추론 실행: 이미지를 처리하고 예측 결과를 가져옵니다.

iOS#

iOS 통합 예시(Objective-C/C++):

// iOS uses C++ APIs for model loading and inference
// See https://pytorch.org/executorch/stable/using-executorch-ios.html for complete examples

#include <executorch/extension/module/module.h>

using namespace ::executorch::extension;

// Load the model
Module module("/path/to/model.pte");

// Create input tensor
float input[1 * 3 * 640 * 640];
auto tensor = from_blob(input, {1, 3, 640, 640});

// Run inference
const auto result = module.forward(tensor);

Android#

Maven Central에서 ExecuTorch Android AAR을 추가합니다.

dependencies {
    implementation("org.pytorch:executorch-android:<version>")
}

Android 통합 예시(Kotlin):

import org.pytorch.executorch.EValue
import org.pytorch.executorch.Module
import org.pytorch.executorch.Tensor

// Load the model
val module = Module.load("/path/to/model.pte")

// Prepare input tensor
val inputTensor = Tensor.fromBlob(floatData, longArrayOf(1, 3, 640, 640))
val inputEValue = EValue.from(inputTensor)

// Run inference
val outputs = module.forward(inputEValue)
val scores = outputs[0].toTensor().dataAsFloatArray

임베디드 Linux#

임베디드 Linux 시스템에서는 ExecuTorch C++ API를 사용합니다.

#include <executorch/extension/module/module.h>
#include <executorch/extension/tensor/tensor.h>

using namespace ::executorch::extension;

// Load model
Module module("model.pte");

// Prepare input
std::vector<float> input_data = preprocessImage(image);
auto input_tensor = from_blob(input_data.data(), {1, 3, 640, 640});

// Run inference
const auto outputs = module.forward(input_tensor);

ExecuTorch를 애플리케이션에 통합하는 방법에 대한 자세한 내용은 ExecuTorch 문서를 참조하세요.

성능 최적화#

모델 크기 최적화#

배포를 위해 모델 크기를 줄이려면 다음을 수행하세요.

  • 더 작은 모델 사용: 가장 작은 설치 공간을 위해 YOLO26n(nano)으로 시작합니다.
  • 입력 해상도 낮추기: 더 작은 이미지 크기(예: imgsz=320 또는 imgsz=416)를 사용합니다.
  • 양자화: 양자화 기법을 적용합니다(향후 ExecuTorch 버전에서 지원 예정).

추론 속도 최적화#

더 빠른 추론을 위해 다음을 수행하세요.

  • XNNPACK 백엔드: 기본 XNNPACK 백엔드는 최적화된 CPU 추론을 제공합니다.
  • 하드웨어 가속: 플랫폼별 delegate(예: iOS용 CoreML)를 사용합니다.
  • 배치 처리: 가능한 경우 여러 이미지를 함께 처리합니다.

벤치마크#

Ultralytics 팀은 PyTorch와 ExecuTorch 간의 속도 및 정확도를 비교하여 YOLO26 모델을 벤치마크했습니다.

성능
모델형식상태크기(MB)metrics/mAP50-95(B)추론 시간 (ms/im)
YOLO26nPyTorch5.30.4790314.80
YOLO26nExecuTorch9.40.4800142
YOLO26sPyTorch19.50.5730930.90
YOLO26sExecuTorch36.50.5780376.1
참고

추론 시간에는 전처리 및 후처리가 포함되지 않습니다.

문제 해결#

일반적인 문제#

문제: Python version error

해결 방법: ExecuTorch는 Python 3.10부터 3.13까지 지원합니다. 지원되는 버전으로 환경을 생성하십시오:

# Using conda
conda create -n executorch python=3.10
conda activate executorch

문제: Export fails during first run

해결 방법: 최신 사전 빌드 executorch wheel이 설치되어 있는지 확인하세요.

pip install --upgrade executorch

문제: Import errors for ExecuTorch modules

해결 방법: ExecuTorch가 올바르게 설치되어 있는지 확인하세요.

pip install executorch --force-reinstall

추가 문제 해결 도움말은 Ultralytics GitHub Issues 또는 ExecuTorch 문서를 참조하세요.

요약#

YOLO26 모델을 ExecuTorch 형식으로 내보내면 모바일 및 엣지 디바이스에 효율적으로 배포할 수 있습니다. PyTorch 네이티브 통합, 크로스 플랫폼 지원 및 최적화된 성능을 제공하는 ExecuTorch는 엣지 AI 애플리케이션에 탁월한 선택입니다.

핵심 요약:

  • ExecuTorch는 뛰어난 성능으로 PyTorch 네이티브 엣지 배포를 지원합니다.
  • format='executorch' 매개변수를 사용하면 간단하게 내보낼 수 있습니다.
  • 모델은 XNNPACK 백엔드를 통해 모바일 CPU에 최적화됩니다.
  • iOS, Android 및 임베디드 Linux 플랫폼을 지원합니다.
  • Python 3.10~3.13 및 PyTorch >= 2.9.0이 필요합니다.

FAQ#

  • Python 또는 CLI를 사용하여 YOLO26 모델을 ExecuTorch로 내보내세요.

    from ultralytics import YOLO
    
    model = YOLO("yolo26n.pt")
    model.export(format="executorch")

    또는

    yolo export model=yolo26n.pt format=executorch
  • ExecuTorch 내보내기에는 다음이 필요합니다.

    • Python 3.10에서 3.13까지
    • executorch 패키지(pip install executorch을 통해 설치)
    • PyTorch(ultralytics와 함께 자동 설치됨)

    참고: executorch 패키지는 사전 빌드된 wheel(XNNPACK 백엔드 포함)을 제공하므로 내보내기 중 추가 컴파일 단계가 필요하지 않습니다.

  • ExecuTorch 모델은 Python에서 추론 및 검증을 수행하도록 YOLO()으로 직접 로드할 수 있으며(위의 예측/검증 예시 참조), ExecuTorch 런타임 라이브러리를 사용하여 모바일 및 엣지 디바이스에 배포할 수도 있습니다.

  • ExecuTorch는 다음을 지원합니다.

    • 모바일: iOS 및 Android
    • 임베디드 Linux: Raspberry Pi, NVIDIA Jetson 및 기타 ARM 디바이스
    • 데스크톱: Linux, macOS 및 Windows(개발용)
  • ExecuTorch와 LiteRT는 모두 모바일 배포에 적합합니다.

    • ExecuTorch: 더 뛰어난 PyTorch 통합, 네이티브 PyTorch 워크플로 및 확장되는 생태계를 제공합니다.
    • LiteRT: 더 성숙하고 하드웨어 지원 범위가 넓으며 배포 예시가 더 많고, Android, iOS 및 브라우저에서 동일한 모델을 실행합니다.

    이미 PyTorch를 사용하고 네이티브 배포 경로를 원한다면 ExecuTorch를 선택하세요. 최대한의 호환성과 성숙한 도구를 원한다면 LiteRT를 선택하세요.

  • 예. ExecuTorch는 다양한 백엔드를 통한 하드웨어 가속을 지원합니다.

    • 모바일 GPU: Vulkan, Metal 또는 OpenCL delegate를 통해 지원합니다.
    • NPU/DSP: 플랫폼별 delegate를 통해 지원합니다.
    • 기본값: 최적화된 CPU 추론을 위한 XNNPACK입니다.

    백엔드별 설정은 ExecuTorch 문서를 참조하세요.

댓글