0

0

基于PaddlePaddle的ConvNeXt复现

P粉084495128

P粉084495128

发布时间:2025-07-25 11:12:57

|

300人浏览过

|

来源于php中文网

原创

本文介绍了基于PaddlePaddle实现的ConvNeXt模型。该模型由标准ConvNet模块构成,借鉴Swin-Transformer优化策略,在ImageNet上达82.1%复现精度,优于部分Transformers。文中详述数据集、环境准备、模型结构、训练评估流程,还包含推理部署、自动化测试等内容,为模型使用提供全面指导。

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

基于paddlepaddle的convnext复现 - php中文网

A ConvNet for the 2020s

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等。

基于PaddlePaddle的ConvNeXt复现 - php中文网        

论文: A ConvNet for the 2020s

参考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
  • 下载代码
In [1]
%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
In [2]
%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

基于PaddlePaddle的ConvNeXt复现 - php中文网        

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 模型预测

测试图片

AVC.AI
AVC.AI

基于Deep学习的图片放大、修复工具

下载
基于PaddlePaddle的ConvNeXt复现 - php中文网        
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.876124124918460846, 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.876124124918460846。与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的问题。所以我自己实现了一个版本。

梯度累加

基于PaddlePaddle的ConvNeXt复现 - php中文网        

EMA

基于PaddlePaddle的ConvNeXt复现 - php中文网        

10. License

This project is released under the MIT license.

11. 参考链接与文献

  1. A ConvNet for the 2020s: https://arxiv.org/abs/2201.03545
  2. ConvNeXt: https://github.com/facebookresearch/ConvNeXt

相关专题

更多
http与https有哪些区别
http与https有哪些区别

http与https的区别:1、协议安全性;2、连接方式;3、证书管理;4、连接状态;5、端口号;6、资源消耗;7、兼容性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1763

2024.08.16

PHP 命令行脚本与自动化任务开发
PHP 命令行脚本与自动化任务开发

本专题系统讲解 PHP 在命令行环境(CLI)下的开发与应用,内容涵盖 PHP CLI 基础、参数解析、文件与目录操作、日志输出、异常处理,以及与 Linux 定时任务(Cron)的结合使用。通过实战示例,帮助开发者掌握使用 PHP 构建 自动化脚本、批处理工具与后台任务程序 的能力。

22

2025.12.13

php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

150

2025.12.31

php网站源码教程大全
php网站源码教程大全

本专题整合了php网站源码相关教程,阅读专题下面的文章了解更多详细内容。

88

2025.12.31

视频文件格式
视频文件格式

本专题整合了视频文件格式相关内容,阅读专题下面的文章了解更多详细内容。

90

2025.12.31

不受国内限制的浏览器大全
不受国内限制的浏览器大全

想找真正自由、无限制的上网体验?本合集精选2025年最开放、隐私强、访问无阻的浏览器App,涵盖Tor、Brave、Via、X浏览器、Mullvad等高自由度工具。支持自定义搜索引擎、广告拦截、隐身模式及全球网站无障碍访问,部分更具备防追踪、去谷歌化、双内核切换等高级功能。无论日常浏览、隐私保护还是突破地域限制,总有一款适合你!

61

2025.12.31

出现404解决方法大全
出现404解决方法大全

本专题整合了404错误解决方法大全,阅读专题下面的文章了解更多详细内容。

493

2025.12.31

html5怎么播放视频
html5怎么播放视频

想让网页流畅播放视频?本合集详解HTML5视频播放核心方法!涵盖<video>标签基础用法、多格式兼容(MP4/WebM/OGV)、自定义播放控件、响应式适配及常见浏览器兼容问题解决方案。无需插件,纯前端实现高清视频嵌入,助你快速打造现代化网页视频体验。

17

2025.12.31

关闭win10系统自动更新教程大全
关闭win10系统自动更新教程大全

本专题整合了关闭win10系统自动更新教程大全,阅读专题下面的文章了解更多详细内容。

12

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 0.6万人学习

Django 教程
Django 教程

共28课时 | 2.7万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.0万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号