PaddlePaddle/PaddleTransfer
Python
Captured source
source ↗PaddlePaddle/PaddleTransfer
Description: 飞桨迁移学习算法库
Language: Python
License: Apache-2.0
Stars: 19
Forks: 3
Open issues: 0
Created: 2022-05-09T13:21:51Z
Pushed: 2023-02-20T07:15:20Z
Default branch: main
Fork: no
Archived: yes
README:
PaddleTransfer
Introduction
PaddleTransfer, a transfer learning tool of PaddlePaddle, provides a variety of algorithms to transfer the knowledge learned from source tasks to target task. It enables users to use the state-of-the-art transfer learning algorithms on main-stream model archtechtures.
PaddleTransfer provides various transfer learning algorithms, including [MMD(JMLR'12)](https://www.jmlr.org/papers/volume13/gretton12a/gretton12a.pdf?ref=https://githubhelp.com),[L2-SP(ICML'18)](http://proceedings.mlr.press/v80/li18a/li18a.pdf), [DELTA(ICLR'19)](https://openreview.net/pdf?id=rkgbwsAcYm), [RIFLE(ICML'20)](http://proceedings.mlr.press/v119/li20r/li20r.pdf), [Co-Tuning(NIPS'20)](https://proceedings.neurips.cc/paper/2020/file/c8067ad1937f728f51288b3eb986afaa-Paper.pdf), [MARS-PGM(ICLR'21)](https://openreview.net/pdf?id=IFqrg1p5Bc) and supports many main-stream model archtechtures, including ResNet, MobileNet and ViT. With several lines of codes, users can apply these algorithms on our predifined model or their own model easily.
Contents
- [Key Highlights](#Key-Highlights)
- [Installation](#Installation)
- [Usage Guideline](#Usage-Guideline)
- [Provided Algorithms](#Provided-Algorithms)
Key Highlights
High Accuracy
PaddleTransfer provides various transfer learning algorithms, users can conveniently apply them on their models, and select the most appropriate one with high accuracy for further usage.
Easy to Use
PaddleTransfer provides unified API to invoke different algorithms, users can easily apply them on their models with several lines of codes.
Fully Support
PaddleTransfer supports most commonly used models including Resnet, MobileNet and ViT, and will iterates rapidly to support more model archtectures.
Installation
Install by pip
python -m pip install paddletransfer
Dependencies
if you want to use our package in your own code, the following dependencies are required
- python >= 3.7
- numpy >= 1.21
- paddlepaddle >= 2.2 (with suitable CUDA and cuDNN version)
If you want to run our demo script, please make sure the following packages are installed correctly on your machine.
- visualdl
- yacs
Usage Guideline
Quick Start
Users can run our demo code for a quick start
python finetune.py --name [experiment_name] --train_dir [path_to_train_dir] --eval_dir [path_to_eval_dir] --model_arch [model_archtechture] --algo [finetune_algorithm] --gpu [device_for_experiment]
For model_arch argument, please choose one from "resnet18", "resnet34", "resnet50", "resnet101", "resnet152", "mobilenet_v2" and "vit". And for algo argument, please choose one from "base", "mmd", "rifle", "l2sp", "delta" and "cot". Mistyping may lead to unexpected behavior.
Please organize your dataset in the following format.
|_ root/ | |_ class1 | | |_ image_10026.JPEG | | |_ ... | |_ ... | | | |_ class100 | |_ ... | |_ image_9993.JPEG
If you want to finetune the ViT model, please make sure you have set the configuration file and pretrained parameters file correctly, and remember to add the corresponding argumengts(--cfg and --model_path) in your command. You can get the configuration file and pretrained model from PaddleVit.
Use PaddleTransfer in Your Own Code
Import dependencies
from paddletransfer.finetuning.img_cls import *
We strongly recommand you to use the model architechtures we provide in backbones by following codes. The parameters setting are the same as the implementations in paddle.vision.models, remember to set pretrained=True for finetuning.
from backbones import resnet18, resnet34, resnet50, resnet101, resnet152, mobilenet_v2, build_vit
You can only import the model archtechtures that you need.
If you want to use ViT model, please put the config.py file either from our project or PaddleVit under your working directory and set other files correctly as described in [Quick Start](#Quick-Start)
If you want to use your self-defined model, please make sure that the name of layers are consistent with the implementations in paddle.vision.models and your model has two outputs: The first one is the original output of the network and the second one is the features(the intermediate output before average pooling layer and fc layer).
Initialize the algorithm object
algo = FinetuneDELTA(model, model_arch)
- To customize the hyperparameter for finetune algorithm, please add the following arguments to the initializer, for details about hyperparameter setting, please refer to [provided algorithms](#Provided-Algorithms)
confs = confs # a directory of the hyperparameter setting
Get the parameters list which need to update and pass them to optimizer
params = algo.params() ... optimizer = paddle.optimizer.Optimizer(...,parameters = params,...)
In most cases, it is equal to model.parameters() and you may not want to invoke this method. But remember to do this if you are using Co-tuning algorithm since it has extra parameters to update
Get the regularization loss and merge it to the classification loss
loss_cls = paddle.nn.CrossEntropyLoss(y_data,logits)
loss_all = {'loss_cls': loss_cls}
loss_reg = algo.loss(x_data, y_data, logits, features, epoch, batch_id)
loss_all.update(loss_reg)
loss = sum(loss_all.values())
...
loss.backward()Provided Algorithms
So far we have provided 5 algorithms for finetune, which are MMD, L2-SP, DELTA, RIFLE and Co-Tuning. If you do not want to use any finetune algorithms, just use the following code for vanilla finetune, the corresponding code for invoking different algorithms are in the respective sections.
algo = FinetuneBASE(model, model_arch)
MMD
Use the following code for invoking MMD algorithm
algo = FinetuneMMD(model, model_arch, confs=_confs)
The default hyperparameters for MMD…
Excerpt shown — open the source for the full document.