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; 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örev | YOLOv8 | YOLO11 | YOLO26 |
|---|---|---|---|
| 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:
# Install the required package for YOLO26 and MNN
pip install ultralytics
pip install MNNKullanı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.
from ultralytics import YOLO
# YOLO26 modelini yükle
model = YOLO("yolo26n.pt")
# Modeli MNN biçimine aktar
model.export(format="mnn") # 'yolo26n.mnn' oluştururfrom 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")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şken | Tür | Varsayılan | Açıklama |
|---|---|---|---|
format | str | 'mnn' | Dışa aktarılan modelin hedef biçimi; çeşitli dağıtım ortamlarıyla uyumluluğu tanımlar. |
imgsz | int veya tuple | 640 | Model 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. |
quantize | int veya str | None | Niceleme 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. |
simplify | bool | True | Ara ONNX grafiğini onnxslim ile sadeleş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 aktarılan modelin toplu çıkarım boyutunu veya predict kipinde eşzamanlı işleyeceği en fazla 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ı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. |
device | str | None | Dış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.
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 aktarfrom 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ştururAyrı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
predictişlevini kullan.Tahminfrom 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 kaydetMNN ç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:
- Android için derle: MNN Android kılavuzunu izle.
- iOS için derle: MNN iOS kılavuzunu izle.
- Harmony için derle: MNN Harmony kılavuzunu izle.