YOLO Vision 2026:

YOLO26 Modelleri ve Dağıtımı için MNN Dışa Aktarma#

MNN#

MNN mobile neural network inference framework

MNN, son derece verimli ve hafif bir derin öğrenme çerçevesidir. Derin öğrenme modellerinin çıkarımını ve eğitimini destekler; cihaz üstü çıkarım ve eğitimde sektör lideri performansa sahiptir. Halihazırda MNN; canlı yayın, kısa video çekimi, arama önerisi, görselle ürün arama, etkileşimli pazarlama, hak dağıtımı, güvenlik risk kontrolü gibi 70'ten fazla kullanım senaryosunu kapsayacak şekilde Taobao, Tmall, Youku, DingTalk, Xianyu gibi Alibaba Inc.'in 30'dan fazla uygulamasında entegre edilmiştir. Buna ek olarak MNN, Nesnelerin İnterneti (IoT) gibi gömülü cihazlarda da kullanılmaktadır.



Watch: How to Export Ultralytics YOLO26 to MNN Format | Speed up Inference on Mobile Devices📱

Desteklenen Görevler#

MNN dışa aktarımı, yedi Ultralytics görevini de destekler. Anlamsal bölütleme ve derinlik tahmini, yalnızca bu kafaları barındıran tek aile olan YOLO26 ile kullanılabilir.

GörevYOLOv8YOLO11YOLO26
Algıla
Segmentlere Ayır
Anlamsal
Derinlik
Sınıflandır
Poz
OBB

MNN'ye Dışa Aktarma: YOLO26 Modelini Dönüştürme#

Ultralytics YOLO modellerini MNN formatına dönüştürerek model uyumluluğunu ve dağıtım esnekliğini artırabilirsin. Bu dönüştürme, modellerini mobil ve gömülü ortamlar için optimize ederek kaynak kısıtlı cihazlarda verimli performans sağlar.

Kurulum#

Gerekli paketleri kurmak için şunu çalıştır:

Kurulum
# Install the required package for YOLO26 and MNN
pip install ultralytics
pip install MNN

Kullanım#

Tüm Ultralytics YOLO26 modelleri, kutudan çıktığı gibi dışa aktarmayı destekleyecek şekilde tasarlanmıştır; bu da bunları tercih ettiğin dağıtım iş akışına entegre etmeni kolaylaştırır. Uygulaman için en iyi kurulumu seçmek üzere desteklenen dışa aktarım formatlarının ve yapılandırma seçeneklerinin tam listesini görüntüleyebilirsin.

MNN formatı Export, Predict ve Validate modlarını destekler. Modelini dışa aktar, ardından çıkarım çalıştırmak veya doğruluğunu test etmek için dışa aktarılan modeli yükle.

Dışa Aktar (Export)
from ultralytics import YOLO

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

# Export the model to MNN format
model.export(format="mnn")  # creates 'yolo26n.mnn'
Tahmin Et (Predict)
from ultralytics import YOLO

# Load the exported MNN model
model = YOLO("yolo26n.mnn")

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

# Load the exported MNN model
model = YOLO("yolo26n.mnn")

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

Dışa Aktarma Argümanları#

ArgümanTipVarsayılanAçıklama
formatstr'mnn'Çeşitli dağıtım ortamlarıyla uyumluluğu tanımlayan, dışa aktarılan model için hedef format.
imgszint veya tuple640Model girişi için istenen görüntü boyutu. Kare görüntüler için bir tamsayı veya belirli boyutlar için bir (height, width) demeti (tuple) olabilir.
quantizeint veya strNoneNiceleme hassasiyeti: 16 (FP16), 8 (INT8 ağırlık nicelemesi) veya 32/ayarlanmamış (FP32). Kullanımdan kaldırılan half/int8 bayraklarının yerini alır.
simplifyboolTrueAra ONNX grafiğini onnxslim ile basitleştirir.
opsetintNoneAra ONNX grafiği için ONNX opset sürümünü belirtir. Ayarlanmazsa, desteklenen en son sürümü kullanır.
batchint1Dışa aktarılan modelin toplu çıkarım boyutunu veya dışa aktarılan modelin predict modunda aynı anda işleyeceği maksimum görüntü sayısını belirtir.
dynamicboolFalseDinamik giriş resmi boyutlarını etkinleştirir. nms=True ile birleştirilemez.
nmsboolFalseNesne tespiti ve poz modelleri için NMS ekler. dynamic=True ile birleştirilemez.
devicestrNoneDışa aktarma için cihazı belirtir: GPU (device=0), CPU (device=cpu), Apple silikon için MPS (device=mps).

Dışa aktarım süreci hakkında daha fazla ayrıntı için Ultralytics documentation page on exporting sayfasını ziyaret edin.

Sadece MNN ile Çıkarım#

YOLO26 çıkarımı ve ön işlemesi için yalnızca MNN'ye dayanan bir işlev uygulanmıştır; herhangi bir senaryoda kolay dağıtım için hem Python hem de C++ sürümleri sunulmaktadır.

MNN
import argparse

import MNN
import MNN.cv as cv2
import MNN.numpy as np

def inference(model, img, precision, backend, thread):
    config = {}
    config["precision"] = precision
    config["backend"] = backend
    config["numThread"] = thread
    rt = MNN.nn.create_runtime_manager((config,))
    # net = MNN.nn.load_module_from_file(model, ['images'], ['output0'], runtime_manager=rt)
    net = MNN.nn.load_module_from_file(model, [], [], runtime_manager=rt)
    original_image = cv2.imread(img)
    ih, iw, _ = original_image.shape
    length = max((ih, iw))
    scale = length / 640
    image = np.pad(original_image, [[0, length - ih], [0, length - iw], [0, 0]], "constant")
    image = cv2.resize(
        image, (640, 640), 0.0, 0.0, cv2.INTER_LINEAR, -1, [0.0, 0.0, 0.0], [1.0 / 255.0, 1.0 / 255.0, 1.0 / 255.0]
    )
    image = image[..., ::-1]  # BGR to RGB
    input_var = image[None]
    input_var = MNN.expr.convert(input_var, MNN.expr.NC4HW4)
    output_var = net.forward(input_var)
    output_var = MNN.expr.convert(output_var, MNN.expr.NCHW)
    output_var = output_var.squeeze()
    # output_var shape: [84, 8400]; 84 means: [cx, cy, w, h, prob * 80]
    cx = output_var[0]
    cy = output_var[1]
    w = output_var[2]
    h = output_var[3]
    probs = output_var[4:]
    # [cx, cy, w, h] -> [y0, x0, y1, x1]
    x0 = cx - w * 0.5
    y0 = cy - h * 0.5
    x1 = cx + w * 0.5
    y1 = cy + h * 0.5
    boxes = np.stack([x0, y0, x1, y1], axis=1)
    # ensure ratio is within the valid range [0.0, 1.0]
    boxes = np.clip(boxes, 0, 1)
    # get max prob and idx
    scores = np.max(probs, 0)
    class_ids = np.argmax(probs, 0)
    result_ids = MNN.expr.nms(boxes, scores, 100, 0.45, 0.25)
    print(result_ids.shape)
    # nms result box, score, ids
    result_boxes = boxes[result_ids]
    result_scores = scores[result_ids]
    result_class_ids = class_ids[result_ids]
    for i in range(len(result_boxes)):
        x0, y0, x1, y1 = result_boxes[i].read_as_tuple()
        y0 = int(y0 * scale)
        y1 = int(y1 * scale)
        x0 = int(x0 * scale)
        x1 = int(x1 * scale)
        # clamp to the original image size to handle cases where padding was applied
        x1 = min(iw, x1)
        y1 = min(ih, y1)
        print(result_class_ids[i])
        cv2.rectangle(original_image, (x0, y0), (x1, y1), (0, 0, 255), 2)
    cv2.imwrite("res.jpg", original_image)

if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument("--model", type=str, required=True, help="the yolo26 model path")
    parser.add_argument("--img", type=str, required=True, help="the input image path")
    parser.add_argument("--precision", type=str, default="normal", help="inference precision: normal, low, high, lowBF")
    parser.add_argument(
        "--backend",
        type=str,
        default="CPU",
        help="inference backend: CPU, OPENCL, OPENGL, NN, VULKAN, METAL, TRT, CUDA, HIAI",
    )
    parser.add_argument("--thread", type=int, default=4, help="inference using thread: int")
    args = parser.parse_args()
    inference(args.model, args.img, args.precision, args.backend, args.thread)

Özet#

Bu kılavuzda, Ultralytics YOLO26 modelini MNN formatına nasıl dışa aktaracağını ve çıkarım için MNN'yi nasıl kullanacağını tanıtıyoruz. MNN formatı, edge AI uygulamaları için mükemmel performans sunarak bilgisayarlı görü modellerini kaynak kısıtlı cihazlarda dağıtmak için ideal hale getirir.

Daha fazla kullanım için lütfen MNN documentation sayfasına göz at.

SSS#

  • Ultralytics YOLO26 modelini MNN formatına dışa aktarmak için şu adımları izle:

    Dışa Aktar (Export)
    from ultralytics import YOLO
    
    # Load a YOLO26 model
    model = YOLO("yolo26n.pt")
    
    # Export to MNN format
    model.export(format="mnn")  # creates 'yolo26n.mnn' with fp32 weight
    model.export(format="mnn", quantize=16)  # creates 'yolo26n.mnn' with fp16 weight
    model.export(format="mnn", quantize=8)  # creates 'yolo26n.mnn' with int8 weight

    Ayrıntılı dışa aktarma seçenekleri için belgelerdeki Export sayfasına göz at.

  • Dışa aktarılmış bir YOLO26 MNN modeliyle tahmin yapmak için YOLO sınıfındaki predict fonksiyonunu kullan.

    Tahmin Et (Predict)
    from ultralytics import YOLO
    
    # Load the YOLO26 MNN model
    model = YOLO("yolo26n.mnn")
    
    # Run inference
    results = model("https://ultralytics.com/images/bus.jpg")  # predict with `fp32`
    results = model("https://ultralytics.com/images/bus.jpg", quantize=16)  # predict with `fp16` if device support
    
    for result in results:
        result.show()  # display to screen
        result.save(filename="result.jpg")  # save to disk
  • MNN çok yönlüdür ve çeşitli platformları destekler:

    • Mobil: Android, iOS, Harmony.
    • Gömülü Sistemler ve IoT Cihazları: Raspberry Pi ve NVIDIA Jetson gibi cihazlar.
    • Masaüstü ve Sunucular: Linux, Windows ve macOS.
  • YOLO26 modellerini Mobil cihazlarda dağıtmak için:

    1. Android için Derleme: MNN Android kılavuzunu takip et.
    2. iOS için Derleme: MNN iOS kılavuzunu takip et.
    3. Harmony için Derleme: MNN Harmony kılavuzunu takip et.

Yorumlar