Klasifikasi gambar
Klasifikasi gambar menetapkan satu distribusi label pada seluruh gambar dan tidak menempatkan apapun di dalamnya. Kunci task adalah classify.
Definisi
Klasifikasi gambar menghasilkan satu skor per kelas untuk seluruh gambar dan tidak ada koordinat sama sekali. Ini menjawab apa yang ada dalam gambar, bukan di mana, yang apa yang memisahkannya dari object detection.
classify adalah kunci task kanonik, dan sufiks -cls dalam checkpoint
nama berkas memilihnya. Sufiks itu diperlukan dan bukan opsional pada
keluarga klasifikasi, jadi LibreResNet50.pt tidak dibaca sebagai pengklasifikasi dan
hanya LibreResNet50-cls.pt saja.
predict() mengisi result.probs dan meninggalkan boxes kosong. .data adalah
vektor skor penuh, .top1 indeks dari skor tertinggi dan .top1confnya
nilai, .top5 lima indeks tertinggi dalam urutan menurun dan .top5conf
skor mereka. Indeks menunjuk ke result.names. Memotong sebuah objek Results
tidak pernah memotong probs, karena vektor tersebut milik gambar, bukan milik
satu baris.
Model
Pengklasifikasi gambar yang dapat dilatih meliputi ResNet, ConvNeXt, MobileNetV4, EfficientNetV2, dan DINOv2. Empat yang pertama berjalan dengan paket dasar dan memiliki bobot yang dipublikasikan. DINOv2 memerlukan pip install "libreyolo[rfdetr]" dan tidak memiliki checkpoint yang dihosting LibreYOLO: model ini memuat backbone upstream dengan head linear yang diinisialisasi secara acak, sehingga menjadi titik awal fine-tuning, bukan model siap prediksi.
Lima lagi memprediksi, memvalidasi, dan mengekspor, tetapi train() mereka meningkat
NotImplementedError: ViT, Swin,
VGG, AlexNet dan
DeiT.
CLIP dan SigLIP2 mengklasifikasikan tanpa
set label tetap. Mereka menilai gambar terhadap teks prompt, sehingga
set_classes() mendefinisikan kelas pada saat pemanggilan dan tidak ada langkah pelatihan
untuk set label baru sama sekali. Keduanya juga melayani embed task.
ConvNeXt V2 menambahkan klasifikasi terawasi dengan bobot pretrained CC-BY-NC-4.0. PE mendukung klasifikasi zero-shot; V-JEPA 2 melatih probe klasifikasi video.
Prediksi
Bobot diunduh dari Hugging Face saat pertama digunakan dan disimpan di cache secara lokal.
from libreyolo import LibreYOLO, SAMPLE_IMAGE # Sufiks -cls pada nama berkas memilih task, sehingga tidak perlu argumen task.# argumen diperlukan.model = LibreYOLO("LibreResNet50-cls.pt")result = model(SAMPLE_IMAGE, save=True) print(result.names[result.probs.top1], float(result.probs.top1conf))print(result.probs.top5)libreyolo predict model=LibreResNet50-cls.pt save=True \ source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpgfrom libreyolo import LibreYOLO, SAMPLE_IMAGE result = LibreYOLO("LibreResNet50-cls.pt")(SAMPLE_IMAGE)probs = result.probs # .data adalah vektor penuh (C,); top5/top5conf adalah tampilan yang diurutkan.print(probs.data.shape)for index, score in zip(probs.top5, probs.top5conf): print(result.names[index], float(score))from libreyolo import LibreYOLO, SAMPLE_IMAGE # CLIP menilai gambar terhadap prompt teks, sehingga set label ditentukan# saat pemanggilan, bukan tertanam dalam checkpoint.model = LibreYOLO("LibreCLIPb32-cls.pt")model.set_classes(["a person jumping", "an empty street", "a parked car"])result = model(SAMPLE_IMAGE) print(model.names[result.probs.top1], float(result.probs.top1conf))conf, iou dan max_det tidak memiliki efek di sini: tidak ada kandidat untuk
disaring atau ditekan, hanya ada satu distribusi. Lihat
prediksi untuk sumber, streaming dan penanganan hasil.
Format dataset
Klasifikasi menggunakan pohon direktori, bukan berkas label dan bukan YAML. data adalah
akar dataset.
dataset/ train/ tench/000001.jpg parachute/000002.jpg val/ tench/000101.jpg parachute/000102.jpgtrain/ diperlukan untuk pelatihan dan ini mendefinisikan pemetaan kelas ke indeks dengan
nama folder yang diurutkan, sehingga folder pertama secara alfabet menjadi kelas 0. val/
diperlukan untuk validasi. Pemisahan test/ mungkin ada dan default
perintah train dan validate jangan menggunakannya. Setiap pembagian selain train harus
mengandung nama folder kelas yang sama dengan set kelas yang diharapkan, yang adalah apa
menyebabkan ketidaksesuaian gagal dengan keras daripada dinilai sebagai prediksi yang salah. The
ekstensi gambar yang diterima adalah .jpg, .jpeg, .png, .bmp, .webp, .tif
dan .tiff.
data menerima tiga hal: jalur ke direktori yang berisi split train/,
URL .zip, atau salah satu nama dataset yang dikenal, imagenette160 dan smoke10,
yang diunduh dan disimpan dalam cache saat penggunaan pertama.
Loader kanonik adalah libreyolo.data.classify_dataset.
Latih
from libreyolo import LibreYOLO # imagenette160 adalah nama dataset yang dikenal dan diunduh pada penggunaan pertama.# Lewatkan direktori dengan pembagian train/ untuk data Anda sendiri.model = LibreYOLO("LibreResNet50-cls.pt")model.train(data="imagenette160", epochs=5)libreyolo train model=LibreResNet50-cls.pt data=imagenette160 epochs=5libreyolo train model=LibreResNet50-cls.pt data=imagenette160 \ epochs=50 device=0,1 batch=-1Tidak ada nc yang perlu dideklarasikan: jumlah kelas berasal dari nama folder di bawah
train/, dan lapisan linier terakhir dibangun kembali untuk menyesuaikannya sementara backbone
dipindahkan tanpa perubahan. Lihat pelatihan untuk dataset, augmentasi,
multi-GPU dan logger.
ResNet, ConvNeXt, ConvNeXt V2, MobileNetV4, EfficientNetV2, dan DINOv2 mendukung pembobotan loss cls_pw atau class_weights. scale klasifikasi mengontrol area crop, dan crop_pct mengontrol crop evaluasi. Lihat augmentasi.
Filter resize adalah bagian dari model. Atur model.interpolation ke "bilinear", "bicubic", "nearest", atau "bilinear_no_antialias" sebelum pelatihan: pelatihan, val(), predict(), kalibrasi INT8, dan ekspor semuanya memakainya, dan save(), best.pt, serta last.pt mencatatnya, sehingga pemuatan ulang mempertahankannya. Nama lain memunculkan ValueError. "bilinear_no_antialias" melakukan resize dengan bilinear biasa tanpa antialiasing di mana-mana, termasuk RandomResizedCrop, untuk model yang akan berjalan di belakang resize runtime tanpa antialiasing. MobileNetV4, ResNet, ConvNeXt, ConvNeXt V2, EfficientNetV2, DeiT, Swin, dan ViT memakai bicubic secara default; AlexNet dan VGG memakai bilinear.
Validasi
val() mengembalikan kamus dari kunci metrics/, dihitung di atas val/
pembagian dari akar dataset.
from libreyolo import LibreYOLO model = LibreYOLO("LibreResNet50-cls.pt") # Dict berisi kunci metrics/, ditambah top1, top5, dan confusion_matrix.metrics = model.val(data="imagenette160") print(metrics["metrics/accuracy_top1"])print(metrics["metrics/accuracy_top5"])print(metrics.top1, metrics.top5)libreyolo val model=LibreResNet50-cls.pt data=imagenette160metrics/accuracy_top1 adalah bagian dari gambar-gambar yang kelas dengan skor tertinggi adalah
kelas yang benar, dan ini adalah angka utama, yang digunakan pelatihan untuk memilih
epoch terbaik. metrics/accuracy_top5 adalah bagian yang kelas aslinya muncul
di mana saja dalam lima kelas dengan skor tertinggi, yang berarti lebih sedikit sebanyak kelas
yang dimiliki dataset. Kamus juga memuat fitness, salinan dari nilai top-1.
Validasi ImageFolder juga mengembalikan makro metrics/precision, metrics/recall, dan metrics/f1, dengan rata-rata atas kelas yang ada dalam target validasi. Kelas tanpa prediksi menyumbang presisi nol. Fitness default tetap akurasi top-1. Validasi dan kalibrasi memakai transformasi evaluasi model.
Hasilnya adalah subclass dict dengan tiga atribut: top1 dan top5 menyimpan
dua nilai akurasi, dan confusion_matrix menghitung setiap gambar pada kelas top-1-nya
terhadap labelnya, diindeks matrix[predicted, true]. plots=True menulisnya
sebagai hitungan ke confusion_matrix.png dan sebagai proporsi tiap label ke
confusion_matrix_normalized.png. Di atas 2.000 kelas, matriks padat dan plotnya
tidak tersedia, dan nonzero(), tp_fp(), serta class_accuracy() membaca hitungannya;
lihat Validasi dan metrik.
Ekspor
from libreyolo import LibreYOLO model = LibreYOLO("LibreResNet50-cls.pt")model.export(format="onnx")libreyolo export model=LibreResNet50-cls.pt format=onnxfrom libreyolo import LibreYOLO, SAMPLE_IMAGE # Pabrik mengarahkan berdasarkan akhiran berkas, sehingga artifak yang diekspor memuat# seperti checkpoint dan mengembalikan objek Results yang sama.model = LibreYOLO("LibreResNet50-cls.onnx")result = model(SAMPLE_IMAGE) print(result.probs.top1, result.probs.top1conf)Sebuah artefak yang diekspor dapat dimuat kembali melalui LibreYOLO() berdasarkan akhiran berkas-nya, jadi sebuah
berkas .onnx atau .engine berperilaku seperti checkpoint dan mengembalikan
Results yang sama. Cakupan format berbeda menurut family; matriks di setiap halaman model adalah
dihasilkan dari set yang tervalidasi daripada diketik secara manual. Lihat
ekspor dan deploy untuk format, tambahan mereka dan
batasannya.