图像处理论文中parameters和FLOPs

本文深入解析了卷积神经网络(CNN)中Parameters和FLOPs的概念及其计算方式,通过AlexNet模型实例,详细阐述了参数数量与浮点运算次数的计算规则,帮助读者理解网络复杂度与计算成本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

看论文时经常遇到FLOPS and the number of parameters,不是很清楚是个什么东西,这篇文章给了一定的说明。
原文链接:https://blog.csdn.net/sinat_34460960/article/details/84779219

在这之前我们先看一下CNN的前向传播计算公式,便于理解什么是parameters和FLOPs,这里参考Andrew老师课堂上的课件,如下:

前向传播过程其实就是将输入或上层输出左乘以一个W,然后加上一个b,最后使用合适的\sigma函数进行激活的过程,结果便是下层的输入或是最终的输出,多层网络就不断重复这个过程。

如果要让网络自己学习到输入数据中的良好特征,一般而言就需要搭建较复杂的网络,也就是包含更多的层,更大的层,更复杂的层等等。这基本是一个正相关的过程,即隐藏在数据中的特征越高层,网络就要越复杂,当然这个复杂是有一个合适的度的,不然就存在欠拟合和过拟合的问题了。

于是这就会产生一些实践上的问题,一是这个复杂的网络到底需要多少参数才能定义它?二是数据过一遍这么复杂的网络需要多大的计算量呢?这也分别就是我们今天要讨论的两个量:parameters和FLOPs。

在本文中,我们以下图的AlexNet网络模型来说明在CNN中二者的计算过程:

parameters

从Andrew的前向传播PPT中,我们可以知道CNN中的parameters分为两种:Wb,注意这里W是大写,表示一个矩阵,也因此它相比b,既含有更多的信息,同时也是parameters的主要部分。

在AlexNet模型结构图中,每个大长方体中的小长方体就是W,它是大小为[K_h, K_w, C_{in}]的三维矩阵,其中K_h表示卷积核(filter或kernel)的高度,K_w表示卷积核的宽度,C_{in}表示输入的通道数(Channels),一般情况下,K_hK_w的大小是一样的,且一般比较小,3、5、7之类。

同时由于CNN特点,我们知道,一个卷积核在输入数据上从左往右、从上往下扫一遍,便会计算出很多个前向传播的值,这些值就会按原来相对位置拼成一个feature map,当然一个卷积核提取的信息太过有限,于是我们需要N个不同的卷积核各扫数据,于是会产生N个feature map,这N个feature map在拼在一起就是这一层的输出,也是一个三维矩阵,即大长方体。设每个卷积核扫一遍之后输出的高度和宽度分别为H, W(注意区分两个W),同时N就是输出的通道数,记作C_{out},则输出矩阵大小为[H, W, C_{out}}]

例如在从AlexNet图中左边第一个大长方体(输入图片)到第二个大长方体(图中是两个并列小长方体,这是作者分布式训练的需要,这里分析时可以将二者并起来看)这个过程,即是从[H, W, C_{in}] = [224, 224, 3]的矩阵,经过[K_h, K_w, C_{in}] = [11, 11, 3]的卷积核,变为[H, W, C_{out}] = [55, 55, 48+48]的矩阵的过程。

注意到两个特点,一是W是一个三维矩阵,通道数始终和输入数据保持一致,所以实际是二维空间的扫描,二是W在扫描的过程中是不变的,即一个卷积核是扫一遍数据而不是某个点。于是对于AlexNet模型的第一层卷积,W的大小是[K_h, K_w, C_{in}] = [11, 11, 3],个数是N,也就是C_{out} = 96,于是这一个卷积层的parameters中权重的个数为(K_h * K_w * C_{in}) * C_{out} = (11 * 11 * 3) * 96 = 34,848

另外对于b,从前向传播公式可以看出,和W是一一对应的,维度也和W是对应的,即[C_{out}, ],还是对于AlexNet的第一个卷积层,parameters中偏置的个数为C_{out} = 96

于是我们可以总结出规律:对于某一个卷积层,它的parameters个数为:(K_h * K_w * C_{in}) * C_{out} + C_{out},参数定义同上文。

刚才讲的都是对于卷积层的,对于全连接层,比如AlexNet的后三层,其实要更简单,因为这实际是两组一维数据之间(如果是卷积层过度到全连接层,如上图第5层到第6层,会先将第5层三维数据flatten为一维,注意元素总个数未变)的两两连接相乘,然后加上一个偏置即可。所以我们也可以总结出规律:对于某个全连接层,如果输入的数据有N_{in}个节点,输出的数据有N_{out}个节点,它的parameters个数为:N_{in} * N_{out} + N_{out}如果上层是卷积层,N_{in}就是上层的输出三维矩阵元素个数,即三个维度相乘。

FLOPs

首先介绍一个很形似的概念——FLOPS:全称是floating point operations per second,意指每秒浮点运算次数,即用来衡量硬件的计算性能,比如nvidia官网上列举各个显卡的算力(Compute Capability)用的就是这个指标,如下图,不过图中是TeraFLOPS,前缀Tera表示量级:MM,2^12之意。

这里我们讨论的FLOPs全称是floating point operations,即表示浮点运算次数,小s后缀是复数的缩写,可以看做FLOPS在时间上的积分,区别类似速度和时间。

同样从Andrew的前向传播PPT中,我们也可以看到,这里的浮点运算主要就是W相关的乘法,以及b相关的加法,每一个W对应W中元素个数个乘法,每一个b对应一个加法,因此好像FLOPs个数和parameters是相同的。

但其实有一个地方我们忽略了,那就是每个feature map上每个点的权值是共享,这是CNN的一个重要特性,也可以说是优势(因此才获得特征不变性,以及大幅减少参数数量),所以我们在计算FLOPs是只需在parameters的基础上再乘以feature map的大小即可,即对于某个卷积层,它的FLOPs数量为:[(K_h * K_w * C_{in}) * C_{out} + C_{out}] * (H * W) = num\_params * (H * W),其中num\_params表示该层参数的数目。

还是里AlexNet网络第一卷积层为例,它的FLOPs数目为: [(11 * 11 * 3) * 96 + 96] * (55 * 55) = 105,705,600

对于全连接层,由于不存在权值共享,它的FLOPs数目即是该层参数数目:N_{in} * N_{out} + N_{out}

小结

运用上面的规律,我们便可以很轻松地计算出AlexNet网络的parameters和FLOPs数目,如下图(来自网络,出处已不可考):

这里不再重复举例。但是其中就是有一个地方和我算的有出入:第四卷积层的FLOPs数目,我计算是:1.3M * 13 * 13 = 219.7M,图中是112M

最后还要说一点关于FLOPs的计算,在知乎上也有讨论,另外Nvidia的Pavlo Molchanov等人的文章的APPENDIX中也有介绍,由于是否考虑biases,以及是否一个MAC算两个operations等因素,最终的数字上也存在一些差异。但总的来说,计算FLOPs其实也是在对比之下才显示出某种算法,或者说网络的优势,如果我们坚持一种计算标准下的对比,那么就是可以参考的,有意义的计算结果。

 

参考链接:

均已在文中用超链接显示。

<think>嗯,用户需要关于深度学习图像分割的本科毕业论文资料选题建议。首先,我得确定用户的具体需求。他提到是本科毕业论文,所以选题不宜过于复杂,但也要有足够的实践性创新性。用户可能对深度学习的基础有一定了解,但缺乏实际项目经验,所以需要一些容易上手且有足够资源的题目。 根据提供的引用,选题的难易度很重要,不能太简单也不能太难。引用[1][3]都强调了选题合适的重要性,否则会影响后续的论文答辩。图像分割方向有很多子领域,比如医学图像、自动驾驶、遥感图像等。考虑到本科生的资源限制,医学图像可能比较适合,因为公开数据集较多,比如BraTS或ISIC。 接下来,我需要生成几个示例选题。可能需要结合经典模型当前热点。比如,U-Net是医学图像分割的经典模型,可以建议改进U-Net的结构,或者结合Transformer。另外,轻量化模型也是一个方向,适合移动端应用,比如基于MobileNet的改进。 然后,实践部分要给出具体的步骤,比如数据预处理、模型选择、训练评估。用户可能需要知道如何获取数据集,如何处理数据,如何选择框架,比如PyTorch或TensorFlow。此外,模型评估指标如Dice系数、IoU也需要提到。 参考资料部分,要推荐书籍、论文公开数据集。比如《深度学习》花书,U-Net原论文,BraTS数据集等。这些资源可以帮助用户深入理解并实施项目。 可能用户没有明确说出来的需求是希望选题有足够的现有研究支持,但又能体现自己的创新点。因此,在选题建议中需要平衡经典方法创新性,比如改进现有模型的结构或应用在新领域。 最后,相关问题部分需要考虑用户可能进一步的问题,比如如何选择模型、数据增强方法、评估指标的意义,以及部署到移动端的可能性。这些问题能帮助用户更全面地完成毕设。</think>### 深度学习图像分割本科毕业论文选题建议 #### 一、选题方向分析 图像分割是计算机视觉核心任务之一,在医学影像、自动驾驶、遥感监测等领域有广泛应用。本科毕设建议选择**理论与实战结合**的选题,既包含算法改进又具备可验证性,需注意**数据获取可行性****计算资源限制**[^1][^3]。 #### 二、示例选题推荐 1. **基于改进U-Net的医学图像分割研究** - 研究点:在经典U-Net架构中引入注意力机制/残差连接 - 数据集:BraTS脑肿瘤分割数据集或ISIC皮肤病变数据集 - 创新方向:轻量化设计、多尺度特征融合 2. **面向移动端的轻量化图像分割模型设计** - 技术路线:改进MobileNetV3+DeepLabv3+架构 - 验证场景:手机拍摄的街景图像分割 - 评估指标:mIoU、FLOPs、推理速度 3. **多模态遥感图像语义分割方法研究** - 数据特性:融合可见光与红外遥感数据 - 实现方案:双分支特征提取网络设计 - 应用价值:土地利用分类、灾害监测 4. **基于Transformer的实时视频目标分割** - 技术组合:Swin Transformer+时序特征建模 - 基准对比:与传统CNN模型(如Mask R-CNN)的精度/速度对比 #### 三、实践开发建议 ```python # 典型图像分割模型训练框架示例(PyTorch) import torch from torchvision.models.segmentation import deeplabv3_resnet50 model = deeplabv3_resnet50(pretrained=True) optimizer = torch.optim.Adam(model.parameters(), lr=1e-4) loss_fn = torch.nn.CrossEntropyLoss() def train_epoch(dataloader): model.train() for images, masks in dataloader: outputs = model(images)['out'] loss = loss_fn(outputs, masks) optimizer.zero_grad() loss.backward() optimizer.step() ``` #### 四、关键参考资料 1. **经典文献** - 《U-Net: Convolutional Networks for Biomedical Image Segmentation》[^医学分割奠基论文] - 《The Cityscapes Dataset for Semantic Urban Scene Understanding》[^自动驾驶数据集标准] 2. **实践工具** - 框架选择:PyTorch Lightning/MMSegmentation - 标注工具:Labelme/CVAT - 可视化:TensorBoard/WandB 3. **公开数据集** | 数据集名称 | 领域 | 样本量 | 特点 | |---|---|---|---| | PASCAL VOC | 通用 | 10k+ | 20类标准数据集 | | COCO-Stuff | 场景 | 164k | 包含91类物体 | | ADE20K | 室内场景 | 25k | 密集标注数据 |
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值