MobileNet i EfficientNet na potrzeby wdrażania na urządzeniach brzegowych
Lekkie architektury, konwersja do TFLite, kompromis między rozmiarem modelu a dokładnością.
MobileNet i EfficientNet na potrzeby wdrażania na urządzeniach brzegowych to bezpłatna lekcja Learn AI with Python na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Learn AI with Python, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Learn AI with Python zawiera 4 lekcji w sumie.
Dlaczego modele brzegowe są inne
Na telefonach i urządzeniach wbudowanych trzeba poświęcić część dokładności na rzecz niewielkiego rozmiaru, małych opóźnień i niskiego zużycia energii. MobileNet i EfficientNet zostały zaprojektowane właśnie do tego celu i wykorzystują wydajne bloki konstrukcyjne zamiast ciężkich konwolucji gęstych.
Konwolucje depthwise w MobileNet
MobileNet zastępuje standardowe konwolucje konwolucjami głębinowo-separowalnymi: przestrzennym filtrem stosowanym osobno dla każdego kanału, po którym następuje punktowa konwolucja 1x1 mieszająca kanały. Zmniejsza to liczbę operacji i parametrów około 8–9-krotnie, przy niewielkiej utracie dokładności.
MobileNetV3Small
MobileNetV3Small jest dostosowany do urządzeń mobilnych: zajmuje około 2,5 MB, dzięki czemu idealnie sprawdza się, gdy ilość miejsca i pamięci RAM jest ograniczona.
from tensorflow.keras.applications import MobileNetV3Small
base = MobileNetV3Small(
weights="imagenet",
include_top=False,
input_shape=(224, 224, 3)
)EfficientNetB0
EfficientNetB0 wykorzystuje skalowanie złożone, aby równoważyć głębokość, szerokość i rozdzielczość. Oferuje wysoką dokładność w stosunku do rozmiaru i stanowi dobry kompromis między niewielkimi sieciami mobilnymi a ciężkimi modelami serwerowymi.
from tensorflow.keras.applications import EfficientNetB0
base = EfficientNetB0(
weights="imagenet",
include_top=False,
input_shape=(224, 224, 3)
)Wybór między nimi
- MobileNetV3Small (około 2,5 MB): najmniejszy, najszybszy, o najniższej dokładności. Najlepszy do zastosowań mobilnych działających w czasie rzeczywistym.
- EfficientNetB0: dobry kompromis między dokładnością a rozmiarem. Najlepszy, gdy można przeznaczyć nieco więcej mocy obliczeniowej.
Wyboru należy dokonać na podstawie budżetu opóźnienia urządzenia i docelowej dokładności.
Budowanie głowicy transferowej
Schemat uczenia transferowego pozostaje taki sam: zamrozić bazę, wykonać pooling i dodać głowicę Dense.
from tensorflow.keras import layers, Model
base.trainable = False
x = layers.GlobalAveragePooling2D()(base.output)
x = layers.Dropout(0.2)(x)
out = layers.Dense(num_classes, activation="softmax")(x)
model = Model(base.input, out)Czym jest TFLite?
TensorFlow Lite to środowisko uruchomieniowe do wnioskowania na urządzeniu. Wytrenowany model Keras można przekonwertować do kompaktowego flatbufferu .tflite, który działa wydajnie na mobilnych procesorach CPU, GPU i NPU.
Konwersja do TFLite
Do konwersji zapisanego modelu należy użyć TFLiteConverter.
import tensorflow as tf
converter = tf.lite.TFLiteConverter.from_keras_model(model)
tflite_model = converter.convert()
with open("model.tflite", "wb") as f:
f.write(tflite_model)Kwantyzacja dodatkowo zmniejsza rozmiar
Kwantyzacja po treningu przechowuje wagi jako int8 zamiast float32, zmniejszając rozmiar około 4-krotnie i przyspieszając wnioskowanie na sprzęcie mobilnym, przy minimalnej utracie dokładności.
converter = tf.lite.TFLiteConverter.from_keras_model(model)
converter.optimizations = [tf.lite.Optimize.DEFAULT]
tflite_quant = converter.convert()Testy porównawcze opóźnienia
Na typowym sprzęcie mobilnym MobileNetV3Small często wykonuje obliczenia w kilku do kilkunastu milisekund na obraz, zapewniając działanie w czasie rzeczywistym. EfficientNetB0 jest cięższy i wolniejszy, ale dokładniejszy.
Zawsze należy wykonać pomiary na rzeczywistym urządzeniu docelowym; czasy z emulatora są niewiarygodne. Można użyć TFLite Benchmark Tool albo zmierzyć czas wykonania invoke() interpretera.
Uruchamianie wnioskowania w TFLite
Należy załadować model za pomocą Interpreter, ustawić tensor wejściowy, wywołać model i odczytać wynik.
interpreter = tf.lite.Interpreter(model_path="model.tflite")
interpreter.allocate_tensors()
inp = interpreter.get_input_details()[0]
out = interpreter.get_output_details()[0]
interpreter.set_tensor(inp["index"], image)
interpreter.invoke()
print(interpreter.get_tensor(out["index"]))Szybkie sprawdzenie
Sprawdź swoją wiedzę na temat wdrażania na urządzeniach brzegowych.
Podsumowanie
Porównano MobileNetV3Small (około 2,5 MB, najszybszy) i EfficientNetB0 (zrównoważony) pod kątem zastosowań brzegowych, zbudowano dla nich głowice transferowe, przekonwertowano modele do formatu TFLite, zastosowano kwantyzację int8 oraz zmierzono opóźnienie na rzeczywistym sprzęcie. Na tym kończy się kurs Transfer Learning. Następny kurs: analiza szeregów czasowych.
Ucz się Python dzięki korepetycjom AI — za darmo
Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.
- Kursy
- 53
- Lekcje
- 225
Często zadawane pytania
Czy lekcja „MobileNet i EfficientNet na potrzeby wdrażania na urządzeniach brzegowych” jest bezpłatna?
Tak — pełny tekst „MobileNet i EfficientNet na potrzeby wdrażania na urządzeniach brzegowych” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Learn AI with Python, przejdź na CoddyKit PRO. Kurs Learn AI with Python zawiera 4 lekcji w sumie.
Co nauczysz się w „MobileNet i EfficientNet na potrzeby wdrażania na urządzeniach brzegowych”?
Lekkie architektury, konwersja do TFLite, kompromis między rozmiarem modelu a dokładnością. Ćwiczysz Learn AI with Python z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Learn AI with Python?
Nie wymagamy żadnego doświadczenia. Learn AI with Python w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.
Ile czasu zajmuje lekcja „MobileNet i EfficientNet na potrzeby wdrażania na urządzeniach brzegowych”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Learn AI with Python?
Tak. Każda lekcja Learn AI with Python zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Koncepcje i strategie uczenia transferowego
- Używanie VGG16 i ResNet50 jako modeli bazowych
- Dostrajanie: odmrażanie i ponowne trenowanie
- MobileNet i EfficientNet na potrzeby wdrażania na urządzeniach brzegowych