Ten skrypt realizuje konwersję modelu MobileViT V2 0.50 z formatu TensorFlow/Keras do formatu Core ML (.mlpackage), zoptymalizowanego pod systemy iOS 16+ oraz macOS 13+.
Podczas standardowej konwersji architektury MobileViT V2 przy użyciu coremltools, proces często kończy się błędem:
Unsupported Ops
Przyczyną jest brak natywnego mapowania dla operacji OnesLike w grafie TensorFlow. Operacja ta jest wykorzystywana m.in. w mechanizmach attention modelu.
Zamiast modyfikować architekturę modelu lub ingerować w warstwy Keras, zastosowano dekorator:
@register_tf_opPozwala on rozszerzyć konwerter Core ML o brakującą operację, definiując jej odpowiednik w MIL (Model Intermediate Language).
Matematycznie:
ones_like(x) = tensor o kształcie x wypełniony 1
Implementacja w Core ML:
- Pobranie kształtu wejścia (
mb.shape) - Utworzenie tensora przez
mb.fill
from coremltools.converters.mil import Builder as mb
from coremltools.converters.mil.frontend.tensorflow.tf_op_registry import register_tf_op
@register_tf_op
def OnesLike(context, node):
"""
Custom handler dla operacji OnesLike.
Mapowanie: TF OnesLike -> MIL Fill(Shape(x), 1.0)
"""
input_tensor = context[node.inputs[0]]
shape = mb.shape(x=input_tensor)
out = mb.fill(shape=shape, value=1.0, name=node.name)
context.add(node.name, out)| Parametr | Wartość |
|---|---|
| Model bazowy | MobileViT V2 0.50 |
| Zadanie | Klasyfikacja binarna (np. zmiany skórne) |
| Format wyjściowy | mlprogram (FP32) |
| Target | iOS 16+, macOS 13+ |
| Input | (1, 256, 256, 3) |
ct.TensorType(shape=(1, 256, 256, 3))Po konwersji model zawiera:
- nazwy wejść/wyjść
- opisy
- typy danych
pip install coremltools tf_keras tensorflow keras_cv_attention_modelsUmieść plik .keras w katalogu:
BASE_DIR = "ścieżka/do/modelu"python convert_mv2_tensor.py- Przeciągnij plik
.mlpackagedo projektu w Xcode - Xcode automatycznie wygeneruje klasę Swift
- Model gotowy do użycia
- Model działa najlepiej z batch size = 1
- FP32 zapewnia maksymalną kompatybilność
Dzięki rejestracji customowej operacji OnesLike:
- unikamy modyfikacji modelu źródłowego
- zachowujemy kompatybilność z TensorFlow
- umożliwiamy pełną konwersję do Core ML