EfficientNetV2
EfficientNetV2 to klasyfikator obrazów, którego głębokość, szerokość i wybór bloków na poszczególnych etapach ustalono przez wyszukiwanie architektury neuronowej, wspólnie optymalizując dokładność i szybkość trenowania zamiast samej dokładności. LibreYOLO obsługuje go w jednym zadaniu: klasyfikacji.
- Zadania
- classify
- Rozmiary
- b0, b1, b2, b3 at 224 to 300 px
- Instalacja
pip install libreyolo- Poziom obsługi
- Obsługiwany, od wersji v. Dodatkowe trenowalne modele: testy CI pozostają zielone, a funkcje są dodawane w miarę możliwości.
- Projekt źródłowy
- EfficientNetV2, autorzy: Google, licencja: Apache-2.0. Publikacja, kod źródłowy
- Licencje
- Kod: Apache-2.0, wagi: Apache-2.0. Użycie komercyjne
Instalacja
EfficientNetV2 nie wymaga żadnego opcjonalnego dodatku. Wszystkie importowane elementy znajdują się w instalacji podstawowej.
pip install libreyoloPredykcja
Przy pierwszym użyciu wagi są pobierane z Hugging Face i zapisywane w lokalnej pamięci podręcznej.
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreEfficientNetV2b0-cls.pt")result = model(SAMPLE_IMAGE, save=True) print(result.probs.top1, result.probs.top1conf)print(result.probs.top5)libreyolo predict model=LibreEfficientNetV2b0-cls.pt source=cat.jpg save=TrueZwracany obiekt Results jest taki sam dla każdej rodziny, więc zmiana modelu
wymaga zmiany jednego wiersza. Klasyfikator nie zawiera ramek ani masek:
result.probs przechowuje predykcję całego obrazu z polami top1, top5,
top1conf i top5conf. Argumenty conf, iou i max_det są przyjmowane dla
zgodności API, ale nie mają wpływu na wynik, ponieważ w pojedynczym wektorze
prawdopodobieństwa nie ma czego progować ani tłumić. Więcej informacji o
źródłach, streamingu i obsłudze wyników zawiera strona
predykcji.
Warianty
Dostępne są cztery rozmiary, od b0 do b3. Każdy jest ewaluowany przy własnej
rozdzielczości i współczynniku przycięcia zamiast wspólnego rozmiaru wejścia dla
całej rodziny. Wybór rozmiaru jest bezpośrednim kompromisem między liczbą
parametrów a dokładnością. Zadanie jest stałe: każdy rozmiar obsługuje wyłącznie
klasyfikację. Nazwa pliku wag każdego rozmiaru kończy się na -cls.pt, a fabryka
odczytuje ten sufiks, aby wybrać rodzinę. Argument task= nie jest potrzebny.
Trenowanie
Dostrajanie rozpoczyna się od opublikowanego backbone ImageNet, a ostatnia
warstwa klasyfikatora jest automatycznie przebudowywana do liczby klas docelowego
zbioru danych. Jeśli imgsz nie zostanie jawnie ustawione, przyjmuje własną
rozdzielczość ewaluacyjną danego rozmiaru.
from libreyolo import LibreYOLO model = LibreYOLO("LibreEfficientNetV2b0-cls.pt")model.train(data="imagenette160", epochs=5)libreyolo train model=LibreEfficientNetV2b0-cls.pt data=imagenette160 epochs=5libreyolo train model=LibreEfficientNetV2b0-cls.pt data=imagenette160 \ epochs=50 device=0,1 batch=-1Bez zmian konfiguracji trener wykonuje 100 epok z lr0=1e-3, optymalizatorem
AdamW, batchem 64 i early stopping (wczesnym zatrzymaniem) po 50 epokach bez
poprawy. Argument data przyjmuje katalog główny zbioru danych (train/ i
val/, po jednym folderze na klasę), znaną krótką nazwę, taką jak
imagenette160, albo adres URL pliku .zip. Ustawienie lora=True nie jest tu
obsługiwane i powoduje błąd, ponieważ LoRA w LibreYOLO działa na komponentach
transformerowych z warstwami nn.Linear, których nie ma w blokach MBConv tej
rodziny.
Informacje o zbiorach danych, augmentacji, wielu GPU i loggerach zawiera strona trenowania.
Walidacja
val() zwraca słownik kluczy metrics/. Dla klasyfikacji są to metryki
accuracy top-1 i top-5 dla podzbioru walidacyjnego.
from libreyolo import LibreYOLO model = LibreYOLO("LibreEfficientNetV2b0-cls.pt")metrics = model.val(data="imagenette160") print(metrics["metrics/accuracy_top1"])print(metrics["metrics/accuracy_top5"])libreyolo val model=LibreEfficientNetV2b0-cls.pt data=imagenette160Eksport
| Zadanie | ONNX | TorchScript | ExecuTorch | TensorRT | OpenVINO | Paddle | MNN | RKNN | ncnn | TFLite | CoreML | Core AI |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| classify | classify to ONNX: obsługiwane | classify to TorchScript: obsługiwane | classify to ExecuTorch: obsługiwane | classify to TensorRT: obsługiwane | classify to OpenVINO: obsługiwane | classify to Paddle: brak obsługi | classify to MNN: brak obsługi | classify to RKNN: brak obsługi | classify to ncnn: obsługiwane | classify to TFLite: obsługiwane | classify to CoreML: brak obsługi | classify to Core AI: obsługiwane |
Wyeksportowany artefakt jest ponownie ładowany przez LibreYOLO() na podstawie
rozszerzenia pliku, więc plik .onnx lub .engine zachowuje się jak checkpoint
i zwraca ten sam obiekt Results. Strona eksportu wymienia
argumenty obsługiwane przez każdy format oraz dodatki wymagane przez niektóre z
nich.
from libreyolo import LibreYOLO model = LibreYOLO("LibreEfficientNetV2b0-cls.pt")model.export(format="onnx")model.export(format="tensorrt", half=True)libreyolo export model=LibreEfficientNetV2b0-cls.pt format=onnxlibreyolo export model=LibreEfficientNetV2b0-cls.pt format=tensorrt half=Truefrom libreyolo import LibreYOLO, SAMPLE_IMAGE # Fabryka wybiera ścieżkę na podstawie rozszerzenia pliku, więc wyeksportowany artefakt# ładuje się jak każdy checkpoint i zwraca ten sam obiekt Results.model = LibreYOLO("LibreEfficientNetV2b0-cls.onnx")result = model(SAMPLE_IMAGE) print(result.probs.top1)Checkpointy
Wszystkie opublikowane pliki wag dla tej rodziny.
| Plik | Wejście (px) | Licencja wag |
|---|---|---|
| classify | ||
| LibreEfficientNetV2b0-cls.pt | 224 | apache-2.0 |
| LibreEfficientNetV2b1-cls.pt | 240 | apache-2.0 |
| LibreEfficientNetV2b2-cls.pt | 260 | apache-2.0 |
| LibreEfficientNetV2b3-cls.pt | 300 | apache-2.0 |
Każdy z powyższych plików jest obecnie dostępny w organizacji LibreYOLO i pobierany przy pierwszym użyciu.
Licencja
Sprawdź licencję w repozytorium konkretnych pobieranych wag na Hugging Face. Każdy checkpoint w organizacji LibreYOLO ma licencję, która nie zawsze jest taka sama w całej rodzinie. To repozytorium jest źródłem rozstrzygającym, a poniższe podsumowanie opisuje stan z chwili ostatniej weryfikacji tej strony.
To opis obowiązujących licencji, a nie porada prawna. Jeśli odpowiedź ma znaczenie komercyjne, przeczytaj licencje i zasięgnij własnej porady prawnej.
- Oryginalna praca
- EfficientNetV2, Google
- Licencja projektu źródłowego
- Apache-2.0
- Kod źródłowy projektu
- github.com/huggingface/pytorch-image-models
- Kod LibreYOLO
- MIT
- Wagi
- Apache-2.0, ponownie opublikowane w huggingface.co/LibreYOLO
- Interpretacja
- Apache-2.0 is a permissive license, so these weights can be used in commercial and closed-source products. It asks you to keep its license text and attribution notices with any copy of the weights you redistribute, and it grants a patent license. It places no obligation on your own application code, and weights you train yourself on your own data are yours. The architecture is Google's design, whose reference implementation at google/automl is also Apache-2.0; LibreYOLO's implementation follows the block definitions, TensorFlow "SAME" padding and naming in timm, whose tf_efficientnetv2_b{0,1,2,3} ImageNet-1k weights (ported by Ross Wightman, no ImageNet-21k or extra data) are licensed Apache-2.0 and are what LibreYOLO ships.