新闻中心
基于PaddlePaddle的ConvNeXt复现
本文介绍了基于PaddlePaddle实现的ConvNeXt模型。该模型由标准ConvNet模块构成,借鉴Swin-Transformer优化策略,在ImageNet上达82.1%复现精度,优于部分Transformers。文中详述数据集、环境准备、模型结构、训练评估流程,还包含推理部署、自动化测试等内容,为模型使用提供全面指导。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

A ConvNet for the 2025s
1. 简介
这是一个 PaddlePaddle 实现的 ConvNeXt。
ConvNeXts完全由标准的ConvNet模块构成,在精确度和可扩展性方面与Transformers竞争,达到87.8%的ImageNet top-1精确度,在COCO检测和ADE20K分割方面优于Swin Transformers,同时保持了标准ConvNet的简单性和效率。
在ConvNeXt中,它的优化策略借鉴了Swin-Transformer。具体的优化策略包括:
(1)将训练Epoch数从90增加到300;
(2)优化器从SGD改为AdamW;
(3)更复杂的数据扩充策略,包括Mixup,CutMix,RandAugment,Random Erasing等;
(4)增加正则策略,例如随机深度,标签平滑,EMA等。
论文: A ConvNet for the 2025s
参考repo: ConvNeXt
在此非常感谢s9xie和HannaMao等人贡献的ConvNeXt,提高了本repo复现论文的效率。
2. 数据集
数据集为ImageNet,训练集包含1281167张图像,验证集包含50000张图像。
│imagenet ├──train │ ├── n01440764 │ │ ├── n01440764_10026.JPEG │ │ ├── n01440764_10027.JPEG │ │ ├── ......│ ├── ......├──val │ ├── n01440764 │ │ ├── ILSVRC2012_val_00000293.JPEG │ │ ├── ILSVRC2012_val_00002138.JPEG │ │ ├── ......│ ├── ......
3. 复现精度
您可以从ImageNet 官网申请下载数据。
| 模型 | top1 acc (参考精度) | top1 acc (复现精度) | 权重 | 训练日志 |
|---|---|---|---|
| convnext_tiny | 0.821 | 0.821 | checkpoint-best.pd | log.txt |
权重及训练日志下载地址:百度网盘 or work/checkpoint-best.pd
4. 准备数据与环境
4.1 准备环境
硬件和框架版本等环境的要求如下:
- 硬件:4 * RTX3090
- 框架:
- PaddlePaddle >= 2.2.0
- 下载代码
%cd /home/aistudio/# !git clone https://github.com/flytocc/ConvNeXt-paddle.git!unzip ConvNeXt-paddle-main.zip
- 安装paddlepaddle
# 需要安装2.2及以上版本的Paddle,如果# 安装GPU版本的Paddlepip install paddlepaddle-gpu==2.2.0# 安装CPU版本的Paddlepip install paddlepaddle==2.2.0
更多安装方法可以参考:Paddle安装指南。
- 安装requirements
%cd /home/aistudio/ConvNeXt-paddle-main !pip install -r requirements.txt
4.2 准备数据
如果您已经ImageNet1k数据集,那么该步骤可以跳过,如果您没有,则可以从ImageNet官网申请下载。
如果只是希望快速体验模型训练功能,可以参考:飞桨训推一体认证(TIPC)开发文档
4.3 准备模型
如果您希望直接体验评估或者预测推理过程,可以直接根据第2章的内容下载提供的预训练模型,直接体验模型评估、预测、推理部署等内容。
5. 复现思路
5.1 使用paddle api实现模型结构
ConvNeXt Block
class Block(nn.Layer):
r""" ConvNeXt Block. There are two equivalent implementations:
(1) DwConv -> LayerNorm (channels_first) -> 1x1 Conv -> GELU -> 1x1 Conv; all in (N, C, H, W)
(2) DwConv -> Permute to (N, H, W, C); LayerNorm (channels_last) -> Linear -> GELU -> Linear; Permute back
We use (2) as we find it slightly faster in PyTorch
Args:
dim (int): Number of input channels.
drop_path (float): Stochastic depth rate. Default: 0.0
layer_scale_init_value (float): Init value for Layer Scale. Default: 1e-6.
"""
def __init__(self, dim, drop_path=0., layer_scale_init_value=1e-6):
super().__init__()
self.dwconv = nn.Conv2D(dim, dim, 7, padding=3,
groups=dim) # depthwise conv
self.norm = nn.LayerNorm(dim, epsilon=1e-6) # pointwise/1x1 convs, implemented with linear layers
self.pwconv1 = nn.Linear(dim, 4 * dim)
self.act = nn.GELU()
self.pwconv2 = nn.Linear(4 * dim, dim) if layer_scale_init_value > 0:
self.gamma = self.create_parameter(
shape=[dim],
default_initializer=Constant(value=layer_scale_init_value)) else:
self.gamma = None
self.drop_path = DropPath(
drop_path) if drop_path > 0. else nn.Identity() def forward(self, x):
input = x
x = self.dwconv(x)
x = x.transpose([0, 2, 3, 1]) # (N, C, H, W) -> (N, H, W, C)
x = self.norm(x)
x = self.pwconv1(x)
x = self.act(x)
x = self.pwconv2(x) if self.gamma is not None:
x = self.gamma * x
x = x.transpose([0, 3, 1, 2]) # (N, H, W, C) -> (N, C, H, W)
x = input + self.drop_path(x) return x
6. 开始使用
6.1 模型预测
测试图片
*C.AI
基于Deep学习的图片放大、修复工具
118
查看详情
In [10]
%cd /home/aistudio/ConvNeXt-paddle-main
%run predict.py \
--model convnext_tiny \
--infer_imgs ./demo/ILSVRC2012_val_00020010.JPEG \
--resume /home/aistudio/work/checkpoint-best.pd
最终输出结果为
[{'class_ids': [178, 211, 85, 236, 246], 'scores': [0.8764159083366394, 0.0005395704065449536, 0.0005327172111719847, 0.000466014607809484, 0.0004493744927458465], 'file_name': '/home/aistudio/ConvNeXt-paddle-main/demo/ILSVRC2012_val_00020010.JPEG', 'label_names': ['Weimaraner', 'vizsla, Hungarian pointer', 'quail', 'Doberman, Doberman pinscher', 'Great Dane']}]
表示预测的类别为Weimaraner(魏玛猎狗),ID是178,置信度为0.8764159083366394。
6.2 模型训练
- 单机多卡训练
export CUDA_VISIBLE_DEVICES=0,1,2,3
python -m paddle.distributed.launch --gpus="0,1,2,3" \
main.py \
--model convnext_tiny --drop_path 0.1 \
--batch_size 128 --lr 4e-3 --accum_iter 8 \
--warmup_epochs 20 \
--model_ema --model_ema_eval --dist_eval \
--data_path /path/to/imagenet/ \
--cls_label_path_train /path/to/train_list.txt \
--cls_label_path_val /path/to/val_list.txt \
--output_dir output/convnext_tiny
ps: 如果未指定cls_label_path_train/cls_label_path_val,会读取data_path下train/val里的图片作为train-set/val-set。
部分训练日志如下所示。
[11:46:22.948892] Epoch: [96] [ 840/2502] eta: 0:15:25 lr: 0.003310 loss: 3.6854 (3.5704) time: 0.5759 data: 0.0005[11:46:33.860486] Epoch: [96] [ 860/2502] eta: 0:15:14 lr: 0.003310 loss: 3.6475 (3.5700) time: 0.5454 data: 0.0005
6.3 模型评估
python eval.py \
--model convnext_tiny \
--batch_size 128 \
--data_path /path/to/imagenet/ \
--cls_label_path_val /path/to/val_list.txt \
--resume $TRAINED_MODEL
ps: 如果未指定cls_label_path_val,会读取data_path/val里的图片作为val-set。
7. 模型推理部署
7.1 基于Inference的推理
可以参考模型导出,
将该模型转为 inference 模型只需运行如下命令:
In [11]%run export_model.py \
--model convnext_tiny \
--output_dir ./output/ \
--resume /home/aistudio/work/checkpoint-best.pd
In [12]
%run infer.py \
--model_file ./output/model.pdmodel \
--params_file ./output/model.pdiparams \
--input_file ./demo/ILSVRC2012_val_00020010.JPEG
输出结果为
[{'class_ids': [178, 211, 85, 236, 246], 'scores': [0.876124918460846, 0.0005408977158367634, 0.0005338680348359048, 0.0004670217458624393, 0.0004502409719862044], 'file_name': './demo/ILSVRC2012_val_00020010.JPEG', 'label_names': ['Weimaraner', 'vizsla, Hungarian pointer', 'quail', 'Doberman, Doberman pinscher', 'Great Dane']}]
表示预测的类别为Weimaraner(魏玛猎狗),ID是178,置信度为0.876124918460846。与predict.py结果的误差在正常范围内。
7.2 基于Serving的服务化部署
Serving部署教程可参考:链接。
8. 自动化测试脚本
详细日志在test_tipc/output
TIPC: TIPC: test_tipc/README.md
首先安装auto_log,需要进行安装,安装方式如下: auto_log的详细介绍参考https://github.com/LDOUBLEV/AutoLog。
git clone https://github.com/LDOUBLEV/AutoLog cd AutoLog/ pip3 install -r requirements.txt python3 setup.py bdist_wheel pip3 install ./dist/auto_log-1.2.0-py3-none-any.whl
进行TIPC:
bash test_tipc/prepare.sh test_tipc/config/ConvNeXt/convnext_tiny.txt 'lite_train_lite_infer'bash test_tipc/test_train_inference_python.sh test_tipc/config/ConvNeXt/convnext_tiny.txt 'lite_train_lite_infer'
TIPC结果:
如果运行成功,在终端中会显示下面的内容,具体的日志也会输出到test_tipc/output/文件夹中的文件中。
Run successfully with command - python3.7 main.py --model=convnext_tiny --data_path=./dataset/ILSVRC2012/ --cls_label_path_train=./dataset/ILSVRC2012/train_list.txt --cls_label_path_val=./dataset/ILSVRC2012/val_list.txt --dist_eval --output_dir=./test_tipc/output/norm_train_gpus_0_autocast_null/convnext_tiny --epochs=2 --batch_size=8 !Run successfully with command - python3.7 eval.py --model=convnext_tiny --data_path=./dataset/ILSVRC2012/ --cls_label_path_val=./dataset/ILSVRC2012/val_list.txt --resume=./test_tipc/output/norm_train_gpus_0_autocast_null/convnext_tiny/checkpoint-latest.pd !Run successfully with command - python3.7 export_model.py --model=convnext_tiny --resume=./test_tipc/output/norm_train_gpus_0_autocast_null/convnext_tiny/checkpoint-latest.pd --output=./test_tipc/output/norm_train_gpus_0_autocast_null !Run successfully with command - python3.7 infer.py --use_gpu=True --use_tensorrt=False --precision=fp32 --model_file=./test_tipc/output/norm_train_gpus_0_autocast_null/model.pdmodel --batch_size=1 --input_file=./dataset/ILSVRC2012/val --params_file=./test_tipc/output/norm_train_gpus_0_autocast_null/model.pdiparams > ./test_tipc/output/python_infer_gpu_usetrt_False_precision_fp32_batchsize_1.log 2>&1 !......
- 更多详细内容,请参考:TIPC测试文档。
9. 复现心得
在并入PaddleClas时,碰到缺少梯度累加和EMA的问题。所以我自己实现了一个版本。
梯度累加
EMA
10. License
This project is released under the MIT license.
11. 参考链接与文献
- A ConvNet for the 2025s: https://arxiv.org/abs/2201.03545
- ConvNeXt: https://github.com/facebookresearch/ConvNeXt
以上就是基于PaddlePaddle的ConvNeXt复现的详细内容,更多请关注其它相关文章!
# 百度网
# 邢台区域seo推广公司
# 网站建设目标模板图片
# 泰州做网站优化
# 专业的微信网站建设平台
# 淄博网站建设很棒
# 现代系统优化网站建设
# 修武县营销推广公司地址
# 音乐营销推广策划
# 网站的建设书籍
# 湘潭淘宝seo优化
# 在此
# 也会
# 如果您
# 文档
# 等内容
# python
# 魏玛
# 官网
# 一言
# 中文网
# coco
# fig
# whee
# udio
# red
# 百度
# 百度网盘
# ai
# facebook
# git
相关栏目:
【
行业资讯67740 】
【
技术百科0 】
【
网络运营39195 】
相关推荐:
什么网址不能域名解析
typescript是什么类型的语言
税负是什么意思
typescript如何做项目
如何用adb命令停用系统软件
五十铃x-power是什么意思
联想的固态硬盘如何
linux如何安装yum命令
咋免费领取爱奇艺会员 如何免费领取爱奇艺会员步骤
交管12123协议头不完整怎么解决
国标控制器单片机怎么接线
typescript中怎么引用js文件
电瓶车的power是什么意思
win7怎么取消360显示的壁纸
mac如何使用vi命令行
如何卸载typescript
壁挂炉power常亮是什么意思
公司的tm市盈率为负是什么意思
华为5g手机怎么选择
新装固态硬盘如何安装
固态硬盘坏了如何换硬盘
使用typescript对团队有什么要求
单片机怎么判定高电平
如何在命令提示符播放音频
typescript如何开发
固态硬盘如何装入机箱
商誉是什么意思
如何检测固态硬盘温度
cmd如何定时执行命令
如何在固态硬盘上安装win7系统
html怎么使用typescript
春运抢票如何快速抢到票
typescript卸载不掉怎么办
如何用dos命令分区
typescript有什么作用
命令行如何打开文件
三菱变频器POWER是什么意思
51单片机贴片怎么*
如何通过命令行聊天
没基础做单片机怎么样
市盈率是什么意思高好还是低好
为什么youtube音乐打不开
如何查看bash内置的命令
怎么看手机是不是双模5g手机
固态硬盘如何判断大小
域名解析后为什么要进行域名备案
苹果16有哪些不同
固态硬盘如何消除缓存
typescript哪个最好
课程伴侣电脑怎么登录


2025-07-25
浏览次数:次
返回列表