# Classification-12Cat-ResNet-and-ViT **Repository Path**: ewrfedf/Classification-12Cat-ResNet-and-ViT ## Basic Information - **Project Name**: Classification-12Cat-ResNet-and-ViT - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-06-20 - **Last Updated**: 2024-06-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Classification-12Cat-ResNet-and-ViT # 一、项目介绍 本项目要求对十二种猫进行分类,属于计算机视觉领域的细粒度图像分类,又被称作子类别图像分类,目的是对属于同一基础类别的图像进行更加细致的子类划分,较之普通的图像分类任务,细粒度图像分类难度更大。仔细观察数据集不难发现,同一物种由于姿态、背景和拍摄角度不同,存在较大类内差异,肉眼可以区分的浅层视觉特征在于颜色、轮廓和纹理,卷积神经网络对于图像特征的区分具有强大的辨别能力,而细粒度图像的差异体现在细微之处,关键在于能否找到不同品种间具有区分性的区域块。 本项目旨在比较ResNet和Vision Transformer两种模型对于细粒度图像分类问题的性能表现。 # 二、数据集 本数据集在官方数据集的基础上,删除了(5 + 1)张脏图像,并Resize图像尺寸为[224, 224]。 | 名称 | 训练集和验证集 | 测试集 | 图像尺寸 | | :--------: | :--------: | :--------: | :--------: | | [官方数据集](https://aistudio.baidu.com/aistudio/datasetDetail/10954) | 2160 | 240 | 任意尺寸都有 | | [清洗数据集](https://aistudio.baidu.com/aistudio/datasetdetail/135339) | 1724 + 431 | 239 | [224, 224] | ``` #目录结构 dataset/ ├── cat_12_train │ ├── 0aSixIFj9X73z41LMDUQ6ZykwnBA5YJW.jpg │ ├── 0bBWRPd2t4NDIaO8567oyTgK3MU9rJZS.jpg │ | ... ├── cat_12_test │ ├── mXIfNyVxBOZin4KQlYMdkPTSFA85ugrH.jpg │ ├── zXyot03giwfhecLJlCm5NjQnY6VHq7Da.jpg │ | ... |——train_list.txt |——valid_list.txt ```  # 三、启动项目 ## 3.1 解压数据集 下载数据集到本地,或在云端进行解压,注意数据集解压路径。 ``` !unzip -oq data/data135339/cat12_dataset.zip -d ./ ``` ## 3.2 克隆PaddleClas ``` !git clone https://gitee.com/paddlepaddle/PaddleClas.git -b release/2.3 %cd PaddleClas/ !pip install --upgrade -r requirements.txt -i https://mirror.baidu.com/pypi/simple %cd ../ ``` ## 3.3 修改配置文件 配置文件保存在config文件夹下 - config/ResNet152.yaml - config/ViT_small_patch16_224.yaml ## 3.4 模型训练 `-c`指定配置文件路径,`-o`修改配置文件参数,加载预训练模型进行微调。 - ResNet模型训练 ``` !python PaddleClas/tools/train.py \ -c config/ResNet152.yaml \ -o Arch.pretrained=True \ ``` - ViT模型训练 ``` !python PaddleClas/tools/train.py \ -c config/ViT_small_patch16_224.yaml \ -o Arch.pretrained=True \ ``` ## 3.5 模型评估 - ResNet模型评估结果:CELoss: 0.19398, loss: 0.19398, top1: 0.94664, top5: 1.00000 ``` !python PaddleClas/tools/eval.py \ -c config/ResNet152.yaml \ -o Global.pretrained_model=output/ResNet152/best_model \ ``` - ViT模型评估结果:CELoss: 0.24738, loss: 0.24738, top1: 0.91183, top5: 1.00000 ``` !python PaddleClas/tools/eval.py \ -c config/ViT_small_patch16_224.yaml \ -o Global.pretrained_model=output/ViT_small_patch16_224/best_model \ ``` ## 3.6 模型预测 预测结果保存为CSV格式文件,替换`PaddleClas/ppcls/engine/engine.py`370行for循环代码,并在开头添加`import pandas as pd`。 - ResNet模型预测 ``` !python PaddleClas/tools/infer.py \ -c config/ResNet152.yaml \ -o Infer.infer_imgs=dataset/cat_12_test \ -o Global.pretrained_model=output/ResNet152/best_model \ ``` - ViT模型预测 ``` !python PaddleClas/tools/infer.py \ -c config/ViT_small_patch16_224.yaml \ -o Infer.infer_imgs=dataset/cat_12_test \ -o Global.pretrained_model=output/ViT_small_patch16_224/best_model \ ``` # 四、结果分析 ## 4.1 ImageNet1k数据集 所有指标的评估环境如下: - Arm CPU 的评估环境基于骁龙 855(SD855)。 - Intel CPU 的评估环境基于 Intel(R) Xeon(R) Gold 6148。 - GPU 评估环境基于 V100 机器,在 FP32+TensorRT 配置下运行 2100 次测得(去除前 100 次的 warmup 时间)。 - FLOPs 与 Params 通过 `paddle.flops()` 计算得到(PaddlePaddle 版本为 2.2) | 模型 | Top-1 ACC | Top-5 ACC | FLOPs(G) | Params(M) | 下载链接 | |:--:|:--:|:--:|:--:|:--:|:--:| | ResNet152 | 0.7826 | 0.9396 | 11.56 | 60.34 | [预训练](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/ResNet152_pretrained.pdparams) | | ViT_small_patch16_224 | 0.7769 | 0.9342 | 9.41 | 48.60 | [预训练](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ViT_small_patch16_224_pretrained.pdparams) | ## 4.2 猫十二分类数据集 高级GPU环境配置如下: - CPU:2核 - GPU:Tesla v100 - 总显存:16GB - 总内存:16GB - 总硬盘:100GB 训练结果 - ResNet152 ACC曲线