基于PaddlePaddle复现的CycleMLP


本文提出了一个简单的 MLP-like 的架构 CycleMLP,它是视觉识别和密集预测的通用主干,不同于现代 MLP 架构,例如 MLP-Mixer、ResMLP 和 gMLP,其架构与图像大小相关,因此是在目标检测和分割中不可行。

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

基于paddlepaddle复现的cyclemlp -

1. 简介

这是一个PaddlePaddle实现的CycleMLP。

本文提出了一个简单的 MLP-like 的架构 CycleMLP,它是视觉识别和密集预测的通用主干,不同于现代 MLP 架构,例如 MLP-Mixer、ResMLP 和 gMLP,其架构与图像大小相关,因此是在目标检测和分割中不可行。

基于PaddlePaddle复现的CycleMLP -

论文: CycleMLP: A MLP-like Architecture for Dense Prediction

参考repo: CycleMLP

在此非常感谢ShoufaChen贡献的CycleMLP,提高了本repo复现论文的效率。

2. 数据集和复现精度

数据集为ImageNet,训练集包含1281167张图像,验证集包含50000张图像。

│imagenet/
├──train/
│  ├── n01440764
│  │   ├── n01440764_10026.JPEG
│  │   ├── n01440764_10027.JPEG
│  │   ├── ......│  ├── ......├──val/
│  ├── n01440764
│  │   ├── ILSVRC2012_val_00000293.JPEG
│  │   ├── ILSVRC2012_val_00002138.JPEG
│  │   ├── ......│  ├── ......

您可以从ImageNet 官网申请下载数据。

模型 top1 acc (参考精度) top1 acc (复现精度) 权重 | 训练日志
CycleMLP-B1 0.789 0.790 checkpoint-best.pd | train.log

权重及训练日志下载地址:百度网盘

3. 准备数据与环境

3.1 准备环境

硬件和框架版本等环境的要求如下:

  • 硬件:4 * RTX3090
  • 框架:
    • PaddlePaddle >= 2.2.0
  • 安装paddlepaddle
# 需要安装2.2及以上版本的Paddle,如果# 安装GPU版本的Paddlepip install paddlepaddle-gpu==2.2.0# 安装CPU版本的Paddlepip install paddlepaddle==2.2.0

更多安装方法可以参考:Paddle安装指南。

  • 下载代码
In [ ]
%cd /home/aistudio
!git clone https://github.com/flytocc/CycleMLP-paddle.git
  • 安装requirements
In [ ]
%cd /home/aistudio/CycleMLP-paddle
!pip install -r requirements.txt

3.2 准备数据

如果您已经ImageNet1k数据集,那么该步骤可以跳过,如果您没有,则可以从ImageNet官网申请下载。

4. 复现思路

4.1 使用paddle api实现模型结构

CycleFC模块

与现代方法相比,CycleMLP 有两个优势。

(1) 可以应对各种图像尺寸。

(2) 利用局部窗口实现对图像大小的线性计算复杂度。

AVC.AI *C.AI

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

AVC.AI 118 查看详情 AVC.AI

基于PaddlePaddle复现的CycleMLP -

class CycleFC(nn.Layer):
    def __init__(
        self,
        in_channels: int,
        out_channels: int,
        kernel_size,  # re-defined kernel_size, represent the spatial area of staircase FC
        stride: int = 1,
        padding: int = 0,
        dilation: int = 1,
        groups: int = 1,
        bias: bool = True,    ):
        super(CycleFC, self).__init__()        if in_channels % groups != 0:            raise ValueError('in_channels must be divisible by groups')        if out_channels % groups != 0:            raise ValueError('out_channels must be divisible by groups')        if stride != 1:            raise ValueError('stride must be 1')        if padding != 0:            raise ValueError('padding must be 0')

        self.in_channels = in_channels
        self.out_channels = out_channels
        self.kernel_size = kernel_size
        self.stride = to_2tuple(stride)
        self.padding = to_2tuple(padding)
        self.dilation = to_2tuple(dilation)
        self.groups = groups
        self.deformable_groups = self.in_channels

        self.weight = self.create_parameter(
            shape=[out_channels, in_channels // groups, 1, 1])  # kernel size == 1

        if bias:
            self.bias = self.create_parameter(shape=[out_channels])        else:
            self.bias = None
        self.register_buffer('offset', self.gen_offset())    def gen_offset(self):
        """
        offset (Tensor[batch_size, 2 * offset_groups * kernel_height * kernel_width,
            out_height, out_width]): offsets to be applied for each position in the
            convolution kernel.
        """
        offset = paddle.empty([1, self.in_channels * 2, 1, 1])
        start_idx = (self.kernel_size[0] * self.kernel_size[1]) // 2
        assert self.kernel_size[0] == 1 or self.kernel_size[1] == 1, self.kernel_size        for i in range(self.in_channels):            if self.kernel_size[0] == 1:
                offset[0, 2 * i + 0, 0, 0] = 0
                offset[0, 2 * i + 1, 0, 0] = (i + start_idx) % self.kernel_size[1] - (self.kernel_size[1] // 2)            else:
                offset[0, 2 * i + 0, 0, 0] = (i + start_idx) % self.kernel_size[0] - (self.kernel_size[0] // 2)
                offset[0, 2 * i + 1, 0, 0] = 0
        return offset    def forward(self, input):
        """
        Args:
            input (Tensor[batch_size, in_channels, in_height, in_width]): input tensor
        """
        B, C, H, W = input.shape        return deform_conv2d(input, self.offset.expand([B, -1, H, W]), self.weight, bias=self.bias, stride=self.stride,
                             padding=self.padding, dilation=self.dilation, deformable_groups=self.deformable_groups)

构建CycleMLP模块

class CycleMLP(nn.Layer):
    def __init__(self,
                 dim,
                 qkv_bias=False,
                 qk_scale=None,
                 attn_drop=0.,
                 proj_drop=0.):
        super().__init__()
        self.mlp_c = nn.Linear(dim, dim, bias_attr=qkv_bias)

        self.sfc_h = CycleFC(dim, dim, (1, 3), 1, 0)
        self.sfc_w = CycleFC(dim, dim, (3, 1), 1, 0)

        self.reweight = Mlp(dim, dim // 4, dim * 3)

        self.proj = nn.Linear(dim, dim)
        self.proj_drop = nn.Dropout(proj_drop)    def forward(self, x):
        B, H, W, C = x.shape
        h = self.sfc_h(x.transpose([0, 3, 1, 2])).transpose([0, 2, 3, 1])
        w = self.sfc_w(x.transpose([0, 3, 1, 2])).transpose([0, 2, 3, 1])
        c = self.mlp_c(x)

        a = (h + w + c).transpose([0, 3, 1, 2]).flatten(2).mean(2)
        a = self.reweight(a).reshape([B, C, 3]).transpose([2, 0, 1])
        a = F.softmax(a, axis=0).unsqueeze(2).unsqueeze(2)

        x = h * a[0] + w * a[1] + c * a[2]

        x = self.proj(x)
        x = self.proj_drop(x)        return x

5.2 确定训练超参

参考论文及official code,主要超参如下:

total batxh size learning rate epochs
1024 1e-3 300

5. 开始使用

5.1 模型预测

基于PaddlePaddle复现的CycleMLP -

In [ ]
%cd /home/aistudio/CycleMLP-paddle
%run infer.py \
    --model=CycleMLP_B1 \
    --infer_imgs=/home/aistudio/CycleMLP-paddle/demo/ILSVRC2012_val_00020010.JPEG \
    --resume=/home/aistudio/CycleMLP_B1.pdparams

最终输出结果为

[{'class_ids': [178, 211, 209, 210, 246], 'scores': [0.9213957190513611, 0.006610415875911713, 0.0018257270567119122, 0.0013606979046016932, 0.001132593140937388], 'file_name': '/home/aistudio/CycleMLP-paddle/demo/ILSVRC2012_val_00020010.JPEG', 'label_names': ['Weimaraner', 'vizsla, Hungarian pointer', 'Chesapeake Bay retriever', 'German short-haired pointer', 'Great Dane']}]

表示预测的类别为Weimaraner(魏玛猎狗),ID是178,置信度为0.9213957190513611。

5.2 模型训练

  • 单机多卡训练
export CUDA_VISIBLE_DEVICES=0,1,2,3
python -m paddle.distributed.launch --gpus="0,1,2,3" \
    main.py \
    --model=CycleMLP_B1 \
    --batch_size=256 \
    --data_path=/path/to/imagenet/ \
    --output_dir=./output/ \
    --dist_eval

部分训练日志如下所示。

基于PaddlePaddle复现的CycleMLP -

[16:56:29.233819] Epoch: [261]  [ 920/1251]  eta: 0:05:50  lr: 0.000052  loss: 3.4592 (3.3812)  time: 1.0303  data: 0.0012[16:56:49.578909] Epoch: [261]  [ 940/1251]  eta: 0:05:29  lr: 0.000052  loss: 3.7399 (3.3853)  time: 1.0171  data: 0.0015

5.3 模型评估

export CUDA_VISIBLE_DEVICES=0,1,2,3
python -m paddle.distributed.launch --gpus="0,1,2,3" \
    eval.py \
    --model=CycleMLP_B1 \
    --batch_size=256 \
    --data_path=/path/to/imagenet/ \
    --dist_eval \
    --resume=$TRAINED_MODEL

5.4 模型导出

python export_model.py \
    --model=CycleMLP_B1 \
    --output_dir=./output/ \
    --resume=$TRAINED_MODEL

6. 代码结构

├── cycle_mlp.py├── demo
├── engine.py├── eval.py├── export_model.py├── infer.py├── main.py├── README.md├── requirements.txt├── test_tipc
└── util

7. 自动化测试脚本

详细日志在test_tipc/output

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/CycleMLP/CycleMLP_B1.txt 'lite_train_lite_infer'bash test_tipc/test_train_inference_python.sh test_tipc/config/CycleMLP/CycleMLP_B1.txt 'lite_train_lite_infer'

TIPC结果:

如果运行成功,在终端中会显示下面的内容,具体的日志也会输出到test_tipc/output/文件夹中的文件中。

Run successfully with command - python3.7 eval.py --model=CycleMLP_B1 --data_path=./dataset/ILSVRC2012/ --cls_label_path=./dataset/ILSVRC2012/val_list.txt --resume=./test_tipc/output/norm_train_gpus_0_autocast_null/CycleMLP_B1/checkpoint-latest.pd !
Run successfully with command - python3.7 export_model.py --model=CycleMLP_B1 --resume=./test_tipc/output/norm_train_gpus_0_autocast_null/CycleMLP_B1/checkpoint-latest.pd --output=./test_tipc/output/norm_train_gpus_0_autocast_null !
Run successfully with command - python3.7 inference.py --use_gpu=True --use_tensorrt=False --precision=fp32 --model_file=./test_tipc/output/norm_train_gpus_0_autocast_null/model.pdmodel --batch_size=2 --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_2.log 2>&1 !
...
  • 更多详细内容,请参考:TIPC测试文档。

以上就是基于PaddlePaddle复现的CycleMLP的详细内容,更多请关注其它相关文章!


# git  # ai  # 百度网盘  # 百度  # red  # udio  # latte  # python  # 也会  # 逆天seo  # 信用网站建设费用  # 资阳网站引流推广公司  # 网站广告推广方式  # 南宁抖音关键词seo优化排名费用  # 虎门玩具网站建设哪个好  # 府谷网站建设有哪些  # 苏州旅游网站建设报价  # 营销离不开推广吗  # seo锻炼方法  # 魏玛  # 中不  # 百度网  # 它是  # 提出了  # 是在  # 官网  # 一言  # 中文网  # fig  # whee 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 原小米 9 号员工李明打造全球首款 AI 安卓桌面机器人  人工智能正在弥合认知和表达之间的鸿沟  焊接协作机器人或将成为26届埃森展最大看点  猿辅导发布最新SaaS业务进展公告:Motiff UI设计工具推出三项新的AI功能  宇宙探索下一阶段,机器代替人类,AI会在太空探索中取代人类吗?  OpenAI高管:AI能创造新的就业机会 但也会淘汰一些  AI大举入侵内容行业,哪些上市*及动漫公司进行了布局?  IBM和NASA合作发布可追踪碳排放的开源AI基础模型  第四范式「式说」大模型入选《2025年通用人工智能创新应用案例集》  V社谈AI制作游戏被ban:为确保开发者有素材所有权  读创正式上线“读创AI聊”功能  人工智能驱动智能建筑会是未来趋势吗?  华为推出全新操作系统HarmonyOS 4,AI和新引擎完美融合  人工智能创作的“婴儿版超级英雄”,你觉得哪个最可爱  微软为 AI 初学者推出免费网课:为期 12 周,共 24 节课  如何用AI重塑你的工作流(一)  人脸识别+全景双摄+AI算法 萤石推动智能锁行业革新  软银、淡马锡、沙特阿美突击入股,“协作机器人第一股”节卡股份:强敌环伺,持续失血是常态  再也不怕「视频会议」尬住了!谷歌CHI顶会发布新神器Visual Captions:让图片做你的字幕助手  学生作文评分的新趋势:教师与AI的合作模式  华为云盘古大模型3.0发布 AI云服务同时上线:200亿亿次性能  羚客系统即将升级,推出全新的AI数字化工具  AYANEO AIR 1S 掌机发布:R7 7840U,预订价 4699 元起  开创全新虚拟现实体验的Pimax Crystal VR头显  以分布式网络串联闲置GPU,这家创企称可将AI模型训练成本降低90%  7/8上海 | 2025世界人工智能大会分论坛:科技与人文-共筑无障碍智能社会  石头扫拖机器人 G20 618 福利来袭:4999 元,超值配件领到手软  Bing Chat 和 Bing Search 正式引入深色模式  厂商陆续公布AI进展 完美世界游戏展示复合应用AI in GamePlay  美版贴吧8000小组自爆停摆!拒绝数据被谷歌OpenAI白嫖,CEO被网友骂翻:背刺第三方应用  AIGC浪潮下,联想集团再加码计算与人工智能  AI连线 | 专访风平智能CEO林洪祥:让AI数字人拥有漂亮的外表和有趣的灵魂,安全问题是重要考量  能抓取玻璃碎片、水下透明物,清华提出通用型透明物体抓取框架,成功率极高  斑马推出全新升级版思维机:以人工智能为核心的交互式学习体验  【澎湃原动力】人工智能产业协同创新中心:全产业链资源在这里汇聚  人工智能时代的科幻译者怎么办?“做好翻译工作的高端10%”|文化观察  人形机器人打开精密齿轮市场全新空间!受益上市公司梳理  为了避免人工智能可能带来的灾难,我们要向核安全学习  鸿蒙4即将支持大规模AI模型  浪潮KaiwuDB:“快人一步” - 打造更懂物联网的数据库  网易易盾 AI Lab 论文入选 ICASSP 2025!黑科技让语音识别越“听”越准  上海发布“元宇宙关键技术攻关行动方案”,加快 AIGC 等突破  一次购买全年省心,入手科沃斯这几台机器人,省下时间就是金钱  全国体育人工智能大会举办,专家聚焦体育人工智能领域人才培养  Bing 聊天机器人现支持在桌面端用语音提问  马斯克“揭秘”人工智能真面目  人工智能自己玩自己  “智能体动作生成技术”现身WAIC:游戏AI技术为机器人科创注入新动力  6月14日《星空下的对话》 张朝阳陆川将畅聊人生、电影、心理学与AI  美图设计室2.0新增哪些功能 

 2025-08-01

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.