2021-01-31 VGG16

2023-05-16

0 总结

总结

  1. 深度很重要。主要contribution在于对网络depth作用的全面evaluation。使用堆叠3x3小卷积,depth达到16-19。
  2. 用全卷积之后求和,而不是crop(OverFeat)进行测试。注意multi crop测试数据略好。
  3. multi scale jittering能带来明显提升。
  4. 只需要传统的CNN架构,不需要很宽,但很深,可以取得SOTA效果。
  5. VGG的可以拓展到很多任务,经典backbone。

其他博客

  • VGG缺点

1 Intro

2 ConvNet Config

参考了Ciresan & Alexnet.

2.1 Architecture

说明

  • 预处理减去训练集RGB均值
  • 只用最小的3x3卷积
  • 也用到了1x1卷积,只是进行线性变换+非线性激活
  • stride固定为1
  • padding设置成使输入输出尺寸一致(3x3的,padding1)
  • max pooling,s=2, z=2
  • 比较不同卷积层数
  • 最后3层FC,在不同网络下都一样
  • 每个hidden layer都接了ReLU
  • 没有用到LRN (Local Response Normalization),在这里说没有用

vgg_networkconfig

2.2 Configuration

配置了A-E不同深度网络,深度从11到19。

卷积层的宽度 (通道数目或者kernel数目) 都很小,每次max pooling之后放大一倍,直到最后512。

在这种配置下,没有用很大的卷积核、也没有用很多的卷积核,参数少,但可以获得很深的网络。
VGG16是138M,VGG19是144M。

2.3 Discussion

相比其他网络的第一级Conv的receptive field都比较大,比如Alexnet的11x11,这里使用3x3网络但stride=1的方式。
2层3x3卷积的堆叠,其中不带pooling操作,receptive field等效于5x5。而3层等效于7x7。这种堆叠的区别:

  1. 在多层中间,通过ReLU加入了多次非线性rectification操作。
  2. 相比7x7卷积的 7 2 C 2 = 49 C 2 7^2 C^2=49C^2 72C2=49C2参数,3层3x3卷积只有 3 ( 3 2 C 2 ) = 27 C 2 3(3^2 C^2) = 27C^2 3(32C2)=27C2参数。可以看成是对一个7x7的卷积进行了regularization,使其分散到多个3x3卷积上。

3 Classifcation Framework

分类用ConvNet的training和evaluation

3.1 Traning

训练参数

  • batch size 256
  • momentum 0.9
  • weight decay L 2 L_2 L2 penalty 5 ⋅ 1 0 − 4 5 \cdot 10^{-4} 5104
  • dropout for 前两个FC
  • learning rate 初始0.01,并在validation error不降低时除10。总共降低了3次
  • 训练了370K循环,74 epoch
  • 相比AlexNet,需要更少epochs,因为
    • a) implicit regularization by更多depth和更小卷积
    • b) pre-initialization 某些层

Initialization

  • 先训练11层的配置A,用它的前4层Conv和后3层FC来初始化其他网络。防止stall和梯度的不稳定。
  • 其他层随机初始化,0均值0.01方差的Gaussian
  • biases初始化为0
  • 其实可以用Bengio2010的方式进行随机初始化,不一定需要用配置A

输入数据预处理

  • 图片rescale后随机crop除224x224
  • 和Alexnet一样进行水平翻转和RGB PCA shift
  • Rescale方式,可以是固定256/384或者随机[256,512]。固定方式下,先pre-train 256的,初始化384的。对于随机multi-scale,用384的初始化。

3.2 Testing

测试数据处理

  • Rescale
  • FC层转变成Conv. (第一个FC->7x7 Conv,后两个FC -> 1x1 Conv.)
  • 不需要crop,全卷积网络处理Rescale图片
  • 输出的是一个map,大小取决于输入网络,channel数是类别数,map上每个位置对应某类别-原始图像S尺寸的分数。对这个score map(也是一个image)进行平均,就是这个类别的平均score,再进行softmax。
  • 原图和翻转图的softmax后验,进行平均后作为final score。

用FCN相比crop的不同(注意,经过验证,multi crop效果还是更好点)

  • 避免每个crop都运算一次,高效
  • crop更多,实际上对应更精细地近似全卷积
  • 相比crop,全卷积可以用原图信息实现padding,实现更大的receptive field

3.3 Implementation Detail

Caffe,改成支持多GPU。对一个batch,每个GPU处理分出的一部分,对梯度进行平均,因此和单GPU处理结果完全一样。

4 Classification Experiment

ILSVRC-2012数据集,参加ILSVRC-2014比赛。

4.1 Single Scale

单scale的testing处理

  • LRN对11层网络就没有作用。
  • 随着深度增大,错误率下降。
  • 用3x3卷积相比单个1x1卷积,有提升。说明receptive field来捕获spatial context是很重要的。
  • 一对3x3卷积,相比单个5x5卷积,相同receptive field,但深度更大错误率更低。
  • 多scale训练更有效,大约能降低1%的错误率。

vgg_singlescale

4.2 Multi-Scale

多scale的testing处理

证明在测试时,使用scale jittering也有效。VGG16 top-5从8.1%降低到7.5%,而且VGG16和19效果类似。
vgg_multi_scale_test

4.3 Multi-Crop

crop效果更好,并且crop+dense组合的方式最好(说明两者互补)。

vgg_crop_dense_compare

4.4 ConvNet Fusion

多个模型ensemble,有更好的效果。

4.5 Comparison

ILSVRC-2014 单网络(无ensemble)SOTA。

5 Conclusion

6 Appendix. A Localization

用OverFeat的思路进行检测。

Backbone是VGG16,最后加一层输出4D vector代表bbox的中心、width、height。

A.1 Localization ConvNet

训练时,把logistic regression(softmax)目标函数,替换为了Euclidean loss。
用single scale,用分类模型训练对应scale的作为初值,最后一层bbox回归的参数随机初始化。尝试了fine tuning所有参数,也尝试了只fine tune最后一个FC层的参数。

测试时,用了两个方式。

  1. 只对中心crop图计算bbox,并且用GT类别,用来选择最好的网络和参数。
  2. 对全图计算。不同于class score map,这个的输出是一系列bbox预测结果。然后用OverFeat的方式进行merge。

A.2 Localization Experiment

IOU>0.5认为正确。

不同配置(使用GT类别)的比较结论:

  1. PCR (per-class regression) > SCR (single-class regression),和OverFeat不同。
  2. fine tune所有layer,比只fine tune FC层要明显更好
    vgg_loc_settingcomp

对于最终网络(PCR, fine tune所有层),使用top-5类别:

  1. 全图处理后merge,比中心crop的精度更高
  2. 融合多scale,效果更好
    vgg_loc_comp
    和SOTA(OverFeat)相比,更深的Conv网络,但更简单的localization方式,可以获得更好的效果。说明Deeper网络得到了更好的representation。

Appendix. B Generalization of Feature

使用FC层输出的4096维feature作为descriptor,加SVM在小数据集上进行训练(训练时卷积网络参数不变)。
数据集:Pascal VOC, Caltech
其他应用:detection,segmentation,image caption,texture & material recognition
都有明显提升

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

2021-01-31 VGG16 的相关文章

  • 2021-02-06 SONiC SAI结构 Adapter&Adapter Host

    SONiC SAI SAI 结构 SAI是SONiC系统最精华的部分 xff0c SAI spec对SAI如何定义的以及SAI如何被SONiC系统初始化和调用有一些具体的介绍 首先还是一个High Level Design的图 xff1a
  • 2021-02-21 SONiC SAI结构5 VXLAN

    SONiC SAI结构5 VXLAN VXLAN报文处理模型流水线结构 SONiC SAI支持VXLAN协议 xff0c 具备支持VTEP的能力 根据报文处理功能模型的特点 xff0c 不同的功能块可以好像搭积木一样组合在一起形成新的功能
  • 2021-08-29 SONiC中基于策略的哈希配置

    SONiC中基于策略的哈希配置 SONiC可以支持对不同类型的报文采取不同的Hash算法 对于多通道 多链路连接的情况 xff0c 如LAG和ECMP的接口上 xff0c 交换机和路由器采用Hash算法对报文中指定的字段进行Hash计算 x
  • VGG16提取图片特征

    import os import numpy as np import torch import torch nn import torchvision models as models from torch autograd import
  • 2021电赛F题数字识别和巡线部分

    文章之前12月发了一次 xff0c 但是我后来申请的免毕设后 xff0c 用到了一些文字 xff0c 所以删了这篇文章 xff0c 但是还是查重了 xff0c 于是我把一些程序讲解先删了 xff0c 等毕设结束后再编辑加上 这次电赛我没有准
  • 2021-03-15

    float型变量占用32bit xff0c 即4个byte的内存空间 我们先来看下浮点数二进制表达的三个组成部分 三个主要成分是 xff1a Sign xff08 1bit xff09 xff1a 表示浮点数是正数还是负数 0表示正数 xf
  • 2021-03-19

    输出 数字直角三角形 1 2 3 4 5 6 7 8 9 10 11 12 可根据需要增加行数 public class trangle 64 param args public static void main String args T
  • 2021-04-03

    Java代码 importjava util Scanner public classTest public static voidmain String args p br Scanner scan 61 newScanner Syste
  • 2021-08-30 创建tensor时,注意不要让梯度消失了

    下面这种是错误的 xff0c 梯度会消失 data span class token operator 61 span torch span class token punctuation span tensor span class to
  • arXiv Journal 2021-01-11

    想来想去 xff0c 觉得还是把每次在arXiv上扫过的文章简单记录下来 2021 01 11 hep ph 2 papershep th 2 papershep lat 1 paper hep ph 2 papers Title QCD
  • 【日记 2021-05-01】 leetcode练习&& Linux修改文件权限

    题目 xff1a 1335 工作计划的最低难度 题目内容 xff1a 你需要制定一份 d 天的工作计划表 工作之间存在依赖 xff0c 要想执行第 i 项工作 xff0c 你必须完成全部 j 项工作 xff08 0 lt 61 j lt i
  • 2021-06-18

    AttributeError module torch functional has no attribute relu AttributeError module torch functional has no attribute rel
  • VsCode+LaTexWorkshop外置PDF预览配置(2021.3.3)

    随着插件版本的升级有些配置命令发生了改变 xff0c 这里只是做个简单记录 xff0c 写的比较粗糙 后面有闲工夫再来做做美工 VsCode一侧配置 34 latex workshop view pdf viewer 34 34 exter
  • 2021-03-08

    大疆无人机自己动手更换电芯的注意事项 xff0c 当电池多电芯出现均大压差且调整数据无效后 xff0c 或发现某块或多块电芯鼓包 xff0c 说明电芯已经老化 xff0c 寿命用尽 xff0c 就需要更换电芯了 xff0c 厂家为保护消费者
  • 2021-11-11 机械臂路径规划学习进展

    机械臂关节空间和末端空间路径规划 关节空间路径规划简单障碍物情况 xff1a 之后搭建复杂障碍物场景 xff1a 测试发现路径规划的两个步骤 xff1a 采用了关节空间进行路径规划的方案 xff0c 原因主要是在关节空间也就是构型空间中 x
  • 2021-01-11

    C 43 43 指针随便笔记 sizeof 先说一个没有成员函数和参数的类 xff0c 占用一个字节 类中的成员函数 xff0c 作为外部指针时 xff0c 需要记得delete xff0c 否则会内存泄漏 指针的sizeof是指针本身的数
  • 求旋转后的坐标

    坐标点target 中心点center 角度angle 旋转后坐标 function getRotatePoint targetX targetY centerX centerY angle const rotation angle Mat
  • Keras使用VGG16模型预测自己的图片

    Keras使用VGG16模型预测自己的图片 环境 Win10 Miniconda3 Pycharm2018 02 代码如下 from keras applications vgg16 import VGG16 from keras prep
  • ES6 Symbol

    概览 const mySymbol Symbol mySymbol console log mySymbol Symbol mySymbol console log mySymbol Symbol mySymbol false consol
  • 深度学习之基于VGG16与ResNet50实现鸟类识别

    鸟类识别在之前做过 但是效果特别差 而且ResNet50的效果直接差到爆炸 这次利用VGG16与ResNet50的官方模型进行鸟类识别 1 导入库 import tensorflow as tf import numpy as np imp

随机推荐

  • Arch 中 fcitx5 提示拼音不可用的解决过程

    Arch 中 fcitx5 提示拼音不可用的解决过程 问题描述 xff1a 按照 Fcitx5 ArchWiKi 安装 fcitx5 后不能输入中文 xff0c 提示拼音不可用 查找解决办法 首先查看环境变量设置是否正确 xff1a etc
  • Vue3 setup函数的使用

    全新的 setup 函数 在开始编写 Vue 组件之前 xff0c 需要了解两个全新的前置知识点 xff1a 全新的 setup 函数 xff0c 关系到组件的生命周期和渲染等问题 写 TypeScript 组件离不开的 defineCom
  • Stm32的按键控制流水灯

    对于stm32的设置首先是对时钟进行启动 要求 xff1a key0控制LED0和LED1的亮 key1控制LED0和LED1的亮 kw up控制闪灯 led c span class token macro property span c
  • 头文件之间存在依赖关系该如何包含?

    本文旨在探讨头文件之间存在依赖关系时 xff0c 包含顺序的影响 分两种情况讨论 xff1a 头文件A单方面依赖头文件B xff1a struct h xff1a struct abc int num char ptr def h xff1
  • 单片机入门(利用中断控制流水灯的走向)--适合初学者

    电路图 点击下载 xff08 下载时可能会提醒不安全 xff0c 其实没事 xff0c 本博主是放在自己服务器上面 xff09 代码 span class token macro property span class token dire
  • python实现微信公众号定时消息提醒-手把手教你将代码部署到云端

    这两天微信公众号消息提醒蛮火的 xff0c 我也来蹭一下热度 xff0c 我们的主题是考研倒计时 xff0c 顺便也发一发天气预报 思路 xff1a 获取我们需要的数据 xff0c 比如天气信息 然后去微信公众平台注册一个测试号 xff0c
  • 【章节自测】第三章——顺序程序设计

    第三章 顺序程序设计 学校的老师在上程序设计这门课时 xff0c 给我们每一章指定了一些学习目标 xff0c 用于课前的预习和课后的具体检测复盘 xff0c 因为每一个目标都是具体可测的 xff0c 而只要所有的目标你都能达成 xff0c
  • C语言-进程——信号量

    system V的信号量其实是一个信号量数据 xff0c 一个sysyem V代表的是一个或多个信号量元素 信号量本质上是一个数字 xff0c 用来表征一种资源数量 xff0c 当多个进程或线程争夺这些稀缺资源的时候 xff0c 信号量用来
  • python将包(第三方库)安装到指定目录

    一 在指定目录安装python第三方库 target 61 D software anaconda envs PyTorch Lib 这里的target后面跟的是你python安装环境的lib目录 二 用指定源安装python库 这里用到了
  • Dockerfile详解

    Dockerfile 文章目录 基本结构指令详解FROMRUNLABEL MAINTAINERCOPYADDCMDENTRYPOINTENVARGVOLUMEEXPOSEWORKDIRUSERHEALTHCHECKONBUILD 创建镜像上
  • c++调用yolov4模型进行目标检测-使用opencv4.4.0

    前言 最近刚出的opencv4 4 0也支持了yolov4 xff0c 便尝试用opencv调用yolov4进行检测 xff0c 做个记录 当然 xff0c yolov3 yolov4 tiny等也能调用 xff0c 只需修改加载的cfg和
  • c++调用yolov4模型进行目标检测-使用yolov4官方接口

    前言 yolo系列用c写的 xff0c 在工程中的部署特别方便 4月份yolov4横空出世 xff0c 之前试了试效果 xff0c 精度确实有了很大的提升 xff0c AB大神nb 最近需要在C 43 43 项目中使用yolov4 xff0
  • Ubuntu 20.04安装Anaconda3及简单使用

    1 Anaconda安装包下载 xff08 1 xff09 官网下载 xff0c 下载速度较慢 xff08 2 xff09 清华大学开源软件镜像站 2 安装Anaconda xff08 1 xff09 进入文件下载目录 span class
  • 线性回归推导(二)--求闭式解法及纯python实现

    1 假设函数矩阵表示 定义样本 xff08 m个样本 xff0c 每个样本有n个特征 xff09 X 61
  • VMware 开启笔记本摄像头

    环境 xff1a VMware安装CentOS8 笔记本 xff1a windows11 一 在windows系统中打开服务 xff08 Win 43 R 输入services msc xff09 xff0c 找到VMware USB Ar
  • ROS踩坑 - sudo rosdep init失败

    问题一 问题 xff1a sudo rosdep xff1a 找不到命令 解决方案 这是因为没有安装rosdep xff0c 使用如下命令安装 span class token function sudo span span class t
  • ROS踩坑 - 解决ROS与Ananconda冲突

    一 报错情况 在Anaconda环境下用 catkin make 编译 ROS工作空间 xff0c 出现如下报错 Unable to span class token function find span either executable
  • Logistic回归推导(三)--牛顿法及纯python实现

    1 牛顿法图解 牛顿法一般用来求解方程的根或求解极值 xff0c 其基本思想是 xff1a 在现有极值点估计值附近对f x 做二阶泰勒展开 xff0c 从而找到极值点的下一个估计值 下面用一个例图说明 xff1a 如图横坐标为参数 thet
  • Nginx 配置反向代理不生效(代理到nacos集群)

    环境 xff1a centos8 相信各位安装都不成问题 xff0c 反向代理配置也都能安装网上资料配置完成 xff0c 但问题就出在配置好后启动Nginx xff0c 访问默认端口能成功 xff1a 但是访问自己配置的反向代理就会失败 x
  • 2021-01-31 VGG16

    0 总结 总结 深度很重要 主要contribution在于对网络depth作用的全面evaluation 使用堆叠3x3小卷积 xff0c depth达到16 19 用全卷积之后求和 xff0c 而不是crop xff08 OverFea