Código pronto para uso e cadernos de tutorial para aumentar o caminho para a classificação de algumas imagens de algumas fotos. Este repositório é feito para você se:
Não se perca em grandes repositórios com centenas de métodos e nenhuma explicação sobre como usá -los. Aqui, queremos que cada linha de código seja coberta por um tutorial.
Você quer aprender um aprendizado de poucos anos e não sabe por onde começar? Comece com nossos tutoriais.
| Caderno | Descrição | Colab |
|---|---|---|
| Primeiros passos na classificação de algumas imagens de algumas fotos | Basicamente, aprendizado de poucos tiros 101, em menos de 15min. | |
| Exemplo de treinamento episódico | Use -o como ponto de partida se desejar projetar um script para treinamento episódico usando o easyfsl. | |
| Exemplo de treinamento clássico | Use -o como ponto de partida se desejar projetar um script para treinamento clássico usando o easyFSL. | |
| Teste com incorporação pré-extraída | A maioria dos alguns métodos de tiro usa uma espinha dorsal congelada no tempo de teste. Com o easyFSL, você pode extrair todas as incorporações para o seu conjunto de dados de uma vez por todas e executar a inferência diretamente nas incorporações. |
Métodos de aprendizado de poucos tiros de última geração:
Com 11 métodos internos, a easyfsl é a biblioteca de aprendizado de poucos tiros mais abrangente!
Também fornecemos uma aula de poucos shotclassifier para iniciar rapidamente sua implementação de qualquer algoritmo de classificação de poucos tiro, além de arquiteturas comumente usadas.
Consulte a seção de referência abaixo para obter mais detalhes sobre os métodos.
Ferramentas para carregamento de dados:
O carregamento de dados no FSL é um pouco diferente da classificação padrão, porque amostramos lotes de instâncias na forma de tarefas de classificação de poucas fotos. Sem suor! Em easyfsl você tem:
Scripts para reproduzir nossos benchmarks:
scripts/predict_embeddings.py para extrair todas as incorporações de um conjunto de dados com um determinado backbone pré-treinadoscripts/benchmark_methods.py para avaliar um método em um conjunto de dados de teste usando incorporações pré-extraídas.E também: alguns utilitários que senti que costumava usar em minha pesquisa, então estou compartilhando com você.
Existem conjuntos de dados suficientes usados no aprendizado de poucos anos para que alguém se perca neles. Eles estão todos aqui, explicados, para download e fáceis de usar, no easyfsl.
CU-Birds
Fornecemos uma receita make download-cub para baixar e extrair o conjunto de dados, juntamente com a divisão padrão (trem / val / teste) ao longo das classes. Depois de baixar o conjunto de dados, você pode instanciar os objetos do conjunto de dados em seu código com este processo super complicado:
from easyfsl . datasets import CUB
train_set = CUB ( split = "train" , training = True )
test_set = CUB ( split = "test" , training = False )TIEREDIMAGENET
Para usá -lo, você precisa do conjunto de dados ILSVRC2015. Depois de baixar e extrair o conjunto de dados, verifique se sua localização no disco é consistente com os caminhos da classe especificados nos arquivos de especificação. Então:
from easyfsl . datasets import TieredImageNet
train_set = TieredImageNet ( split = "train" , training = True )
test_set = TieredImageNet ( split = "test" , training = False )Miniimagenet
O mesmo que o TieDImageNet, fornecemos os arquivos de especificação, mas você precisa do conjunto de dados ILSVRC2015. Depois de ter:
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 ) Como o MiniimageNet é relativamente pequeno, você também pode carregá -lo na RAM diretamente na instanciação simplesmente adicionando load_on_ram=True ao construtor. Demora alguns minutos, mas pode tornar seu treinamento significativamente mais rápido!
Fungos dinamarqueses
Recentemente, comecei a usá-lo como alguns benchmarks de aprendizado de poucos tiros, e posso dizer que é um ótimo campo de jogo. Para usá -lo, primeiro faça o download dos dados:
# 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.csvE então instancie o conjunto de dados com o mesmo processo de sempre:
from easyfsl . datasets import DanishFungi
dataset = DanishFungi ( root = "where/fungi/is" )Observe que não especifiquei um conjunto de trem e teste porque o CSV que dei a você descreve todo o conjunto de dados. Eu recomendo usá -lo para testar modelos com pesos treinados em outro conjunto de dados (como o ImageNet). Mas se você deseja propor um trem/val/teste dividido nas aulas, poderá contribuir!
Instale o pacote: pip install easyfsl ou simplesmente bifurcar o repositório.
Baixe seus dados.
Projete seus scripts de treinamento e avaliação. Você pode usar nossos notebooks de exemplo para treinamento episódico ou treinamento clássico.
Este projeto é muito aberto a contribuições! Você pode ajudar de várias maneiras:
Usamos o easyFSL para comparar uma dúzia de métodos. Os tempos de inferência são calculados mais de 1000 tarefas usando recursos pré-extraídos. Eles são apenas indicativos. Observe que o tempo de inferência para métodos de ajuste fino depende muito do número de etapas de ajuste fino.
Todos os métodos hiperparâmetros são definidos neste arquivo JSON. Eles foram selecionados no conjunto de validação de miniimagena. O procedimento pode ser reproduzido com make hyperparameter-search . Decidimos usar os hiperparâmetros da MiniimageNet para todos os benchmarks, a fim de destacar a adaptabilidade dos diferentes métodos. Observe que todos os métodos usam a normalização de L2 dos recursos, exceto pelo feito, pois prejudica seu desempenho.
Não há resultados para redes de matemática e relações, pois os pesos treinados para seus módulos adicionais não estão disponíveis.
Todos os métodos usam o mesmo backbone: um resNet12 personalizado usando os parâmetros treinados fornecidos pelos autores do feat (Download: MiniimageNet, TieDImageNet).
Os melhores resultados indutivos e melhores transdutivos para cada coluna são mostrados em negrito.
| Método | Ind / trans | mini imagenet 1 shot | mini imagenet 5-shot | Imagenet em camadas 1 shot | Imagenet em camadas 5-shot | Tempo |
|---|---|---|---|---|---|---|
| Protoneta | Indutivo | 63.6 | 80.4 | 60.2 | 77.4 | 6s |
| SimpleShot | Indutivo | 63.6 | 80.5 | 60.2 | 77.4 | 6s |
| MatchingNet | Indutivo | - | - | - | - | - |
| Relationnet | Indutivo | - | - | - | - | - |
| Afinar | Indutivo | 63.3 | 80.5 | 59.8 | 77.5 | 1MN33S |
| FAÇANHA | Indutivo | 64.7 | 80.1 | 61.3 | 76.2 | 3s |
| BD-CSPN | Transdutivo | 69.8 | 82.2 | 66.3 | 79.1 | 7s |
| Laplacianshot | Transdutivo | 69.8 | 82.3 | 66.2 | 79.2 | 9s |
| Pt-map | Transdutivo | 76.1 | 84.2 | 71.7 | 80.7 | 39mn40s |
| Tim | Transdutivo | 74.3 | 84.2 | 70.7 | 80.7 | 3MN05S |
| Finetuning transdutivo | Transdutivo | 63.0 | 80.6 | 59.1 | 77.5 | 30s |
Reproduzir:
data/models/feat_resnet12_mini_imagenet.pth (resp. tiered ).make extract-all-features-with-resnet12 .make benchmark-mini-imagenet tiered (respectivamente).