Ultralytics YOLO27:
Get Started

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

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 üzerinde çıkarım ve eğitim için sektör lideri performans sunar. Şu anda MNN, Taobao, Tmall, Youku, DingTalk ve Xianyu gibi Alibaba Inc'in 30'dan fazla uygulamasına entegre edilmiştir ve canlı yayın, kısa video çekimi, arama önerisi, görselle ürün arama, etkileşimli pazarlama, hisse dağıtımı ve güvenlik riski kontrolü gibi 70'ten fazla kullanım senaryosunu kapsar. Ayrıca MNN, IoT gibi gömülü cihazlarda da kullanılır.



İzle: Ultralytics YOLO26'yı MNN biçimine aktarma | Mobil cihazlarda çıkarımı hızlandır📱

Desteklenen Görevler#

MNN dışa aktarma, Ultralytics'in yedi görevinin tümünü destekler. Anlamsal bölümleme ve derinlik tahmini yalnızca bu başlıkları sunan tek aile olan YOLO26 ile kullanılabilir.

GörevYOLOv8YOLO11YOLO26
Algılama✅✅✅
Segmentasyon✅✅✅
Anlamsal❌❌✅
Derinlik❌❌✅
Sınıflandırma✅✅✅
Poz✅✅✅
OBB✅✅✅

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

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

Kurulum#

Gerekli paketleri yüklemek 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 sayede tercih ettiğin dağıtım iş akışına kolayca entegre edebilirsin. Uygulaman için en uygun kurulumu seçmek üzere desteklenen dışa aktarma biçimlerinin ve yapılandırma seçeneklerinin tam listesini görüntüleyebilirsin.

MNN biçimi Dışa Aktar, Tahmin ve Doğrula modlarını destekler. Modelini dışa aktar, ardından çıkarım yapmak veya doğruluğunu değerlendirmek için dışa aktarılan modeli yükle.

Dışa aktar
from ultralytics import YOLO

# YOLO26 modelini yükle
model = YOLO("yolo26n.pt")

# Modeli MNN biçimine aktar
model.export(format="mnn")  # 'yolo26n.mnn' oluşturur
Tahmin
from ultralytics import YOLO

# Dışa aktarılan MNN modelini yükle
model = YOLO("yolo26n.mnn")

# Çıkarımı çalıştır
results = model("https://ultralytics.com/images/bus.jpg")
Doğrula
from ultralytics import YOLO

# Dışa aktarılan MNN modelini yükle
model = YOLO("yolo26n.mnn")

# COCO8 veri kümesinde doğruluğu doğrula
metrics = model.val(data="coco8.yaml")

Dışa Aktarma Bağımsız Değişkenleri#

Bağımsız değişkenTürVarsayılanAçıklama
formatstr'mnn'Dışa aktarılan modelin hedef biçimi; çeşitli dağıtım ortamlarıyla uyumluluğu tanımlar.
imgszint veya tuple640Model girişi için istenen görüntü boyutu. Kare görüntüler için bir tam sayı, belirli boyutlar içinse (height, width) demeti kullanılabilir.
quantizeint veya strNoneNiceleme hassasiyeti: 16 (FP16) veya 8 (INT8), dışa aktarılan ağırlıkları küçültür; 32/ayarlanmamış değer FP32 ağırlıkları dışa aktarır; ancak Ultralytics'in MNNBackend bileşeni bunları FP32 yerine low hassasiyetinde çalıştırır. Kullanımdan kaldırılmış half/int8 bayraklarının yerini alır.
simplifyboolTrueAra ONNX grafiğini onnxslim ile sadeleştirir.
opsetintNoneAra ONNX grafiği için ONNX opset sürümünü belirtir. Ayarlanmazsa desteklenen en son sürüm kullanılır.
batchint1Dışa aktarılan modelin toplu çıkarım boyutunu veya predict kipinde eşzamanlı işleyeceği en fazla görüntü sayısını belirtir.
dynamicboolFalseDinamik giriş görüntüsü boyutlarını etkinleştirir. nms=True ile birlikte kullanılamaz.
nmsbool, isteğe bağlıNoneHam çıktıyı (None, varsayılan), gömülü NMS'yi (True) veya NMS içermeyen başlığı (False) seç. Gömülü NMS, dynamic=False ile algılama ve poz görevlerini destekler.
devicestrNoneDışa aktarma aygıtını belirtir: GPU (device=0), CPU (device=cpu), Apple silikon için MPS (device=mps).

Dışa aktarma süreci hakkında daha fazla bilgi için Ultralytics dışa aktarma belgeleri sayfasını ziyaret et.

Yalnızca MNN ile Çıkarım#

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

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'den RGB'ye
    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 şu anlama gelir: [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] -> [x0, y0, x1, y1]
    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)
    # en yüksek prob ve idx değerini al
    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 sonuç kutusu, skor, 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)
        # dolgu uygulanmış durumları ele almak için orijinal görüntü boyutlarına sığdır
        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'ye nasıl aktaracağını ve çıkarım için MNN'yi nasıl kullanacağını açıklıyoruz. MNN biçimi, uç yapay zekâ uygulamaları için mükemmel performans sunar ve kaynakları kısıtlı cihazlarda bilgisayarlı görü modelleri dağıtmak için idealdir.

Daha fazla kullanım bilgisi için MNN belgelerine bak.

Sık Sorulan Sorular#

  • Ultralytics YOLO26 modelini MNN biçimine aktarmak için şu adımları izle:

    Dışa aktar
    from ultralytics import YOLO
    
    # YOLO26 modelini yükle
    model = YOLO("yolo26n.pt")
    
    # MNN biçimine aktar
    model.export(format="mnn")  # fp32 ağırlıklarla 'yolo26n.mnn' oluşturur
    model.export(format="mnn", quantize=16)  # fp16 ağırlıklarla 'yolo26n.mnn' oluşturur
    model.export(format="mnn", quantize=8)  # int8 ağırlıklarla 'yolo26n.mnn' oluşturur

    Ayrıntılı dışa aktarma seçenekleri için belgelerdeki Dışa Aktarma sayfasına bak.

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

    Tahmin
    from ultralytics import YOLO
    
    # YOLO26 MNN modelini yükle
    model = YOLO("yolo26n.mnn")
    
    # Çıkarımı çalıştır
    results = model("https://ultralytics.com/images/bus.jpg")
    
    for result in results:
        result.show()  # Ekranda göster
        result.save(filename="result.jpg")  # Diske kaydet
  • 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 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