计算机视觉基石:6大CNN模型的创新与突破

news2026/4/13 17:11:38
计算机视觉基石6大CNN模型的创新与突破本文详细解析了计算机视觉基石6大CNN模型的创新与突破内容如下​目录1. LeNet90/98诞生于1990年在手写体字符识别领域创造性的引入了卷积神经网络的基本操作意义重大可以说是现代卷积神经网络的发展起点。1.1思路引入卷积层池化层等结构1.2 网络结构输入图像分辨率28x28结构1卷积层15x5 ---输出4个24×24大小的特征图2池化层1平均池化层 2x23卷积层25x5 ---输出12个8x8大小的特征图4池化层22x25全连接层 ----输出1.3 LeNet-5诞生于1998年在LeNet初期版本上迭代进化而来。卷积核大小为5x5。输入是32X32像素的图像利用CNN提取特征并进行分类输出0~9个类别。层数7层不含输入包括3层卷积层2层池化层2层全连接层输入图片大小32x32代码# # 创建Reshape层class Reshape(torch.nn.Module):def forward(self, x):return x.view(-1, 1, 28, 28) # 批量数不变通道数变为1尺寸为28*28方法2nn.SequentialLeNet nn.Sequential(Reshape(),nn.Conv2d(1, 6, kernel_size5, padding2), nn.Sigmoid(),nn.AvgPool2d(kernel_size2, stride2),nn.Conv2d(6, 16, kernel_size5), nn.Sigmoid(),nn.AvgPool2d(kernel_size2, stride2),nn.Flatten(),nn.Linear(16 * 5 * 5, 120), nn.Sigmoid(),nn.Linear(120, 84), nn.Sigmoid(),nn.Linear(84, 10))用于测试方法2每一层输出格式的代码X torch.rand(size(1, 1, 28, 28), dtypetorch.float32)for layer in LeNet:X layer(X)print(layer.class.name, output shape: \t, X.shape)2. AlexNet (63.3% - 2012) 论文ImageNet Classification with Deep Convolutional Neural Networks效果ImageNet top-1 accuracy 63.3%AlexNet是第一个深度学习架构它是由深度学习先锋之一——Geoffrey Hinton和他的同事们共同研究并引入的。AlexNet是一个看似简单但功能非常强大的网络架构它为现在深度学习的突破性研究铺平了道路。下图是AlexNet架构从分解图中我们可以看出AlexNet其实就是一个简单的架构其中的卷积层和聚积层相互叠加最顶部的是全连接层。早在二十世纪八十年代AlexNet模型就已经被概念化描述了。AlexNet区别于其他模型的关键在于它的任务规模以及它用于训练的GPU规模。在八十年代用于训练神经网络的是CPU。而AlexNet率先使用GPU将训练的速度提高了十倍左右。虽然AlexNet现在有些过时了但它仍然是运用神经网络完成各种任务的起点。不管是完成计算机视觉任务还是语音识别任务都仍然需要AlexNet。代码class AlexNet(nn.Module):def __init__(self, num_classes: int 1000) - None: super(AlexNet, self).__init__() self.features nn.Sequential( nn.Conv2d(3, 64, kernel_size11, stride4, padding2), nn.ReLU(inplaceTrue), nn.MaxPool2d(kernel_size3, stride2), nn.Conv2d(64, 192, kernel_size5, padding2), nn.ReLU(inplaceTrue), nn.MaxPool2d(kernel_size3, stride2), nn.Conv2d(192, 384, kernel_size3, padding1), nn.ReLU(inplaceTrue), nn.Conv2d(384, 256, kernel_size3, padding1), nn.ReLU(inplaceTrue), nn.Conv2d(256, 256, kernel_size3, padding1), nn.ReLU(inplaceTrue), nn.MaxPool2d(kernel_size3, stride2), ) self.avgpool nn.AdaptiveAvgPool2d((6, 6)) self.classifier nn.Sequential( nn.Dropout(), nn.Linear(256 * 6 * 6, 4096), nn.ReLU(inplaceTrue), nn.Dropout(), nn.Linear(4096, 4096), nn.ReLU(inplaceTrue), nn.Linear(4096, num_classes), ) def forward(self, x: torch.Tensor) - torch.Tensor: x self.features(x) x self.avgpool(x) x torch.flatten(x, 1) x self.classifier(x) return x3. VGG Net (74.5% - 2014)“VGG Net”是由牛津大学“视觉图像研究组”的研究人员引入的。VGG网络的最大特点是它的金字塔状靠近图像的底部比较宽阔而顶部的层相对窄且深。如图所示VGG Net包含了连续的卷积层卷积层后紧接着聚积层。聚积层负责让各个层变得更窄。在这篇由组内研究人员共同完成的论文中他们提出了各种类型的网络这些网络架构的主要差异是深度不同。VGG网络的优势在于1.这是对一个特定任务进行基准测试非常有效的网络架构。2.同时网上有大量免费的VGG预训练网络因此VGG通常会被用于各种各样的应用程序。而另一方面VGG主要的缺陷在于如果从头开始训练的话其训练速度会非常慢。即使是用一个相当不错的GPU它还是需要超过一周的时间才能正常运行。代码import torch.nn as nncfg {vgg11: [64, M, 128, M, 256, 256, M, 512, 512, M, 512, 512, M],vgg13: [64, 64, M, 128, 128, M, 256, 256, M, 512, 512, M, 512, 512, M],vgg16: [64, 64, M, 128, 128, M, 256, 256, 256, M, 512, 512, 512, M, 512, 512, 512, M],vgg19: [64, 64, M, 128, 128, M, 256, 256, 256, 256, M, 512, 512, 512, 512, M, 512, 512, 512, 512, M],}class VGG(nn.Module):definit(self, vgg_name, num_outputs10):super().init()self.features self._make_layers(cfg[vgg_name])self.classifier nn.Linear(512, num_outputs)def forward(self, x): out self.features(x) out out.view(out.size(0), -1) out self.classifier(out) return out def _make_layers(self, cfg): layers [] in_channels 3 for x in cfg: if x M: layers [nn.MaxPool2d(kernel_size2, stride2)] else: layers [ nn.Conv2d(in_channels, x, kernel_size3, padding1), nn.BatchNorm2d(x), nn.ReLU(inplaceTrue), ] in_channels x layers [nn.AvgPool2d(kernel_size1, stride1)] return nn.Sequential(*layers)广告深度学习(异步图书出品)京东¥84.00去购买​4. GoogleNet(80.0% - 2016)论文Inception V1Inception V23Inception V4Blog : A Simple Guide to the Versions of the Inception Network效果ImageNet top-1 accuracy 80.00%GoogleNet又称“InceptionNet”是由谷歌的研究人员们设计的一个网络架构。GoogleNet在2014年的 ImageNet大赛中获得了冠军证明了它是一个功能强大的模型。在这个网络架构中研究人员们不仅加深了网络深度GoogleNet包含22个层而VGG网络只有19个层还研究出了一个叫做“Inception模块”的新方法。如上图所示这个架构与我们之前看到的有序性架构相比发生了巨大的改变。在单个层中出现了各种各样的“特征提取器”。这间接地提高了网络的性能因为当处理任务时网络在自我训练过程中的选择非常广泛。它既可以选择卷积输入也可以选择直接将输入聚积起来。最终的架构包含了许多一个个相互叠加的Inception模块。大部分最上面的层都有它们自己的输出层所以GoogleNet的训练与其他模型有细微的差别。但这些差别能够帮助模型更快地完成卷积因为这些层不仅有共同的训练还有各自独立的训练。GoogleNet的优势有1.GoogleNet的训练速度比VGGNet要快。2.与预训练的VGG网络相比预训练的GoogleNet所占规模更小。一个VGG模型所占空间可以超过500MB而GoogleNet只占96MB。目前为止GoogleNet还没有直接的缺陷但是文章中提出了一些有助于GoogleNet进一步完善的改变方案。其中有一个改变方案被称作“XceptionNet”在这个网络中“初始模块”的散度限制被提高了。理论上来说其散度现在可以是无限的了。在GoogLeNet中基本的卷积块被称为Inception块Inception block。这很可能得名于电影《盗梦空间》Inception因为电影中的一句话“我们需要走得更深”“We need to go deeper”。Inception块由四条并行路径组成。 前三条路径使用窗口大小为 1\times 11\times 1、3\times 33\times 3 和 5\times 55\times 5 的卷积层从不同空间大小中提取信息。 中间的两条路径在输入上执行 1\times 11\times 1 卷积以减少通道数从而降低模型的复杂性。 第四条路径使用 3\times 33\times 3 最大汇聚层然后使用 1\times 11\times 1 卷积层来改变通道数。 这四条路径都使用合适的填充来使输入与输出的高和宽一致最后我们将每条线路的输出在通道维度上连结并构成Inception块的输出。在Inception块中通常调整的超参数是每层输出通道的数量。import torchfrom torch import nnfrom torch.nn import functional as Ffrom d2l import torch as d2lclass Inception(nn.Module):#c1--c4是每条路径的输出通道数definit(self, in_channels, c1, c2, c3, c4,kwargs):super(Inception, self).init(kwargs)# 线路1单1 x 1卷积层self.p1_1 nn.Conv2d(in_channels, c1, kernel_size1)# 线路21 x 1卷积层后接3 x 3卷积层self.p2_1 nn.Conv2d(in_channels, c2[0], kernel_size1)self.p2_2 nn.Conv2d(c2[0], c2[1], kernel_size3, padding1)# 线路31 x 1卷积层后接5 x 5卷积层self.p3_1 nn.Conv2d(in_channels, c3[0], kernel_size1)self.p3_2 nn.Conv2d(c3[0], c3[1], kernel_size5, padding2)# 线路43 x 3最大汇聚层后接1 x 1卷积层self.p4_1 nn.MaxPool2d(kernel_size3, stride1, padding1)self.p4_2 nn.Conv2d(in_channels, c4, kernel_size1)def forward(self, x): p1 F.relu(self.p1_1(x)) p2 F.relu(self.p2_2(F.relu(self.p2_1(x)))) p3 F.relu(self.p3_2(F.relu(self.p3_1(x)))) p4 F.relu(self.p4_2(self.p4_1(x))) # 在通道维度上连结输出 return torch.cat((p1, p2, p3, p4), dim1)5. ResNet (78.6% - 2015)4.1 ResNet论文Deep Residual Learning for Image Recognition效果ImageNet top-1 accuracy 78.2% or 82.4%(ResNet strikes back: An improved training procedure in timm)ResNet是一个真正地定义了深度学习架构深度的网络架构。“残差网络”也就是我们所说的ResNet包含了许多连续的“残差模块”这些“残差模块”构成了ResNet架构的基础。“残差模块”如下图所示简单来说一个“残差模块”有两个选择——它可以选择在输入上执行一组函数也可以选择跳过这些步骤。与GoogleNet类似这些“残差模块”相互叠加从而形成一个完整的网络的。由ResNet引入的一些新技术有1.使用标准的SGD而不是花哨的“自适应学习”技术。这是通过一个能够保持正常训练的初始化函数来完成的。2.改变输入预处理的方式先将输入分批然后再输入至网络。ResNet的主要优势在于成千上万的残差层都能用于建立一个网络而且都能被用于训练。这与平常“时序网络创新残差网络代码class ResNetBasicBlock(nn.Module): expansion 1 def __init__(self, in_planes, out_planes, stride1): super().__init__() self.conv1 nn.Conv2d(in_planes, out_planes, kernel_size3, stridestride, padding1, biasFalse) self.bn1 nn.BatchNorm2d(out_planes) self.conv2 nn.Conv2d(out_planes, out_planes, kernel_size3, stride1, padding1, biasFalse) self.bn2 nn.BatchNorm2d(out_planes) self.shortcut nn.Sequential() # print(fin_planes : {in_planes} | self.expansion * out_planes : {self.expansion * out_planes}) if stride ! 1 or in_planes ! self.expansion * out_planes: self.shortcut nn.Sequential( nn.Conv2d(in_planes, self.expansion * out_planes, kernel_size1, stridestride, biasFalse), nn.BatchNorm2d(self.expansion * out_planes), ) def forward(self, x): out F.relu(self.bn1(self.conv1(x))) # print(f conv 1: {out.shape}) out self.bn2(self.conv2(out)) # print(f conv 2: {out.shape}) out self.shortcut(x) #! key # print(fshortcut: {out.shape}) out F.relu(out) # 然后一起relu # print( * 10) return out4.2 ResNeXt(80.9% - 2016)据称ResNeXt是目前为止最先进的物体识别技术。ResNeXt建立于inception和ResNet的基础之上是一个全新的、改良的网络架构。下图总结了ResNeXt的一个残差模块论文ResNext : Aggregated Residual Transformations for Deep Neural Networks效果ImageNet top-1 accuracy 80.9%结构图成就利用残差结构使得网络达到了前所未有的深度同时性能继续提升、同时使损失函数平面更加光滑看过很多解释这个个人觉得比较靠谱创新提出Group的概念、利用Group增加特征的丰富度和多样性类似multi-head attention。代码import torch.nn as nnimport torch.nn.functional as Fclass Block(nn.Module):Grouped convolution block.expansion 2 def __init__(self, in_planes, cardinality32, bottleneck_width4, stride1): super(Block, self).__init__() group_width cardinality * bottleneck_width self.conv1 nn.Conv2d(in_planes, group_width, kernel_size1, biasFalse) self.bn1 nn.BatchNorm2d(group_width) self.conv2 nn.Conv2d( group_width, group_width, kernel_size3, stridestride, padding1, groupscardinality, biasFalse ) #! key self.bn2 nn.BatchNorm2d(group_width) self.conv3 nn.Conv2d(group_width, self.expansion * group_width, kernel_size1, biasFalse) self.bn3 nn.BatchNorm2d(self.expansion * group_width) self.shortcut nn.Sequential() if stride ! 1 or in_planes ! self.expansion * group_width: self.shortcut nn.Sequential( nn.Conv2d(in_planes, self.expansion * group_width, kernel_size1, stridestride, biasFalse), nn.BatchNorm2d(self.expansion * group_width), ) def forward(self, x): out F.relu(self.bn1(self.conv1(x))) out F.relu(self.bn2(self.conv2(out))) out self.bn3(self.conv3(out)) out self.shortcut(x) out F.relu(out) return out6. EfficientNet (86.8% - 2021) 论文EfficientNet: Rethinking Model Scaling for Convolutional Neural NetworksEfficientNetV2: Smaller Models and Faster Training效果ImageNet top-1 accuracy 86.8%创新是AutoDL在深度学习上一次非常成功的尝试EfficientNet V1 uniformly scales all three dimensions(width, depth, resolution) with a fixed ratio。EfficientNet V1 加入一些新block扩大了搜索空间并且不是equally scaling up every stage。代码from torchvision.models import efficientnet_b0model efficientnet_b0()包含大模型学习路线图、核心知识点笔记、CV面试题合集...只针对真正想学的同学扫码备注领资料即可大家好我是资深AI讲师与学习规划师。专注计算机视觉教学与算法研发过去三年我帮超过2500名有Python 基础的入门者从像素是什么到独立跑通CV项目。今天这篇长文完全按零基础实战体系撰写从图像本质到经典算法、再到OpenCV工具链和完整项目一条龙给你讲透可直接复现的CV专业指南。适合人群大学生、转行者、开发者只要会Python基础就能跟上。读完你就能掌握图像处理4大经典算法并拥有一个可直接写进简历的实战项目为方便大家学习 这里给大家整理了一份系统学习资料包 需要的同学 根据下图指示自取就可以

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2513712.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…