Hub documentation

Hugging Face에서 mlx-image 사용

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Hugging Face에서 mlx-image 사용

mlx-image는 Apple MLX를 기반으로 Riccardo Musmeci가 개발한 이미지 모델 라이브러리입니다. timm의 장점을 MLX 모델에 맞게 재현하는 것을 목표로 합니다.

Hub에서 mlx-image 탐색하기

mlx-image 라이브러리 이름을 필터로 사용하여 이 쿼리와 같이 mlx-image 모델을 찾을 수 있습니다. 또한 MLX 형식으로 변환 및 공개할 가중치를 다루는 기여자를 위한 mlx-vision 오픈 커뮤니티도 있습니다.

설치

pip install mlx-image

모델

모델 가중치는 Hugging Face의 mlx-vision 커뮤니티에서 사용할 수 있습니다.

…

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 결과

모든 모델이 mlx-image로 변환된 결과와 다양한 설정에서 ImageNet-1K 성능을 확인하려면 results-imagenet-1k.csv로 이동하세요.

TL;DR PyTorch 구현의 원래 모델과 성능이 비슷합니다.

PyTorch 및 기타 익숙한 도구와의 유사성

mlx-image는 PyTorch와 최대한 유사하도록 설계되었습니다:

  • DataLoader -> 사용자 정의 collate_fn을 정의하고 num_workers를 사용하여 데이터 로딩 속도를 높일 수 있습니다

  • Dataset -> mlx-image는 LabelFolderDataset(오래된 PyTorch ImageFolder)와 FolderDataset(이미지가 포함된 일반 폴더)를 이미 지원합니다

  • ModelCheckpoint -> 가장 좋은 모델을 추적하여 디스크에 저장합니다 (PyTorchLightning과 유사). 또한 조기 정지를 제안합니다

학습

Training은 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