PyTorch深度学习实战 | 计算机视觉

深度学习领域技术的飞速发展,给人们的生活带来了很大改变。例如,智能语音助手能够与人类无障碍地沟通,甚至在视频通话时可以提供实时翻译;将手机摄像头聚焦在某个物体上,该物体的相关信息就会被迅速地反馈给使用者;在购物网站上浏览商品时,机器也在同时分析着用户的偏好,并及时个性化地推荐用户可能感兴趣的商品。原先以为只有人类才能做到的事,现在机器也能毫无差错地完成,甚至超越人类,这显然与深度学习的发展密不可分,技术正引领人类社会走向崭新的世界。
PyTorch是当前主流深度学习框架之一,其设计追求最少的封装、最直观的设计,其简洁优美的特性使得PyTorch代码更易理解,对新手非常友好。
本系列推文以深度学习为主题,覆盖基础篇到实战篇的知识点。本文主要介绍深度学习领域中计算机视觉部分。
1、计算机视觉-定义
计算机视觉是使用计算机及相关设备对生物视觉的一种模拟。它的主要任务是通过对采集的图片或视频进行处理以获得相应场景的三维信息。计算机视觉是一门关于如何运用照相机和计算机获取人们所需的、被拍摄对象的数据与信息的学问。形象地说,就是给计算机安装上眼睛(照相机)和大脑(算法),让计算机能够感知环境。
2、基本任务
计算机视觉的基本任务包括图像处理、模式识别或图像识别、景物分析、图像理解等。除了图像处理和模式识别之外,它还包括空间形状的描述、几何建模以及认识过程。实现图像理解是计算机视觉的终极目标。下面举例说明图像处理、模式识别和图像理解。
图像处理技术可以把输入图像转换成具有所希望特性的另一幅图像。例如,可通过处理使输出图像有较高的信噪比,或通过增强处理突出图像的细节,以便于操作员的检验。在计算机视觉研究中经常利用图像处理技术进行预处理和特征抽取。
模式识别技术根据从图像抽取的统计特性或结构信息,把图像分成预定的类别。例如,文字识别或指纹识别。在计算机视觉中,模式识别技术经常用于对图像中的某些部分(例如分割区域)的识别和分类。
图像理解技术是对图像内容信息的理解。给定一幅图像,图像理解程序不仅描述图像本身,而且描述和解释图像所代表的景物,以便对图像代表的内容做出决定。在人工智能研究的初期经常使用景物分析这个术语,以强调二维图像与三维景物之间的区别。图像理解除了需要复杂的图像处理以外,还需要具有关于景物成像的物理规律的知识以及与景物内容有关的知识。
3、现代深度学习
计算机视觉里经常使用的卷积神经网络,即CNN,是一种对人脑比较精准的模拟。
人脑在识别图片的过程中,并不是对整幅图同时进行识别,而是感知图片中的局部特征,之后再将局部特征综合起来得到整幅图的全局信息。卷积神经网络模拟了这一过程,其卷积层通常是堆叠的,低层的卷积层可以提取到图片的局部特征,例如角、边缘、线条等,高层的卷积层能够从低层的卷积层中学到更复杂的特征,从而实现对图片的分类和识别。
卷积就是两个函数之间的相互关系。在计算机视觉里面,可以把卷积当作一个抽象的过程,就是把小区域内的信息统计抽象出来。例如,对于一张爱因斯坦的照片,可以学习n个不同的卷积和函数,然后对这个区域进行统计。可以用不同的方法统计,比如可以着重统计中央,也可以着重统计周围,这就导致统计的函数的种类多种多样,以达到可以同时学习多个统计的累积和。
图1演示了如何从输入图像得到最后的卷积,生成相应的图。首先用学习好的卷积和对图像进行扫描,然后每个卷积和会生成一个扫描的响应图,称为响应图或者称为特征图(feature map)。如果有多个卷积和,就有多个特征图。也就是说,从一个最开始的输入图像(RGB三个通道)可以得到256个通道的feature map,因为有256个卷积和,每个卷积和代表一种统计抽象的方式。

■ 图1卷积
在卷积神经网络中,除了卷积层,还有一种叫池化的操作。池化操作在统计上的概念更明确,就是一种对一个小区域内求平均值或者求最大值的统计操作。
带来的结果是,池化操作会将输入的feature map的尺寸减小,让后面的卷积操作能够获得更大的视野,也降低了运算量,具有加速的作用。
在如图2所示这个例子里,池化层对每个大小为2×2px的区域求最大值,然后把最大值赋给生成的feature map的对应位置。如果输入图像的大小是100×100px,那输出图像的大小就会变成50×50px,feature map变成了原来的1/4。同时保留的信息是原来2×2区域里面最大的信息。

■ 图2池化
LeNet网络如图3所示。Le是人工智能领域先驱Lecun名字的简写。LeNet是许多深度学习网络的原型和基础。在LeNet之前,人工神经网络层数都相对较少,而LeNet 5层网络突破了这一限制。LeNet在1998年即被提出,Lecun用这一网络进行字母识别,达到了非常好的效果。

■ 图3LeNet
LeNet网络输入图像是大小为32×32px的灰度图,第一层经过了一组卷积和,生成了6个28×28px的feature map,然后经过一个池化层,得到6个14×14px的feature map,然后再经过一个卷积层,生成了16个10×10px的卷积层,再经过池化层生成16个5×5px的feature map。
这16个大小为5×5px的feature map再经过3个全连接层,即可得到最后的输出结果。输出就是标签空间的输出。由于设计的是只对0~9进行识别,所以输出空间是10,如果要对10个数字再加上52个大、小写字母进行识别的话,输出空间就是62。向量各维度的值代表“图像中元素等于该维度对应标签的概率”,即若该向量第一维度输出为0.6,即表示图像中元素是“0”的概率是0.6。那么该62维向量中值最大的那个维度对应的标签即为最后的预测结果。62维向量里,如果某一个维度上的值最大,它对应的那个字母和数字就是预测结果。
从1998年开始的15年间,深度学习领域在众多专家学者的带领下不断发展壮大。遗憾的是,在此过程中,深度学习领域没有产生足以轰动世人的成果,导致深度学习的研究一度被边缘化。直到2012年,深度学习算法在部分领域取得不错的成绩,而压在骆驼背上的最后一根稻草就是AlexNet。
AlexNet由多伦多大学提出,在ImageNet比赛中取得了非常好的效果。AlexNet识别效果超过了当时所有浅层的方法。经此一役,AlexNet在此后被不断地改进、应用。同时,学术界和工业界认识到了深度学习的无限可能。
AlexNet是基于LeNet的改进,它可以被看作LeNet的放大版,如图4所示。AlexNet的输入是一个大小为224×224px的图片,输入图像在经过若干个卷积层和若干个池化层后,最后经过两个全连接层泛化特征,得到最后的预测结果。

■ 图4AlexNet
2015年,特征可视化工具开始盛行。那么,AlexNet学习出的特征是什么样子的?在第一层,都是一些填充的块状物和边界等特征;中间层开始学习一些纹理特征;而在接近分类器的高层,则可以明显看到物体形状的特征;最后一层即分类层,不同物体的主要特征已经被完全提取出来。
无论对什么物体进行识别,特征提取器提取特征的过程都是渐进的。特征提取器最开始提取到的是物体的边缘特征,继而是物体的各部分信息,然后在更高层级上才能抽象到物体的整体特征。整个卷积神经网络实际上是在模拟人的抽象和迭代的过程。
相关文章:

PyTorch深度学习实战 | 计算机视觉
深度学习领域技术的飞速发展,给人们的生活带来了很大改变。例如,智能语音助手能够与人类无障碍地沟通,甚至在视频通话时可以提供实时翻译;将手机摄像头聚焦在某个物体上,该物体的相关信息就会被迅速地反馈给使用者&…...
力扣(LeetCode)436. 寻找右区间(2023.03.10)
给你一个区间数组 intervals ,其中 intervals[i] [starti, endi] ,且每个 starti 都 不同 。 区间 i 的 右侧区间 可以记作区间 j ,并满足 startj > endi ,且 startj 最小化 。 返回一个由每个区间 i 的 右侧区间 在 interv…...

已解决Servlet中Request请求参数中文乱码的问题
📋 个人简介 💖 作者简介:大家好,我是阿牛,全栈领域优质创作者。😜📝 个人主页:馆主阿牛🔥🎉 支持我:点赞👍收藏⭐️留言Ὅ…...

【flask】URL和视图映射
目录 首页 传参 URL数据类型 get传参 首页 url与视图函数的映射是通过app.route()装饰器实现的。 只有一个斜杠代表的是根目录——首页。 传参 URL传参是通过<参数名称>的形式进行传递。URL中有几个参数,在视图函数中也要指定几个参数 from flask im…...

Python实现性能测试(locust)
一、安装locustpip install locust -- 安装(在pycharm里面安装或cmd命令行安装都可)locust -V -- 查看版本,显示了就证明安装成功了或者直接在Pycharm中安装locust:搜索locust并点击安装,其他的第三方包也可以通过这种方式二、loc…...

【数论】试除法判断质数,分解质因数,筛质数
Halo,这里是Ppeua。平时主要更新C语言,C,数据结构算法......感兴趣就关注我吧!你定不会失望。 🌈个人主页:主页链接 🌈算法专栏:专栏链接 现已更新完KMP算法、排序模板,之…...

【C++】红黑树
文章目录红黑树的概念红黑树的性质特征红黑树结点的定义红黑树的插入操作情况1情况2情况3特殊情况代码实现红黑树的验证红黑树的删除红黑树和AVL树的比较红黑树的应用红黑树的概念 红黑树,是一种二叉搜索树,但是每一个结点都增加一个存储位表示结点的颜…...

【剧前爆米花--爪哇岛寻宝】进程的调度以及并发和并行,以及PCB中属性的详解。
作者:困了电视剧 专栏:《JavaEE初阶》 文章分布:这是关于进程调度、并发并行以及相关属性详解的文章,我会在之后文章中更新有关线程的相关知识,并将其与进程进行对比,希望对你有所帮助。 目录 什么是进程/…...

网络的瓶颈效应
python从小白到总裁完整教程目录:https://blog.csdn.net/weixin_67859959/article/details/129328397?spm1001.2014.3001.5501 ❤ 网络的瓶颈效应 网络瓶颈,指的是影响网络传输性能及稳定性的一些相关因素,如网络拓扑结构,网线࿰…...

【C++进阶】四、红黑树(三)
目录 一、红黑树的概念 二、红黑树的性质 三、红黑树节点的定义 四、红黑树的插入 五、红黑树的验证 六、红黑树与AVL树的比较 七、完整代码 一、红黑树的概念 红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可…...

Spring——AOP切入点表达式和AOP通知类型
切入点:要进行增强的方法 切入点表达式:要进行增强的方法的描述式 第一种方法的本质是基于接口实现的动态代理(jdk) 第二种是基于cglib实现的动态代理 AOP切入点表达式 而需要加载多个切入点时,不可能每个切入点都写一个切入点表达式 例子 下面的代理描述的是匹配…...

Hadoop学习:Yarn
1.YARN介绍 一个通用的资源管理系统和调度平台 YARN不分配磁盘,由HDFS分配 相当于一个分布式的操作系统平台,为上层MR等计算程序提供运算所需要的资源(内存、CPU等) 2.YARN三大组件 不要忘记AppMaster,他是程序内部…...

Spring Data JPA
文章目录一、Spring Data基础概念二、JPA与JDBC的相同与不同之处三、Hibernate & JPA快速搭建1.添加依赖2.实体类3.hibernate的配置文件 ——hibernate.cfg.xml四、测试——基于hibernate的持久化(单独使用)五、测试——基于JPA的持久化(…...
java List报错Method threw ‘java.lang.UnsupportedOperationException‘ exception. 解决
问题描述:List使用Arrays.asList()初始化后,再add对象时报错:Method threw java.lang.UnsupportedOperationException exception.错误示例如下: List<ExportListVO.ExportSheet> sheetVOList Arrays.asList(new ExportList…...

数据结构-用栈实现队列
前言: 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty): 实现 MyQueue 类: void push(int x) 将元素 x 推到队列的末尾 int pop() 从队列的开头移除并返回元素 int…...
第十四章 从 Windows 客户端控制 IRIS
文章目录第十四章 从 Windows 客户端控制 IRISIRISctlGetDirsSyntaxReturn ValuesIRISctlConfigStatusSyntaxReturn ValuesIRISctlControlSyntaxReturn Values第十四章 从 Windows 客户端控制 IRIS IRIS 为 Windows 客户端程序提供了一种机制来控制 IRIS 配置并启动 IRIS 进程…...

数据结构---双链表
专栏:数据结构 个人主页:HaiFan. 专栏简介:从零开始,数据结构!! 双链表前言双链表各接口的实现为要插入的值开辟一块空间BuyLN初始化LNInit和销毁LNDestory打印链表中的值LNPrint尾插LNPushBack和尾删LNPop…...

Windows 环境安装Scala详情
为了进一步学习Spark,必须先学习Scala 编程语言。首先开始Scala 环境搭建。温馨提示:本文是基于Windows 11 安装Scala 2.13.1 版本第一步:确保本机已经正确安装JDK1.8 环境第二步:Scala 官网下载我们所属scala版本文件。Scala 官网…...

C++ Qt自建网页浏览器
C Qt自建网页浏览器如需安装运行环境或远程调试,见文章底部个人QQ名片,由专业技术人员远程协助!前言这篇博客针对<<C Qt自建网页浏览器>>编写代码,代码整洁,规则,易读。 学习与应用推荐首选。文…...

Flink从入门到精通系列(四)
5、DataStream API(基础篇) Flink 有非常灵活的分层 API 设计,其中的核心层就是 DataStream/DataSet API。由于新版本已经实现了流批一体,DataSet API 将被弃用,官方推荐统一使用 DataStream API 处理流数据和批数据。…...

K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
CSS设置元素的宽度根据其内容自动调整
width: fit-content 是 CSS 中的一个属性值,用于设置元素的宽度根据其内容自动调整,确保宽度刚好容纳内容而不会超出。 效果对比 默认情况(width: auto): 块级元素(如 <div>)会占满父容器…...
iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈
在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...
省略号和可变参数模板
本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...

DBLP数据库是什么?
DBLP(Digital Bibliography & Library Project)Computer Science Bibliography是全球著名的计算机科学出版物的开放书目数据库。DBLP所收录的期刊和会议论文质量较高,数据库文献更新速度很快,很好地反映了国际计算机科学学术研…...

【Post-process】【VBA】ETABS VBA FrameObj.GetNameList and write to EXCEL
ETABS API实战:导出框架元素数据到Excel 在结构工程师的日常工作中,经常需要从ETABS模型中提取框架元素信息进行后续分析。手动复制粘贴不仅耗时,还容易出错。今天我们来用简单的VBA代码实现自动化导出。 🎯 我们要实现什么? 一键点击,就能将ETABS中所有框架元素的基…...