Готовые к использованию код и учебные записные книжки, чтобы повысить ваш путь в классификацию изображений с несколькими выстрелами. Этот репозиторий сделан для вас, если:
Не теряйтесь в больших репозиториях с сотнями методов и без объяснения объяснения того, как их использовать. Здесь мы хотим, чтобы каждая строка кода была покрыта учебником.
Вы хотите выучить несколько выстрелов и не знаете, с чего начать? Начните с наших учебных пособий.
| Блокнот | Описание | Колаба |
|---|---|---|
| Первые шаги в классификацию изображений с несколькими выстрелами | В основном несколько выстрелов 101, менее чем за 15 минут. | |
| Пример эпизодического обучения | Используйте его в качестве отправной точки, если вы хотите спроектировать сценарий для эпизодического обучения с помощью easyfsl. | |
| Пример классического обучения | Используйте его в качестве отправной точки, если вы хотите спроектировать сценарий для классического обучения с помощью easyfsl. | |
| Проверка с предварительно экспрессируемыми встраиваниями | Большинство нескольких методов используют замороженную магистраль во время испытания. С помощью easyfsl вы можете извлечь все встраивания для вашего набора данных раз и навсегда, а затем выполнять вывод непосредственно на встраивании. |
Современные методы обучения с несколькими выстрелами:
С 11 встроенными методами, EasyFSL-самая полная библиотека обучения с открытым исходным кодом!
Мы также предоставляем несколько классов классии для быстрого создания вашей реализации любого алгоритма классификации нескольких выстрелов, а также широко используемых архитектур.
См. Раздел «Бригац» ниже для получения более подробной информации о методах.
Инструменты для загрузки данных:
Нагрузка данных в FSL немного отличается от стандартной классификации, потому что мы выбираем партии экземпляров в форме нескольких задач классификации. Нет пота! В Easyfsl у вас есть:
Сценарии, чтобы воспроизвести наши тесты:
scripts/predict_embeddings.py для извлечения всех встроений из набора данных с данной предварительно обученной основойscripts/benchmark_methods.py для оценки метода в тестовом наборе данных с использованием предварительно экспрессируемых встраиваний.А также: некоторые утилиты, которые я чувствовал, я часто использовал в своем исследовании, поэтому я делюсь с вами.
Достаточно наборов данных, используемых в нескольких выстрелах, для любого, чтобы заблудиться в них. Они все здесь, явные, загружаемые и простые в использовании, в easyfsl.
Cu-Birds
Мы предоставляем рецепт make download-cub для загрузки и извлечения набора данных, а также стандартный (Train / Val / Test), разделенные по классам. После того, как вы загрузили набор данных, вы можете создать создание объектов набора данных в вашем коде с помощью этого супер сложного процесса:
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 к конструктору. Это занимает несколько минут, но это может сделать ваше обучение значительно быстрее!
Датские грибы
Недавно я начал использовать его в качестве нескольких выстрелов в учебных показателях, и я могу сказать вам, что это отличное игровое поле. Чтобы использовать его, сначала загрузите данные:
# 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, чтобы сравнить дюжину методов. Время вывода вычисляется более 1000 задач с использованием предварительно экспрессируемых функций. Они только показательны. Обратите внимание, что время вывода для методов точной настройки в значительной степени зависит от количества шагов тонкой настройки.
Все методы гиперпараметры определены в этом файле JSON. Они были выбраны на наборе валидации Miniimagenet. Процедура может быть воспроизведена с помощью make hyperparameter-search . Мы решили использовать гиперпараметры Miniimagenet для всех тестов, чтобы выделить адаптивность различных методов. Обратите внимание, что все методы используют нормализацию функций L2, за исключением подвига, поскольку он наносит вред своей производительности.
Нет результатов для математических и взаимосвязанных сетей, поскольку обученные веса для их дополнительных модулей недоступны.
Все методы используют одну и ту же основную цепь: пользовательский RESNET12 с использованием обученных параметров, предоставленных авторами из Feat (скачать: miniimagenet, tieredimagenet).
Лучшие индуктивные и лучшие трансдуктивные результаты для каждой столбцы показаны жирным шрифтом.
| Метод | Ind / trans | Mini ImageNet 1 выстрел | Mini ImageNet 5 выстрелов | многоуровневый ImageNet 1 выстрел | многоуровневый ImageNet 5 выстрелов | Время |
|---|---|---|---|---|---|---|
| Протонет | Индуктивный | 63,6 | 80.4 | 60.2 | 77.4 | 6 с |
| SimpleShot | Индуктивный | 63,6 | 80.5 | 60.2 | 77.4 | 6 с |
| MatchingNet | Индуктивный | - | - | - | - | - |
| Отношение | Индуктивный | - | - | - | - | - |
| Тонкая настройка | Индуктивный | 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 | 7S |
| Laplacianshot | Трансдуктивный | 69,8 | 82.3 | 66.2 | 79,2 | 9 -е годы |
| 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 (Resp. tiered ).make extract-all-features-with-resnet12 .make benchmark-mini-imagenet (соответственно, tiered ).