计算机视觉--笔记--图像分类--网络进化史
目录
sift 专利 cv里面没有编译
|
第四讲 图像分类 image classification研究和竞赛中最传统的问题CNN起家的问题 1. 图片分类 2. 竞赛 3. 卷积神经网络 4. 应用案例:超深残差神经网络 Resnet 50层
|
1. 图片分类: 属于某一类? 打标签 输出5个 top-5 错误率 :只要5个预测中有一个命中,就算对了
top-1 error: 只预测1个。
top5 error用的更多 |
2. 竞赛 ImageNet Larger Scale Visual Recognition Challenge 多个任务 图像分类: 1000个类别 训练集(12M),验证集 50k, 测试集 150k http://image-net.org/challenges/LSVRC/2016/index imageNet数据集 根据wordNet组织的图片集 100 000+ 个词、词组(synsets) 8000+ 名词 场景分类(大概说一下): 背景 室内室外 自然场景 MIT places2数据集(10M+,分类400+),365场景分类, 训练集(8M),验证集(36K),测试集(328K) 物体检测(object detectoin R_CNN): 基本上与训练的CNNmodel都指的是ImageNet。基础网络,预训练模型 是其他模型的初始化网络 物体定位(instance level): 场景解析(scene parsing):
|
网络进化:
|
alexNEt VGG GoogleNet ResNet深度: 8 19 22 152 VGG ResNet 结构 简洁有效 性能很好 已修改 迁移到其他任务 高层任务的基础网络 性能竞争 网络: GoogleNet : inception v1 --v4 split-transform-merge
ResNet: ResNet 152 ResNeXt 深度 宽度 基数(三个维度)
|
性能进化史 v4 带了直连思想
|
卷积神经网络**函数: 非线性 sigmoid (深度模型不太好用,) relu 分段线性,没有饱和(resnet可以成功训练出来的重要原因,解决梯度消失的问题)
卷积: 卷积 步长大于1 有降低维度 增加非线性 卷积降维 ()步长大于1) 步长为1的话相当于没有降维
|
池化: 最终输出标签,1*1000 池化 特征融合,尺寸降维,不降通道一定相邻区域 特征 融合 多通道 每个层 各做各的 平均池化 最大化池化() 超参: 尺寸 步长 计算类别(平均池化 最大池化) |
全连接: 作用 推理器,去除空间信息 抹掉空间信息 和基础圣经网络一样的 前面的卷积层 提取特征 层数越多,语义层数更高 全局感受野,卷积核的尺寸可以认为和输入图片一样
|
工程trick: 图像像素中心化: RGB减去各自通道的均值 防止过拟合: 数据增强x10: 256x256 提取中心和四角 224x224 自图片x5, 水平翻转 x2 dropout: 训练中,随机让一些神经元 输出设为0,失活率 0.5
|
Alex Net:image-net 2012 竞赛第一,标志着 DNN深度学习革命的开始 5个卷积层,3个全连接层 60M个参数,650k个神经元 2个分组 --> 2个GPU 训练时长1周,50x加速 新技术: ReLU**函数,max pooling 池化, dropout regularization
|
局部相应归一化LRN: 某个位置(x,y)跨通道方向上面归一化, 跨通道方向归一化
|
network in network (NIN)bottleneck layer 提高CNN局部感知区域() 1*1卷积层 升维度或者降维 本质 全连接 本质 变维度 计算性质需求 必须变维度 或者压缩特征 稀疏特征变得紧密
太厚了压一压 降维用的更多 也可以用来升维度
|
VGG Net |
大的卷积核 分解 小的卷积核 7x7 卷积核 --> 3个3x3卷积核 减小参数,降低计算量(49C2 --->27C2 ),增加深度 更多的非线性(更多的层数 更多的relu**,更高的非线性)
简单有效, ImageNet 2014 No.2 网络改造的首选网络
16层和19层性能最好 固定基本input size :这样224*224 比性能好比一点,性能计算时间
|
固定尺寸限制 卷积 --> 全连接 超参数是定的 如果图片尺寸变化 全连接肯定会出问题 残差网络 inception的几个网络可以 全尺寸 没有尺寸限制 只要没有全连接 都没有尺寸限制 全连接相当于 全卷积 必须写死
超参空间太大 更改网络 前一代基础上 改网络 不改超参 如果更改超参数 网络性能提升 需要证明 是构架改变提升网络性能 还是 超参改变提升网络性能 相对 学术 更关注 网络对性能的提升
学术界 关注网络结构 工业界 硬件达不到要求 怎么让 模型更加高效化 性能损失不大 CNN可以做成实时 实时性不高 因为计算量很大
tensorflow 嵌入式 优化 核心 C++,python 只是一个语言接口 提出新的设计思想 一定要用到C++编写 tf必然是工业界支撑,尤其是好的网络 神经网络 工程性质很重 正好 只有企业有资源人力做这个东西, 设备 很多并行实验 AI热潮 会用到CNN思想,R-CNN 就用到opencv中金字塔的思想 数学解释还是做不到
中小奇企业缺少并行计算的开发能力 tf就是让大多数企业了解接口就可以直接使用,开源 ,提升知名度 视频里面 分析 一定会用到opencv
|
GoogleNet |
进化顺序: inception v1 --> v4 提升性能 : 减小参数,降低计算 增加宽度和深度 |
inception v1:基本单元 inception split-merge (1x1 3x3 5x5 卷积 3x3 池化) 增加网络多尺度适应性 四个操作各自捕捉各自的特征,最后将特征串接 增加网络宽度 bottleneck layer: 使用NiN的1x1卷积 特征降维度 大幅降低计算量 10x 全连接取消: 参数量大,减负担 最后只连接一个全连接层 辅助分类器: 解决前几层的题都消失问题
超参空间太大 |
inception v1 核心组件 inception architecture(稀疏连接结构): 提供多尺度特征: 输出通道多尺度化(感受野) 首个split-merge思想 串接合并所有分支 bottleneck layer: 1x1卷积 解决多尺度带来的高额参数&计算
取消全连接(主分类器的): 全尺寸卷积层 占用大量参数 AlexNet: 58.6M (6x6x256x4096+4096x4096+4096x1000) VGG: 72M (7x7x256x4096+4096x4096+4096x1000) 由全局平均池化代替: 输入:7x7x1024 输出:1x1x1024 一大趋势
两个辅助分类器: 深层次的网络中,梯度回传到最初几层,存在严重的题都消失问题 有效加速收敛 测试阶段不用
|
inception V2
|
batch normalization(批归一化): 很重要,各大网络都在使用,resnet ,gnn, 解决internal covariate shift 问题 白化:使每一层输出规范化到N(0,1),,但是抹杀了数据特性,有的确实均值高一点 配对使用 scale shift :
需要学习参数,训练时实时计算,计算or test时,使用固定值(对训练求平均) 允许高的学习率 取代部分dropout 内容: batch范围内,对每一个特征通道分别归一化,减均值除以标准差 k个通道,k个batch normalization
5x5 卷积核 --> 两个3x3卷积核 降低计算量,借鉴resnet
|
inception V3 |
核心组件: 非对称卷积:NxN : 1xN --> Nx1 降低参数量和计算量,工程成分很重 不同的层 不同的方案 三种方案,不同的分辨率,不同的方案,工程性很强,不太好解释,工程实践得出的结果 尺寸越小层数越深 |
高效降尺寸: pooling 尺寸缩小 通道数并没减少 一般呢尺寸减小,通道数会多一些,这样不会损失信息 这里pooling呢,想做一种特征通道数增加。 35x35x320 --> 17x17x320 -->17x17x640 有表达瓶颈 计算量小 35x35x320 --> 35x35x640 -->17x17x640 无表达瓶颈 计算量大
高效的降尺寸:
避免表达瓶颈:降尺寸前增加特征通道 2个并行分支: 卷积分支 +池化分支, 串接分支结果 35x35x320 --> 17x17x320 (pool) ---> ----> 17x17x320 (conv) ---> concat ---> 17x17x640
|
取消浅层的辅助分类器:完全没用 深层的辅助分类器: 训练后期有用 加上BN dropout 主分类器 top1性能 提升 0.4% 正则化作用 用在最后一层17x17后面
|
总结: V3 避免表达瓶颈 不增加计算量,增强结构(表达力)(宽度深度) 往其他网络上面改进,可以借鉴这些改进 |
inception V4引入残差 到inception Architechture |
ResNet 残差网络 |
核心组件: plain net :可以拟合出任意的目标映射H(x) residual net: 可以拟合出任意的目标映射F(x), H(x)=F(x)+x F(x)是残差映射,相对于identit来说 当H(x)最优映射 接近identity,很容易捕捉到“小的扰动” 倒数至少为1,解决梯度消失问题
其他涉设计: 全是 3x3卷积核 卷积步长为2,具有降维作用,取代池化操作, 使用 Batch Normalization 取消:max池化,全连接层,dropout
|
网络很简单 很有效 |
更深的网络: 根据bottleneck 改进优化 残差映射网络 原始: 3x3x256x256 -> 3x3x256x256 优化: 1x1x256x64 --> 3x3x64x64 --> 1x1x64x256 中间有信息损失,但是拟合的是残差,丢失一些信息是可以接受的,影响应该不大
|
|
resNeXt网络:提出第三个DNN维度: cardinality(基数,这个翻译不是很合理) 之前 深度 (层数)宽度(分支 ,不同操作的分支) 借鉴了显卡分组的思想
采用 split--transform-aggregate split:不同的分支,完全同质化,每个分支都一样,每个分支操作数量维数更低 transform:不同的分支上面做卷积操作 aggregate: 合并,之前的inception(串接合并);这里是做通道相加
低维度卷积之后会做特征升维变换 加法合并
同参数规模下,增加结构,提高模型表达能力 100层 ResNeXt=200层ResNet
ILSVRC-2016竞赛第二
inception 论文里面 c要变多 数据量 维持比较小的变化
|
CNN设计准则:避免信息瓶颈: 卷积过程中,空间尺寸变小,输出通道变多 数据量HxWxC 要变缓慢变小
不要突然变小
通道(卷积核)数量保持在可控范围: 卷积核尺寸大小 数量都不能太大,参数数量很大,效应指数级, 输入通道数量C,输出通道数量K 参数数量: Hf x Wf x C x K 操作数量:(Hf x H)/stride x (Wf x W)/stride x C x K 感受野要足够大: 卷积是关于局部图片的操作 捕捉大尺寸内容,特征比较稳定,--》参数计算都会变大 一次性3个3x3卷积核,对于捕捉原始的感受野可能存在问题
多个小尺寸卷积核 vs 一个大尺寸卷积核: 参数少,计算快,多个非线性**,更好的非线性表达能力。 多个小尺寸卷积核 一般都在后面使用,不会一开始就使用。
|
分组策略: 都有, googleNet: inception 分支操作 ResNeXt: cardinality 分组 inception v3: 空间分解: 通道分解
|