Hub documentation

استخدام mlx-image على Hugging Face

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

استخدام mlx-image على Hugging Face

mlx-image هو مكتبة لنماذج الصور طوّرها Riccardo Musmeci وتقوم على MLX من Apple. يحاول تكرار مكتبة timm الرائعة، لكن لنماذج MLX.

استكشاف mlx-image على Hub

يمكنك العثور على نماذج mlx-image من خلال التصفية باستخدام اسم مكتبة mlx-image، كما في هذا الاستعلام. كما توجد مجتمع mlx-vision مفتوح للمساهمين الذين يقومون بتحويل الأوزان ونشرها بصيغة MLX.

التثبيت

pip install mlx-image

النماذج

أوزان النموذج متاحة على مجتمع mlx-vision في Hugging Face.

لتحميل نموذج بأوزان مُدرَّبة مسبقًا:

from mlxim.model import create_model

# loading weights from HuggingFace (https://huggingface.co/mlx-vision/resnet18-mlxim)
model = create_model("resnet18") # pretrained weights loaded from HF

# loading weights from local file
model = create_model("resnet18", weights="path/to/resnet18/model.safetensors")

لإدراج جميع النماذج المتاحة:

from mlxim.model import list_models
list_models()

نتائج ImageNet-1K

انتقل إلى results-imagenet-1k.csv للتحقق من كل نموذج تم تحويله إلى mlx-image وأداؤه على ImageNet-1K مع إعدادات مختلفة.

ملخص سريع الأداء مماثل لأداء النماذج الأصلية من تطبيقات PyTorch.

التشابه مع PyTorch والأدوات الأخرى المألوفة

يحاول mlx-image أن يكون أقرب ما يمكن إلى PyTorch:

  • DataLoader -> يمكنك تحديد collate_fn خاص بك واستخدام num_workers لتسريع تحميل البيانات

  • Dataset -> يدعم mlx-image بالفعل LabelFolderDataset (وهو ImageFolder القديم من PyTorch) وFolderDataset (وهو مجلد عام يحتوي على صور)

  • ModelCheckpoint -> يتتبع أفضل نموذج ويحفظه على القرص (على غرار PyTorchLightning). كما يقترح التوقف المبكر

التدريب

تتشابه عملية التدريب مع PyTorch. فيما يلي مثال على كيفية تدريب نموذج:

import mlx.nn as nn
import mlx.optimizers as optim
from mlxim.model import create_model
from mlxim.data import LabelFolderDataset, DataLoader

train_dataset = LabelFolderDataset(
    root_dir="path/to/train",
    class_map={0: "class_0", 1: "class_1", 2: ["class_2", "class_3"]}
)
train_loader = DataLoader(
    dataset=train_dataset,
    batch_size=32,
    shuffle=True,
    num_workers=4
)
model = create_model("resnet18") # pretrained weights loaded from HF
optimizer = optim.Adam(learning_rate=1e-3)

def train_step(model, inputs, targets):
    logits = model(inputs)
    loss = mx.mean(nn.losses.cross_entropy(logits, target))
    return loss

model.train()
for epoch in range(10):
    for batch in train_loader:
        x, target = batch
        train_step_fn = nn.value_and_grad(model, train_step)
        loss, grads = train_step_fn(x, target)
        optimizer.update(model, grads)
        mx.eval(model.state, optimizer.state)

موارد إضافية

تواصل

إذا كانت لديك أي أسئلة، يرجى إرسال بريد إلكتروني إلى riccardomusmeci92@gmail.com.

Update on GitHub