すぐに使用できるコードとチュートリアルノートブックは、少数のショット画像分類に進む方法を強化します。このリポジトリは、次の場合に作成されます。
何百もの方法で大規模なリポジトリで迷子にならないでください。それらの使用方法について説明しません。ここでは、コードの各行をチュートリアルでカバーする必要があります。
いくつかのショット学習を学び、どこから始めればよいかわからないのですか?チュートリアルから始めます。
| ノート | 説明 | colab |
|---|---|---|
| 少数のショット画像分類への最初のステップ | 基本的に、15分以内に少数の学習101。 | |
| エピソードトレーニングの例 | EasyFSLを使用してエピソードトレーニング用のスクリプトを設計する場合は、開始点として使用します。 | |
| 古典的なトレーニングの例 | EasyFSLを使用してクラシックトレーニング用のスクリプトを設計する場合は、開始点として使用します。 | |
| 事前に抽出された埋め込みでテストします | ほとんどの少ないショット方法は、テスト時に冷凍骨格を使用します。 EasyFSLを使用すると、データセットのすべての埋め込みを完全に抽出し、埋め込みに直接推論を実行できます。 |
最先端の少数の学習方法:
11の組み込みメソッドを備えたEasyFSLは、最も包括的なオープンソースの少数の学習ライブラリです!
また、いくつかのショット分類アルゴリズムの実装と、一般的に使用されるアーキテクチャの実装をクイックスタートするためのいくつかのShotClassifierクラスも提供します。
メソッドの詳細については、以下のベンチマークセクションを参照してください。
データ読み込みのためのツール:
FSLでのデータ読み込みは、少ないショット分類タスクの形でインスタンスのバッチをサンプリングするため、標準分類とは少し異なります。汗はない! EasyFSLであなたは持っています:
ベンチマークを再現するスクリプト:
scripts/predict_embeddings.py特定の事前に訓練されたバックボーンを使用してデータセットからすべての埋め込みを抽出するscripts/benchmark_methods.py事前に抽出された埋め込みを使用してテストデータセットのメソッドを評価します。また、私は自分の研究でよく使用していると感じたいくつかのユーティリティなので、私はあなたと共有しています。
誰もが迷子になるために、少数のショット学習で使用される十分なデータセットがあります。それらはすべてここにあり、説明され、ダウンロード可能で使いやすい、EasyFSLです。
cu-birds
データセットをダウンロードして抽出するためのmake download-cubレシピを提供し、クラスに沿って標準(トレイン / VAL /テスト)スプリットとともに抽出します。データセットをダウンロードしたら、この非常に複雑なプロセスでコード内のデータセットオブジェクトをインスタンス化できます。
from easyfsl . datasets import CUB
train_set = CUB ( split = "train" , training = True )
test_set = CUB ( split = "test" , training = False )Tieredimagenet
それを使用するには、ILSVRC2015データセットが必要です。データセットをダウンロードして抽出したら、ディスク上のローカリゼーションが仕様ファイルで指定されたクラスパスと一致していることを確認してください。それから:
from easyfsl . datasets import TieredImageNet
train_set = TieredImageNet ( split = "train" , training = True )
test_set = TieredImageNet ( split = "test" , training = False )Miniimagenet
Tieredimagenetと同じように、仕様ファイルを提供しますが、ILSVRC2015データセットが必要です。あなたがそれを持っていると:
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 ) MiniImagenetは比較的小さいため、 load_on_ram=Trueコンストラクターに追加するだけで、InstantiationでRAMに直接ロードすることもできます。数分かかりますが、トレーニングを大幅に速くすることができます!
デンマークの菌類
私は最近、それをいくつかのショット学習ベンチマークとして使用し始めましたが、それは素晴らしい競争の場だと言えます。それを使用するには、最初にデータをダウンロードします。
# 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.csvそして、いつもと同じプロセスでデータセットをインスタンス化します。
from easyfsl . datasets import DanishFungi
dataset = DanishFungi ( root = "where/fungi/is" )私が与えたCSVがデータセット全体について説明しているため、電車とテストセットを指定しなかったことに注意してください。他のデータセット(Imagenetなど)でトレーニングされた重みでモデルをテストするために使用することをお勧めします。しかし、クラスに沿って電車/VAL/テストの分割を提案したい場合は、貢献できます。
パッケージのインストール: pip install easyfslまたは単にリポジトリをフォークします。
データをダウンロードしてください。
トレーニングと評価スクリプトを設計します。エピソードトレーニングや古典的なトレーニングには、サンプルノートブックを使用できます。
このプロジェクトは、貢献に対して非常に開かれています!あなたはさまざまな方法で助けることができます:
EasyFSLを使用して、12のメソッドをベンチマークしました。推論時間は、事前に抽出された機能を使用して1000以上のタスクを計算します。それらは単なる指標です。微調整方法の推論時間は、微調整ステップの数に大きく依存することに注意してください。
すべてのメソッドハイパーパラメーターは、このJSONファイルで定義されています。それらは、MiniImagenet検証セットで選択されました。手順はmake hyperparameter-searchで再現できます。さまざまな方法の適応性を強調するために、すべてのベンチマークにMiniImagenetのハイパーパラメーターを使用することにしました。すべての方法は、機能のパフォーマンスに害を及ぼすため、機能のL2正規化を使用していることに注意してください。
追加のモジュールの訓練されたウェイトが利用できないため、数学と関係ネットワークの結果はありません。
すべての方法では、同じバックボーンを使用します。Featから著者が提供するトレーニングされたパラメーターを使用したカスタムResNet12(ダウンロード:Miniimagenet、TieredImagenet)。
各カラムの最良の帰納的および最良のトランスダクティブ結果は、太字で示されています。
| 方法 | ind / trans | ミニイメージネット 1ショット | ミニイメージネット 5ショット | 階層化されたイメージ 1ショット | 階層化されたイメージ 5ショット | 時間 |
|---|---|---|---|---|---|---|
| プロトネット | 帰納的 | 63.6 | 80.4 | 60.2 | 77.4 | 6s |
| SimpleShot | 帰納的 | 63.6 | 80.5 | 60.2 | 77.4 | 6s |
| MatchingNet | 帰納的 | - | - | - | - | - |
| Relationnet | 帰納的 | - | - | - | - | - |
| 微調整 | 帰納的 | 63.3 | 80.5 | 59.8 | 77.5 | 1MN33S |
| 偉業 | 帰納的 | 64.7 | 80.1 | 61.3 | 76.2 | 3秒 |
| bd-cspn | トランスダクト | 69.8 | 82.2 | 66.3 | 79.1 | 7秒 |
| Laplacianshot | トランスダクト | 69.8 | 82.3 | 66.2 | 79.2 | 9s |
| PTマップ | トランスダクト | 76.1 | 84.2 | 71.7 | 80.7 | 39MN40S |
| ティム | トランスダクト | 74.3 | 84.2 | 70.7 | 80.7 | 3MN05S |
| トランスダクティブ微調整 | トランスダクト | 63.0 | 80.6 | 59.1 | 77.5 | 30代 |
複製する:
data/models/feat_resnet12_mini_imagenet.pth )の下tiered保存します。make extract-all-features-with-resnet12します。make benchmark-mini-imagenet ( tiered )で評価スクリプトを実行します。