# PyTorch-Image-Models-Multi-Label-Classification
**Repository Path**: ldengjie/PyTorch-Image-Models-Multi-Label-Classification
## Basic Information
- **Project Name**: PyTorch-Image-Models-Multi-Label-Classification
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2021-08-23
- **Last Updated**: 2021-08-23
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# PyTorch-Image-Models-Multi-Label-Classification
Multi-label classification based on timm.
### Update 2021/03/22
Updated ./timm/models/multi_label_model.py, ./train.py and ./validate.py to calculate accuracies for each label.
### Introduction
This repository is used for multi-label classification.
The code is based on [pytorch-image-models by Ross Wightman](https://github.com/rwightman/pytorch-image-models).
Thank Ross for his great work.
I downloaded his code on February 27, 2021.
I think my multi-label classification code would be compatible with his latest version, but I didn’t check.
The main reference for multi-label classification is [this website](https://learnopencv.com/multi-label-image-classification-with-pytorch/).
Thank Dmitry Retinskiy and Satya Mallick.
For the purpose of understanding our context and the dataset, please spend 5 minutes on reading the link above, though you don’t need to read the specific code there.
[Here is the link to download the images.](https://www.kaggle.com/paramaggarwal/fashion-product-images-small)
Put all the images into ./fashion-product-images/images/.
In order to implement multi-label classification, I modify (add) the following files from Ross’ pytorch-image-models:
1. ./train.py
2. ./validate.py
3. ./timm/data/__init__.py
4. ./timm/data/dataset.py
5. ./timm/data/loader.py
6. ./timm/models/__init__.py
7. ./timm/models/efficientnet.py
8. ./timm/models/multi_label_model.py (add)
**In order to train your own dataset, you only need to modify the 1, 2, 4, 8 files.**
Simply modify the code between the double dashed lines, or search color/gender/article, that’s the code/label that you need to change.
In terms of backbones, I only modified ./timm/models/efficientnet.py, I add an as_sequential_for_ML method.
For other models, you need to define the as_sequential_for_ML method yourself within each class. It’s simply a part of the as_sequential method.
We only need the backbone at this moment, so remove the last layers, for example classifier layer, from the as_sequential method. See forward_features method in each model class, then you would know which layers you need to remove, or how to define the as_sequential_for_ML method.
In addition, besides the multi-label classification functionality, I also add gradient centralization within AdamP optimizer.
[Gradient centralization](https://github.com/Yonghongwei/Gradient-Centralization) is a simple technique and may improve the optimizer performance.
No guarantee it will improve, but it is worth giving a try.
To add gradient centralization, I modify (add) the following files:
1. ./timm/optim/adamp.py
2. ./timm/optim/centralization.py (add)
3. ./timm/optim/optim_factory.py
Obviously, you can add gradient centralization within other optimizers as well.
Also, I updated ./timm/utils/summary.py so that we can output learning rate to summary.csv during training.
Hence you could draw your learning rate together with loss and accuracy for the whole training process.
Here is a command example to start to train:
```
./distributed_train.sh 1 ./fashion-product-images/ --model efficientnet_b2 -b 64 --sched cosine --epochs 50 --decay-epochs 2.4 --decay-rate .97 --opt adamp --opt-eps .001 -j 8 --warmup-lr 1e-6 --weight-decay 1e-5 --drop 0.3 --drop-connect 0.2 --model-ema --model-ema-decay 0.9999 --aa rand-m9-mstd0.5 --remode pixel --reprob 0.2 --amp --lr .016 --pretrained
```
And a command example to start to validate:
```
python validate.py ./fashion-product-images/ --model efficientnet_b2 --checkpoint ./output/train/your_specific_folder/model_best.pth.tar -b 64
```
Please give a star if you find this repo helpful.
### License
This project is released under the Apache License, Version 2.0.
### Citation (BibTeX)
```
@misc{yrx2021multilabel,
author = {YANG Ruixin},
title = {PyTorch Image Models Multi-Label Classification},
year = {2021},
publisher = {GitHub}
}
```