【ZJU-Machine Learning】卷积神经网络-最近流行的网络结构

VGGNet

在这里插入图片描述
为何要将2个3 * 3卷积核叠到一起?

因为2个叠到一起的3 * 3卷积核,感受野(Receptive Field)是7 * 7,大致可以替代7 * 7卷积核的作用。但这样做可以使参数更少 ,参数比例大致为18:49

用小卷积核代替大卷积核(可视野),以减少参数(但是增大了训练时间)

GoogLeNet

在这里插入图片描述

(1)22层
(2)inception 结构,用一些1 * 1, 3 * 3和5 * 5的小卷积核用固定方式组合到一起,来代替大的卷积核。达到增加感受野和减少参数的目的。
(3)500万参数,比ALEXNET小了12倍。
(4)ILSVRC’14 测试冠军(6.7% TOP 5 ERROR)

最初的Inception结构
在这里插入图片描述
改进的Inception结构
在这里插入图片描述
改进的Inception结构作为基础单元,叠加起来形成整个网络结构。
在这里插入图片描述

ResNet

在这里插入图片描述

(1)152层
(2)ILSVRC’15冠军,(3.57 TOP 5 ERROR)
(3)加入了前向输入机制,将前面层获得的特征图作为监督项输入到后面层。用这样的方法使深层网络训练能够收敛。
在这里插入图片描述

(1)作者首先发现了,训练一个浅层的网络,无论在训练集还是在测试集上,都比深层网络表现好,而且是在训练各个阶段持续的表现好。
(2)在这个例子中,既然20层的网络表现比56层的好,那么大不了另外36层什么事情也不做,于是产生了将浅层网络的输出直接加到后面层的想法。
(虽然网络变浅了,导致网络结构复杂度降低(空间复杂度、时间复杂度降低)的同时loss没有显著减小)
在这里插入图片描述
将浅层的输出直接加入到后面层去,促使深层网络能够表现更好。
在这里插入图片描述

训练技巧:
– Batch Normalization
– Xavier initialization
– SGD + Momentum (0.9)
– Learning Rate:0.1
– Batch size 256
– Weight decay 1e-5
– No dropout

基于ResNet的人脸验证

人脸验证的关键是将人脸图像映射到一个特征空间,在这个空间中同一个人的距离更近,不同人的距离更远。这里我们采用分类监督来学习这样一个特征空间。
用Caffe实现人脸验证,先训练一个人脸分类网络,接着把网络倒数第二个全连接层作为特征层(512维)。
(一)网络结构
首先定义一个28层的ResNet。

在这里插入图片描述
在这里插入图片描述
(二)优化目标
设计我们的目标函数。参照文献,我们把目标函数确定为最小化下式:

在这里插入图片描述

第一项是softmax loss;第二项是center loss。

在这里插入图片描述

训练的Solver文件,该文件指定了训练的网络以及必要的参数

在这里插入图片描述
运行训练脚本开始训练。训练的时候可以随时终止,手动调整学习率再恢复训练。这样子我们就基本完成了用Caffe训练一个卷积神经网络的过程。

修改Caffe,添加新的layer
有时候需要一些特殊的层或者目标函数。这时候我们需要自己实现。Caffe利用各种库
使其自身代码非常简洁,修改起来也很容易。
(三)训练集和预处理
采用Webface作为训练集,包含一万个不同的人。图像的预处理包括人脸检测、人脸关键点检测和对齐裁剪。在检测到人脸关键点之后,我们找到一个相似变换矩阵将人脸与预定义的标准形状对齐。
最终结果如图:
在这里插入图片描述

最后,从处理完的训练集中划分出一部分作为验证集。

  1. 网络结构:改进的RESNET (train_val.prototxt)
  2. 采用SGD训练,每隔一定的步数降低学习率。在训练的时候caffe会把loss记录到log文件中,通过解析log文件画出loss下降图:

在这里插入图片描述

(五)实验结果
测试集是LFW数据集,评测规则是给定两张图片,判断这两张图是否是同一个人。
我们根据特征之间的余弦距离判断两张人脸是否属于同一个人。在这个数据库上的10折交叉验证准确率最终是:99.18%。

在这里插入图片描述

部署到硬件上
在这里插入图片描述

迁移学习

有以下两种应用方式:
1、对不同的数据库,用待识别的数据库(可能很少量)对已训练的模型做微调(跨度可大可小)
2、在已训练好的模型后面,以输出的参数作为输入参数,再接一个神经网络进行训练

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ZJU-I型机械臂是一种由浙江大学机器人研究所开发的六自由度机械臂,具有高速、精度和可靠性等特点。机械臂的运动控制是机器人中的重要研究领域之一,其中点到点轨迹规划是机器人在运动过程中最基础和常用的一种方式,也是机械臂控制的核心问题之一。 点到点轨迹规划的目标是通过给定的起点和终点,计算出机械臂的运动轨迹,使机械臂在运动过程中满足机械臂轨迹的连续性、平滑性、可控性等要求。在过去的研究中,经典的点到点轨迹规划方法包括插值法、线性规划法、最小能量法等。 如果使用Python实现机械臂的点到点轨迹规划,可以采用Robotics Toolkit(简称robot)这个模块。robot模块提供了各种从轨迹规划、控制到仿真的功能,可用于ROS、Vrep、Webots等机器人仿真软件。使用robot模块,可以通过几行代码实现机械臂的点到点轨迹规划,例如: ``` from roboticstoolkit import robot from roboticstoolkit.robots import zju # 初始化机器人 zju_arm = robot.Robot('zju', zju.URDF) # 设定起点和终点 start = [0, 0, 0, 0, 0, 0] goal = [0, 1, 1, 0.5, 0, 0] # 计算机械臂的轨迹 path = zju_arm.get_trajectory(start, goal) # 控制机械臂运动到终点 zju_arm.move_to(goal) ``` 其中,`roboticstoolkit`和`roboticstoolkit.robots`都是导入的Python模块,`zju`是机械臂的URDF定义文件,`start`和`goal`是起点和终点的坐标,`get_trajectory()`函数会返回计算得到的机械臂轨迹,`move_to()`函数则控制机械臂运动到终点。 总之,使用Python实现ZJU-I型机械臂的点到点轨迹规划相对简单,只需要导入相应的模块,并根据需要设置机械臂的各种参数,即可轻松实现机械臂的控制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值