wordpress设置网站导航企业网站建设合同范本免费
- 作者: 多梦笔记
- 时间: 2026年02月19日 02:06
当前位置: 首页 > news >正文
wordpress设置网站导航,企业网站建设合同范本免费,模型网站大全免费,网站建设沟通博主简介#xff1a;努力学习的22级计算机科学与技术本科生一枚#x1f338;博主主页#xff1a; Yaoyao2024往期回顾#xff1a; 【机器学习】有监督学习由浅入深讲解分类算法Fisher算法讲解每日一言#x1f33c;: 今天不想跑#xff0c;所以才去跑#xff0c;这才是长… 博主简介努力学习的22级计算机科学与技术本科生一枚博主主页 Yaoyao2024往期回顾 【机器学习】有监督学习·由浅入深讲解分类算法·Fisher算法讲解每日一言: 今天不想跑所以才去跑这才是长距离者的思维。 ——村上春树 本文是对Google DeepMind 团队2015年发表的空间变换网络STN的详细讲解作为初学者也是参考了很多博客都在本文末尾给出感谢前辈们的努力。 空间变换网络Spatial Transformer Networks简称STN是一种深度学习模型旨在增强网络对几何变换的适应能力。STN是由Max Jaderberg等人在2015年提出的其核心思想是在传统的卷积神经网络CNN中嵌入一个可学习的模块该模块能够显式地对输入图像进行空间变换从而使得网络能够对输入图像的几何变形具有更好的适应性。STN的引入使得网络能够自动进行图像的校正例如旋转、缩放、剪切等这在很多视觉任务中是非常有用的如图像识别、目标检测和图像分割等。 一、为什么提出Why) 一个理想中的模型我们希望鲁棒的图像处理模型具有空间不变性当目标发生某种转化后模型依然能给出同样的正确的结果 什么是空间不变性举例来说如下图所示假设一个模型能准确把左图中的人物分类为凉宫春日当这个目标做了放大、旋转、平移后模型仍然能够正确分类我们就说这个模型在这个任务上具有尺度不变性旋转不变性平移不变性 CNN在这方面的能力是不足的maxpooling的机制给了CNN一点点这样的能力当目标在池化单元内任意变换的话激活的值可能是相同的这就带来了一点点的不变性。但是池化单元一般都很小一般是2*2只有在深层的时候特征被处理成很小的feature map的时候这种情况才会发生 Spatial Transformer本文提出的空间变换网络STNSpatial Transformer NetworksSTN可以使模型学习平移、缩放、旋转和更通用的扭曲的不变性。二维空间变换网络
二、STN是什么What
STN对feature map包括输入图像进行空间变换输出一张新的图像。我们希望STN对feature map进行变换后能把图像纠正到成理想的图像然后丢进NN去识别举例来说如下图所示输入模型的图像可能是摆着各种姿势摆在不同位置的凉宫春日我们希望STN把它纠正到图像的正中央放大占满整个屏幕然后再丢进CNN去识别。这个网络可以作为单独的模块可以在CNN的任何地方插入即插即用所以STN的输入不止是输入图像可以是CNN中间层的feature map
三、STN是怎么做的How
STN可以通过为每个输入样本生成适当的变换来主动对图像或特征图进行空间变换。然后在整个特征图上非局部执行变换并且可以包括缩放、裁剪、旋转以及非刚性变形。这使得包含空间变换器的网络不仅可以选择图像中最相关注意力的区域还可以将这些区域转换为规范的预期姿势以简化后续层中的推理。 如上图所示STN的输入为 U U U输出为 V V V因为输入可能是中间层的feature map所以画成了立方体多channelSTN主要分为下述三个步骤
定位网络Localization Network这一部分是STN的核心其任务是学习输入图像的空间变换参数。定位网络可以是任意的网络结构它接受输入图像并输出空间变换所需的参数。这些参数定义了一个变换矩阵用于调整图像的空间位置。(是一个自己定义的网络它输入 U U U输出变化参数 Θ \Theta Θ这个参数用来映射 U U U和 V V V的坐标关系)。网格生成器Grid Generator接收定位网络输出的变换参数并生成一个对应于输出图像的坐标网格。这个坐标网格对应于输入图像中的每一个像素位置。根据 V V V中的坐标点和变化参数 Θ \Theta Θ计算出 U U U中的坐标点。这里是因为 V V V的大小是自己先定义好的当然可以得到 V V V的所有坐标点而填充 V V V 中每个坐标点的像素值的时候要从 U U U中去取所以根据 V V V中每个坐标点和变化参数 Θ \Theta Θ进行运算得到一个坐标。在sampler中就是根据这个坐标去 U U U中找到像素值这样子来填充 V V VSampler要做的是填充 V V V根据Grid generator得到的一系列坐标和原图 U U U因为像素值要从 U U U中取来填充因为计算出来的坐标可能为小数要用另外的方法来填充比如双线性插值。从输入图像中采样像素来产生变换后的输出图像。这一步骤确保了图像的空间变换是可微分的从而可以通过反向传播算法进行训练。
下面针对每个模块阐述一下
1、Localisation net
这个模块就是输入 U U U输出一个变换参数 Θ \Theta Θ那么这个 Θ \Theta Θ具体是指什么呢
我们知道线性代数里图像的平移旋转和缩放都可以用矩阵运算来做
举例来说如果想放大图像中的目标可以这么运算把(x,y)中的像素值填充到(x’,y’)上去比如把原来(2,2)上的像素点填充到(4,4)上去。 [ x ′ y ′ ] [ 2 0 0 2 ] [ x y ] [ 0 0 ] \begin{bmatrix}x^{}\y^{}\end{bmatrix}\begin{bmatrix}20\02\end{bmatrix}\begin{bmatrix}x\y\end{bmatrix}\begin{bmatrix}0\0\end{bmatrix} [x′y′][2002][xy][00]
如果想旋转图像中的目标可以这么运算可以在极坐标系中推出来证明放到最后的附录 [ x ′ y ′ ] [ c o s Θ − s i n Θ s i n Θ c o s Θ ] [ x y ] [ 0 0 ] \begin{bmatrix}x^{}\y^{}\end{bmatrix}\begin{bmatrix}cos\Theta-sin\Theta\sin\Thetacos\Theta\end{bmatrix}\begin{bmatrix}x\y\end{bmatrix}\begin{bmatrix}0\0\end{bmatrix} [x′y′][cosΘsinΘ−sinΘcosΘ][xy][00]
这些都是属于仿射变换affine transformation [ x ′ y ′ ] [ a b c d ] [ x y ] [ e f ] \begin{bmatrix}x^{^{\prime}}\y^{^{\prime}}\end{bmatrix}\begin{bmatrix}ab\cd\end{bmatrix}\begin{bmatrix}x\y\end{bmatrix}\begin{bmatrix}e\f\end{bmatrix} [x′y′][acbd][xy][ef]
在仿射变化中变化参数就是这6个变量 Θ { a , b , c , d , e , f } (此 Θ 跟上述旋转变化里的角度 Θ 无关) \Theta{a,b,c,d,e,f}\text{(此}\Theta\text{跟上述旋转变化里的角度}\Theta\text{无关)} Θ{a,b,c,d,e,f}(此Θ跟上述旋转变化里的角度Θ无关)
这6个变量就是用来映射输入图和输出图之间的坐标点的关系的我们在第二步grid generator就要根据这个变化参数来获取原图的坐标点。
总结如下
功能定位网络的主要任务是预测空间变换的参数。根据输入图像这个网络会输出一组参数这些参数定义了一个空间变换可以是平移、旋转、缩放等或者更复杂的仿射变换或者非线性变换。结构定位网络通常是一个小型的卷积神经网络或全连接网络其具体结构可以根据任务的复杂度和输入数据的特性来定制。网络的输出大小是固定的对应于特定变换所需的参数数量。
2、Grid generator
有了第一步的变化参数这一步是做个矩阵运算这个运算是 以目标图 V V V的所有坐标点为自变量以为参数做一个矩阵运算得到输入图 U U U的坐标点 ( x i s y i s ) Θ ( x i t y i t 1 ) Θ 11 Θ 12 Θ 13 Θ 21 Θ 22 Θ 23 \begin{pmatrix}x_i^s\y_i^s\end{pmatrix}\Theta\begin{pmatrix}x_i^t\yi^t\1\end{pmatrix}\begin{bmatrix}\Theta{11}\Theta{12}\Theta{13}\\Theta{21}\Theta{22}\Theta_{23}\end{bmatrix}\begin{pmatrix}x_i^t\yi^t\1\end{pmatrix} (xisyis)Θ xityit1 [Θ11Θ21Θ12Θ22Θ13Θ23] xityit1
其中 ( x i t , y i ) 记为输出图 V 中的第 i 个坐标点 V 中的长宽可以和 U 不一样自己定义的所以这里用 i 来标识第几个坐标点 ( x i s , y i ) {(x{i}{t},y{i})} 记 为 输 出 图 V 中 的 第 i 个 坐 标 点 V 中 的 长 宽 可 以 和 U 不 一 样 自 己 定 义 的 所 以 这 里 用 i 来 标 识 第 几 个 坐 标 点 {(x{i}{s},y_{i})} (xit,yi)记为输出图V中的第i个坐标点V中的长宽可以和U不一样自己定义的所以这里用i来标识第几个坐标点(xis,yi)
功能网格生成器接收定位网络预测的变换参数并生成一个坐标网格该网格代表了输入图像中每个像素映射到输出图像中的新位置。原理对于每个输出图像的像素位置网格生成器使用变换参数来计算对应的输入图像中的坐标。这一过程通常涉及到矩阵运算用于实现平移、旋转、缩放等仿射变换。
3、Sampler
由于在第二步计算出了V中每个点对应到U的坐标点在这一步就可以直接根据V的坐标点取得对应到U中坐标点的像素值来进行填充而不需要经过矩阵运算。需要注意的是填充并不是直接填充首先计算出来的坐标可能是小数要处理一下其次填充的时候往往要考虑周围的其它像素值。填充根据的公式如下。 V i ∑ n ∑ m U n m ∗ k ( x i s − m ; ϕ x ) ∗ k ( y i s − n ; ϕ y ) V_i\sum_n\summU{nm}*k(x_i^s-m;\phi_x)*k(y_i^s-n;\phi_y) Vin∑m∑Unm∗k(xis−m;ϕx)∗k(yis−n;ϕy)
举例来说我要填充目标图V中的22这个点的像素值经过以下计算得到1.62.4 ( x i s y i s ) Θ 11 Θ 12 Θ 13 Θ 21 Θ 22 Θ 23 ( 1.6 2.4 ) 0 0.5 0.6 1 0 0.4 \begin{gathered}\begin{pmatrix}x_i^s\yi^s\end{pmatrix}\begin{bmatrix}\Theta{11}\Theta{12}\Theta{13}\\Theta{21}\Theta{22}\Theta_{23}\end{bmatrix}\begin{pmatrix}x_i^t\yi^t\1\end{pmatrix}\\begin{pmatrix}1.6\2.4\end{pmatrix}\begin{bmatrix}00.50.6\100.4\end{bmatrix}\begin{pmatrix}2\2\1\end{pmatrix}\end{gathered} (xisyis)[Θ11Θ21Θ12Θ22Θ13Θ23] xityit1 (1.62.4)[010.500.60.4] 221
如果四舍五入后直接填充则难以做梯度下降。
我们知道做梯度下降时梯度的表现就是权重发生一点点变化的时候输出的变化会如何。
如果用四舍五入后直接填充那么1.62.4四舍五入后变成22当 Θ \Theta Θ我们求导的时候是需要对 Θ \Theta Θ求导的有一点点变化的时候1.62.4可能变成了1.92.1四舍五入后还是变成22输出并没有变化对 Θ \Theta Θ的梯度没有改变这个时候没法用梯度下降来优化 Θ \Theta Θ
如果采用上面双线性插值的公式来填充在这个例子里就会考虑22周围的四个点来填充这样子当 Θ \Theta Θ有一点点变化的时式子的输出就会有变化因为 ( x i s , y i ) (x{i}{s},y{i}) (xis,yi)的变化会引起V的变化。注意下式中U的下标第一个下标是纵坐标第二个下标才是横坐标。 V U 21 ( 1 − 0.6 ) ( 1 − 0.4 ) U 22 ( 1 − 0.4 ) ( 1 − 0.4 ) U 31 ( 1 − 0.6 ) ( 1 − 0.6 ) U 32 ( 1 − 0.4 ) ( 1 − 0.6 ) VU{21}(1-0.6)(1-0.4)U{22}(1-0.4)(1-0.4)U{31}(1-0.6)(1-0.6)U_{32}(1-0.4)(1-0.6) VU21(1−0.6)(1−0.4)U22(1−0.4)(1−0.4)U31(1−0.6)(1−0.6)U32(1−0.4)(1−0.6)
4、STN小结
简单总结一下如下图所示
Localization net根据输入图计算得到一个ΘGrid generator根据输出图的坐标点和Θ计算出输入图的坐标点举例来说想知道输出图上22应该填充什么坐标点则跟Θ 运算得到1.62.4Sampler根据自己定义的填充规则一般用双线性插值来填充比如22坐标对应到输入图上的坐标为1.62.4那么就要根据输入图上1.62.4周围的四个坐标点12132223的像素值来填充。
四、STN模块的pytorch实现
这里我们假设Mnist数据集作为网络输入:
(1)首先定义Localisation net的特征提取部分,为两个Conv层后接Maxpool和Relu操作: (2)定义Localisation net的变换参数θ回归部分,为两层全连接层内接Relu: (3)在nn.module的继承类中定义完整的STN模块操作: 五、空间变换网络的实际应用 1、STN作为网络的第一层 2、STN插入CNN 的中间层 六、评价
思想非常巧妙因为卷积神经网络中的池化层pooling layer直接用一些max pooling 或者average pooling 的方法将图片信息压缩减少运算量提升准确率。
作者认为之前pooling的方法太过于暴力直接将信息合并会导致关键信息无法识别出来所以提出了一个叫空间转换器spatial transformer的模块将图片中的的空间域信息做对应的空间变换从而能将关键的信息提取出来。 Unlike pooling layers, where the receptive fields are fixed and local, the spatial transformer module is a dynamic mechanism that can actively spatially transform an image (or a feature map) by producing an appropriate transformation for each input sample. 空间转换器模型直观的实验图
(a)列是原始的图片信息其中第一个手写数字7没有做任何变换第二个手写数字5做了一定的旋转变化而第三个手写数字6加上了一些噪声信号这些变化都是随机的 (b)列中的彩色边框是学习到的spatial transformer的框盒bounding box每一个框盒其实就是对应图片学习出来的一个spatial transformer ©列中是通过spatial transformer转换之后的特征图可以看出7的关键区域被选择出来5被旋转成为了正向的图片6的噪声信息没有被识别进入。 (d)列最终可以通过这些转换后的特征图来预测出中手写数字的数值。
spatial transformer其实就是注意力机制的实现因为训练出的spatial transformer能够找出图片信息中需要被关注的区域同时这个transformer又能够具有旋转、缩放变换的功能这样图片局部的重要信息能够通过变换而被框盒提取出来。
参考
原文链接:https://www.cnblogs.com/liaohuiqiang/p/9226335.htmlhttps://blog.csdn.net/qq_43700729/article/details/136601998李弘毅讲 STN 网络https://www.youtube.com/watch?vSoCywZ1hZak知乎https://zhuanlan.zhihu.com/p/41738716https://blog.csdn.net/Rosemary_tu/article/details/84069878https://ddelephant.blog.csdn.net/article/details/111303416?fromshareblogdetailsharetypeblogdetailsharerId111303416sharereferPCsharesourceYaoyao2024sharefromfrom_link 本人能力有限上述内容如有理解不当的地方欢迎与我讨论
相关文章
-
wordpress设置静态内容缓存时间赣州seo培训
wordpress设置静态内容缓存时间赣州seo培训
- 站长
- 2026年02月19日
-
wordpress设置百度站长主动推送WordPress标签侧边栏
wordpress设置百度站长主动推送WordPress标签侧边栏
- 站长
- 2026年02月19日
-
wordpress设置百度站长主动推送seo优化人员
wordpress设置百度站长主动推送seo优化人员
- 站长
- 2026年02月19日
-
wordpress设置网站关键字怎么跟客户介绍网站建设
wordpress设置网站关键字怎么跟客户介绍网站建设
- 站长
- 2026年02月19日
-
wordpress声明新开的网站怎么做seo优化
wordpress声明新开的网站怎么做seo优化
- 站长
- 2026年02月19日
-
wordpress时间轴模板随州seo优化
wordpress时间轴模板随州seo优化
- 站长
- 2026年02月19日
