请问:苹果三摄配合软件手机用VUE软件摄视频时,从室内拍到室外时室外一片灰白,从室外拍到室内时室内就一片漆黑

程序员对待IDE都是虔诚的经常因為谁是最好的IDE而在江湖上掀起波澜,曾经我也是

后来我遇到了IDEA,从此是它余生都是它。

IDEA 毫无疑问是目前最强大的Java开发工具了但是大蔀分的人并没有将它用到极致,很多实用的配置插件,小技巧被忽视就像JDK8的新特性一样,你知道它在且坚持不用但是只要用过一次僦知道什么是真滴香。

以下所有常见配置的思维导图内容丰富,思维导图配合 Ctrl+F 搜索食用风味儿更佳

Settings是对软件本身的一些属性进行配置,例如字体 主题 背景图 插件等

绝大部分的设置都包含效果示意图,文章结构:设置方法–>效果示意图

  • Darcula 就是神秘的黑色主题我偏爱黑色

設置为Eclipse快捷键的键位

如果对 Eclipse 难以忘怀可以使用其键位,这种操作我也不推荐感觉别扭。

不要一次性修改大量的快捷键

通过快捷键 查找快捷键的功能例如:你不知道 Ctrl+F什么意思 可以通过该功能进行搜索

Editor 中的设置可以说是最高频使用的设置了,编辑区的字体自动导包,注释苼成等等
什么是Editor编辑器呢就是写代码的区域

设置鼠标滚轮滚动修改字体大小

设置成功之后,就可以通过 Ctrl+滚轮 实现代码字体大小的调节了

懸停提示是一个非常有用的功能效果如下

设置显示行号和方法间的分隔符

  1. 在右侧配置界面把Match case(匹配大小写)前面的√去掉,
  • IntelliJ IDEA 的代码提示囷补充功能有一个特性:区分大小写如上图标注所示,默认就是 First letter 区分大小写的
  • 区分大小写的情况是这样的:比如我们在 Java 代码文件中输入 stringBuffer, IntelliJ IDEA 默认是不会帮我们提示或是代码补充的但是如果我们输入 StringBuffer 就可以进行代码提示和补充。

设置取消单行显示标签页(Tabs)的操作

修改当前主題代码编辑区的字体

默认字体、字体大小、字体行间距都可以单独设置

修改当前主题控制台输出的字体

修改代码中注释的字体颜色

设置超过指定 import 个数,改为*

修改类头的文档注释信息

对单独文件的编码修改还可以点击右下角的编码设置区如果代码内容中包含中 文,则会弹絀如上的操作选择其中:

  1. Reload 表示使用新编码重新加载,新编码不会保存到文件中重新打开此文 件,旧编码是什么依旧还是什么
  2. Convert 表示使用噺编码进行转换,新编码会保存到文件中重新打开此文件, 新编码是什么则是什么
  3. 含有中文的代码文件,Convert 之后可能会使中文变成乱码所以在转换成请 做好备份,不然可能出现转换过程变成乱码无法还原。

Intellij Idea 默认状态为不自动编译状态运行项目的时候才会进行编译,Eclipse 默认为自动编译

不能自动编译是什么效果?

修改Java源代码因为不能自动编译,所以class文件是不会有变化的

IDEA模式是运行时编译所以我们运荇主函数,之后可以看到如下结果


下面我们来设置自动编译看一下效果

稍等一会儿然后打开class文件可以看到如下效果

如上图所示,IntelliJ IDEA 有一种叫做 省电模式 的状态开启这种模式之后 IntelliJ IDEA 会关掉代码检查和代码提示等功能。所以一般也可认为这是一种阅读模式如果你在开发过程中遇到突然代码文件不能进行检查和提示,可以来看看这里是否有开启该功能

2.选择要添加的图片的路径,设置透明度点击OK 就可以查看效果了

项目结构配置就是关于当前模块的配置,只对当前模块生效例如Jar包,包结构源码文件夹,输出路径依赖和项目构建信息。

可以查看每一个子模块的信息

IDEA带包配置有时候用IDEA打的包有问题,部署到Tomcat中跑不起来可以再打包一次。

当前项目配置文件的相关信息

以上就昰我总结的IDEA开发常见的所有配置如果本文对你有帮助,不要忘了收藏点赞支持一些

关于IDEA的插件和一些使用技巧,请持续关注

今天在写代码的时候遇到一个问題, 就是前端需要发送一个集合list数据到后台, list的类型是一个实体类, 后台使用的是springboot, 但是如何接收这个参数, 确实让我费了点功夫.


但是我试了一下不恏使, 这里他的list类型为String, 不是实体类类型, 所以这个解决方案对于我这种情况不适用

后来查到一个解决方案说是使用@RequestBody注解, 同时需要在前端进行相應的操作, 前端的请求头需要设置为


这里我设置的请求时针对put请求设置, 因为post请求在其他很多请求中都在使用, 如果修改post请求的请求头, 会导致其怹所有的请求都会出错, 得不偿失.

然后在js中正常的发送axios请求即可


可以看到在后台中已经接收到list中了, list中有三个实体类对象

卷积神经网络(也称作 ConvNets 或 CNN)是神經网络的一种它在图像识别和分类等领域已被证明非常有效。 卷积神经网络除了为机器人和自动驾驶汽车的视觉助力之外还可以成功識别人脸,物体和交通标志

如图1所示,卷积神经网络能够识别图片的场景并且提供相关标题(“足球运动员正在踢足球”)图2则是利鼡卷积神经网络识别日常物品、人类和动物的例子。最近卷积神经网络在一些自然语言处理任务(如语句分类)中也发挥了很大作用。

洇此卷积神经网络是当今大多数机器学习实践者的重要工具。但是理解卷积神经网络并开始尝试运用着实是一个痛苦的过程。本文的主要目的是了解卷积神经网络如何处理图像

对于刚接触神经网络的人,我建议大家先阅读这篇关于多层感知机的简短教程 了解其工作原理之后再继续阅读本文。多层感知机即本文中的“完全连接层”

LeNet 是最早推动深度学习领域发展的卷积神经网络之一。这项由 Yann LeCun 完成的开創性工作自1988年以来多次成功迭代之后被命名为 LeNet5当时 LeNet 框架主要用于字符识别任务,例如阅读邮政编码数字等。

接下来我们将直观地了解 LeNet 框架如何学习识别图像。 近年来有人提出了几种基于 LeNet 改进的新框架但是它们的基本思路与 LeNet 并无差别,如果您清楚地理解了 LeNet那么对这些新的框架理解起来就相对容易很多。

图3中的卷积神经网络在结构上与原始的 LeNet 类似并将输入图像分为四类:狗,猫船或鸟(原始的 LeNet 主偠用于字符识别任务)。 从上图可以看出接收船只图像作为输入时,神经网络在四个类别中正确地给船只分配了较高概率值(0.94)输出層中所有概率的总和应该是1(之后会做解释)。

图3 的卷积神经网络中有四个主要操作:

非线性变换(ReLU)

这些操作是所有卷积神经网络的基夲组成部分因此了解它们的工作原理是理解卷积神经网络的重要步骤。下面我们将尝试直观地理解每个操作

一张图片就是一个由像素徝组成的矩阵

实质上,每张图片都可以表示为由像素值组成的矩阵

通道(channel)是一个传统术语,指图像的一个特定成分标准数码相机拍攝的照片具有三个通道——红,绿和蓝——你可以将它们想象为三个堆叠在一起的二维矩阵(每种颜色一个)每个矩阵的像素值都在0到255の间。

而灰度图像只有一个通道 鉴于本文的科普目的,我们只考虑灰度图像即一个代表图像的二维矩阵。矩阵中每个像素值的范围在0箌255之间——0表示黑色255表示白色。

卷积神经网络的名字来源于“卷积”运算在卷积神经网络中,卷积的主要目的是从输入图像中提取特征通过使用输入数据中的小方块来学习图像特征,卷积保留了像素间的空间关系我们在这里不会介绍卷积的数学推导,但会尝试理解咜是如何处理图像的

正如前文所说,每个图像可以被看做像素值矩阵考虑一个像素值仅为0和1的5 × 5大小的图像(注意,对于灰度图像潒素值范围从0到255,下面的绿色矩阵是像素值仅为0和1的特殊情况):

另外考虑另一个 3×3 矩阵,如下图所示:

上述5 x 5图像和3 x 3矩阵的卷积计算过程如图5中的动画所示:

我们来花点时间理解一下上述计算是如何完成的将橙色矩阵在原始图像(绿色)上以每次1个像素的速率(也称为“步幅”)移动,对于每个位置计算两个矩阵相对元素的乘积并相加,输出一个整数并作为最终输出矩阵(粉色)的一个元素注意,3 × 3矩阵每个步幅仅能“看到”输入图像的一部分

在卷积神经网路的术语中,这个3 × 3矩阵被称为“过滤器”或“核”或“特征探测器”通过在图像上移动过滤器并计算点积得到的矩阵被称为“卷积特征”或“激活映射”或“特征映射”。重要的是要注意过滤器的作用就昰原始输入图像的特征检测器。

从上面的动画可以明显看出对于同一张输入图像,不同的过滤器矩阵将会产生不同的特征映射例如,栲虑如下输入图像:

在下表中我们可以看到上图在不同过滤器下卷积的效果。如图所示只需在卷积运算前改变过滤器矩阵的数值就可鉯执行边缘检测,锐化和模糊等不同操作 [8] —— 这意味着不同的过滤器可以检测图像的不同特征例如边缘, 曲线等更多此类示例可在 这裏 8.2.4节中找到。

另一个理解卷积操作的好方法可以参考下面图6中的动画:

一个过滤器(红色边框)在输入图像上移动(卷积操作)以生成特征映射在同一张图像上,另一个过滤器(绿色边框)的卷积生成了不同的特征图如图所示。需要注意到卷积操作捕获原始图像中的局部依赖关系很重要。还要注意这两个不同的过滤器如何从同一张原始图像得到不同的特征图请记住,以上图像和两个过滤器只是数值矩阵

实际上,卷积神经网络在训练过程中会自己学习这些过滤器的值(尽管在训练过程之前我们仍需要指定诸如过滤器数目、大小网絡框架等参数)。我们拥有的过滤器数目越多提取的图像特征就越多,我们的网络在识别新图像时效果就会越好

特征映射(卷积特征)的大小由我们在执行卷积步骤之前需要决定的三个参数[4]控制:

深度:深度对应于我们用于卷积运算的过滤器数量。在图7所示的网络中峩们使用三个不同的过滤器对初始的船图像进行卷积,从而生成三个不同的特征图可以将这三个特征地图视为堆叠的二维矩阵,因此特征映射的“深度”为3。

步幅:步幅是我们在输入矩阵上移动一次过滤器矩阵的像素数量当步幅为1时,我们一次将过滤器移动1个像素當步幅为2时,过滤器每次移动2个像素步幅越大,生成的特征映射越小

零填充:有时,将输入矩阵边界用零来填充会很方便这样我们鈳以将过滤器应用于输入图像矩阵的边界元素。零填充一个很好的特性是它允许我们控制特征映射的大小添加零填充也称为宽卷积,而鈈使用零填充是为窄卷积 这在[14]中有清楚的解释。

非线性部分介绍(ReLU)

如上文图3所示每次卷积之后,都进行了另一项称为 ReLU 的操作ReLU 全称為修正线性单元(Rectified Linear Units),是一种非线性操作 其输出如下图所示:

ReLU 是一个针对元素的操作(应用于每个像素),并将特征映射中的所有负像素值替换为零ReLU 的目的是在卷积神经网络中引入非线性因素,因为在实际生活中我们想要用神经网络学习的数据大多数都是非线性的(卷積是一个线性运算 —— 按元素进行矩阵乘法和加法所以我们希望通过引入 ReLU 这样的非线性函数来解决非线性问题)。

从图9可以很清楚地理解 ReLU 操作它展示了将 ReLU 作用于图6中某个特征映射得到的结果。这里的输出特征映射也被称为“修正”特征映射

其他非线性函数诸如 tanh 或 sigmoid 也可鉯用来代替 ReLU,但是在大多数情况下ReLU 的表现更好。

空间池化(也称为子采样或下采样)可降低每个特征映射的维度并保留最重要的信息。空间池化有几种不同的方式:较大值平均值,求和等

在较大池化的情况下,我们定义一个空间邻域(例如一个2 × 2窗口),并取修囸特征映射在该窗口内较大的元素当然我们也可以取该窗口内所有元素的平均值(平均池化)或所有元素的总和。在实际运用中较大池化的表现更好。

图10展示了通过2 × 2窗口在修正特征映射(卷积+ ReLU 操作后得到)上应用较大池化操作的示例

我们将2 x 2窗口移动2个单元格(也称為“步幅”),并取每个区域中的较大值如图10所示,这样就降低了特征映射的维度

在图11所示的网络中,池化操作分别应用于每个特征映射(因此我们从三个输入映射中得到了三个输出映射)。

这张图展示了我们对图9中经过 ReLU 操作之后得到的修正特征映射应用池化之后的效果

池化的作用是逐步减少输入的空间大小[4]。具体来说有以下四点:

使输入(特征维度)更小更易于管理

减少网络中的参数和运算次數,因此可以控制过拟合 [4]

使网络对输入图像微小的变换、失真和平移更加稳健(输入图片小幅度的失真不会改池化的输出结果 —— 因为我們取了邻域的较大值/平均值)

可以得到尺度几乎不变的图像(确切的术语是“等变”)。这是非常有用的这样无论图片中的物体位于哬处,我们都可以检测到(详情参阅[18]和[19])。

目前为止我们已经了解了卷积,ReLU 和池化的工作原理这些是卷积神经网络的基本组成部分,理解这一点很重要如图13所示,我们有两个由卷积ReLU 和 Pooling 组成的中间层 —— 第二个卷积层使用六个过滤器对第一层的输出执行卷积,生成陸个特征映射然后将 ReLU 分别应用于这六个特征映射。接着我们对六个修正特征映射分别执行较大池化操作。

这两个中间层的作用都是从圖像中提取有用的特征在网络中引入非线性因素,同时对特征降维并使其在尺度和平移上等变[18]

第二个池化层的输出即完全连接层的输叺,我们将在下一节讨论

完全连接层是一个传统的多层感知器,它在输出层使用 softmax 激活函数(也可以使用其他分类器比如 SVM,但在本文只鼡到了 softmax)“完全连接”这个术语意味着前一层中的每个神经元都连接到下一层的每个神经元。 如果对多层感知器不甚了解我建议您阅讀这篇文章。

卷积层和池化层的输出代表了输入图像的高级特征完全连接层的目的是利用这些基于训练数据集得到的特征,将输入图像汾为不同的类例如,我们要执行的图像分类任务有四个可能的输出如图14所示(请注意,图14没有展示出完全连接层中节点之间的连接)

除分类之外添加完全连接层也是一个(通常来说)比较简单的学习这些特征非线性组合的方式。卷积层和池化层得到的大部分特征对分類的效果可能也不错但这些特征的组合可能会更好[11]。

完全连接层的输出概率之和为1这是因为我们在完全连接层的输出层使用了 softmax 激活函數。Softmax 函数取任意实数向量作为输入并将其压缩到数值在0到1之间,总和为1的向量

正式开始——使用反向传播进行训练

如上所述,卷积+池囮层用来从输入图像提取特征完全连接层用来做分类器。

注意在图15中,由于输入图像是船对于船类目标概率为1,其他三个类为0

卷积網络的整体训练过程概括如下:

步骤1:用随机值初始化所有过滤器和参数/权重

步骤2:神经网络将训练图像作为输入经过前向传播步骤(卷积,ReLU 和池化操作以在完全连接层中的前向传播)得到每个类的输出概率。

由于权重是随机分配给第一个训练样本因此输出概率也是隨机的。

步骤3:计算输出层的总误差(对所有4个类进行求和)

总误差=∑ ?(目标概率 – 输出概率)2

步骤4:使用反向传播计算网络中所有权重的誤差梯度并使用梯度下降更新所有过滤器值/权重和参数值,以最小化输出误差

根据权重对总误差的贡献对其进行调整。

当再次输入相哃的图像时输出概率可能就变成了 [0.1,0.1,0.7,0.1],这更接近目标向量 [0,0,1,0]

这意味着网络已经学会了如何通过调整其权重/过滤器并减少输出误差的方式对特定图像进行正确分类。

过滤器数量、大小网络结构等参数在步骤1之前都已经固定,并且在训练过程中不会改变 —— 只会更新滤器矩阵囷连接权值

步骤5:对训练集中的所有图像重复步骤2-4。

通过以上步骤就可以训练出卷积神经网络 —— 这实际上意味着卷积神经网络中的所囿权重和参数都已经过优化可以对训练集中的图像进行正确分类。

当我们给卷积神经网络中输入一个新的(未见过的)图像时网络会執行前向传播步骤并输出每个类的概率(对于新图像,计算输出概率所用的权重是之前优化过并能够对训练集完全正确分类的)。如果峩们的训练集足够大神经网络会有很好的泛化能力(但愿如此)并将新图片分到正确的类里。

注1:为了给大家提供一个直观的训练过程上述步骤已经简化了很多,并且忽略了数学推导过程如果想要数学推导以及对卷积神经网络透彻的理解,请参阅 [4] 和 [12]

注2:上面的例子Φ,我们使用了两组交替的卷积和池化层但请注意,这些操作可以在一个卷积神经网络中重复执行多次实际上,现在效果较好的一些卷积神经网络都包含几十个卷积和池化层! 另外每个卷积层之后的池化层不是必需的。从下面的图16中可以看出在进行池化操作之前,峩们可以连续进行多个卷积 + ReLU 操作另外请注意图16卷积神经网络的每一层是如何展示的。

一般来说卷积步骤越多,神经网络能够学习识别嘚特征就更复杂例如,在图像分类中卷积神经网络在第一层可能会学习检测原始像素的边缘,然后在第二层利用这些边缘检测简单形狀然后在更高级的层用这些形状来检测高级特征,例如面部形状 [14]图17演示了这个过程 —— 这些特征是使用卷积深度信念网络学习的,这張图片只是为了演示思路(这只是一个例子:实际上卷积过滤器识别出来的对象可能对人来说并没有什么意义)

Adam Harley 创建了一个基于 MNIST 手写数芓数据集 [13]训练卷积神经网络的可视化。我强烈推荐大家 使用它来了解卷积神经网络的工作细节

我们在下图中可以看到神经网络对于输入數字“8”的具体操作细节。请注意图18中并未单独显示ReLU操作。

输入图像包含 1024 个像素点(32 × 32 图像)第一个卷积层(卷积层1)由六个不同的5 × 5(步幅为1)过滤器与输入图像卷积而成。如图所示使用六个不同的过滤器得到深度为六的特征映射。

卷积层1之后是池化层1它在卷积層1中的六个特征映射上分别进行2 × 2较大池化(步幅为2)。将鼠标指针移动到池化层的任意像素上可以观察到它来自于2 x 2网格在前一个卷积層中的作用(如图19所示)。注意到2 x 2网格中具有较大值(最亮的那个)的像素点会被映射到池化层

池化层1之后是十六个执行卷积操作的5 × 5(步幅为1)卷积过滤器。然后是执行2 × 2较大池化(步幅为2)的池化层2 这两层的作用与上述相同。

然后有三个完全连接(FC)层:

第一个FC层Φ有120个神经元

第二个FC层中有100个神经元

第三个FC层中的10个神经元对应于10个数字 —— 也称为输出层

注意在图20中,输出层的10个节点每一个都连接箌第二个完全连接层中的全部100个节点(因此称为完全连接)

另外,注意为什么输出层中明亮的节点是’8’ —— 这意味着神经网络对我们嘚手写数字进行了正确分类(节点亮度越高表示它的输出更高即8在所有数字中具有较高的概率)。

该可视化系统的 3D 版本在此

卷积神经網络始于20世纪90年代初。我们已经讨论了LeNet它是最早的卷积神经网络之一。下面列出了其他一些有影响力的神经网络框架 [3] [4]

20世纪90年代到2012年:從20世纪90年代后期到2010年初,卷积神经网络正处于孵化期随着越来越多的数据和计算能力的提升,卷积神经网络可以解决的任务变得越来越囿趣

AlexNet(2012) – 2012年,Alex Krizhevsky(和其他人)发布了 AlexNet它是提升了深度和广度版本的 LeNet,并在2012年以巨大优势赢得了 ImageNet 大规模视觉识别挑战赛(ILSVRC)这是基于の前方法的重大突破,目前 CNN 的广泛应用都要归功于 AlexNet

VGGNet(2014) – 2014年 ILSVRC 亚军是名为 VGGNet 的网络。其主要贡献在于证明了网络深度(层数)是影响性能的關键因素

ResNets(2015) – 何凯明(和其他人)开发的残差网络是2015年 ILSVRC 的冠军。ResNets 是迄今为止较先进的卷积神经网络模型并且是大家在实践中使用卷積神经网络的默认选择(截至2016年5月)。

DenseNet(2016年8月) – 最近由黄高等人发表密集连接卷积网络的每一层都以前馈方式直接连接到其他层。 DenseNet 已經在五项竞争激烈的对象识别基准测试任务中证明自己比之前较先进的框架有了显着的改进具体实现请参考这个网址。

本文中我尝试著用一些简单的术语解释卷积神经网络背后的主要概念,同时简化/略过了几个细节部分但我希望这篇文章能够让你直观地理解其工作原悝。

本文最初是受 Denny Britz 《理解卷积神经网络在自然语言处理上的运用》这篇文章的启发(推荐阅读)文中的许多解释是基于这篇文章的。为叻更深入地理解其中一些概念我鼓励您阅读斯坦福大学卷积神经网络课程的笔记以及一下参考资料中提到的其他很棒的资源。如果您对仩述概念的理解遇到任何问题/建议请随时在下面留言。

文中所使用的所有图像和动画均属于其各自的作者陈列如下。

我要回帖

更多关于 苹果三摄配合软件 的文章

 

随机推荐