ResNet

ResNet to klasyfikator obrazów zbudowany z bloków resztkowych, czyli połączeń pomijających, które pozwalają dodawać do sieci znacznie więcej warstw bez spadku dokładności dotykającego głębokie zwykłe stosy konwolucyjne. LibreYOLO obsługuje go w jednym zadaniu: klasyfikacji.

Zadania
classify
Rozmiary
18, 34, 50, 101 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
ResNet, autorzy: Microsoft Research Asia, licencja: Apache-2.0. Publikacja, kod źródłowy
Licencje
Kod: Apache-2.0, wagi: Apache-2.0. Użycie komercyjne

Instalacja

ResNet nie wymaga żadnego opcjonalnego dodatku. Wszystkie importowane elementy znajdują się w instalacji podstawowej.

bash
pip install libreyolo

Predykcja

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

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

Zwracany 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 głębokości, wszystkie trenowane i ewaluowane w ten sam sposób, dlatego wybór 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.

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

Bez 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 ResNet nie ma.

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.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreResNet50-cls.pt")metrics = model.val(data="imagenette160") print(metrics["metrics/accuracy_top1"])print(metrics["metrics/accuracy_top5"])
CLI
libreyolo val model=LibreResNet50-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 ł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.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreResNet50-cls.pt")model.export(format="onnx")model.export(format="tensorrt", half=True)
CLI
libreyolo export model=LibreResNet50-cls.pt format=onnxlibreyolo export model=LibreResNet50-cls.pt format=tensorrt half=True
Użycie wyeksportowanego pliku
from 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("LibreResNet50-cls.onnx")result = model(SAMPLE_IMAGE) print(result.probs.top1)

Checkpointy

Wszystkie opublikowane pliki wag dla tej rodziny.

PlikWejście (px)Licencja wag
classify
LibreResNet18-cls.pt224apache-2.0
LibreResNet34-cls.pt224apache-2.0
LibreResNet50-cls.pt224apache-2.0
LibreResNet101-cls.pt224apache-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
ResNet, Microsoft Research Asia
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 the original Microsoft Research Asia design; the pretrained weights LibreYOLO ships are timm's resnet{18,34,50,101}.a1_in1k reproduction (the "ResNet Strikes Back" A1 recipe), trained by Ross Wightman and the timm contributors on ImageNet-1k and licensed Apache-2.0 there. LibreYOLO's module and attribute names mirror timm so the state dict loads unchanged and inference matches bit-identically.

Cytowanie

@article{He2015,
	author = {Kaiming He and Xiangyu Zhang and Shaoqing Ren and Jian Sun},
	title = {Deep Residual Learning for Image Recognition},
	journal = {arXiv preprint arXiv:1512.03385},
	year = {2015}
}

Skopiowano z bloku cytowania autorów w github.com/KaimingHe/deep-residual-networks#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.