2019-09-24 19:17:46 qq_26413875 阅读数 190
  • 大数据:深度学习项目实战-人脸检测视频教程

    购买课程后,请扫码入学习群,获取唐宇迪老师答疑 进军深度学习佳项目实战:人脸检测项目视频培训课程,从数据的收集以及预处理开始,一步步带着大家完成整个人脸检测的项目,其中涉及了如何使用深度学习框架Caffe完成整个项目的架构,对于每一个核心步骤详细演示流程和原理解读,在完成检测代码之后进行了详细评估分析,并给出一篇顶级会议论文作为学习参考,详细分析了针对人脸检测项目的优缺点和改进策略。

    16452 人正在学习 去看看 唐宇迪

花了两个月的时间 终于把深度学习经典的论文都看了一遍 也算小有收获吧。现在将其整理出来,既增强个人理解和记忆,又可以和大家一起交流学习,何乐为不为?废话不多说,准备发车了,请捉紧时间上车~
首先这篇介绍的是深度学习领域的扛鼎之作–**ImageNet Classification with Deep Convolutional Neural Networks****也就是人们常说的(AlexNet)**可以毫不夸张的说,AlexNet的出现,开启了深度学习领域的热潮。Alexnet的网络架构是CNN的经典架构,对于想要入门深度学习邻域的小伙伴一定要精度呀~
首先放上论文地址:ImageNet Classification with Deep Convolutional Neural Networks

AlexNet的基本情况

训练了一个庞大的深层卷积神经网络,将ImageNet LSVRC-2010比赛中的120万张高分辨率图像分为1000个不同的类别。在测试数据上,取得了37.5%和17.0%的前1和前5的错误率,这比以前的先进水平要好得多。具有6000万个参数和650,000个神经元的神经网络由五个卷积层组成,其中一些随后是最大池化层,三个全连接层以及最后的1000个softmax输出。为了加快训练速度,使用了非饱和神经元和能高效进行卷积运算的GPU进行训练。为了减少全连接层中的过拟合,我们采用了最近开发的称为“dropout”的正则化方法

AlexNet的数据集

进行神经网络训练首先肯定得有数据,数据为王嘛!为此,AlexNet使用的训练集为Imagnet数据集,ImageNet是一个拥有超过1500万个已标记高分辨率图像的数据集,大概有22,000个类别,都是用人工和亚马逊的一个标记工具进行标记的。从2010起,每年都会举办ImageNet大型视觉识别挑战赛(ILSVRC)的比赛,用的就是Imagenet的子集,包括训练集,验证集,测试集。在该比赛中,常常用这两个指标去衡量你的网络架构的好坏:**top-1错误率和top-5错误率。top-1错误率就是说没有正确识别(分类)物体的次数,或者说预测出来的最大概率中的对象不是正确的对象,预测到其他的物体去了。top-5错误率就是说预测出来排名前五个最大概率的物体都不是正确的物体,正确的物体网络把它的识别概率判别为很低。**值得注意的是,并不是说把Imagenet的图像拿过来就可以用了,还得做些必要的处理。这里面最重要的就是:**对获得的图片进行尺寸缩放到固定的大小。完成这一步之后再将其送入网络当中训练。原因在于Alexnet具有全连接层,在你设计好全连接层的那一刻,权重参数便是一定的,因此输入的图片尺寸也必须一定。**在本篇论文里,作者还对图片进行了另一个操作,除了将每个像素中减去训练集的像素均值之外,也就是常说的零均值化(或者说去中心化),零均值化后数据的均值会为0,所以称为零均值化。

AlexNet的网络架构

AlexNet的网络架构
AlexNet主要有5个卷积层,3个全连接层组成。在介绍上图的具体结构之前,首先介绍一下整个网络结构里最重要的几个部分。

ReLU 激活函数 ( ReLU Nonlinearity)

relu激活函数的全称是 Rectified Linear Units (ReLUs),也就是修正线性单元。传统的激活函数一般采样的是sigmoid(x)函数或者tanh(x)函数,他们是饱和非线性函数。relu则是非线性非饱和函数,数学表达为max(0,x).两类相比,relu不存在当输入x较大或较小时存在输出饱和的情况,relu在输入大于0时导数始终保持在稳定的数值,而且不存在饱和的情况,可以大大加速神经网络反向传播的速度。如下图所示。达到25%的错误率时,relu使用的迭代次数几乎只是tanh的1/4.
relu和tanh两者比较

局部响应归一化(Local Response Normalization)

局部响应归一化就是我们之前常说的LRN.这篇文章里作者说虽然relu激活函数不存在饱和的情况,只要输入是正的就会进行网络学习,但是,使用LRN后还是可以增加网络的泛化能力。在后续的一些代表性论文中,许多大神们论证了LRN没有什么用,所以现在这一技术已经不用了。但是原理还是要说一下,毕竟,来都来了嘛~
LRN
LRN的作用就是,对位置(x, y)处的像素计算其与几个相邻的kernel maps的像素值的和,并除以这个和来归一化。kernel maps的顺序可以是任意的,在训练开始前确定顺序即可。其中的k, N, α, β都是超参数,论文中给出了所用的值为k=2, N=5, α=10e-4, β=0.75

重叠池化(Overlapping pooling)

以前的池化都是卷积核的大小是多少,那么步长就是多少,比如说池化的卷积核是2*2,那么s就是2;那现在Alexnet不这样了,它让s小一些,这样一来输出的特征图就丰富起来了不,所以,就可以起到减小过拟合的作用了。既然说到过拟合,那就直接说下过拟合先吧。防止过拟合主要有两类手段,一类是数据增强,另一类就是作者提出的dropout.

数据增强

Alexnet具有6000万个参数,所以,在数据不够的情况下,很容产生过拟合现象,为此,作者提出了两者手段,减轻这个问题。
第一个就是标题说的数据增强,那怎么个增强法呢? 使用标签保留转换(label-preserving transformations),就是说,你怎么变都好,始终还是那个物体,标签不变。
数据增强的第一种形式包括平移图像和水平映射。对图像进行随机裁剪以及水平映射。裁剪时,只需裁剪成224*224大小就行,并且在四个角和中心裁剪,就是5张,那么加上水平映射的就是10张。这种方式大量的增加了训练集的数量。
第二种形式的数据增强包括改变训练图像中RGB通道的灰度。简单点来说就是改变图片的颜色。使用的是主成分分析法(PCA)

dropout

这个技术翻译过来就是丢弃。那么丢弃什么呢?大神说,对于隐藏层的神经元,以50%的概率随机的选择一些让其为0,这样的话每次训练时为0的神经元都不一样,也就是神经网络架构不一样了。这样可以让网络更加鲁棒,大大增强网络的泛化能力,减少过拟合。

Alexnet具体架构

经过上述对一些很重要的结构的介绍,现在就可以具体说一下网络了。该网络有5个卷积层,3个全连接层。
第一个卷积层的输入为224×224×3的图像,对其使用96个大小为11×11×3、步长为4(步长表示内核映射中相邻神经元感受野中心之间的距离)的内核来处理输入图像。第二个卷积层将第一个卷积层的输出(响应归一化以及池化)作为输入,并使用256个内核处理图像,每个内核大小为5×5×48。第三个、第四个和第五个卷积层彼此连接而中间没有任何池化或归一化层。第三个卷积层有384个内核,每个的大小为3×3×256,其输入为第二个卷积层的输出。第四个卷积层有384个内核,每个内核大小为3×3×192。第五个卷积层有256个内核,每个内核大小为3×3×192。全连接层各有4096个神经元。

训练细节

训练过程使用随机梯度下降法进行训练,mini-batch大小为128,动量momentum为0.9,权重衰减(weight decay)为0.0005。权重W的更新法则是:
权重更新方程:随机梯度下降法SGD

测试结果

我们在ILSVRC-2010上取得的结果如表1所示。我们的网络的top-1和top-5测试集错误率分别为37.5%和17.0%。
和其他模型的top-1和top-5错误率

pytorch实现的网络结构代码

#!/usr/bin/env python
# -*- coding:utf-8 -*- 
# Author: yehaizi time:2019/9/24:22:


# Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True, padding_mode='zeros')
# 即输入参数分别为(卷积前输入通道数,卷积后输出通道数,卷积核大小,步长,补丁,扩张,卷积核个数,偏置,补丁方式)
# torch.nn.Sequential是一个Sequential容器,模块将按照构造函数中传递的顺序添加到模块中。通俗的话说,就是根据自己的需求,
# 把不同的函数组合成一个(小的)模块使用或者把组合的模块添加到自己的网络中。
import torch.nn as nn
class AlexNet(nn.Module):
    def __init__(self, num_classes=1000):
        super(AlexNet, self).__init__()     # nn.Module子类的函数必须在构造函数中执行父类的构造函数,这个是父类的构造函数
        # 5个卷积层
        self.features = nn.Sequential(
            nn.Conv2d(3, 64, kernel_size=11, stride=4, padding=2),
            # inplace=True
            # 计算结果不会有影响。利用inplace计算可以节省内(显)存,同时还可以省去反复申请和释放内存的时间。
            # 但是会对原变量覆盖,只要不带来错误就用。在这里个人理解其意思就是relu后会覆盖原来的卷积后的值,减少存储量,
            # 毕竟也用不上了,能不要则不要
            nn.ReLU(inplace=True),
            nn.MaxPool2d(kernel_size=3, stride=2),
            nn.Conv2d(64, 192, kernel_size=5, padding=2),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(kernel_size=3, stride=2),
            nn.Conv2d(192, 384, kernel_size=3, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(384, 256, kernel_size=3, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(256, 256, kernel_size=3, padding=1),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(kernel_size=3, stride=2),
        )
        # 三个全连接层
        self.classifier = nn.Sequential(
            nn.Linear(256 * 6 * 6, 4096),
            nn.ReLU(inplace=True),
            nn.Linear(4096, 4096),
            nn.ReLU(inplace=True),
            nn.Linear(4096, num_classes),
        )

    def forward(self, x):
        x = self.features(x)
        x = x.view(x.size(0), 256 * 6 * 6)
        x = self.classifier(x)
        return x


if __name__ == '__main__':
    # Example
    net = AlexNet()
    print(net)

2019-01-20 18:41:53 qq_40859461 阅读数 341
  • 大数据:深度学习项目实战-人脸检测视频教程

    购买课程后,请扫码入学习群,获取唐宇迪老师答疑 进军深度学习佳项目实战:人脸检测项目视频培训课程,从数据的收集以及预处理开始,一步步带着大家完成整个人脸检测的项目,其中涉及了如何使用深度学习框架Caffe完成整个项目的架构,对于每一个核心步骤详细演示流程和原理解读,在完成检测代码之后进行了详细评估分析,并给出一篇顶级会议论文作为学习参考,详细分析了针对人脸检测项目的优缺点和改进策略。

    16452 人正在学习 去看看 唐宇迪

含论文下载链接,部分含有代码链接,持续整理中…

经典论文

基础网络

Alexnet

ImageNet Classification with Deep Convolutional Neural Networks.pdf
深度学习兴起的引子

VGG

Very Deep Convolutional Networks for Large-Scale Image Recognition
使用 3*3 卷积减少参数量的深层网络

GoogleNet,Inception系列

Densenet

Densely Connected Convolutional Networks

參差系列

何恺明个人主页http://kaiminghe.com/

轻量级网络

LOSS FUNCTION

AM-Softmax

A-Softmax

L-Softmax

Object Detection

Semantic Segmentation

OTHERS

A guide to convolution arithmetic for deep learning

上采样的优点

Escaping From Saddle Points –Online Stochastic Gradient for Tensor Decomposition

batch的优点

Dynamic Curriculum Learning for Imbalanced Data Classification

商汤的不均衡样本分类文章

Data Distillation: Towards Omni-Supervised Learning

数据蒸馏,一种使用无标签数据训练的全方位学习方法,在Kaggle等大数据竞赛中非常有用

IQA

No-reference Image Quality Assessment 相关论文,包括人脸姿态估计

DeepLearning-500-questions

四川大学深度学习500问,包含了深度学习数学基础、经典框架、常见问题等
github

2019-01-13 12:13:13 Evabook 阅读数 175
  • 大数据:深度学习项目实战-人脸检测视频教程

    购买课程后,请扫码入学习群,获取唐宇迪老师答疑 进军深度学习佳项目实战:人脸检测项目视频培训课程,从数据的收集以及预处理开始,一步步带着大家完成整个人脸检测的项目,其中涉及了如何使用深度学习框架Caffe完成整个项目的架构,对于每一个核心步骤详细演示流程和原理解读,在完成检测代码之后进行了详细评估分析,并给出一篇顶级会议论文作为学习参考,详细分析了针对人脸检测项目的优缺点和改进策略。

    16452 人正在学习 去看看 唐宇迪

论文汇总

将自己学习的论文进行汇总和分析,从而更清楚地把握整体论文脉络(持更)

经典必读

原博客链接: link.

  1. ImageNet Classification with Deep Convolutional Networks(AlexNet)–起源 link.
  2. Visualizing and Understanding Convolutional Neural Networks(ZF Net) link.
  3. Adaptive deconvolutional networks for mid and high level feature learning(DeConvNet) link.
  4. Very Deep Convolutional Networks for large-Scale Image Recognition (VGG-Net) link
  5. Going Deeper with Convolutions (GoogLeNet) link
  6. Deep Residual Learning for Image Recognition (ResNet)
  7. Region Based CNNs (R-CNN,Fast R-CNN,Faster R-CNN)
  8. Generative Adversarial Networks (GAN)
  9. Genertating Image Descriptions

最新进展

  1. You Only Look Once (YOLO,YOLOv2,YOLOv3)
  2. Attention is All You Need

工程相关

1、损失函数(cross-entry)、分类函数(softmax)以及激活函数(relu)的选择
2、超完备稀疏表示简单理解(over-complete sparse representation)link
3、1×1卷积核
4、牛顿法与拟牛顿法–非线性优化算法 link
5、范数norm的简介

深度学习论文汇总

阅读数 1123

深度学习论文

阅读数 2109

没有更多推荐了,返回首页