YOLO Vision 2026:

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

MNN#

MNN mobile neural network inference framework

MNN, oldukça verimli ve hafif bir derin öğrenme çerçevesidir. Derin öğrenme modellerinin çıkarım ve eğitimini destekler; cihaz üzerinde çıkarım ve eğitim konusunda endüstri lideri bir performansa sahiptir. MNN şu anda Alibaba Inc.'in Taobao, Tmall, Youku, DingTalk, Xianyu gibi 30'dan fazla uygulamasında entegre edilmiş durumdadır ve canlı yayın, kısa video çekimi, arama önerileri, görselle ürün arama, etkileşimli pazarlama, hisse dağıtımı, güvenlik risk kontrolü gibi 70'ten fazla kullanım senaryosunu kapsamaktadır. Ayrıca MNN, 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
Detect
Segment
Semantic
Depth
Classify
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 genişletebilirsin. 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 aktarımı destekleyecek şekilde tasarlanmıştır, bu da onları tercih ettiğin dağıtım iş akışına entegre etmeyi kolaylaştırır. Uygulaman için en iyi kurulumu seçmek üzere desteklenen dışa aktarma 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 (height, width) şeklinde bir demet olabilir.
quantizeint veya strNoneKuantizasyon hassasiyeti: 16 (FP16), 8 (INT8 ağırlık kuantizasyonu) veya 32/ayarlanmamış (FP32). Kullanımdan kaldırılan half/int8 bayraklarının yerini alır.
simplifyboolTrueonnxslim ile ara ONNX grafiğini 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 eşzamanlı olarak işleyeceği maksimum görüntü sayısını belirtir.
dynamicboolFalseDinamik giriş görseli boyutlarını etkinleştirir. nms=True ile birlikte kullanılamaz.
nmsboolFalseTespit ve poz modelleri için NMS ekler. dynamic=True ile birlikte kullanılamaz.
devicestrNoneDışa aktarma için cihazı belirtir: GPU (device=0), CPU (device=cpu), Apple silikon için MPS (device=mps).

Dışa aktarma süreci hakkında daha fazla ayrıntı için dışa aktarma hakkındaki Ultralytics dokümantasyon sayfasına git.

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 nasıl MNN formatına 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 gelir.

Daha fazla kullanım bilgisi için lütfen MNN dokümantasyonuna başvur.

SSS#

Ultralytics YOLO26 modellerini MNN formatına nasıl dışa aktarırım?#

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 dokümantasyondaki Export sayfasına göz at.

Dışa aktarılmış bir YOLO26 MNN modeliyle nasıl tahmin yapabilirim?#

Dışa aktarılmış bir YOLO26 MNN modeliyle tahmin yapmak için, YOLO sınıfından predict işlevini 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 için hangi platformlar desteklenmektedir?#

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.

Ultralytics YOLO26 MNN modellerini Mobil Cihazlarda nasıl dağıtabilirim?#

YOLO26 modellerini Mobil cihazlarda dağıtmak için:

  1. Android için derle: MNN Android kılavuzunu izle.
  2. iOS için derle: MNN iOS kılavuzunu izle.
  3. Harmony için derle: MNN Harmony kılavuzunu izle.

Yorumlar