NOLB

所属分类:论文
开发工具:Python
文件大小:0KB
下载次数:0
上传日期:2023-06-28 17:44:32
上 传 者sh-1993
说明:  旨在实现[论文]([https: arxiv.org abs 2303.03630)中的代码细节,以完成ML课设](https: arxiv.org abs 2303.03630\)%E4%B8%AD%E7%9A%84%E4%BB%A3%E7%A0%81%E7%BB%86%E8%8A%82%EF%BC%8C%E4%BB%A5%E5%AE%8C%E6%88%90ML%E8%AF%BE%E8%AE%BE),
(It aims to realize the code details in [Thesis] ([https: arxiv. org abs 2303.03630) to complete the ML curriculum] (https: arxiv. org abs 2303.03630 )% E4% B8% AD% E7% 9A% 84% E4% BB% A3% E7% A0% 81% E7% BB% 86% E8% 8A% 82% EF% BC% 8C% E4% BB% A5% E5% AE% 8C% E6% 88% 90ML% E8% AF% BE% E8% AE% BE),)

文件列表:
LICENSE (11357, 2023-06-28)
Paco/ (0, 2023-06-28)
Paco/autoaug.py (12216, 2023-06-28)
Paco/dataset/ (0, 2023-06-28)
Paco/dataset/imagenet.py (872, 2023-06-28)
Paco/dataset/imagenet_due.py (1713, 2023-06-28)
Paco/dataset/imagenet_moco.py (1530, 2023-06-28)
Paco/dataset/imbalance_cifar.py (3483, 2023-06-28)
Paco/dataset/inat.py (853, 2023-06-28)
Paco/dataset/inat_due.py (1709, 2023-06-28)
Paco/dataset/inat_moco.py (1531, 2023-06-28)
Paco/dataset/places.py (3156, 2023-06-28)
Paco/dataset/places_due.py (1712, 2023-06-28)
Paco/dataset/places_moco.py (1528, 2023-06-28)
Paco/losses.py (2775, 2023-06-28)
Paco/moco/ (0, 2023-06-28)
Paco/moco/__init__.py (0, 2023-06-28)
Paco/moco/builder.py (8647, 2023-06-28)
Paco/moco/loader.py (734, 2023-06-28)
Paco/models/ (0, 2023-06-28)
Paco/models/__init__.py (59, 2023-06-28)
Paco/models/resnet_cifar.py (4918, 2023-06-28)
Paco/models/resnet_imagenet.py (16001, 2023-06-28)
Paco/paco_cifar.py (27648, 2023-06-28)
Paco/paco_fp16_places.py (27507, 2023-06-28)
Paco/paco_lt.py (27202, 2023-06-28)
Paco/pretrained/ (0, 2023-06-28)
Paco/pretrained/moco_ckpt.pth (6048085, 2023-06-28)
Paco/randaugment.py (15246, 2023-06-28)
Paco/sh/ (0, 2023-06-28)
Paco/sh/CIFAR100_train_imb0.01.sh (603, 2023-06-28)
Paco/sh/CIFAR100_train_imb0.02.sh (600, 2023-06-28)
Paco/sh/CIFAR100_train_imb0.1.sh (598, 2023-06-28)
Paco/sh/ImageNetLT_eval_R50.sh (724, 2023-06-28)
Paco/sh/ImageNetLT_eval_X101.sh (765, 2023-06-28)
Paco/sh/ImageNetLT_eval_X50.sh (741, 2023-06-28)
Paco/sh/ImageNetLT_train_R50.sh (656, 2023-06-28)
Paco/sh/ImageNetLT_train_X101.sh (699, 2023-06-28)
Paco/sh/ImageNetLT_train_X50.sh (676, 2023-06-28)
Paco/sh/Inat_train_R50.sh (682, 2023-06-28)
... ...

## 1. 环境 建议使用 anaconda,确保 anaconda 安装文件夹路径不含**中文&空格**以及项目文件夹路径不含**中文&空格**后,**依次**执行 ``` conda create -n ML python==3.10 conda activate ML ``` 部分用户在执行 `conda activate ML` 时候会出现需要`conda init` 的提示,此时请使用如下类似命令 * `conda init --all` * `conda init cmd.exe` 然后,终端使用 `cd` 命令切换工作文件夹至工作目录, 下载 python 所需的依赖库 ``` pip install -r requirements.txt ``` > 请确保项目文件夹所在磁盘内存足够 --- ## 2. 项目介绍 ### 2.1 项目目标 本项目受 [论文](https://arxiv.org/abs/2303.03630) 启发,在 cifar100 数据集上比较以下模型的表现效果 * 简单方法 * CE & BSCE * 前人的改进方法 * LDAM & LADE & MiSLAS & RIDE & Paco * 论文作者提出的 GML tuning 策略以及 ensemble trick方法 * CE + GML & CE + GML(ensemble) > 由于团队科研能力有限,只能对基于基础的残差神经网络架构方法进行再现,所以这里使用简单的 CE 方法来再现论文提出的 GML 损失函数的 Plug-In Method 对于预训练模型的改善效果 ### 2.2 文件介绍 **Paco**, **RIDE-LongTailRecgnition** : 这两个文件夹存储的是对应模型的代码 (由于这个并非我们项目的主体文件,不做过多介绍) ``` - app.py : 项目的主体入口,运行该文件可以进入 webui 界面 - train.py : 训练模型 & 测试模型 - requirements.txt : Python 依赖 - utils.py : 存储统计模型评价 metric 的函数 - loss.py : 存储各种需要用到的损失函数 - models : - pretrained : 预训练模型 - resnet.py : 存储残差神经网络代码 - datasets : - dataset.py : 下载 cifar10/cifar100,并处理为不平衡的数据集 - sampler.py : 附加的功能,提供了另外一些 Long-tail learning 的方法 - Trained_Model : 存储训练后模型的文件夹 ``` ### 2.3 使用说明 > 经测试,我们的代码既可以单独在 cpu 上运行,也可以单独在 gpu 上运行 我们借由 UI 界面,介绍具体的使用细节,使用终端 `python app.py` or IDE 运行 app.py 文件,然后点击弹出的网址。 网页上会显示3个tab,训练,推理,比较,接下来介绍一下三个页面 #### (1). 训练 **数据集** | 参数 | 作用 | | ---------------- | --------------------------------------------------------- | | Dataset | 训练使用的数据集 | | Imbalance Factor | #所含样本最少的类别的样本数 / #所含样本最多的类别的样本数 | | Data Path | 存储数据集的位置,不建议修改默认值 | **IF值 & re-weight_re-sample策略** | 参数 | 作用 | | -------------- | ------------------------------------------------------ | | Imbalance Type | 将平衡的cifar-10/cifar-100打乱为不平衡数据集的方式 | | Train Rule | 另外的一些长尾学习的方法,如 re-weighting, re-sampling | **预训练 & 集成模型参数设置** | 参数 | 作用 | | --------------------------------------- | --------------------------------------------------------- | | Pretrained(Freezing feature extraction) | 确认是否使用预训练模型,但是仅冻结其特征提取网络 | | Pretrained(Freezing all parameters) | 确认是否使用预训练模型,但是冻结其所有参数 | | Ensemble | 确认是否采取作者提出的 ensemble 的 trick | | Select Pretrained Model | 从 ”./models/pretrained“ 文件夹下获取当前已有的预训练模型 | | Temperature for New Model | 作者提出的 ensemble trick 的 t1 参数 | | Temperature for Old Model | 作者提出的 ensemnle trick 的 t2 参数 | **其他参数** | 参数 | 作用 | | ----------------- | -------------------------------------------------------- | | Seed | 用于设置随机数种子(seed)以确保在训练过程中的随机性可重现 | | Root Log | 保存训练过程的日志 | | Experiment String | 表示当前试验的编号 | **训练参数** | 参数 | 作用 | | ----------- | ------------------------------- | | Start Epoch | 表示epoch 的开始编号 | | Epochs | 表示运行的 epoch 数 | | Workers | 表示用于加载数据的子进程数量 | | Batch Size | 表示一个训练/验证批次样本的数量 | **模型参数** | 参数 | 作用 | | ------------------ | ------------------------ | | Momentum | 表示 SGD 的动量参数 | | Model Architecture | 表示训练时使用的模型架构 | | Weight Decay | 控制 SGD 的权重衰减 | | Loss Type | 训练时使用的损失函数类别 | | Learning Rate | SGD 的学习率参数 | **选项** | 参数 | 作用 | | ----------------------------------------------------- | ---------------------------- | | save model(You can find it in 'Trained_model' folder) | 保存模型至 ”./Trained_model“ | **输出** 输出每个 epoch 上在训练集 & 测试集上的四个 metric 上折线图 * precision&1 and GM * HM & LR #### (2). 推理 一个简单的应用模块,这并非是本项目的重点,所以略显粗糙 * Image : 上传待分类的图片 * Model Architecture : 选择用于推理的模型架构 * Load Model : 加载已经预训练好的模型,注意**请与模型架构,以及模型原本的训练集对应** * **模型文件夹为** "./Trained_model" * Choose Raw Dataset : 选择预训练模型所使用的数据集 * Label : 输出推理结果,即分类结果 > Ex :效果虽然差强人意,但是合乎情理 ![img](./info.png) #### (3). 比较 这个模块,我们实现了将预训练在选定数据集上使用指定损失函数进行 `fine-tuning` 的功能 * Dataset : 用于 `fine-tuning` 的数据集 **Imbalance 设置** | 参数 | 作用 | | ---------------- | --------------------------------------------------------- | | Imbalance Factor | #所含样本最少的类别的样本数 / #所含样本最多的类别的样本数 | | Imbalance Type | 将平衡的cifar-10/cifar-100打乱为不平衡数据集的方式 | **Model 设置** | 参数 | 作用 | | ----------------------- | -------------------------------------------------- | | Model Architecture | 预训练模型的架构 | | Select Pretrained Model | 从 ”./models/pretrained“ 中加载预先训练模型 | | Loss Type for Tuning | Fine-tuning 使用的损失函数类型,默认是作者的 "GML" | | Epochs | Fine-tuning 的训练论数 | **输出** 输出一组柱状图,分析新旧模型在100(cifar100)/10(cifar10)个类别上的准确率 ### 2.4 细节 **1. 预处理模型的参数** 首先,我们的预处理模型只收集了网络架构的参数,其次您如果需要加载另外的预处理模型,请确保: * 原先预处理模型的训练的 resnet 网络和本项目使用的网络基本相同 * 具体预处理模型的参数需要有类似: * conv1.weight * layer1.2.conv1.weight * layer2.4.bn1.running_var * linear.weight * linear.bias > 在我们项目构建的过程中,发现有些模型文件里面的参数是 module.conv1.weight 或 fc.bias,这不代表该模型无法和本项目对应起来,您可以手动更改模型文件的**键值对**,从而使得您的模型适配我们的神经网络 **2. 关于运行该项目设备的说明** 本项目大部分代码在 cpu 设备上编写,并能够成功运转,但是训练速度十分缓慢,可以用于简单推理,同时我们又将仓库在 gpu 设备上运行并调整,使得其现在基本上是能在两种设备都可以运转 **3. 关于使用 colab / 云服务器的说明** 当您使用 colab 等再现训练方式,webui 则无法提供给予 pretrained 模型的选项,但可以提供训练模型的接口,输出的结果将存储在 `results` 与 `compare` 文件夹中 --- ## 3. 使用 **使用 CE/BSCE/Focal/FeaBal/LDAM 方法** 只需在 app.py 生成的 webui 上修改损失函数,并调整其他参数即可,如果您需要更详细的训练情况,可以查看 ”./log“ **使用 Paco 方法** > !注意该方法只能在 gpu 设备上运行 ```markdown cd ./Paco ``` 使用 git bash 执行以下命令 (3选1): * `bash sh/CIFAR100_train_imb0.1.sh` * `bash sh/CIFAR100_train_imb0.01.sh` (推荐) * `bash sh/CIFAR100_train_imb0.02.sh` 如果您直接在 IDE 运行 `paco_cifar.py` 将会执行我们调整的默认配置,即使用 imb = 0.01 在CIFAR100 上运行 > * 如果要重新训练模型请删除新生成的 `data` 文件夹 > * 推荐使用第二条命令的原因是,我们准备的预训练模型训练使用的数据集 imb = 0.01 **使用 Ride 方法** ``` cd ./RIDE-LongTailRecognition ``` 终端运行(3 选 1): * `python train.py -c "configs/config_imbalance_cifar100_ride.json" -r "./pretrained/checkpoint-epoch5_ride.pth" --reduce_dimension 1 --num_experts 3` * `python train.py -c "configs/config_imbalance_cifar100_ride_ea.json" -r "./pretrained/checkpoint-epoch5_ride_ea.pth" --reduce_dimension 1 --num_experts 3` (推荐) * ``python train.py -c "configs/config_imbalance_cifar100_ride_teacher.json" -r "./pretrained/checkpoint-epoch200_ride_teacher.pth" --reduce_dimension 1 --num_experts 6`` > 如果,您需要更改 epoch 等参数,可以在上述命令的 json 文件中修改 ## 4. 参考 * 本项目核心代码基于 [FBL](https://github.com/juyongjiang/fbl) * Paco 来自仓库 [Parametric-Contrastive-Learning](https://github.com/dvlab-research/Parametric-Contrastive-Learning),Ride 来自仓库 [RIDE-LongTailRecognition](https://github.com/frank-xwang/RIDE-LongTailRecognition)

近期下载者

相关文件


收藏者