PyTorch implementation of the supervised learning experiments from the paper Model-Agnostic Meta-Learning (MAML)

Overview

pytorch-maml

This is a PyTorch implementation of the supervised learning experiments from the paper Model-Agnostic Meta-Learning (MAML): https://arxiv.org/abs/1703.03400

Important: You will need the latest version of PyTorch, v.0.2.0 to run this code (otherwise you will get errors about double backwards not being supported).

Currently, only the Omniglot experiments have been replicated here. The hyper-parameters are the same as those used in the original Tensorflow implementation, except that only 1 random seed is used here.

5-way 1-shot training, best performance 98.9%

Alt text

20-way 1-shot training, best performance 92%

Alt text

Note: the 20-way performance is slightly lower than that reported in the paper (they report 95.8%). If you can see why this might be, please let me know. Also in this experiment, we can see evidence of overfitting to the meta-training set.

The 5-way results are achieved by simply meta-testing the network trained on the 1-shot task on the 5-shot task (e.g. for the 5-way 5-shot result, test the 5-way 1-shot trained network with 5-shots). Again the 20-way result is lower here than reported in the paper.

This repo also contains code for running maml experiments on permuted MNIST (tasks are created by shuffling the labels). This is a nice sanity check task.

license

This software is distributed under the MIT license.

to-do

  • port to pytorch 0.4 from 0.2 and python 3 from 2
  • investigate performance difference from TF version
  • add first-order version
Comments
  • meta_update with a single task and meta-loss calculated with current weight?

    meta_update with a single task and meta-loss calculated with current weight?

    Hi Kate, thanks for the Pytorch code of MAML!

    I have two questions(in which I suspect a bug?) on your implementation.

    image Line 10, Algorithm2 from the original paper indicates that meta_update is performed using each D'_i. To do so with your code, I think the function meta_update need access to every task sampled, since each task contains its D'_i in your implementation. https://github.com/katerakelly/pytorch-maml/blob/75907aca148ad053dfaf75fc138319f0d89534a8/src/maml.py#L172 However, it seems that you perform meta_update with a single task, resulting in using only one D'_i of a specific task.

    Line 10 also states that meta-loss is calculated with adapted parameters. https://github.com/katerakelly/pytorch-maml/blob/75907aca148ad053dfaf75fc138319f0d89534a8/src/maml.py#L71 You seem to have calculated meta-loss with self.net, which I think is "original parameters"(\theta_i) in stead of adapted parameters.

    Am I missing something?

    opened by hwijeen 4
  • Questions about the implementation for inner loop

    Questions about the implementation for inner loop

    Hi,

    Thanks for sharing the code. I have questions about the implementation for inner loop: Is there any reason for the special case of i == 0? Can we just use fast_weights for i == 0?

    Thanks!

    opened by hytseng0509 3
  • How to solve

    How to solve "IndexError: too many indices for array"?

    I have encountered the problem "IndexError: too many indices for array". Is it related to the dataset I use? I just download this file (https://github.com/brendenlake/omniglot/blob/master/python/images_evaluation.zip) and put it under data. The log is as follows:

    ./train-omniglot-5way-1shot.sh
    tee: ../logs/maml-omniglot-5way-1shot-TEST: No such file or directory
    exp maml-omniglot-5way-1shot-TEST
    dataset omniglot
    num_cls 5
    num_inst 1
    batch 1
    m_batch 32
    num_updates 15000
    num_inner_updates 5
    lr 1e-1
    meta_lr 1e-3
    gpu 0
    Setting GPU to 0
    init weights
    init weights
    init weights
    Traceback (most recent call last):
      File "maml.py", line 230, in <module>
        main()
      File "/home/maple/programs/miniconda2/lib/python2.7/site-packages/click/core.py", line 722, in __call__
        return self.main(*args, **kwargs)
      File "/home/maple/programs/miniconda2/lib/python2.7/site-packages/click/core.py", line 697, in main
        rv = self.invoke(ctx)
      File "/home/maple/programs/miniconda2/lib/python2.7/site-packages/click/core.py", line 895, in invoke
        return ctx.invoke(self.callback, **ctx.params)
      File "/home/maple/programs/miniconda2/lib/python2.7/site-packages/click/core.py", line 535, in invoke
        return callback(*args, **kwargs)
      File "maml.py", line 227, in main
        learner.train(exp)
      File "maml.py", line 151, in train
        mt_loss, mt_acc, mv_loss, mv_acc = self.test()
      File "maml.py", line 113, in test
        tloss, tacc = evaluate(test_net, train_loader)
      File "/home/maple/pytorch-maml/src/score.py", line 30, in evaluate
        loss += l.data.cpu().numpy()[0]
    IndexError: too many indices for array
    
    opened by fuzihaofzh 3
  • Question about meta-update in Algorithm 2 mentioned in the paper.

    Question about meta-update in Algorithm 2 mentioned in the paper.

    In the algorithm 2 mentioned in this paper,we have computed adapted parameters θ' in step 7,and I think we have updated the model for task T_i. What does the meta-update mean?(in step 8)

    opened by dingli93 2
  • why need use hook?

    why need use hook?

    Thanks for your helpful codes.

    I want to change the origin net's weights using tasks-average gradients on every task's query set. then using opt.step to uodate it. Inspired by the optim.GSD source code, Can your code: ` hooks = [] for (k,v) in self.net.named_parameters(): def get_closure(): key = k def replace_grad(grad): return gradients[key] return replace_grad hooks.append(v.register_hook(get_closure()))

    Compute grads for current step, replace with summed gradients as defined by hook

    self.opt.zero_grad() loss.backward()

    Update the net parameters with the accumulated gradient according to optimizer

    self.opt.step()

    Remove the hooks before next training phase

    for h in hooks: h.remove() `

    be replaced by: for (k,v), (k,g) in zip(self.net.named_parameters(), gradients): v.grad.data = g.data self.opt.step() self.opt.zero_grad()

    or just by: for (k,v), (k,g) in zip(self.net.named_parameters(), gradients): v.data.add_(-meta_lr, g.data)

    Thanks for your time!

    opened by Interesting6 1
  • Why the gradient w.r.t. the parameters before update is used in query set?

    Why the gradient w.r.t. the parameters before update is used in query set?

    In this line: https://github.com/katerakelly/pytorch-maml/blob/master/src/inner_loop.py#L76 why don't use grads = torch.autograd.grad(loss, fast_weights.values()) ? but self.paramters() which is the original parameters before any inner-update step.

    opened by machanic 1
  • Hessian-vector products

    Hessian-vector products

    In the original paper, the authors claimed that MAML needs second gradient and Hessian-vector products. Could you explain how do you implement this or Pytorch just do this automatically? Thanks! referenced https://github.com/dragen1860/MAML-Pytorch/issues/18

    opened by buaaswf 1
  • meta_update function

    meta_update function

    Hi Kate Rakelly, Thank you for sharing the MAML source code. Here I have a few questions: 1  Since you have obtained the meta_grads in the function “forward()”, why not directly utilize them to update the parameters of self.net. (param - learning rategradient)  (Here, it seems that you want to achieve that by defining a “meta_update()” function. And you make the annotation: “We use a dummy forward / backward pass to get the correct grads into self.net”. for this command: “loss, out = forward_pass(self.net, in_, target)” I’m confused why you compute the loss using val data with respect to original “\theta”.) 2. In the “meta_update()” function, you use this (register_hook) to change the gradients. But the functions are(opt.zero_grad;  loss.backward) also used to compute the gradients. Do these functions(opt.zero_grad;  loss.backward) overwrite the previous gradients (changed by using the register_hook function)? I’m looking forward to your reply.

    opened by WangWenshan 1
  • result on mini-imagenet dataset

    result on mini-imagenet dataset

    Hi, thanks for the code.

    I am trying test the code on the mini-imagenet dataset. However, my result is very bad, much worse than the reported ones. I wonder if you have tested the implementation on the dataset, and how about your results. If possible, could you possible upload your scripts of experimenting on the mini-imagenet dataset. Your help is much appreciated.

    opened by kailigo 1
  • errors when loading weights

    errors when loading weights

    Thanks for the code. I meet the following problem when trying to run your code. I used pytorch 0.2.0, python 3.5.

    tee: ../logs/maml-omniglot-5way-1shot-TEST: No such file or directory
    exp maml-omniglot-5way-1shot-TEST
    dataset omniglot
    num_cls 5
    num_inst 1
    batch 1
    m_batch 32
    num_updates 15000
    num_inner_updates 5
    lr 1e-1
    meta_lr 1e-3
    gpu 0
    Setting GPU to 0
    init weights
    init weights
    init weights
    > /zdata/users/kaili/code/pytorch-maml/src/maml.py(102)test()
    -> for _ in range(10):
    (Pdb) c
    -------------------------
    Meta train: 0.1178786426782608 1.0
    Meta val: 1.139253568649292 0.7
    -------------------------
    inner step 0
    inner step 1
    Traceback (most recent call last):
      File "maml.py", line 234, in <module>
        main()
      File "/home/mli/kaili/anaconda2/envs/kai_py35_torch02/lib/python3.5/site-packages/click/core.py", line 722, in __call__
        return self.main(*args, **kwargs)
      File "/home/mli/kaili/anaconda2/envs/kai_py35_torch02/lib/python3.5/site-packages/click/core.py", line 697, in main
        rv = self.invoke(ctx)
      File "/home/mli/kaili/anaconda2/envs/kai_py35_torch02/lib/python3.5/site-packages/click/core.py", line 895, in invoke
        return ctx.invoke(self.callback, **ctx.params)
      File "/home/mli/kaili/anaconda2/envs/kai_py35_torch02/lib/python3.5/site-packages/click/core.py", line 535, in invoke
        return callback(*args, **kwargs)
      File "maml.py", line 231, in main
        learner.train(exp)
      File "maml.py", line 166, in train
        metrics, g = self.fast_net.forward(task)
      File "/zdata/users/kaili/code/pytorch-maml/src/inner_loop.py", line 61, in forward
        loss, _ = self.forward_pass(in_, target, fast_weights)
      File "/zdata/users/kaili/code/pytorch-maml/src/inner_loop.py", line 43, in forward_pass
        out = self.net_forward(input_var, weights)
      File "/zdata/users/kaili/code/pytorch-maml/src/inner_loop.py", line 36, in net_forward
        return super(InnerLoop, self).forward(x, weights)
      File "/zdata/users/kaili/code/pytorch-maml/src/omniglot_net.py", line 49, in forward
        x = batchnorm(x, weight = weights['features.bn1.weight'], bias = weights['features.bn1.bias'], momentum=1)
      File "/zdata/users/kaili/code/pytorch-maml/src/layers.py", line 31, in batchnorm
        running_mean = torch.zeros(np.prod(np.array(input.data.size()[1]))).cuda()
    TypeError: torch.zeros received an invalid combination of arguments - got (numpy.int64), but expected one of:
     * (int ... size)
          didn't match because some of the arguments have invalid types: (!numpy.int64!)
     * (torch.Size size)
          didn't match because some of the arguments have invalid types: (!numpy.int64!)
    

    Any clue to solve this? Thanks.

    opened by kailigo 0
  • Maybe dimension mistake

    Maybe dimension mistake

    Thanks for your nice implementation. But I meet this mistake when I sh train-omniglot-20way-1shot.sh ,is there any dimension dismatch? I don't know how to fix it. It's much appreciated if anyone can help me. Traceback (most recent call last): File "maml.py", line 230, in main() File "/usr/local/lib/python3.6/dist-packages/click/core.py", line 829, in call return self.main(*args, **kwargs) File "/usr/local/lib/python3.6/dist-packages/click/core.py", line 782, in main rv = self.invoke(ctx) File "/usr/local/lib/python3.6/dist-packages/click/core.py", line 1066, in invoke return ctx.invoke(self.callback, **ctx.params) File "/usr/local/lib/python3.6/dist-packages/click/core.py", line 610, in invoke return callback(*args, **kwargs) File "maml.py", line 227, in main learner.train(exp) File "maml.py", line 151, in train mt_loss, mt_acc, mv_loss, mv_acc = self.test() File "maml.py", line 113, in test tloss, tacc = evaluate(test_net, train_loader) File "/home/src-plot/score.py", line 30, in evaluate loss += l.data.cpu().numpy()[0] IndexError: too many indices for array

    opened by PanPanZou 0
  • About the Model parameters updating in OmniglotNet Class

    About the Model parameters updating in OmniglotNet Class

    Thanks for your good implementation of MAML, however, I think that maybe use state_dict() and load_stat_dict() is much faster than modifying the weights (in omniglot_net.py 43), can I first deepcopy the net parameters(state_dict()) and use the fast weights (also use a optimizer to update), then load the origin parameters back to update the meta learner? Thanks.

    opened by zhaoyu-li 1
  • batch_cutoff not working for split = 'train'

    batch_cutoff not working for split = 'train'

    Hi Kate,

    Under split='train' in inner loop, the data loader always output the same data no matter under what batch_cutoff. I know that this is the setting in the MAML paper, but I am wondering is there a way to make batch_cutoff work? Many thanks!

    opened by pppplin 1
  • get_data_loader function gets same train samples

    get_data_loader function gets same train samples

    Hi kelly, I read the code and find that the get_data_loader function get the same batch samples every iteration, is that you want? (sorry, I'm not familiar with the maml algorithm.)

    below is the samples got from the get_data_loader funtion.

    ('test train loader: ', ['../data/omniglot/images_evaluation/Kannada/character01/1205_20.png', '../data/omniglot/images_evaluation/Manipuri/character05/1323_07.png', '../data/omniglot/images_evaluation/Angelic/character06/0970_19.png', '../data/omniglot/images_evaluation/ULOG/character14/1611_15.png', '../data/omniglot/images_evaluation/Keble/character02/1247_11.png', '../data/omniglot/images_evaluation/Kannada/character05/1209_20.png', '../data/omniglot/images_evaluation/Sylheti/character05/1507_12.png', '../data/omniglot/images_evaluation/Manipuri/character15/1333_01.png', '../data/omniglot/images_evaluation/Kannada/character27/1231_08.png', '../data/omniglot/images_evaluation/Mongolian/character30/1388_20.png', '../data/omniglot/images_evaluation/Keble/character07/1252_12.png', '../data/omniglot/images_evaluation/Tibetan/character05/1560_19.png', '../data/omniglot/images_evaluation/Glagolitic/character14/1128_04.png', '../data/omniglot/images_evaluation/Ge_ez/character06/1094_07.png', '../data/omniglot/images_evaluation/Avesta/character05/1067_17.png', '../data/omniglot/images_evaluation/Malayalam/character05/1276_16.png', '../data/omniglot/images_evaluation/Aurek-Besh/character03/1039_18.png', '../data/omniglot/images_evaluation/Syriac_(Serto)/character14/1493_07.png', '../data/omniglot/images_evaluation/Keble/character16/1261_09.png', '../data/omniglot/images_evaluation/Aurek-Besh/character13/1049_15.png']) ('test train loader: ', ['../data/omniglot/images_evaluation/Syriac_(Serto)/character14/1493_07.png', '../data/omniglot/images_evaluation/Sylheti/character05/1507_12.png', '../data/omniglot/images_evaluation/Keble/character16/1261_09.png', '../data/omniglot/images_evaluation/Ge_ez/character06/1094_07.png', '../data/omniglot/images_evaluation/Tibetan/character05/1560_19.png', '../data/omniglot/images_evaluation/Manipuri/character05/1323_07.png', '../data/omniglot/images_evaluation/Kannada/character05/1209_20.png', '../data/omniglot/images_evaluation/Manipuri/character15/1333_01.png', '../data/omniglot/images_evaluation/Avesta/character05/1067_17.png', '../data/omniglot/images_evaluation/ULOG/character14/1611_15.png', '../data/omniglot/images_evaluation/Glagolitic/character14/1128_04.png', '../data/omniglot/images_evaluation/Malayalam/character05/1276_16.png', '../data/omniglot/images_evaluation/Aurek-Besh/character13/1049_15.png', '../data/omniglot/images_evaluation/Kannada/character01/1205_20.png', '../data/omniglot/images_evaluation/Keble/character02/1247_11.png', '../data/omniglot/images_evaluation/Angelic/character06/0970_19.png', '../data/omniglot/images_evaluation/Aurek-Besh/character03/1039_18.png', '../data/omniglot/images_evaluation/Mongolian/character30/1388_20.png', '../data/omniglot/images_evaluation/Kannada/character27/1231_08.png', '../data/omniglot/images_evaluation/Keble/character07/1252_12.png']) ('test train loader: ', ['../data/omniglot/images_evaluation/Kannada/character05/1209_20.png', '../data/omniglot/images_evaluation/Malayalam/character05/1276_16.png', '../data/omniglot/images_evaluation/Manipuri/character05/1323_07.png', '../data/omniglot/images_evaluation/Tibetan/character05/1560_19.png', '../data/omniglot/images_evaluation/Kannada/character27/1231_08.png', '../data/omniglot/images_evaluation/Ge_ez/character06/1094_07.png', '../data/omniglot/images_evaluation/Keble/character16/1261_09.png', '../data/omniglot/images_evaluation/Kannada/character01/1205_20.png', '../data/omniglot/images_evaluation/Glagolitic/character14/1128_04.png', '../data/omniglot/images_evaluation/Angelic/character06/0970_19.png', '../data/omniglot/images_evaluation/Aurek-Besh/character03/1039_18.png', '../data/omniglot/images_evaluation/ULOG/character14/1611_15.png', '../data/omniglot/images_evaluation/Aurek-Besh/character13/1049_15.png', '../data/omniglot/images_evaluation/Keble/character02/1247_11.png', '../data/omniglot/images_evaluation/Sylheti/character05/1507_12.png', '../data/omniglot/images_evaluation/Avesta/character05/1067_17.png', '../data/omniglot/images_evaluation/Manipuri/character15/1333_01.png', '../data/omniglot/images_evaluation/Syriac_(Serto)/character14/1493_07.png', '../data/omniglot/images_evaluation/Mongolian/character30/1388_20.png', '../data/omniglot/images_evaluation/Keble/character07/1252_12.png']) ('test train loader: ', ['../data/omniglot/images_evaluation/Keble/character02/1247_11.png', '../data/omniglot/images_evaluation/ULOG/character14/1611_15.png', '../data/omniglot/images_evaluation/Tibetan/character05/1560_19.png', '../data/omniglot/images_evaluation/Kannada/character27/1231_08.png', '../data/omniglot/images_evaluation/Kannada/character05/1209_20.png', '../data/omniglot/images_evaluation/Syriac_(Serto)/character14/1493_07.png', '../data/omniglot/images_evaluation/Aurek-Besh/character03/1039_18.png', '../data/omniglot/images_evaluation/Avesta/character05/1067_17.png', '../data/omniglot/images_evaluation/Glagolitic/character14/1128_04.png', '../data/omniglot/images_evaluation/Malayalam/character05/1276_16.png', '../data/omniglot/images_evaluation/Mongolian/character30/1388_20.png', '../data/omniglot/images_evaluation/Manipuri/character15/1333_01.png', '../data/omniglot/images_evaluation/Manipuri/character05/1323_07.png', '../data/omniglot/images_evaluation/Aurek-Besh/character13/1049_15.png', '../data/omniglot/images_evaluation/Sylheti/character05/1507_12.png', '../data/omniglot/images_evaluation/Kannada/character01/1205_20.png', '../data/omniglot/images_evaluation/Ge_ez/character06/1094_07.png', '../data/omniglot/images_evaluation/Keble/character07/1252_12.png', '../data/omniglot/images_evaluation/Keble/character16/1261_09.png', '../data/omniglot/images_evaluation/Angelic/character06/0970_19.png']) ('test train loader: ',

    opened by whcjb 3
Owner
Kate Rakelly
PhD in machine learning at UC Berkeley AI Research Lab (BAIR), advised by Sergey Levine. I work on reinforcement learning, meta-learning, and robotics.
Kate Rakelly
Implementation of "Meta-rPPG: Remote Heart Rate Estimation Using a Transductive Meta-Learner"

Meta-rPPG: Remote Heart Rate Estimation Using a Transductive Meta-Learner This repository is the official implementation of Meta-rPPG: Remote Heart Ra

Eugene Lee 137 Dec 13, 2022
Arch-Net: Model Distillation for Architecture Agnostic Model Deployment

Arch-Net: Model Distillation for Architecture Agnostic Model Deployment The official implementation of Arch-Net: Model Distillation for Architecture A

MEGVII Research 22 Jan 5, 2023
Contrastive learning of Class-agnostic Activation Map for Weakly Supervised Object Localization and Semantic Segmentation (CVPR 2022)

CCAM (Unsupervised) Code repository for our paper "CCAM: Contrastive learning of Class-agnostic Activation Map for Weakly Supervised Object Localizati

Computer Vision Insitute, SZU 113 Dec 27, 2022
The LaTeX and Python code for generating the paper, experiments' results and visualizations reported in each paper is available (whenever possible) in the paper's directory

This repository contains the software implementation of most algorithms used or developed in my research. The LaTeX and Python code for generating the

João Fonseca 3 Jan 3, 2023
This codebase is the official implementation of Test-Time Classifier Adjustment Module for Model-Agnostic Domain Generalization (NeurIPS2021, Spotlight)

Test-Time Classifier Adjustment Module for Model-Agnostic Domain Generalization This codebase is the official implementation of Test-Time Classifier A

null 47 Dec 28, 2022
Supervised domain-agnostic prediction framework for probabilistic modelling

A supervised domain-agnostic framework that allows for probabilistic modelling, namely the prediction of probability distributions for individual data

The Alan Turing Institute 112 Oct 23, 2022
Implementation of the paper "Language-agnostic representation learning of source code from structure and context".

Code Transformer This is an official PyTorch implementation of the CodeTransformer model proposed in: D. Zügner, T. Kirschstein, M. Catasta, J. Leskov

Daniel Zügner 131 Dec 13, 2022
PyTorch implementation of the paper: "Preference-Adaptive Meta-Learning for Cold-Start Recommendation", IJCAI, 2021.

PAML PyTorch implementation of the paper: "Preference-Adaptive Meta-Learning for Cold-Start Recommendation", IJCAI, 2021. (Continuously updating ) Int

null 15 Nov 18, 2022
PyExplainer: A Local Rule-Based Model-Agnostic Technique (Explainable AI)

PyExplainer PyExplainer is a local rule-based model-agnostic technique for generating explanations (i.e., why a commit is predicted as defective) of J

AI Wizards for Software Management (AWSM) Research Group 14 Nov 13, 2022
PyExplainer: A Local Rule-Based Model-Agnostic Technique (Explainable AI)

PyExplainer PyExplainer is a local rule-based model-agnostic technique for generating explanations (i.e., why a commit is predicted as defective) of J

AI Wizards for Software Management (AWSM) Research Group 14 Nov 13, 2022
Python scripts performing class agnostic object localization using the Object Localization Network model in ONNX.

ONNX Object Localization Network Python scripts performing class agnostic object localization using the Object Localization Network model in ONNX. Ori

Ibai Gorordo 15 Oct 14, 2022
A general framework for deep learning experiments under PyTorch based on pytorch-lightning

torchx Torchx is a general framework for deep learning experiments under PyTorch based on pytorch-lightning. TODO list gan-like training wrapper text

Yingtian Liu 6 Mar 17, 2022
PyTorch framework, for reproducing experiments from the paper Implicit Regularization in Hierarchical Tensor Factorization and Deep Convolutional Neural Networks

Implicit Regularization in Hierarchical Tensor Factorization and Deep Convolutional Neural Networks. Code, based on the PyTorch framework, for reprodu

Asaf 3 Dec 27, 2022
Code for the paper Task Agnostic Morphology Evolution.

Task-Agnostic Morphology Optimization This repository contains code for the paper Task-Agnostic Morphology Evolution by Donald (Joey) Hejna, Pieter Ab

Joey Hejna 18 Aug 4, 2022
Official Pytorch implementation of Meta Internal Learning

Official Pytorch implementation of Meta Internal Learning

null 10 Aug 24, 2022
This is an official PyTorch implementation of Task-Adaptive Neural Network Search with Meta-Contrastive Learning (NeurIPS 2021, Spotlight).

NeurIPS 2021 (Spotlight): Task-Adaptive Neural Network Search with Meta-Contrastive Learning This is an official PyTorch implementation of Task-Adapti

Wonyong Jeong 15 Nov 21, 2022
Implementation of experiments in the paper Clockwork Variational Autoencoders (project website) using JAX and Flax

Clockwork VAEs in JAX/Flax Implementation of experiments in the paper Clockwork Variational Autoencoders (project website) using JAX and Flax, ported

Julius Kunze 26 Oct 5, 2022
An Agnostic Computer Vision Framework - Pluggable to any Training Library: Fastai, Pytorch-Lightning with more to come

IceVision is the first agnostic computer vision framework to offer a curated collection with hundreds of high-quality pre-trained models from torchvision, MMLabs, and soon Pytorch Image Models. It orchestrates the end-to-end deep learning workflow allowing to train networks with easy-to-use robust high-performance libraries such as Pytorch-Lightning and Fastai

airctic 789 Dec 29, 2022
The implementation of PEMP in paper "Prior-Enhanced Few-Shot Segmentation with Meta-Prototypes"

Prior-Enhanced network with Meta-Prototypes (PEMP) This is the PyTorch implementation of PEMP. Overview of PEMP Meta-Prototypes & Adaptive Prototypes

Jianwei ZHANG 8 Oct 14, 2021