0%

ImageNet 2012 1000个类名称和编号。ILSVRC2012_img_train.tar 这个文件解压出来都是一些nxxx这样的目录,也不知道他对应是哪个类,通过找caffe_ilsvrc12.tar.gz能把这些类对应出来

0 n01440764 鱼, tench, Tinca tinca

1 n01443537 鱼, goldfish, Carassius auratus

2 n01484850 鱼, great white shark, white shark, man-eater, man-eating shark, Carcharodon carcharias

Read more »

Deep Residual Learning for Image Recognition(2015)

继续单纯增加plain layer,想通过提高NN深度,已经对分类精度不起作用了。同时有恒等映射的方法,构建DNN。resnet通过增加了一条快速通道,把输入和输出链接起来,这样中间的layer就不是学习如何映射h(x),而是要找f(x) = h(x)-x。作者假设f(x),要比h(x)更容易搜索到。同样这里是假设,没有证明,只有实验结果。

这里作者是想说,网络加深并不会更好,当极端情况f(x)=x, h(x)=0,也就是说多加的层什么都不干了,全变成0,相当于网络变浅了。

Identity Mappings in Deep Residual Networks(2016)

这是resnet的一个变种,文章首先分析了在skip connection上做各种函数,发现都是在阻碍信息向更深传播。而后又把residual unit做了变形,做了pre-activition,使网络深到1000层,说在CIFAR 10/100上有更好的效果。但是我怎么看到用InceptionV4也同样可以达到同样或更好的效果

Aggregated Residual Transformations for Deep Neural Networks(2017)

resnet也在不停演进,这篇文章开篇就说人类工作从找特征,转到了找超参。还说google的太不好找超参,所以他们基于VGG/ResNet的策略(stacking same blocks)提出更好的NN,同时也简单的融合了google inception的策略(split-transform-merge)。新的结构叫RexNeXt,超过了resnet和inception的各种变种。

实际上,就是google出了一版resnet和inception结合的网络,facebook也是把resnet和inception结合出了一套,就叫做ResNeXt网络了,但我看应该效果会差不多。

Inception提出了很多想法被后续的NN接受,比如1x1卷积减少计算量,两层3x3等价于一层5*5,非对称卷积,并行的pooling,平滑标签。

Inception和其他的CNN比起来,主要是足够宽了。但是超参太多了,尤其是涉及到网络结构的超参,这个可能就导致他们开始考虑做NAS了。

Read more »

作者认为CNN的卷积核是一种泛化的线性模型(generalized linear model GLM),把GLM换成一种非线性近似函数能提高局域的特征提取能力。他说CNN的假设是说需要提出特征都是线性可分的,但是很多特征是以非线性流型的形式存在。非线性流型(nonlinear manifold)这是啥玩意?

他说自己是NiN,就是在普通卷积核之后增加了一个小的普通NN,以提高特征提取能力。而且在网络最后去掉了全连接层,通过 average pooling layer直接进入softmax分类器。

MLPconv

就是在普通conv后增加了全连接层,但是这篇文章厉害的地方是把这个Full Connect Layer视为1*1的conv layer。这个新颖的观点后来被Inception、resnet使用了,并且google还在论文中感谢了这边文章的作者。

Global Average Pooling

文中提到很多FC layer的弊病,如过拟合,参数多等。于是他用的方法是,把最后一层每个通道的feature map看做是类别的特征,把feature map的每个channel 求一个平均数,作为对应类别的分数,然后在求loss。

这篇文章虽然很多细节上没有交代,比如网络结构参数等等。但是他的想法还是很新奇的。并且被很多后续很成功的Net所采用。

论文基于AlexnNet修改,CIFAR100可以到65.3%

LeNet,证明多层的CNN是有价值的,可以拿来做图像识别

AlexNet,提出数据多,网络深就可以有好结果,但是计算速度、过拟合是问题,所以给出了ReLU,Dropout

VGG,说他们有效是因为用了很小的filters(3*3),因为小的filter可以让网络变得很深。VGG说LRN没啥效果。

使用小filter可以使参数变少,计算量变小。3层3*3就相当于是一层7*7,同时因为之间加入了ReLU,所以使得判定函数(decision function)更加具有判别力,不知道这个的根据是啥?

VGG训练时,是一点点涨起来的,先训练11层的,等稳定了,把网络扩展13层,旧的layer还用原来的参数,新的layer随机初始化参数。

实际在测试VGG时,感觉不是那么好用,首先我用的1060的卡,只能跑很小的batch_size,这样训练就很慢。而且再cifar100上,也没看到特别明显的效果。还不如直接在AlexNet上加几层3*3的Conv Layer。这可能也和数据集有关,可能在ImageNet2012上VGG表现更好。

Vgg Acc@1能到 63%,AlexNet Acc@1能到50%左右

2012----AlexNet----Imagenet classification with deep convolutional neural networks_ILSVRC2012

作者说,为了提高分类精确度,需要收集更多标注数据,需要更强大的模型,还需要更好的技术防止过拟合,这应该是2012年人们面对的挑战。

AlexNet提出了很多新的特性,能够使得训练时间更短,并且提出一些防止过拟合的新方法。AlexNet有8个层,5个卷积层,3个全连接层。

AlexNet使用了ReLU,f(x) = max(0, x) , 这么简单的函数,但是效果很好,比tanh,sigmoid要快很多。

AlexNet使用LRN(Local Response Normalization)层是用来做归一化的。

使用了有重叠的max-pooling。

使用了Dropout防止过拟合,同时做了很多数据增强的事情。

AlexNet结构:

  1. 输入是3*224*224
  2. conv1: kernel(96*3*11*11,stride=4 padding=2), output(96*55*55), active(ReLU)
    1. LRN
    2. max_pool(size=3, stride=2 ), output(96*27*27)
  3. conv2: 256*96*5*5 padding=2, group = 2, active(ReLU)
    1. LRN
    2. max_pool(size=3, stride=2 ), output(256*13*13)
  4. conv3: kernel(384*256*3*3 padding=1), output(384*13*13), active(ReLU)
  5. conv4: kernel(384*384*3*3 padding=1, group = 2), output(384*13*13), active(ReLU)
  6. conv5: kernel( 256*384*3*3 padding=1, group = 2), output(256*13*13), active(ReLU)
    1. max_pool(size=3, stride=2 ), output(256*6*6)
  7. fc6: (256*6*6, 4096), dropout
  8. fc7: (4096, 4096),dropout
  9. fc8: (4096, num_classes)

计算机领域还是得动手做一下,才能更清楚的明白。网上很多人说AlexNet输入图片是227*227,其实就是224*224,只是加了padding=2,最后一列和最后一行被抛弃了。

而且我才发现,alexnet的conv实际是分开两部分了,幸好pytorch的conv2d函数有groups这个参数,否则还真不知道该怎么去实现。

但是在alex上跑cifar,还是比较容易overfitting,cifar的top1 accuracy只能到46%左右。

《Gradient-based learning applied to document recognition》

之前的模式识别系统,分为两部分,第一部分是特征提取器,把输入变量变成低纬度的特征向量。这个过程需要很多人类知识,而且主要是针对特定任务。第二部分是分类器,分类器是比较通用的,也可以进行训练。

卷积网络组合了三个关于架构的想法:局部感知区域、共享参数、空间二次采样。小的卷积核可以提取出基本视觉元素,比如边缘,角点,终点。这些特征再被后续的层去提取更高维度的特征。一个卷积神经元输出一个feature map,完整的卷积层由多个卷积核组成。

池化层的作用是减少feature的精确位置,只关注特征之间的相对位置。

LeNet-5结构

1,C1,6个5*5的filter

2,S2,avg_pooling, 12个参数

3,C3,16个5*5的filter,但是不是完全卷积

4,S4,22的avg pooling , 162=32个参数

5,C5,120个5*5卷积filter,这一层又是完全卷积了,只有C3特殊

6,F6,是全连接层,有84的神经元,这一个层后用了tanh,作为激活函数

7,Output,F7层也不是普通的全连接层,而是用了所谓RBF函数,实际是把F6层输出84维向量,和10个分类的向量求欧式距离

8,Loss Func也不是现在常用的交叉熵,而是一个我看不懂的公式

原始LeNet和现在通用模式,还是有很多差别。比如C3层就不是对S2层的完全卷积操作,而是不同的卷积核对应不同的层,作者说是为了减少计算量,更重要是为了打破对称。而在卷积处理后,是现在avg_pool,并且还是乘上一个参数,再加一个bias,才得到采样以后的数值,这个数值还要进行sigmoid。早先的论文很多都是数学公式,不想现在更注重简化,方便工程实现。

可以看出LeNet的时候,还没有dropout, max_pool, relu等优化,但已经把CNN的大框架定下来了。

这篇文章还讲了很多图像分割,后处理等技术,实在看不懂,留到后续再学习吧,现在先把LeNet的结构搞懂就不错。

也就是说,在1998年人们就开始利用CNN自动选择特征,发展到2010s以后,就开始用GPU寻找feature vector,而且有了大量的标注数据。此后,人工寻找好的NN结构,用不同的超参做实验,俗称炼丹师,到2017年后,开始机器寻找好的网络结构(NAS, PNAS, ENAS)

1998----LeNet----Gradient-based learning applied to document recognition

2012 ILSVRC AlexNet----Imagenet classification with deep convolutional neural networks

2013----ILSVRC ZFNet----Visualizing and Understanding Convolutional Networks

2014----AlexNet V2----One weird trick for parallelizing convolutional neural networks

2014----ILSVRC VGGnet----Very deep convolutional networks for large-scale image recognition ----(ICLR 2015)

2014----NiN----Network in Network

2014----ILSVRC GoogLeNet(Inception V1)----Going deeper with convolutions_ILSVRC2014 ----(CVPR 2015)

2015----ILSVRC ResNet----Deep Residual Learning for Image Recognition——(CVPR 2016)

2015----inception v3----Rethinking the Inception Architecture for Computer Vision

2015----ReNet_A Recurrent Neural Network Based

2016---- Neural Architecture Search with Reinforcement Learning

2016----Binarized Neural Networks_Training Neural Networks with Weights and Activations Constrained to+ 1 or−1

2016----Identity Mappings in Deep Residual Networks —— (ECCV 2016)

2016----Inception V4----Inception-ResNet and the Impact of Residual Connections on Learning

2016----Interleaved Group Convolutions for Deep Neural Networks

2016----Residual Networks are Exponential Ensembles of Relatively Shallow Networks

2016----SqueezeNet- AlexNet-level accuracy with 50x fewer parameters and 0.5MB model size

2016----Wide Residual Networks

2017---- FractalNet_Ultra-Deep Neural Networks without Residuals

2017---- Xception_Deep Learning with Depthwise Separable Convolutions

2017----An Analysis of Deep Neural Network Models for Practical Applications

2017----CVPR2017 best paper----DenseNet ----Densely Connected Convolutional Networks

2017---- (ResNext) Aggregated residual transformations for deep neural networks (CVPR 2017)

2017----ILSVRC2017 winner SENet----Squeeze-and-Excitation Networks

2017----Interleaved Group Convolutions for Deep Neural Networks

2017----Learning Transferable Architectures for Scalable Image Recognition

2017----Residual Attention Network for Image Classification

2017----Neural Architecture Search with Reinforcement Learning (ICLR,2017)

2017----Learning Transferable Architectures for Scalable Image Recognition

2017----Progressive Neural Architecture Search

2018----Efficient Neural Architecture Search via Parameter Sharing

2017----CVPR----ShuffleNet_An Extremely Efficient Convolutional Neural Network for Mobile

2017---- MobileNetV1_Efficient Convolutional Neural Networks for Mobile Vision Applications

2018----MobileNetV2----Inverted Residuals and Linear Bottlenecks: Mobile Networks for Classification, Detection and Segmentation

2018----MnasNet: Platform-Aware Neural Architecture Search for Mobile

我原来是不懂PHP怎么生成的页面。后来懂了,类似PHP的框架都是叫MVC,就是获取请求,拉取数据或添加数据到db,然后返回经过数据填充的页面。这里面只是需要记住框架的基本接口,理解基础处理流程。这里面可能混杂了php的语法,html, css, js。都需要想背单词一样把这些接口API背下来,当然每天反复用是可以记住的。反复用是可以记住,这里的主要问题是不知道怎么拓展。对于那些我不知道API可能永远的都没法使用上。

随后出现了ajax(大概2005年)。ajax其实没什么特别的,就是所谓webapp数据变化时,不需要重新刷新页面,用户体验更好了。随后出现了jQuery,可以特别方便的处理ajax和HTML DOM变化,但是永远没学到精髓,只是知道皮毛。现在(2018)好了,随着浏览器实现的js API越来越强大,jQuery基本面临淘汰了。

现在好了,前端的能力越来越强,强大是通过新的功能,新的API,新的编程范式来实现的。旧的还没完全懂,妈的新的又来了。什么HTML5, CSS3, Javascript也开始带上class了。js不仅在学习传统的开发语言,他还有一堆函数式编程的特性,什么callback,arrow function,promise, async/await,这都尼玛什么鬼,老老实实的开发不好么。

我都快成开发领域的恐龙了,从他妈table布局开始,到现在都是什么flex,grid布局,作为恐龙是不是终将面临灭绝这样的惨状。抱怨是没有用的。整体的互联网经济,符合任何其他行业,现在要做的就是看看哪个是自己的兴趣。不要那么执着,好玩就玩下,不好玩了,没意思了,就去整点其他的。没有那么严重。