YOLO26 Modelleri için MNN Dışa Aktarma ve Dağıtım#
MNN#
MNN, son derece verimli ve hafif bir derin öğrenme çerçevesidir. Derin öğrenme modellerinin çıkarımını ve eğitimini destekler ve cihaz üzerinde çıkarım ile eğitim için sektörde lider performans sunar. Günümüzde MNN, Taobao, Tmall, Youku, DingTalk, Xianyu gibi Alibaba Inc. bünyesindeki 30'dan fazla uygulamaya entegre edilmiştir ve canlı yayın, kısa video çekimi, arama önerileri, görüntüyle ürün arama, etkileşimli pazarlama, hisse dağıtımı ve güvenlik riski 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 aktarma, yedi Ultralytics görevini de destekler. Anlamsal segmentasyon ve derinlik tahmini yalnızca bu başlıkları kullanıma hazır olarak sunan tek aile olan YOLO26 ile kullanılabilir.
| Görev | YOLOv8 | YOLO11 | YOLO26 |
|---|---|---|---|
| Algılama | ✅ | ✅ | ✅ |
| Segmentasyon | ✅ | ✅ | ✅ |
| Semantik | ❌ | ❌ | ✅ |
| Derinlik | ❌ | ❌ | ✅ |
| Sınıflandırma | ✅ | ✅ | ✅ |
| Poz | ✅ | ✅ | ✅ |
| OBB | ✅ | ✅ | ✅ |
MNN'ye Dışa Aktarma: YOLO26 Modelinizi 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ı sınırlı cihazlarda verimli performans sağlar.
Kurulum#
Gerekli paketleri yüklemek için şunu çalıştır:
# Install the required package for YOLO26 and MNN
pip install ultralytics
pip install MNNKullanım#
Tüm Ultralytics YOLO26 modelleri, kutudan çıktığı hâliyle dışa aktarmayı destekleyecek şekilde tasarlanmıştır; böylece bunları tercih ettiğin dağıtım iş akışına kolayca entegre edebilirsin. Uygulaman için en iyi 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 Export, Predict ve Validate modlarını destekler. Modelini dışa aktar, ardından çıkarım yapmak veya doğruluğunu doğrulamak için dışa aktarılan modeli yükle.
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'from ultralytics import YOLO
# Load the exported MNN model
model = YOLO("yolo26n.mnn")
# Run inference
results = model("https://ultralytics.com/images/bus.jpg")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 Bağımsız Değişkenleri#
| Bağımsız değişken | Tür | Varsayılan | Açıklama |
|---|---|---|---|
format | str | 'mnn' | Dışa aktarılan model için hedef formatı belirtir ve çeşitli dağıtım ortamlarıyla uyumluluğu tanımlar. |
imgsz | int veya tuple | 640 | Model girdisi için istenen görüntü boyutu. Kare görüntüler için bir tam sayı veya belirli boyutlar için (height, width) tuple'ı olabilir. |
quantize | int veya str | None | Niceleme hassasiyeti: 16 (FP16) veya 8 (INT8), dışa aktarılan ağırlıkları küçültür; 32/unset, FP32 ağırlıkları dışa aktarır ancak MNN'nin CPU çalışma zamanı bunları FP32 yerine varsayılan low hassasiyetinde hesaplar. Kullanımdan kaldırılan half/int8 bayraklarının yerini alır. |
simplify | bool | True | Ara ONNX grafiğini onnxslim ile basitleştirir. |
opset | int | None | Ara ONNX grafiği için ONNX opset sürümünü belirtir. Ayarlanmazsa desteklenen en son sürüm kullanılır. |
batch | int | 1 | Dışa aktarma modelinin 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. |
dynamic | bool | False | Dinamik giriş görüntüsü boyutlarını etkinleştirir. nms=True ile birlikte kullanılamaz. |
nms | bool, isteğe bağlı | None | Ham çıktı (None, varsayılan), gömülü NMS (True) veya NMS içermeyen başlığı (False) seç. Gömülü NMS, dynamic=False ile nesne tespiti ve poz tahminini destekler. |
device | str | None | Dışa aktarma cihazını belirtir: GPU (device=0), CPU (device=cpu), Apple silicon için MPS (device=mps). |
Dışa aktarma süreci hakkında daha fazla ayrıntı için Ultralytics'in dışa aktarma dokümantasyonu sayfasını ziyaret et.
Yalnızca MNN ile Çıkarım#
YOLO26 çıkarımı ve ön işleme için yalnızca MNN'ye dayanan bir işlev uygulanmıştır; her senaryoda kolay dağıtım için Python ve C++ sürümleri sunulur.
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] -> [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)
# 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'ye nasıl dışa aktaracağını ve çıkarım için MNN'yi nasıl kullanacağını tanıtıyoruz. MNN biçimi, edge AI uygulamaları için mükemmel performans sunar ve bu nedenle bilgisayarlı görü modellerini kaynakları sınırlı cihazlara dağıtmak için idealdir.
Daha fazla kullanım bilgisi için lütfen MNN belgelerine bak.
SSS#
Ultralytics YOLO26 modelini MNN biçimine dışa aktarmak için şu adımları izle:
Dışa aktarmafrom 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 weightAyrıntılı dışa aktarma seçenekleri için belgelerdeki Export sayfasına bak.
Dışa aktarılan bir YOLO26 MNN modeliyle tahmin yapmak için YOLO sınıfındaki
predictişlevini kullan.Tahminfrom ultralytics import YOLO # Load the YOLO26 MNN model model = YOLO("yolo26n.mnn") # Run inference results = model("https://ultralytics.com/images/bus.jpg") for result in results: result.show() # display to screen result.save(filename="result.jpg") # save to diskMNN ç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 cihazlara dağıtmak için:
- Android için Derleme: MNN Android kılavuzunu izle.
- iOS için Derleme: MNN iOS kılavuzunu izle.
- Harmony için Derleme: MNN Harmony kılavuzunu izle.