zoukankan      html  css  js  c++  java
  • 图像分类算法为什么有那么多?

    图像分类算法为什么有那么多?

    AlexNet, VGGNet, MobileNet, ResNet, Inception v1 v2 v3 v4... blablabla为什么针对图像的分类算法有这么多,什么时候该用什么。 我好晕啊, 我觉得可能不止我一个人晕吧。
    那就接着看吧。

    这些算法的来源

    首先事物都是有发展的过程的,图像分类算法也不例外,上面提到的和你听到的各种图像算法都是各位大佬为解决某一领域问题,在普通卷积思想的基础上发展出来的。 别慌,都是人想出来,不会很难。

    为什么要有这么多不同的网络结构

    1. 不同的网络结构 解决的问题不同;
    2. 不同的网络结构 使用的技巧不同;
      可喜的是,这些技巧除了在自身的网络上发挥作用,还可以用在其他网络结构上
    3. 不同的网络结构 应用的场景不同;
      受限于不同的应用平台,PC端和移动端, 神经网络也需要经过裁剪,才能发挥它最大的作用

    刚才说了,这些模型都是不断进化的结果,下图就是他们进化的时间线
    timeline

    接着我们看看各种网络都各自有什么特点吧

    模型的进化

    跟人的进化一样,人类进化时选择直起腰板走路、 选择切掉尾巴、 选择研究人工智能

    1. 图像分类算法选择向更深更宽进化
      比如,AlexNet到VGGNet的过程中,神经网络变得更深更宽
      因为在逐渐加宽加深神经网络模型时, 预测准确率直线上升
    2. 选择改变网络结构
      当广度和深度都对准确率影响不大的时候,人们通过使用不同的模型结构,继续提高预测的准确率.
      VGGNet到InceptionNet/ResNet发展期间,已经改变了原来常规卷积神经网络的网络结构。
    常规的卷积神经网络的网络结构 = [卷积层 + (池化层)] * N +  全连接层 + 输出
    VGGNet在每个卷积层后面继续加多个卷积层,结构 = [卷积层 * M + 池化层] * N +  全连接层 * Q + 输出
    InceptionNet更是提出了分组卷积,改变了卷积层的结构
    

    普通卷积层总结

    1. 通过优势组合,继续进化
      例如InceptionNet + ResNet 组合成了 InceptionResNet, 又将分类准确率的历史记录推高了一截.
      在尝试不同的组合之后,找到几种在各自领域有优势的模型,组合使用

    2. 自我学习 NASNet
      不再由人去指定模型的结构,让一种高级模型去自己学习出一种网络结构

    3. 向实用方向,朝着技术落地的目标努力
      MobileNet就是这样一款针对移动端设计的神经网络结构

    各模型的特点

    • AlexNet 该网络是深度学习的引爆点, 人工智能概念由此进入大众视野。 2012年由多伦多大学发表
    	AlexNet 的网络结构特点
    		5个卷积,3个全连接(2* 4096 +1000)
    		多GPU并行化计算
    		不同卷积层共享参数
    		首次使用Relu
    		1,2,5卷积层后跟随max-polling	
    		两个全连接层上使用了Dropout
    
    • VGGNet 是较AlexNet更深的神经网络
    	更多的使用3x3的卷积核,因为它认为
    		2 个 3x3的卷积层 可以看做一格5x5的卷积层
    		3 个 3x3的卷积层 可以看做一格7x7的卷积层
    		而且,2层比1层多一次非线性变换,同时参数降低28% = (5*5 - 2*3*3) /(5*5)
    	论文认为1x1的卷积层可以看做是非线性变化
    	每经过一个pooling层,图像的通道的数目会翻倍
    
    	先训练浅层网络如A, 再去训练深层网络
    	多尺度输入
    		不同的尺度训练多个分类器,然后做ensemble
    		随机使用不同的尺度缩放然后输入进分类器进行训练
    	但是网络结构再加深 效果提升不大 从而引出了ResNet
    	模型深度达到某个程度后继续加深会导致训练集上准确率下降
    

    vgg

    • ResNet残差网络(更深层网络)
    	 这时发现一个问题,为什么在加深网络层数的后期,网络越深,训练集上错误率反而上升了, 这虽然是一个事实,但并不是说,深层次的网络学不到东西,只是更难优化
    		因此论文提出一个想法: 通过加入一些恒等层,是的深度网络至少可以和浅层网络持平,
    		y=x,虽然增加了深度,但误差不会增加
    
    	网络结构:
    		先用一个普通的卷积层, stride=2
    		再经过一个3*3的max-pooling
    		各种残差网络的子结构
    		没有中间的全连接层, 直接输出
    	残差结构使得网络需要学习的知识变少,容易学习
    	残差结构使得每一层的数据分布接近,容易学习
    

    resnet

    • InceptionNet
    	除了不断加宽加深神经网络,提高精度的这个方向外,
    	还有一个方向就是InceptionNet, 由google提出,InceptionNet是一系列网络的总称
    
    	InceptionNet同样能解决VGGNet网络层次加深,精度不提高的问题
    	此外,InceptionNet还关注神经网络在工程方面的优化。--使得同样的参数量更有效率
    
    	提出分组卷积概念:一层网络上同时使用多种卷积核,看到各种层级的feature。 不同组之间的feature不交叉计算,减少了计算量
    

    inception_v2

    • MobileNet 引入深度可分离卷积
      mobile2
  • 相关阅读:
    合并本地多次commit为一个commit
    git 取消文件跟踪
    遍历进程 遍历窗口
    linux查看程序运行参数
    ubuntu下载地址
    将博客搬至CSDN
    extern"C"的使用
    ESP32-NVS存储(非易失性存储库)
    ESP32-EEPROM存储
    c语言简单数据类型
  • 原文地址:https://www.cnblogs.com/sight-tech/p/13128833.html
Copyright © 2011-2022 走看看