计算机视觉入门 3)最大池化

这篇具有很好参考价值的文章主要介绍了计算机视觉入门 3)最大池化。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

系列文章目录

  1. 计算机视觉入门 1)卷积分类器
  2. 计算机视觉入门 2)卷积和ReLU
  3. 计算机视觉入门 3)最大池化
  4. 计算机视觉入门 4)滑动窗口
  5. 计算机视觉入门 5)自定义卷积网络
  6. 计算机视觉入门 6) 数据集增强(Data Augmentation)

提示:仅为个人学习笔记分享,若有错漏请各位老师同学指出,Thanks♪(・ω・)ノ



一、最大池化

最大池化进行压缩

在Keras中,通过一个 MaxPool2D 层,将压缩步骤添加到之前的模型中:

from tensorflow import keras
from tensorflow.keras import layers

model = keras.Sequential([
    layers.Conv2D(filters=64, kernel_size=3), # 激活函数为 None
    layers.MaxPool2D(pool_size=2),
    # 后续添加更多层
])

MaxPool2D层很像Conv2D层,不同之处在于它使用了一个简单的最大函数而不是卷积核,pool_size参数类似于kernel_size。然而,MaxPool2D层不像卷积层的卷积核中那样有任何可训练的权重。

让我们再次看一下上一节的特征提取图。记住,MaxPool2D压缩步骤。
计算机视觉入门 3)最大池化,深度学习,计算机视觉,人工智能

见上图,在应用ReLU函数(Detect)之后,特征图会出现很多“死区”,即大面积仅包含0的区域(图像中的黑色区域)。如果必须在整个网络中保留这些0激活,将会增加模型的大小,而没有添加太多有用的信息。相反,我们希望将特征图进行压缩,只保留最有用的部分 —— 即特征本身。

这实际上就是最大池化的作用。最大池化采用原始特征图中的一小块激活,并将它们替换为该块中的最大激活值。

计算机视觉入门 3)最大池化,深度学习,计算机视觉,人工智能

当应用在ReLU激活之后,它具有“加强”特征的效果。池化步骤增加了活动像素与零像素的比例。

平移不变性

我们称零像素为“不重要”。这是否意味着它们完全不携带任何信息?实际上,零像素携带着位置信息。空白像素仍然在图像中定位特征。当MaxPool2D移除一些像素时,它也会移除特征图中的一些位置信息。这使得卷积网络具有一种称为平移不变性的属性。这意味着带有最大池化的卷积网络往往不会根据特征在图像中的位置来区分它们。

观察当我们反复应用最大池化到下面的特征图时会发生什么。

计算机视觉入门 3)最大池化,深度学习,计算机视觉,人工智能

原始图像中的两个点在经过重复池化后变得无法区分。换句话说,池化破坏了一些位置信息。由于网络在特征图中无法区分它们,因此也无法在原始图像中区分它们:它对于这种位置的差异已经变得不变

事实上,池化只会在网络小距离上产生平移不变性,就像图像中的两个点一样。开始距离较远的特征在经过池化后仍然保持分开;只是一些位置信息丢失了,但并不是全部。

计算机视觉入门 3)最大池化,深度学习,计算机视觉,人工智能

特征之间位置上小的差异的这种不变性对于图像分类器来说是一个很好的特性。由于视角或构图的差异,同一种特征可能位于原始图像的不同部分,但我们仍然希望分类器能够识别它们是相同的。因为这种不变性内置在网络中,我们可以使用更少的训练数据:我们不再需要教它忽略这种差异。这使得卷积网络在效率上比仅使用密集层的网络具有很大的优势。

二、代码示例

步骤2:图像读取转换

import numpy as np
from itertools import product
import tensorflow as tf
import matplotlib.pyplot as plt
import warnings 

plt.rc('figure', autolayout=True)
plt.rc('axes', labelweight='bold', labelsize='large',
       titleweight='bold', titlesize=18, titlepad=10)
plt.rc('image', cmap='magma')
warnings.filterwarnings("ignore") # to clean up output cells

def show_kernel(kernel, label=True, digits=None, text_size=28):
    kernel = np.array(kernel)
    if digits is not None:
        kernel = kernel.round(digits)
    cmap = plt.get_cmap('Blues_r')
    plt.imshow(kernel, cmap=cmap)
    rows, cols = kernel.shape
    thresh = (kernel.max()+kernel.min())/2
    if label:
        for i, j in product(range(rows), range(cols)):
            val = kernel[i, j]
            color = cmap(0) if val > thresh else cmap(255)
            plt.text(j, i, val, 
                     color=color, size=text_size,
                     horizontalalignment='center', verticalalignment='center')
    plt.xticks([])
    plt.yticks([])

image_path = 'car_feature.jpg'
image = tf.io.read_file(image_path)
image = tf.io.decode_jpeg(image)

kernel = tf.constant([
    [-1, -1, -1],
    [-1,  8, -1],
    [-1, -1, -1],
], dtype=tf.float32)

image = tf.image.convert_image_dtype(image, dtype=tf.float32)
image = tf.expand_dims(image, axis=0)
kernel = tf.reshape(kernel, [*kernel.shape, 1, 1])

步骤2:Filter & ReLU

# Filter step
image_filter = tf.nn.conv2d(
    input=image,
    filters=kernel,
    # we'll talk about these two in the next lesson!
    strides=1,
    padding='SAME'
)

# Detect step
image_detect = tf.nn.relu(image_filter)

plt.figure(figsize=(12, 6))
plt.subplot(131)
plt.imshow(tf.squeeze(image), cmap='gray')
plt.axis('off')
plt.title('Input')
plt.subplot(132)
plt.imshow(tf.squeeze(image_filter))
plt.axis('off')
plt.title('Filter')
plt.subplot(133)
plt.imshow(tf.squeeze(image_detect))
plt.axis('off')
plt.title('Detect')
plt.show();

计算机视觉入门 3)最大池化,深度学习,计算机视觉,人工智能

步骤3:Pool


image_condense = tf.nn.pool(
    input=image_detect, # image in the Detect step above
    window_shape=(2, 2),
    pooling_type='MAX',
    # we'll see what these do in the next lesson!
    strides=(2, 2),
    padding='SAME',
)

image_condense2 = tf.nn.pool(
    input=image_detect, # image in the Detect step above
    window_shape=(3, 3),
    pooling_type='MAX',
    # we'll see what these do in the next lesson!
    strides=(2, 2),
    padding='SAME',
)

plt.figure(figsize=(12, 6))
plt.subplot(131)
plt.imshow(tf.squeeze(image_detect))
plt.axis('off')
plt.title('Detect')
plt.subplot(132)
plt.imshow(tf.squeeze(image_condense))
plt.axis('off')
plt.title('Pool')
plt.subplot(133)
plt.imshow(tf.squeeze(image_condense2))
plt.axis('off')
plt.title('Pool2')
plt.show();

计算机视觉入门 3)最大池化,深度学习,计算机视觉,人工智能
图像由左到右,由于池化压缩,图片逐步模糊。文章来源地址https://www.toymoban.com/news/detail-664097.html

到了这里,关于计算机视觉入门 3)最大池化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 深度学习与计算机视觉

    目录 1 深度学习 1.1 人工智能 1.2 机器学习 1.3 深度学习 1.3.1 深度学习发展历程 1.3.2 深度学习中的核心因素 1.3.3 深度学习模型分类 1.3.4 深度学习框架 2 计算机视觉 人工智能、机器学习、深度学习这三者的关系: 在实现人工智能的众多算法中,机器学习是发展较为快速的

    2024年02月06日
    浏览(32)
  • 计算机视觉(五)深度学习基础

    深度学习与神经网络的区别 选择合适的目标函数 Softmax层 梯度消失的直观解释 激活函数 学习步长 SGD的问题 存在马鞍面,使我们的训练卡住,于是提出下面方法: Momentum动量 Nesterov Momentum 先利用“惯性”,“走”一步。避免一开始,就被当前梯度带偏。 Adagrad 为不同的参数

    2024年02月14日
    浏览(38)
  • 深度学习|10.1 深度学习在计算机视觉的应用

    图像中的每一个像素点都是输入层的一部分。而最终最后只有一个输出点,也就是说需要通过乘上中间层/隐藏层内部的矩阵,从而实现降维。 直观上,信息越多,分析的效果应该越好,但也意味着分析的量会越来越大,考虑到分析所需要的时间和空间,往往采用卷积的方式

    2024年02月03日
    浏览(35)
  • 计算机视觉(三)未有深度学习之前

    把图像划分成若干互不相交的区域。 经典的数字图像分割算法一般是基于灰度值的两个基本特征之一:不连续性和相似性。 基于阈值:基于图像灰度特征计算一个或多个灰度阈值。将灰度值与阈值比较,最后将比较结果分到合适的类别中。 大津法 基于边缘:边界线上连续的

    2024年02月15日
    浏览(38)
  • 深度学习与计算机视觉的创新

    深度学习和计算机视觉是现代人工智能领域的两个重要分支。深度学习是一种通过多层神经网络来处理大规模数据的机器学习方法,而计算机视觉则是利用计算机程序来模仿人类视觉系统对图像进行分析和理解的技术。在过去的几年里,深度学习与计算机视觉的融合已经取得

    2024年04月09日
    浏览(38)
  • 【探索AI】三十一-计算机视觉(六)深度学习在计算机视觉中的应用

    深度学习在计算机视觉中的应用已经取得了显著的成果,并且正在逐步改变我们对图像和视频信息的处理和理解方式。下面将详细讲解深度学习在计算机视觉中的几个关键应用。 首先,我们来看图像分类。图像分类是计算机视觉的基本任务之一,它涉及到将输入的图像自动归

    2024年04月09日
    浏览(47)
  • 《计算机视觉度量:从特征描述到深度学习》--工业视觉深度学习方法概述

    博主更新了几期关于深度学习在工业场景的应用文章,本次全面阐述一下深度学习方法在整个应用场景的方法和应用的局限特性: 分类:分类作为深度学习基本的研究方向,这几年的学术研究取得了重大突破。基本原理如下图 原理分析:采用图片的每个像素值,通过深度学

    2024年02月20日
    浏览(37)
  • 【学习笔记】计算机视觉深度学习网络模型

    这是本人学习计算机视觉CV领域深度学习模型的学习的一点点学习笔记,很多片子没有完成,可以作为学习的参考~

    2024年04月10日
    浏览(57)
  • PyTorch深度学习实战(5)——计算机视觉

    计算机视觉是指通过计算机系统对图像和视频进行处理和分析,利用计算机算法和方法,使计算机能够模拟和理解人类的视觉系统。通过计算机视觉技术,计算机可以从图像和视频中提取有用的信息,实现对环境的感知和理解,从而帮助人们解决各种问题和提高效率。本节中

    2024年02月15日
    浏览(33)
  • 计算机视觉:从图像识别到深度学习

    💂 个人网站:【工具大全】【游戏大全】【神级源码资源网】 🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】 💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 计算机视觉是人工智能领域中的一个重要分支,它致力于让计算机能够理解和处理

    2024年02月07日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包