Code siap pakai dan notebook tutorial untuk meningkatkan jalan Anda ke dalam klasifikasi gambar beberapa tembakan. Repositori ini dibuat untuk Anda jika:
Jangan tersesat dalam repositori besar dengan ratusan metode dan tidak ada penjelasan tentang cara menggunakannya. Di sini, kami ingin setiap baris kode dicakup oleh tutorial.
Anda ingin belajar beberapa shot belajar dan tidak tahu harus mulai dari mana? Mulailah dengan tutorial kami.
| Buku catatan | Keterangan | Colab |
|---|---|---|
| Langkah Pertama ke dalam Klasifikasi Gambar beberapa-tembakan | Pada dasarnya beberapa shot Learning 101, dalam waktu kurang dari 15 menit. | |
| Contoh pelatihan episodik | Gunakan sebagai titik awal jika Anda ingin merancang skrip untuk pelatihan episodik menggunakan EasyFSL. | |
| Contoh pelatihan klasik | Gunakan sebagai titik awal jika Anda ingin merancang skrip untuk pelatihan klasik menggunakan EasyFSL. | |
| Tes dengan embeddings yang sudah diekstraksi | Sebagian besar metode beberapa tembakan menggunakan tulang punggung beku pada waktu tes. Dengan EasyFSL, Anda dapat mengekstrak semua embeddings untuk dataset Anda sekali dan untuk semua, dan kemudian melakukan inferensi langsung pada embeddings. |
Metode pembelajaran beberapa shot canggih:
Dengan 11 metode bawaan, EasyFSL adalah perpustakaan pembelajaran beberapa shot open-source yang paling komprehensif!
Kami juga menyediakan kelas beberapaclassifier untuk mempercepat implementasi algoritma klasifikasi beberapa-shot Anda, serta arsitektur yang umum digunakan.
Lihat bagian tolok ukur di bawah ini untuk detail lebih lanjut tentang metode.
Alat untuk pemuatan data:
Pemuatan data dalam FSL sedikit berbeda dari klasifikasi standar karena kami mencicipi batch instance dalam bentuk tugas klasifikasi beberapa-shot. Tidak ada keringat! Di easyfsl Anda memiliki:
Skrip untuk mereproduksi tolok ukur kami:
scripts/predict_embeddings.py untuk mengekstrak semua embeddings dari dataset dengan tulang punggung pra-terlatih yang diberikanscripts/benchmark_methods.py untuk mengevaluasi metode pada dataset uji menggunakan embeddings pra-terekstraksi.Dan juga: beberapa utilitas yang saya rasa sering saya gunakan dalam penelitian saya, jadi saya berbagi dengan Anda.
Ada cukup banyak set data yang digunakan dalam pembelajaran beberapa tembakan bagi siapa pun untuk tersesat di dalamnya. Mereka semua ada di sini, dieksplisit, dapat diunduh, dan mudah digunakan, di EasyFSL.
Cu-Birds
Kami menyediakan resep make download-cub untuk mengunduh dan mengekstrak dataset, bersama dengan standar (kereta / val / val / test) yang dibagi sepanjang kelas. Setelah Anda mengunduh dataset, Anda dapat membuat instantiasi objek dataset dalam kode Anda dengan proses super rumit ini:
from easyfsl . datasets import CUB
train_set = CUB ( split = "train" , training = True )
test_set = CUB ( split = "test" , training = False )Tieredimagenet
Untuk menggunakannya, Anda memerlukan dataset ILSVRC2015. Setelah Anda mengunduh dan mengekstraksi dataset, pastikan bahwa lokalisasi pada disk konsisten dengan jalur kelas yang ditentukan dalam file spesifikasi. Kemudian:
from easyfsl . datasets import TieredImageNet
train_set = TieredImageNet ( split = "train" , training = True )
test_set = TieredImageNet ( split = "test" , training = False )miniimagenet
Sama seperti Tieredimagenet, kami menyediakan file spesifikasi, tetapi Anda memerlukan dataset ILSVRC2015. Setelah Anda memilikinya:
from easyfsl . datasets import MiniImageNet
train_set = MiniImageNet ( root = "where/imagenet/is" , split = "train" , training = True )
test_set = MiniImageNet ( root = "where/imagenet/is" , split = "test" , training = False ) Karena miniimagenet relatif kecil, Anda juga dapat memuatnya pada RAM secara langsung saat instantiasi hanya dengan menambahkan load_on_ram=True dengan konstruktor. Dibutuhkan beberapa menit tetapi itu bisa membuat pelatihan Anda secara signifikan lebih cepat!
Jamur Denmark
Saya baru-baru ini mulai menggunakannya sebagai beberapa tolok ukur pembelajaran, dan saya dapat memberi tahu Anda bahwa ini adalah lapangan bermain yang bagus. Untuk menggunakannya, pertama -tama unduh data:
# Download the original dataset (/! 110GB)
wget http://ptak.felk.cvut.cz/plants/DanishFungiDataset/DF20-train_val.tar.gz
# Or alternatively the images reduced to 300px (6.5Gb)
wget http://ptak.felk.cvut.cz/plants/DanishFungiDataset/DF20-300px.tar.gz
# And finally download the metadata (83Mb) to data/fungi/
wget https://public-sicara.s3.eu-central-1.amazonaws.com/easy-fsl/DF20_metadata.csv -O data/fungi/DF20_metadata.csvDan kemudian instantiate dataset dengan proses yang sama seperti biasa:
from easyfsl . datasets import DanishFungi
dataset = DanishFungi ( root = "where/fungi/is" )Perhatikan bahwa saya tidak menentukan set kereta dan tes karena CSV yang saya berikan kepada Anda menjelaskan seluruh dataset. Saya merekomendasikan untuk menggunakannya untuk menguji model dengan bobot yang dilatih pada dataset lain (seperti ImageNet). Tetapi jika Anda ingin mengusulkan kelas kereta/val/tes sepanjang kelas, Anda dipersilakan untuk berkontribusi!
Instal Paket: pip install easyfsl atau cukup garpu repositori.
Unduh data Anda.
Rancang skrip pelatihan dan evaluasi Anda. Anda dapat menggunakan contoh notebook kami untuk pelatihan episodik atau pelatihan klasik.
Proyek ini sangat terbuka untuk kontribusi! Anda dapat membantu dengan berbagai cara:
Kami menggunakan EasyFSL untuk membandingkan selusin metode. Waktu inferensi dihitung lebih dari 1000 tugas menggunakan fitur pra-ekstrak. Mereka hanya indikatif. Perhatikan bahwa waktu inferensi untuk metode penyempurnaan sangat tergantung pada jumlah langkah penyempurnaan.
Semua metode hyperparameter didefinisikan dalam file JSON ini. Mereka dipilih pada set validasi miniimagenet. Prosedur ini dapat direproduksi dengan make hyperparameter-search . Kami memutuskan untuk menggunakan hiperparameter MiniMagenet untuk semua tolok ukur untuk menyoroti kemampuan beradaptasi dari berbagai metode. Perhatikan bahwa semua metode menggunakan normalisasi fitur L2, kecuali untuk prestasi saat membahayakan kinerjanya.
Tidak ada hasil untuk jaringan matang dan relasi karena bobot terlatih untuk modul tambahan mereka tidak tersedia.
Semua metode menggunakan tulang punggung yang sama: resnet12 khusus menggunakan parameter terlatih yang disediakan oleh penulis dari feat (unduh: miniimagenet, tieredimagenet).
Hasil induktif dan transduktif terbaik untuk setiap kolom ditampilkan dalam huruf tebal.
| Metode | Ind / trans | Mini Imagenet 1-shot | Mini Imagenet 5-shot | Imagenet berjenjang 1-shot | Imagenet berjenjang 5-shot | Waktu |
|---|---|---|---|---|---|---|
| Protonet | Induktif | 63.6 | 80.4 | 60.2 | 77.4 | 6s |
| SimpleShot | Induktif | 63.6 | 80.5 | 60.2 | 77.4 | 6s |
| Matchingnet | Induktif | - | - | - | - | - |
| RelationalNet | Induktif | - | - | - | - | - |
| Finetune | Induktif | 63.3 | 80.5 | 59.8 | 77.5 | 1mn33s |
| PRESTASI | Induktif | 64.7 | 80.1 | 61.3 | 76.2 | 3S |
| BD-CSPN | Transduktif | 69.8 | 82.2 | 66.3 | 79.1 | 7S |
| Laplacianshot | Transduktif | 69.8 | 82.3 | 66.2 | 79.2 | 9S |
| Pt-map | Transduktif | 76.1 | 84.2 | 71.7 | 80.7 | 39mn40s |
| Tim | Transduktif | 74.3 | 84.2 | 70.7 | 80.7 | 3MN05S |
| Finetuning transduktif | Transduktif | 63.0 | 80.6 | 59.1 | 77.5 | 30 -an |
Untuk mereproduksi:
data/models/feat_resnet12_mini_imagenet.pth (resp. tiered ).make extract-all-features-with-resnet12 .make benchmark-mini-imagenet (resp. tiered ).