Hub documentation
Uso de mlx-image en Hugging Face
Uso de mlx-image en Hugging Face
mlx-image es una biblioteca de modelos de imagen desarrollada por Riccardo Musmeci y construida sobre Apple MLX. Intenta replicar la gran timm, pero para modelos de MLX.
Explorando mlx-image en el Hub
Puedes encontrar modelos de mlx-image filtrando por el nombre de la biblioteca mlx-image, como en esta consulta.
También existe una comunidad abierta de mlx-vision para colaboradores que convierten y publican pesos en formato MLX.
Instalación
pip install mlx-image
Modelos
Los pesos del modelo están disponibles en la comunidad mlx-vision de Hugging Face.
Para cargar un modelo con pesos preentrenados:
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")Para listar todos los modelos disponibles:
from mlxim.model import list_models
list_models()Resultados de ImageNet-1K
Vaya a results-imagenet-1k.csv para consultar cada modelo convertido a mlx-image y su rendimiento en ImageNet-1K con diferentes configuraciones.
El rendimiento de TL;DR es comparable al de los modelos originales de las implementaciones de PyTorch.
Similitud con PyTorch y otras herramientas familiares
mlx-image intenta ser lo más parecido posible a PyTorch:
DataLoader-> puede definir su propiacollate_fny también usarnum_workerspara acelerar la carga de datosDataset->mlx-imageya admiteLabelFolderDataset(el clásicoImageFolderde PyTorch) yFolderDataset(una carpeta genérica con imágenes)ModelCheckpoint-> mantiene un registro del mejor modelo y lo guarda en el disco (similar a PyTorchLightning). También sugiere el detenerse temprano
Entrenamiento
El entrenamiento es similar al de PyTorch. A continuación, se muestra un ejemplo de cómo entrenar un modelo:
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)Recursos adicionales
Contacto
Si tienes alguna pregunta, por favor envía un correo electrónico a riccardomusmeci92@gmail.com.