CNN中的平移不变性和平移等变性

news2024/11/24 8:48:58

1. 平移等变性

数学上函数的等变性定义如下:

也就是给定一张图像,平移后卷积的结果卷积后再平移的结果是相同的

 2. 平移不变性

如果某个属性在任何平移下都不会改变,那么它就是平移不变的。考虑上面的图像。 即使像素值发生了位移,我们也可以在两幅图像中识别出一位女性。 一个图像分类器应该预测两个图像的标签“女人”。 分类器的输出不应该受到目标位置的影响。 因此,分类器函数的输出是平移不变的。

具体来说:

 在上图中,虽然input发生了小小的改变(shift),但由于maxpool的存在,转换与未转换的输出都是相同的。

3 CNN的平移等变与平移不变的实现方式

卷积神经网络的平移等变是通过卷积层获得的。 如果将CNNs的输入图像向右平移一定像素值,则卷积层生成的特征图也会按相同的位移和方向移动。

而考虑分类任务重的 CNNs ,无论平移位移只要仍使得物体在图像边界内,分类结果都是一样的。这就是CNNs的平移不变性。 平移不变性是通过池化层在 CNNs 中获得的。 池化操作通常应用于由前面的卷积层和非线性激活函数生成的特征图。 池化是用具有代表性的统计数据(通常是最大值或平均值)替换邻域中的特征。 因此,忽略了原始特征的位置。

而CNNs 对于旋转、缩放和仿射变换不具有等变和不变性。 因此,使用数据增强技术能够很大程度上使 CNNs 对包含这类几何变换数据的表现更加稳定。

4. 平移不变真的一直存在吗? 

如果我们从宏观角度退一步看,若对于分类任务不以最终的label为输出结果,而是以输出probability为准,对于一张目标有平移的图像,其预测的probability会和原图一样么,这种近似苛刻的要求看起来又似乎是合理的。有论文(https://arxiv.org/abs/1904.11486)做了这样的实验,结果如下图所示,即使是很小的移动也会带来预测probability的剧烈震荡。这便令人往probability之前联想,莫不是特征提取的时候,目标移动给特征层造成了某些影响么?

   从特征提取的角度直观的思考,卷积操作的局部特征提取,会使得原目标在左上角时,特征层的目标特征在左上角,原目标在右下角时,特征层的目标特征在右下角。但众所周知,卷积层越深,特征提取越抽象,其特征的平移不变还可以继续保持下去么?有论文表示(https://arxiv.org/abs/1805.12177),并没有。作者测试了VGG16、ResNet50和DenseNet201对于平移的特征提取响应,发现CNN对表示平移不变有一定的限度,即早期特征层的确如所想一般,能够保留平移后目标在特征图上的位置信息,然而当进入更深层的卷积层之后,这样的性质便消失了。即便是如VGG16,随着目标的移动,抽象特征的模式也并不是原始目标的简单平移,但似乎保留了这一特定图像的全局总和。另外两个网络对于不同的平移则产生了极为不同的特征响应

平移不变性如何渐渐的就丢失了呢?

要从本质上理解现象,还得从最基本的操作单元着手。
  池化是CNN中一个非常常见的操作,有最大池化和平均池化。有些理解认为池化可以提供平移不变,例如,最大池化返回感受野中的最大值,若这个最大值发生了移动,但还是存在于这个感受野中,那么最大池化层还是会输出相同的最大值。乍一看这个解释似乎比较合理,但是细细思量,这种情况存在,但是条件非常苛刻,首先移动的距离要小,一两个像素吧,因为滑动窗口就很小,不能给最大值滑出去了,还有就是移动之后不能给该感受野带来新的最大值,不然,输出就不是原来的最大值了。
        如“00110011”的一维信号,以k=2,s=2的最大池化计算结果为“0101”,若将信号左移一个单位变为“01100110”,则输出结果为“1111”,显然这是非平移不变的。

  这么想的话,应当只有全局池化才会带来平移不变,不管你怎么移动,总归还在这幅图像里面,我都按照整个特征视野计算。
  从另一个角度看,CNN中不乏下采样操作,大部分下采样操作由s=2的池化或者卷积完成。但了解数字信号处理的就会发现,CNN中简单粗暴的下采样是不满足奈奎斯特采样定理的,这将带来锯齿问题并使得CNN丢失平移等变性,因此也有不少研究将抗混叠技术应用于CNN

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

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

相关文章

c++内存申请和释放

// // Created by 徐昌真 on 2024/10/5. // #include <iostream> using namespace std; int main() {//在堆区申请一块内存int* ptr new int(1314); //申请了一个int类型的内存 用ptr指针指向它 它的值是1314cout << *ptr << endl;//可以通过指针修改它的值…

【C++差分数组】1589. 所有排列中的最大和|1871

本文涉及知识点 C差分数组 LeetCode1589. 所有排列中的最大和 有一个整数数组 nums &#xff0c;和一个查询数组 requests &#xff0c;其中 requests[i] [starti, endi] 。第 i 个查询求 nums[starti] nums[starti 1] … nums[endi - 1] nums[endi] 的结果 &#xff…

华为OD机试 - 基站维护工程师数 - 动态规划(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试真题&#xff08;Python/JS/C/C&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加入华为OD刷题交流群&#xff0c;…

GEE问题:筛选指定区域的Sentinel-1影像缺乏VH等波段

目录 问题简介 原始代码 原始代码 问题解析 修改后的代码 问题简介 亲爱的同事们&#xff0c;我正在尝试使用 SAR 图像 - Sentinel-1 来改进使用机器学习的地上生物量建模。我想处理 Sentinel 图像并将它们作为波段插入以增强模型。通过阅读文档&#xff0c;可用的极化&a…

前端编程艺术(3)---JavaScript

目录 1.JavaScript 1.输出 2.变量和数据类型 3.运算符 4.数组 5.函数 6.面向对象 7.ES6面向对象 2.BOM 1.document对象 3.DOM 4.JSON 1.JavaScript JavaScript是一种脚本编程语言&#xff0c;通常用于为网页增加交互性和动态效果。它是一种高级语言&#xff…

用js和css实现一行一行文字交替显示

用js和css实现&#xff0c;效果是&#xff1a;有多行文字&#xff0c;一行一行的交替显示&#xff0c;每隔几秒显示一行&#xff0c;循环显示。 代码如下&#xff0c;保存为html即可看到效果&#xff1a; <!DOCTYPE html> <html lang"en"> <hea…

心觉:梦想成真的三个核心步骤

Hi&#xff0c;我是心觉&#xff0c;与你一起玩转潜意识、脑波音乐和吸引力法则&#xff0c;轻松掌控自己的人生&#xff01; 挑战每日一省写作190/1000天 梦想成真是每个人的愿望 但是希望你不要把“梦想成真”这四个字当成愿望或许愿&#xff0c;因为它实际上是一个成事的…

为什么芯片有多个不同的供电电压?

一、为什么芯片有多个不同的供电电压&#xff1f; 优化性能与功耗&#xff1a;芯片的核心部分&#xff08;Core&#xff09;和输入输出部分&#xff08;IO&#xff09;可能采用不同的电压。核心电压通常较低&#xff0c;以减少功耗和发热&#xff0c;提高能效&#xff1b;而IO电…

如何解决msvcp140.dll丢失,这6个方法可以解决msvcp140.dll丢失

在日常电脑使用中&#xff0c;可能会遇到一些常见问题&#xff0c;比如msvcp140.dll丢失或损坏。这个问题会导致程序无法正常运行&#xff0c;对我们的生活、工作造成困扰。本文将介绍6种解决msvcp140.dll丢失的方法&#xff0c;让大家能快速解决这个问题。 一&#xff0c;msvc…

25游卡(服务器)面试经验 游卡最常见面试问题总结

目录 【面试经历】 问题+详细答案 面试流程 面试攻略 【面试经历】 秋招目前面了十多家,第一家不开摄像头且表示麦不好要求找个耳机的。贴面经(纯八股) 1.HTTP与HTTPS 2.MTU如何设置,过大过小的后果 3.DNS过程 4.如何创建进程/线程,孤儿进程 5.java从文件到运行的过程…

大厂笔试现已经禁用本地IDE怎么看

如果我说本来面试做题这种事情就是反人类你相信吗&#xff1f; 这个罪恶的源头就是 Google&#xff0c;说是为了选择高素质的计算机编程水平的人才&#xff0c;然后把面试就变成了考试&#xff0c;最大的受益者当然是印度人了。 当把一个考察过程变成标准化的考试过程&#x…

每日一道算法题——二分查找

文章目录 开口闭口区分:1、问题2、示例3、解决方法&#xff08;1&#xff09;注意点&#xff08;2&#xff09;代码 开口闭口区分: 开口闭口区分: [1,2,3] 左闭右闭[1,2,3) 左闭右开(1,2,3] 左开右闭 开口如数组(1,2,3)不包含当前数据&#xff0c;也就是指只有2&#xff0c;闭口…

各省-科技创新、研发强度数据(2007-2022年)

研发强度通常指研究与试验发展&#xff08;R&D&#xff09;经费与国内生产总值&#xff08;GDP&#xff09;之比&#xff0c;是衡量一个国家或地区科技活动强度的重要指标。高研发强度往往意味着更强的科技创新能力和更快的技术进步速度。 从地区分布来看&#xff0c;研发…

什么是 HTTP 请求中的 preflight 类型请求

在浏览器的 HTTP 请求中&#xff0c;当我们使用 fetch API 或者 XMLHttpRequest 来进行跨域请求时&#xff0c;浏览器有时会发送一种称为 Preflight 的请求。这种请求是浏览器在实际发送跨域请求前&#xff0c;先与目标服务器进行的一次 “探测” 请求&#xff0c;以确认服务器…

java基础_异常总结详解

1 列举一些列举常见的运行时异常 运行时异常都是 RuntimeException 子类异常 NullPointerException - 空指针异常 ClassCastException - 类转换异常 IndexOutOfBoundsException - 下标越界异常 ArithmeticException - 计算异常 IllegalArgumentException - 非法参数异常 Numb…

C - Separated Lunch

题目链接: C - Separated Lunch (atcoder.jp) 题目描述: 大致意思是&#xff1a;有n个人&#xff0c;让你把他们分为两个组&#xff0c;然后分完后的这两个组的最大值最小为多少&#xff1f; 数据范围&#xff1a; 样例输入&#xff1a; 5 2 3 5 10 12 样例输出&#xff1a;…

二分查找算法——在排序数组中查找元素的第一个和最后一个位置

1.题目解析 题目来源&#xff1a;在排序数组中查找元素的第一个和最后一个位置——力扣 测试用例 2.算法原理 查找左端点 此时根据二段性&#xff0c;需要将数组分为大于target与小于target两部分&#xff0c;然后取出中点位置判断此时中点位置的值与target的大小关系&#xf…

SpringBoot校园资料分享平台:设计与实现

3系统分析 3.1可行性分析 通过对本校园资料分享平台实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本校园资料分享平台采用JAVA作为开发语言&#xff0c;Sprin…

基于Springboot+Vue的计算中心共享平台(含源码数据库)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 系统中…

vSAN02:容错、存储策略、文件服务、快照与备份、iSCSI

目录 vSAN容错条带化存储策略1. 创建新策略2. 应用存储策略 vSAN文件服务文件服务快照与备份 vSAN iSCSI目标服务 vSAN容错 FTT&#xff1a;Fault to Tolerance 允许故障数 故障域&#xff1a;每一台vSAN主机是一个故障域 - 假设3台超融合&#xff08;3计算1存储&#xff09;&…