ConvNeXt

ConvNeXt to klasyfikator obrazów zbudowany wyłącznie ze standardowych splotów, modernizowany blok po bloku od ResNet w kierunku rozwiązań stosowanych w transformerach wizyjnych. LibreYOLO obsługuje go w jednym zadaniu: klasyfikacji.

Zadania
classify
Rozmiary
t, s, b at 224 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
ConvNeXt, autorzy: Meta AI (FAIR), licencja: Apache-2.0. Publikacja, kod źródłowy
Licencje
Kod: MIT, wagi: Apache-2.0. Użycie komercyjne

Instalacja

ConvNeXt nie wymaga opcjonalnego dodatku. Wszystkie importowane elementy znajdują się w instalacji bazowej.

bash
pip install libreyolo

Wyjątkiem jest dostrajanie adapterów z lora=True, które wymaga dodatku lora.

bash
pip install "libreyolo[lora]"

Predykcja

Przy pierwszym użyciu wagi są pobierane z Hugging Face i zapisywane lokalnie w pamięci podręcznej.

Python
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreConvNeXtt-cls.pt")result = model(SAMPLE_IMAGE, save=True) print(result.probs.top1, result.probs.top1conf)print(result.probs.top5)
CLI
libreyolo predict model=LibreConvNeXtt-cls.pt source=cat.jpg save=True

Zwracany obiekt Results jest taki sam dla każdej rodziny, dlatego zamiana modelu wymaga zmiany jednego wiersza. Klasyfikator nie zawiera ramek ani masek. Pole result.probs przechowuje predykcję dla całego obrazu i udostępnia top1, top5, top1conf oraz top5conf. Argumenty conf, iou i max_det są akceptowane dla zgodności API, ale nie mają wpływu na wynik, ponieważ w pojedynczym wektorze prawdopodobieństwa nie ma wartości do progowania ani tłumienia. Zobacz stronę predykcji, aby poznać źródła, streaming i obsługę wyników.

Warianty

Dostępne są trzy rozmiary: tiny, small i base. Wszystkie są trenowane i oceniane w ten sam sposób, dlatego wybór sprowadza się do kompromisu między liczbą parametrów a accuracy. Zadanie jest stałe: każdy rozmiar obsługuje tylko klasyfikację. Nazwa pliku wag dla każdego rozmiaru kończy się na -cls.pt. Fabryka odczytuje ten sufiks, aby wybrać rodzinę, więc argument task= nie jest potrzebny.

Trenowanie

Dostrajanie rozpoczyna się od opublikowanego backbone ImageNet, a końcowa warstwa klasyfikatora jest automatycznie przebudowywana zgodnie z liczbą klas w docelowym zbiorze danych.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreConvNeXtt-cls.pt")model.train(data="imagenette160", epochs=5)
CLI
libreyolo train model=LibreConvNeXtt-cls.pt data=imagenette160 epochs=5
LoRA
from libreyolo import LibreYOLO model = LibreYOLO("LibreConvNeXtt-cls.pt")model.train(data="imagenette160", epochs=5, lora=True)
Multi-GPU
libreyolo train model=LibreConvNeXtt-cls.pt data=imagenette160 \  epochs=50 device=0,1 batch=-1

Przy ustawieniach domyślnych moduł trenujący wykonuje 100 epok z lr0=1e-3, optymalizatorem AdamW, batchem 64 i early stopping 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ę, na przykład imagenette160, albo adres URL pliku .zip. Bloki ConvNeXt zawierają warstwy MLP nn.Linear wymagane przez LoRA, dlatego lora=True jest tu obsługiwane i wstrzykuje adaptery do warstw MLP bloków zamiast dostrajać cały backbone.

Zobacz stronę trenowania, aby poznać zbiory danych, augmentację, obsługę wielu GPU i loggery.

Walidacja

Metoda val() zwraca słownik kluczy metrics/. Dla klasyfikacji są to accuracy top-1 i top-5 w podziale walidacyjnym.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreConvNeXtt-cls.pt")metrics = model.val(data="imagenette160") print(metrics["metrics/accuracy_top1"])print(metrics["metrics/accuracy_top5"])
CLI
libreyolo val model=LibreConvNeXtt-cls.pt data=imagenette160

Eksport

ZadanieONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
classifyclassify to ONNX: obsługiwaneclassify to TorchScript: obsługiwaneclassify to ExecuTorch: obsługiwaneclassify to TensorRT: obsługiwaneclassify to OpenVINO: obsługiwaneclassify to Paddle: brak obsługiclassify to MNN: brak obsługiclassify to RKNN: brak obsługiclassify to ncnn: obsługiwaneclassify to TFLite: obsługiwaneclassify to CoreML: brak obsługiclassify to Core AI: obsługiwane

Wyeksportowany artefakt jest ponownie wczytywany przez LibreYOLO() na podstawie sufiksu pliku, dlatego plik .onnx lub .engine zachowuje się jak checkpoint i zwraca ten sam obiekt Results. Strona Eksport zawiera argumenty obsługiwane przez każdy format oraz dodatki wymagane przez niektóre z nich.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreConvNeXtt-cls.pt")model.export(format="onnx")model.export(format="tensorrt", half=True)
CLI
libreyolo export model=LibreConvNeXtt-cls.pt format=onnxlibreyolo export model=LibreConvNeXtt-cls.pt format=tensorrt half=True
Użycie wyeksportowanego pliku
from libreyolo import LibreYOLO, SAMPLE_IMAGE # Fabryka wybiera ścieżkę na podstawie sufiksu pliku, więc wyeksportowany# artefakt wczytuje się jak każdy checkpoint i zwraca ten sam obiekt Results.model = LibreYOLO("LibreConvNeXtt-cls.onnx")result = model(SAMPLE_IMAGE) print(result.probs.top1)

Checkpointy

Wszystkie opublikowane pliki wag dla tej rodziny.

PlikWejście (px)Licencja wag
classify
LibreConvNeXtt-cls.pt224apache-2.0
LibreConvNeXts-cls.pt224apache-2.0
LibreConvNeXtb-cls.pt224apache-2.0

Każdy z powyższych plików jest obecnie dostępny w organizacji LibreYOLO i pobierany przy pierwszym użyciu.

Licencjonowanie

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
ConvNeXt, Meta AI (FAIR)
Licencja projektu źródłowego
Apache-2.0
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 Meta AI's original design, released under MIT at facebookresearch/ConvNeXt; the block definitions, layer-scale parameter and module naming that LibreYOLO's implementation follows come from timm, whose convnext_{tiny,small,base}.fb_in1k ImageNet-1k weights are licensed Apache-2.0 and are what LibreYOLO ships. Only ConvNeXt V1 is shipped here: ConvNeXt-V2's small pretrained checkpoints are CC-BY-NC 4.0 and are deliberately excluded as not redistributable in a commercial library.

Ta rodzina udostępnia tylko ConvNeXt V1. Małe, wstępnie wytrenowane checkpointy ConvNeXt-V2 są objęte licencją CC-BY-NC 4.0 i celowo je wykluczono, ponieważ wag na licencji niekomercyjnej nie można rozpowszechniać w bibliotece przeznaczonej do zastosowań komercyjnych i objętej licencją MIT.

Cytowanie

@Article{liu2022convnet,
  author  = {Zhuang Liu and Hanzi Mao and Chao-Yuan Wu and Christoph Feichtenhofer and Trevor Darrell and Saining Xie},
  title   = {A ConvNet for the 2020s},
  journal = {Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR)},
  year    = {2022},
}

Skopiowano z bloku cytowania autorów w github.com/facebookresearch/ConvNeXt#citation.

Zweryfikowano z LibreYOLO v1.5.0. Tabele obsługi, checkpointy i wyniki benchmarków na tej stronie są generowane na podstawie wydanej biblioteki i opublikowanych wag, a nie wpisywane ręcznie.