网络模型参数量和计算量分析(以 Unet和DCSAUnet为例)

目录

[1 概念解释](#1 概念解释)

[2 Unet VS DCSAUnet 的【参数量 计算量】](#2 Unet VS DCSAUnet 的【参数量 计算量】)

[3 深入分析DCSAUnet](#3 深入分析DCSAUnet)


引:部署模型时兼顾速度和精度,这需要根据使用场景中数据对象的特点设计(选择)模型。体现模型特点的两个主要参数就是Params(参数量) 和 **FLOPs(计算量)。**本博客借以 Unet和DCSAUnet为例,回答两个问题:

为什么unet.pth ≈100MB,DCSAUnet.pth≈10MB?

为什么修改模型输入的input_size后DCSAUnet.pth大小没有改变,但是速度却成倍提高?

1 概念解释

指标 代表什么 影响什么
参数量 (Params) 模型里有多少可学习权重 模型大小、显存占用
计算量 (FLOPs) 前向传播要做多少次运算 运行速度
python 复制代码
nn.Conv2d(in_channels,out_channels,kernel_size=3,padding=1,bias=False)# 3*3 卷积核

参数量:

对于一个卷积核结构【in_channels, out_channels, kernel_size】的

以【3, 64, 3】的卷积核举例

参数量= 3 * 64 * 3 * 3。参数量的多少和输入图像尺寸无关,以此推到整个模型亦如此。

计算量:

由上面计算公式可知,计算量和输入尺寸强相关。

一句话总结:参数量决定"模型有多大",计算量决定"模型跑多慢"。

2 Unet VS DCSAUnet 的【参数量 计算量】

我们统一输入条件为:【input_size=512×512, in_channel=3, kernei_size=3*3 】

UNet Encoder Params & FLOPs:

Stage Output size Conv结构 Params FLOPs
inc 512×512 3→64→64 38K 10.1G
down1 256×256 64→128→128 221K 14.5G
down2 128×128 128→256→256 885K 14.5G
down3 64×64 256→512→512 3.54M 14.5G
down4 32×32 512→1024→1024 14.15M 14.5G
total ≈ 18.8M 67.9 GFLOPs

DCSAUnet Encoder Params & FLOPs

Stage Output size Conv结构 Params FLOPs
enc1 512×512 3→32→32 9.2K 2.5G
enc2 256×256 32→64→64 55K 3.6G
enc3 128×128 64→128→128 221K 3.6G
enc4 64×64 128→256→256 885K 3.6G
enc5 32×32 256→512→512 3.54M 3.6G
total ≈ 4.7M 16.9 GFLOPs

以上两个表格对比了两模型不同block的参数量和计算量,核心的差异在于Unet存在大量的"对大channels数作卷积操作",比如下面这一个【1024×1024×3×3】卷积核就直接导致Unet多出10M+的参数量和 10G+ 的计算量。

模型 是否存在 1024×1024×3×3
UNet ✅ 有
DCSAUnet ❌ 没有

3 深入分析DCSAUnet

上面章节我们对比了两个模型的参数量和计算量,清楚的看到DCSAUnet模型在卷积核设计上的优势思路:不对长channels向量作卷积计算。这个操作能回答:为什么unet.pth ≈100MB,DCSAUnet.pth≈10MB? 其实也已经回答了:为什么修改模型输入的input_size后DCSAUnet.pth大小没有改变,但是速度却成倍提高?

下面我们详细分析一下DCSAUnet模型的设计,尝试额外回答:为什么DCSAUnet对小尺寸(64*64)的输入有效。

模型论文链接:https://arxiv.org/pdf/2202.00972v2

模型结构及其关键组件如下:
Fig 1. DCSAUnet模型

我们重点分析Encoder部分,该部分对输入图像的第一次卷积in_conv使用PFC模块:用多个卷积分支提取不同感受野的特征,然后融合。

python 复制代码
        输入 C_in
            │
     ┌──────┼────────┐
     │      │        │
    1×1    3×3      5×5
     │      │        │
     └──────concat────┘
            │
          1×1
            │
         输出 64

在主卷积block中,使用**轻量的多分支注意力卷积块 --**CAS 模块

python 复制代码
input_tensor 

     |        特征分组(Split)(参考sufflenet)

     |       卷积操作:先用 1×1 卷积做通道融合,再用 3×3 卷积提取局部特征

     ⬇      通道注意力(Channel Attention)

残差连接(Residual Connection)

Encoder部分最后的tensor_size = 1/16 * input_size,后续Decoder部分有unsample,所以对64*64input_size分割有效,但是基本无法继续缩小input_size。

end...

相关推荐
fīɡЙtīиɡ ℡1 小时前
AI 应用系统设计
java·开发语言·人工智能
小淮AI1 小时前
国际教育课程的本土化探索:以枫叶教育三十年为观察样本
大数据·人工智能
又折桃枝换酒钱1 小时前
VisCoder2:构建多语言可视化编码智能体(翻译与解读)
人工智能·信息可视化
AI绘画哇哒哒2 小时前
【建议收藏!】35岁后端血泪忠告,这3类人别硬转Agent(过来人亲述)
java·人工智能·后端·ai·程序员·大模型·agent
Chengbei112 小时前
DSH渗透测试插件dsh-pentest全新升级!适配DeepSeek Harness,可视化探索链路,一键搭建轻量化AI渗透测试环境。
人工智能·web安全·网络安全·微信·小程序·系统安全·安全架构
QN1幻化引擎2 小时前
DalinX Phi 性能突破:跨层秩保持对齐与意识涌现度量的实证研究
人工智能·ai·架构·agi·asi
NeilCarmack2 小时前
Deepseek-harness增加桌面版端序列:第 1 讲 · 命令解析:`pnpm dsh desktop` 的第一步
人工智能·agent·ai agent
龙兵AI增长破局圈.赵老师讲成交2 小时前
只有把过程管好,结果才会出来。
大数据·人工智能·ai·创业创新
最强小杰2 小时前
gpt-5.6-sol 频繁报 503 怎么办?区分容量熔断和限速 429 的排查方法 + 可复用 retry wrapper
java·人工智能·gpt·ai
天天代码码天天2 小时前
我做了一个只有一个 EXE 的本地 Markdown 编辑器:lw.MD(简墨)
人工智能