Meet YOLO26: next-gen vision AI.

Link to this sectionYOLO26 Modelleri için MNN Dışa Aktarma ve Dağıtım#

Link to this sectionMNN#

MNN mobile neural network inference framework

MNN, oldukça verimli ve hafif bir derin öğrenme çerçevesidir. Derin öğrenme modellerinin çıkarımını ve eğitimini destekler ve cihaz üzerinde çıkarım ve eğitim için endüstri lideri bir performansa sahiptir. Şu anda MNN; Taobao, Tmall, Youku, DingTalk, Xianyu gibi Alibaba Inc.'in 30'dan fazla uygulamasına entegre edilmiş olup; canlı yayın, kısa video yakalama, arama önerisi, resimle ürün arama, etkileşimli pazarlama, özkaynak dağıtımı ve 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📱

Link to this sectionMNN'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.

Link to this sectionKurulum#

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

Link to this sectionKullanım#

Tüm Ultralytics YOLO26 modelleri, kutudan çıktığı anda dışa aktarmayı destekleyecek şekilde tasarlanmıştır ve bu sayede tercih ettiğin dağıtım iş akışına kolayca entegre edilebilirler. Uygulaman için en iyi kurulumu seçmek amacıyla desteklenen dışa aktarma formatlarının ve yapılandırma seçeneklerinin tam listesini görüntüleyebilirsin.

MNN formatı Dışa Aktarma, Tahmin ve Doğrulama modlarını destekler. Modelini dışa aktar, ardından çıkarım çalıştırmak veya doğruluğunu doğrulamak için dışa aktarılan modeli yükle.

Dışa Aktar
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
from ultralytics import YOLO

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

# Run inference
results = model("https://ultralytics.com/images/bus.jpg")
Doğrulama
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")

Link to this sectionDışa Aktarma Argümanları#

ArgümanTürVarsayılanAçıklama
formatstr'mnn'Dışa aktarılan model için hedef format olup, çeşitli dağıtım ortamlarıyla uyumluluğu tanımlar.
imgszint veya tuple640Desired image size for the model input. Can be an integer for square images or a tuple (height, width) for specific dimensions.
halfboolFalseFP16 (yarı hassasiyetli) nicemlemeyi etkinleştirerek model boyutunu küçültür ve desteklenen donanımlarda çıkarımı hızlandırabilir.
int8boolFalseINT8 nicemlemeyi etkinleştirerek modeli daha fazla sıkıştırır ve temel olarak uç cihazlar için doğruluk kaybını minimumda tutarak çıkarımı hızlandırır.
batchint1Dışa aktarılan modelin toplu çıkarım boyutunu veya predict modunda aynı anda işleyeceği maksimum görüntü sayısını belirtir.
devicestrNoneDışa aktarma için cihazı belirler: 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 ile ilgili Ultralytics dokümantasyon sayfasını ziyaret et.

Link to this sectionSadece MNN ile Çıkarım#

YOLO26 çıkarımı ve ön işlemesi için yalnızca MNN'ye dayanan bir fonksiyon uygulanmıştır ve her türlü 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)

Link to this sectionÖzet#

Bu kılavuzda, Ultralytics YOLO26 modelinin MNN'ye nasıl dışa aktarılacağını ve çıkarım için MNN'nin nasıl kullanılacağını tanıtıyoruz. MNN formatı, uç yapay zeka uygulamaları için mükemmel performans sağlayarak, bilgisayarlı görü modellerini kaynak kısıtlı cihazlarda dağıtmak için ideal hale gelir.

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

Link to this sectionSSS#

Link to this sectionUltralytics YOLO26 modellerini MNN formatına nasıl dışa aktarabilirim?#

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

Dışa Aktar
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", half=True)  # creates 'yolo26n.mnn' with fp16 weight
model.export(format="mnn", int8=True)  # creates 'yolo26n.mnn' with int8 weight

Ayrıntılı dışa aktarma seçenekleri için dokümantasyondaki Dışa Aktarma sayfasını incele.

Link to this sectionDışa aktarılmış bir YOLO26 MNN modeli ile nasıl tahmin yapabilirim?#

Dışa aktarılmış bir YOLO26 MNN modeli ile tahmin yapmak için YOLO sınıfından predict fonksiyonunu kullan.

Tahmin
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", half=True)  # predict with `fp16` if device support

for result in results:
    result.show()  # display to screen
    result.save(filename="result.jpg")  # save to disk

Link to this sectionMNN 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.

Link to this sectionUltralytics YOLO26 MNN modellerini Mobil Cihazlarda nasıl dağıtabilirim?#

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

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

Yorumlar