使用 PyTorch 的计算机视觉简介 (3/6)

一、说明

在本单元中,我们将了解卷积神经网络(CNN),它是专门为计算机视觉设计的。 卷积层允许我们从图像中提取某些图像模式,以便最终分类器基于这些特征。

二、卷积神经网络 

        计算机视觉不同于通用分类,因为当我们试图在图片中找到某个物体时,我们正在扫描图像以寻找一些特定的图案及其组合。比如在寻找猫的时候,我们首先可能会寻找水平线,可以形成胡须,然后一定的胡须组合可以告诉我们它实际上是猫的图片。某些图案的相对位置和存在很重要,而不是它们在图像上的确切位置。为了提取模式,我们将使用卷积过滤器的概念。但首先,让我们加载之前定义的所有依赖项和函数。

!wget https://raw.githubusercontent.com/MicrosoftDocs/pytorchfundamentals/main/computer-vision-pytorch/pytorchcv.py
import torch
import torch.nn as nn
import torchvision
import matplotlib.pyplot as plt
from torchinfo import summary
import numpy as npfrom pytorchcv import load_mnist, train, plot_results, plot_convolution, display_dataset
load_mnist(batch_size=128)

三、卷积滤波器

        卷积滤波器是在图像的每个像素上运行并计算相邻像素的加权平均值的小窗口。它们由权重系数矩阵定义。

        让我们看看在 MNIST 手写数字上应用两个不同的卷积过滤器的示例:

plot_convolution(torch.tensor([[-1.,0.,1.],[-1.,0.,1.],[-1.,0.,1.]]),'Vertical edge filter')
plot_convolution(torch.tensor([[-1.,-1.,-1.],[0.,0.,0.],[1.,1.,1.]]),'Horizontal edge filter')

第一个过滤器称为垂直边缘过滤器,它定义为:

 -1 0 1-1 0 1 -1 0 1

        当此过滤器经过相对均匀的像素字段时,所有值的总和为 0。但是,当它在图像中遇到垂直边缘时,会产生高峰值。这就是为什么在上图中,您可以看到由高值和低值表示的垂直边缘,而水平边缘则平均化。

        当我们应用水平边缘滤波器时,会发生相反的事情,其中水平线被放大,垂直线被平均。

        如果我们将 3 × 3 滤镜应用于大小为 28 × 28 的图像 — 图像的大小将变为 26 × 26,因为过滤器不会超出图像边界。但是,在某些情况下,我们可能希望保持图像的大小相同,在这种情况下,图像每边都填充零。

        在经典的计算机视觉中,将多个过滤器应用于图像以生成特征,然后机器学习算法使用这些特征来构建分类器。然而,在深度学习中,我们构建的网络可以学习最佳的卷积过滤器来解决分类问题。

        为此,我们引入了卷积层。

四、卷积层

        卷积层使用 nn 定义。Conv2d 构造。我们需要指定以下内容:

  • in_channels — 输入通道数。在我们的例子中,我们正在处理灰度图像,因此输入通道的数量为1。彩色图像有 3 个通道 (RGB)。
  • out_channels — 要使用的过滤器数量。我们将使用 9 种不同的筛选器,这将为网络提供大量机会来探索哪些筛选器最适合我们的方案。
  • kernel_size是滑动窗口的大小。通常使用 3 个× 3 个或 5 个× 5 个过滤器。过滤器尺寸的选择通常通过实验选择,即通过尝试不同的过滤器尺寸并比较结果的准确性。

        最简单的CNN将包含一个卷积层。给定输入大小
        28 × 28,在应用 5 个 5 × 9 个过滤器后,我们最终将得到 24 × 24 × 24 的张量(空间大小较小,因为只有 5 个位置,长度为 28 的
滑动间隔可以容纳 9 像素)。在这里,每个滤波器的结果由图像中的不同通道表示。因此,第一维<>对应于滤波器的数量。

        卷积后,我们将 9 × 24 × 24 张量展平为一个大小为 5184 的向量,然后添加线性层,生成 10 个类。我们还在层之间使用 relu 激活函数。

class OneConv(nn.Module):def __init__(self):super(OneConv, self).__init__()self.conv = nn.Conv2d(in_channels=1,out_channels=9,kernel_size=(5,5))self.flatten = nn.Flatten()self.fc = nn.Linear(5184,10)def forward(self, x):x = nn.functional.relu(self.conv(x))x = self.flatten(x)x = nn.functional.log_softmax(self.fc(x),dim=1)return xnet = OneConv()summary(net,input_size=(1,1,28,28))
==========================================================================================
Layer (type:depth-idx)                   Output Shape              Param #
==========================================================================================
├─Conv2d: 1-1                            [1, 9, 24, 24]            234
├─Flatten: 1-2                           [1, 5184]                 --
├─Linear: 1-3                            [1, 10]                   51,850
==========================================================================================
Total params: 52,084
Trainable params: 52,084
Non-trainable params: 0
Total mult-adds (M): 0.18
==========================================================================================
Input size (MB): 0.00
Forward/backward pass size (MB): 0.04
Params size (MB): 0.21
Estimated Total Size (MB): 0.25
==========================================================================================

        您可以看到,该网络包含大约 50k 的可训练参数,而在完全连接的多层网络中,则包含大约 80k 个参数。这使我们能够在较小的数据集上获得良好的结果,因为卷积网络的泛化效果要好得多。

        请注意,卷积层的参数数量非常少,并且不依赖于图像的分辨率!在我们的例子中,我们使用了 9 个维度为 5 × 5 的过滤器,因此参数的数量为
9 × 5 × 5 + 9 = 234。尽管我们在上面的讨论中错过了这一点,但卷积过滤器也有偏见。我们网络的大部分参数来自最终的密集层。

hist = train(net,train_loader,test_loader,epochs=5)
plot_results(hist)
Epoch  0, Train acc=0.947, Val acc=0.969, Train loss=0.001, Val loss=0.001
Epoch  1, Train acc=0.979, Val acc=0.975, Train loss=0.001, Val loss=0.001
Epoch  2, Train acc=0.985, Val acc=0.977, Train loss=0.000, Val loss=0.001
Epoch  3, Train acc=0.988, Val acc=0.975, Train loss=0.000, Val loss=0.001
Epoch  4, Train acc=0.988, Val acc=0.976, Train loss=0.000, Val loss=0.001

        如您所见,与以前的全连接网络相比,我们能够实现更高的精度和更快的速度。我们还可以可视化经过训练的卷积层的权重,以尝试更有意义地了解正在发生的事情:

fig,ax = plt.subplots(1,9)
with torch.no_grad():p = next(net.conv.parameters())for i,x in enumerate(p):ax[i].imshow(x.detach().cpu()[0,...])ax[i].axis('off')

        您可以看到其中一些过滤器看起来可以识别一些倾斜的笔划,而另一些则看起来非常随机。

五、小结

        卷积层允许我们从图像中提取某些图像模式,以便最终分类器基于这些特征。但是,我们可以使用相同的方法来提取特征空间内的模式,方法是在第一个卷积层之上堆叠另一个卷积层。我们将在下一个单元中学习多层卷积网络。

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

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

相关文章

echarts 地图 visualMap 图例点击事件监听

一、切换位置 二、切换监听 // 切换事件监听 this.myChart.off(datarangeselected); // 为了不触发两次 this.myChart.on(datarangeselected,(e) > {// visualMap change });// 配置如下 visualMap: {type: piecewise,showLabel: true,inverse: true,pieces: [{value: 1,…

为什么大力推行国密算法SSL证书

国密算法SSL证书是一种采用我国自主研发的SM2公钥算法体系&#xff0c;支持SM2、SM3、SM4等国产密码算法及国密SSL安全协议的数字证书。相比于普通SSL证书&#xff0c;国密SSL证书具有以下特点&#xff1a; 自主可控&#xff1a;国密SSL证书采用我国自主研发的SM2公钥算法体系&…

STM32实现PMBus从机程序

最近在野火的STM32F103VET6开发板上实现PMBus从机程序&#xff0c;这个程序参考了以下这篇博客的关于使用中断法实现I2C从机程序&#xff1a;STM32设置为I2C从机模式_iic从机_柒壹漆的博客-CSDN博客 &#xff0c;实测这个程序是可以正常运行的&#xff0c;感谢博主的分享&#…

对标8155体验,降本20%以上!这家企业用“量产”证明

智能座舱逐渐成为智能汽车标配。 根据高工智能汽车研究院监测的数据显示&#xff0c;2022年中国市场&#xff08;不含进出口&#xff09;乘用车搭载智能数字座舱&#xff08;大屏语音车联网OTA&#xff09;前装标配交付795.05万辆&#xff0c;同比增长40.59%&#xff0c;前装搭…

[python 刷题] 84 Largest Rectangle in Histogram

[python 刷题] 84 Largest Rectangle in Histogram 题目&#xff1a; Given an array of integers heights representing the histogram’s bar height where the width of each bar is 1, return the area of the largest rectangle in the histogram. 这题也是一个典型的 mo…

微调大型语言模型(一):为什么要微调(Why finetune)?

今天我们来学习Deeplearning.ai的在线课程 微调大型语言模型(一)的第一课&#xff1a;为什么要微调(Why finetune)。 我们知道像GPT-3.5这样的大型语言模型(LLM)它所学到的知识截止到2021年9月&#xff0c;那么如果我们向ChatGPT询问2022年以后发生的事情&#xff0c;它可能会…

diff算法面试题

面试题&#xff1a;请阐述vue的diff算法 参考回答&#xff1a; 当组件创建和更新时&#xff0c;vue均会执行内部的update函数&#xff0c;该函数使用render函数生成的虚拟dom树&#xff0c;将新旧两树进行对比&#xff0c;找到差异点&#xff0c;最终更新到真实dom 对比差异的过…

轻松上手Docker:学习如何创建和运行自己的Docker容器

文章目录 轻松上手Docker&#xff1a;学习如何创建和运行自己的Docker容器容器的介绍Docker的技术架构容器的工作机制&#xff08;Docker&#xff09;容器的关键技术 - NamespaceNamespace隔离说明 容器的关键技术 - CgroupDocker环境搭建1&#xff09;安装基础软件包2&#xf…

python安全工具开发笔记(四)——python网络编程

一、C/S架构 什么是C/S架构 C : Client S : Server。客户机和服务器结构。 Server 唯一的目的就是等待Client 的请求&#xff0c;Client 连上 Server 发送必要的数据&#xff0c;然后等待Server端完成请求的反馈。 C/S网络编程 Server端进行设置&#xff0c;首先创建一个通信…

【unity2023打包安卓工程】踩坑记录

这里写自定义目录标题 踩坑记录使用环境Unity的准备工作Windows10 SDKAndroidstudio第一个需要注意的地方第二个需要注意的地方第三个需要注意的地方第四个需要注意的地方第五个需要注意的地方第六个需要注意的 其他unity启动缓慢 更新更新一 2023.9.27 踩坑记录 踩了快一个星期…

codesys【虚轴】

1概述&#xff1a;codesys里有3个轴&#xff1a; 自由编码器&#xff0c;虚轴&#xff0c;实轴。 流程&#xff1a;【高速输入&#xff1a;采集AB脉冲】带》【自由编码器】带》【虚轴】带》【实轴】 1虚轴&#xff1a; 用法和实轴一样。 一般用于&#xff0c;一拖多。 2编…

GEO生信数据挖掘(二)下载基因芯片平台文件及注释

检索到目标数据集后&#xff0c;开始数据挖掘&#xff0c;本文以阿尔兹海默症数据集GSE1297为例 目录 下载平台文件 1.AnnotGPL参数改为TRUE,联网下载芯片平台的soft文件。&#xff08;国内网速奇慢经常中断&#xff09; 2.手工去GEO官网下载 转换芯片探针ID为gene name 拓…

u盘初始化后怎么恢复文件?这几步操作帮你找回

随着科技的进步和便携设备的普及&#xff0c;U盘已经成为我们日常工作和生活中不可缺少的存储介质。然而&#xff0c;在使用U盘的过程中&#xff0c;我们可能会遇到各种问题&#xff0c;其中之一就是意外的初始化导致文件丢失。本文将为大家介绍如何在U盘初始化后恢复文件的方法…

Jenkins学习笔记4

配置构建流程&#xff1a; Jenkins任务创建&#xff1a; 1&#xff09;创建新任务&#xff1a; 把这个Accept first connection改成 No Validation。问题得到解决。 说明下&#xff0c;要确认下主分支的名称是master还是main。 构建触发器这块暂时没有需要配置的。 传输文件…

【yolov1】详解yolov1理论 代码

目标检测要解决的3大问题&#xff1a; 1、有没有&#xff1f; 图片中是否有要检测的物体&#xff1f;&#xff08;检测物体&#xff0c;判定前景背景&#xff09; 2、是什么&#xff1f; 这些物体分别是什么&#xff1f;&#xff08;检测到的物体是什么&#xff09; 3、在…

vuereact质检工具(eslint)安装使用总结

1、ESLint ESLint工具主要类似java中的checkStyle和findbugs&#xff0c;是检查代码样式和逻辑规范的工具。 1.1、ESLint安装流程 打开VSCode软件&#xff0c;打开扩展中心&#xff0c;下载ESLint插件 图1.1 点击后面的install按进行安装&#xff0c;如图1.2所示&#xff1…

单元测试

一、什么是单元测试 二、Junit单元测试框架 三、如何使用Junit单元测试框架 package study.StringUtils;public class StringUtil {public static void printNumber(String name){if (namenull){System.out.println ("名字的长度是&#xff1a;0");return;}System.ou…

性能测试监控-java分析工具Arthas

Arthas监控docker中的jvm_ray_my的博客-CSDN博客 Quick Start | arthas arthas是什么 Arthas是阿里巴巴开源的Java诊断工具&#xff0c;它可以帮助开发人员快速、方便地定位和解决Java应用的问题。 Arthas主要包括以下功能&#xff1a; 诊断Java应用中的性能问题&#xff…

天眼查询企业信息API接口

"天眼"一般是指"天眼查"&#xff0c;这是一个提供全国企业信息查询的API接口。天眼查以"天眼"作为用户logo&#xff0c;基于人工智能算法的数据采集和分析技术&#xff0c;为企业和个人提供全量、精准、实时、权威的企业信息查询服务。 天眼查A…

国产5G手机20天销量不及苹果一天,被iPhone15按在地上摩擦

iPhone15的上市销售&#xff0c;最大竞争对手无疑是国产5G手机&#xff0c;如今iPhone15上市首日的销量数据也已经出炉&#xff0c;高达200万台&#xff0c;这比国产5G手机卖20天的销量还要多&#xff0c;iPhone15让国产手机领教了什么叫遥遥领先。 据了解苹果对iPhone15的预期…