# Hugging Face'te mlx-image kullanımı

[`mlx-image`](https://github.com/riccardomusmeci/mlx-image), Apple [MLX](https://github.com/ml-explore/mlx) üzerine inşa edilmiş, [Riccardo Musmeci](https://github.com/riccardomusmeci) tarafından geliştirilen bir görüntü modelleri kütüphanesidir. Harika [timm](https://github.com/huggingface/pytorch-image-models) kütüphanesini MLX modelleri için yeniden oluşturmayı amaçlar.

## Hub'da mlx-image'ı Keşfetme

`mlx-image` modellerini, [bu sorguda](https://huggingface.co/models?library=mlx-image&sort=trending) olduğu gibi `mlx-image` kitaplığı adını kullanarak filtreleyerek bulabilirsiniz. Ayrıca, MLX formatı için ağırlıkları dönüştüren ve yayımlayan katkıda bulunanlar için açık bir [mlx-vision](https://huggingface.co/mlx-vision) topluluğu da mevcuttur.

## Kurulum

```bash
pip install mlx-image
```

## Modeller

Model ağırlıkları, Hugging Face'teki [`mlx-vision`](https://huggingface.co/mlx-vision) topluluğunda mevcuttur.

Önceden eğitilmiş ağırlıklarla bir model yüklemek için:
```python
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")
```

Tüm kullanılabilir modelleri listelemek için:

```python
from mlxim.model import list_models
list_models()
```

## ImageNet-1K Sonuçları

[results-imagenet-1k.csv](https://github.com/riccardomusmeci/mlx-image/blob/main/results/results-imagenet-1k.csv) dosyasına giderek `mlx-image`'a dönüştürülen her modeli ve farklı ayarlarla ImageNet-1K üzerindeki performansını kontrol edin.

> **TL;DR** performansı, PyTorch uygulamalarındaki orijinal modellerle karşılaştırılabilir düzeydedir.

## PyTorch ve diğer tanıdık araçlara benzerlik

`mlx-image`, PyTorch'e olabildiğince yakın olmayı hedefler:
- `DataLoader` -> kendi `collate_fn` tanımlayabilir ve veri yükleme hızını artırmak için `num_workers` kullanabilirsiniz
- `Dataset` -> `mlx-image` zaten `LabelFolderDataset` (güzel ve eski PyTorch `ImageFolder`) ile `FolderDataset` (içinde görseller bulunan genel bir klasör) yapısını destekler

- `ModelCheckpoint` -> en iyi modeli takip eder ve diske kaydeder (PyTorchLightning'e benzer). Ayrıca erken durdurmayı önerir

## Eğitim

Eğitim, PyTorch ile benzerdir. Bir modelin nasıl eğitileceğine dair bir örnek:

```python
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)
```

## Ek Kaynaklar

* [mlx-image deposu](https://github.com/riccardomusmeci/mlx-image)
* [mlx-vision topluluğu](https://huggingface.co/mlx-vision)

## İletişim

Herhangi bir sorunuz varsa, lütfen `riccardomusmeci92@gmail.com` adresine e-posta gönderin.

