# Menggunakan mlx-image di Hugging Face

[`mlx-image`](https://github.com/riccardomusmeci/mlx-image) adalah pustaka model gambar yang dikembangkan oleh [Riccardo Musmeci](https://github.com/riccardomusmeci) dan dibangun di atas [MLX](https://github.com/ml-explore/mlx) Apple. Pustaka ini berusaha mereplikasi [timm](https://github.com/huggingface/pytorch-image-models) yang luar biasa, tetapi khusus untuk model MLX.

## Menjelajahi mlx-image di Hub

Anda dapat menemukan model `mlx-image` dengan memfilter menggunakan nama pustaka `mlx-image`, seperti pada [kueri ini](https://huggingface.co/models?library=mlx-image&sort=trending). Ada juga komunitas [mlx-vision](https://huggingface.co/mlx-vision) yang terbuka bagi kontributor untuk mengonversi dan menerbitkan bobot dalam format MLX.

## Instalasi

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

## Model

Bobot model tersedia di komunitas [`mlx-vision`](https://huggingface.co/mlx-vision) di Hugging Face.

Untuk memuat model dengan bobot terlatih sebelumnya:
```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")
```

Untuk mendaftar semua model yang tersedia:

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

## Hasil ImageNet-1K

Buka [results-imagenet-1k.csv](https://github.com/riccardomusmeci/mlx-image/blob/main/results/results-imagenet-1k.csv) untuk memeriksa setiap model yang dikonversi ke `mlx-image` beserta kinerjanya pada ImageNet-1K dengan berbagai pengaturan.

> Performa **TL;DR** sebanding dengan model asli dari implementasi PyTorch.

## Kemiripan dengan PyTorch dan alat-alat lain yang sudah dikenal

`mlx-image` berusaha sedekat mungkin dengan PyTorch:
- `DataLoader` -> Anda dapat mendefinisikan `collate_fn` Anda sendiri dan juga menggunakan `num_workers` untuk mempercepat pemuatan data
- `Dataset` -> `mlx-image` sudah mendukung `LabelFolderDataset` (PyTorch `ImageFolder` yang sudah lama dikenal) dan `FolderDataset` (folder generik yang berisi gambar)

- `ModelCheckpoint` -> melacak model terbaik dan menyimpannya ke disk (mirip dengan PyTorchLightning). Ini juga menyarankan penghentian dini

## Pelatihan

Pelatihan mirip dengan PyTorch. Berikut adalah contoh cara melatih model:

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

## Sumber Daya Tambahan

* [repositori mlx-image](https://github.com/riccardomusmeci/mlx-image)
* komunitas [mlx-vision](https://huggingface.co/mlx-vision)

## Kontak

Jika Anda memiliki pertanyaan, silakan kirim email ke `riccardomusmeci92@gmail.com`.

