深度学习之图像分类

第一篇CSDN文章,写的很差,还请各位大佬指正。万事开头难,千里之行始于足下!git

1.什么是图像分类github

图像分类,核心是从给定的分类集合中给图像分配一个标签的任务。实际上,这意味着咱们的任务是分析一个输入图像并返回一个将图像分类的标签。标签老是来自预约义的可能类别集。
示例:咱们假定一个可能的类别集categories = {dog, cat, eagle},以后咱们提供一张图片(图1)给分类系统:web

在这里插入图片描述
图1 图像分类目标是根据输入图片且根据预约义类别分配标签算法

这里的目标是根据输入图像,从类别集中分配一个类别,这里为eagle,咱们的分类系统也能够根据几率给图像分配多个标签,如eagle:95%,cat:4%,panda:1%。微信

2.图像分类和图像识别的区别

图像分类和图像识别这两个概念很容易搞混,不少作了几年视觉的人也搞不清它俩的区别,在此说明他俩的区别,让初学者少走弯路。
以人脸识别为例,假设一个班级里有20我的,用图像分类作来区分每一个学生,能够采集20我的的人脸图片进行训练模型分类,可是若是班级新来一个同窗,咱们就须要采集新来同窗的图像从新训练模型,预测的图像是把训练好的模型做为特征提取器给softmax分类器作分类;而图像识别是使用卷积网络训练大量人脸图像,训练好的模型做为特征提取器,预测的时候利用特征提取器和注册人脸图像计算类似度。网络

在这里插入图片描述

3.图像分类适合什么场景

图像中待分类物体是单一的,如上图(1),若是图像中包含多个目标物,以下图(2),可使用多标签分类或者目标检测算法。
在这里插入图片描述dom

4.目前图像分类的网络模型

经常使用的标准网络模型:Lenet、Alxnet、Vgg系列、Resnet系列、Inception系列、Densenet系列、Googlenet、Nasnet、Xception、Senet(state of art)ide

轻量化网络模型:Mobilenet v1,v二、Shufflenet v1,v2,Squeezenet
以上网络模型不作具体说明,网络博客不少,若有不懂,可加我微信:JGQ863995835svg

目前轻量化模型在具体项目应用时用的比较普遍:函数

优势:(1)参数模型小,方便部署(2)计算量小,速度快

缺点:(1)轻量化模型在精度上没有Resnet系列、Inception系列、Densenet系列、Senet的accuracy高

若是使用Finetune tricks,轻量化模型也能达到上述模型精度的水平,因此在此力推轻量化模型。

(注:我我的在项目中经常使用的网络模型resnet系列、mobilenet v二、lenet,不要小瞧lenet,在工业领域绝对大杀器,天然场景不适用。我本身改进lenet的模型,在项目应用中比lenet高3%,你们能够参考:https://github.com/machine52vision/Imporve-lenet

5.图像分类中的tricks

利用好tricks能够有效改善模型精度,下面介绍各类方法

方法一:魔改网络结构

(1)使用resnet的shortcut方法

(2)使用Inception 多尺度卷积核

(3)使用convolution的stride代替pool层

(4)使用正则化方法Batch normalization、Layer normalization、Instance normalization、Group Normalization;若是使用多GPU可使Synchronized Batch Normalization

(5)对于不规则目标使用deform convolution

(6)轻量化模型使用group convolution

(7)小卷积核大视野使用dilate convolution

(8)去掉线性层使用全卷积层

(9)若是使用线性层,使用一维的Normalization,能够加快收敛而且(此方法其余网络没有)

方法二:模型初始化

(1)若是不使用finetune方法,尽可能不使用随机初始化,推荐kaiming方法初始化,是xavier的改进版;

(2)大力推荐finetune方法,少许数据就可达到较高的accuracy;

方法三:损失函数和优化器

(1)通常分类使用softmax+Cross Entropy损失,MSE(均方偏差)因为非凸函数,尽可能不使用

(2)优化器推荐又快又好的AdaBound(新鲜出炉的算法,比SGD快,比Adam好,反正是又快又好!!!)

方法四:学习率调整

(1)Warmup

(2)Linear scaling learning rate

(3)力荐cosine learning rate或ReduceLROnPlateau learing rate

方法五:激活函数

(1)sigmoid,tanh因为后期梯度消失或者梯度很小,致使收敛比较慢,尽可能不使用;

(2)推荐relu及其各类改进版本,Elus、Leaky relu、Slus、PRelu、RRule等;

方法六:数据扩增方法

(1)Random image cropping and patching (RICP)

(2Cutout

(3)Mixup train

(4)随机旋转

(5)上下、左右flip

(6)调整亮度、对比度、饱和度

(7)其余各类裁剪方法

方法七:其余方法

(1)Knowledge distillation

(2)batch size不要设置太大(收敛慢),也不要过小(梯度随机性大),依据经验在224*224图像,在现存不溢出的时候,batch size=64。

(3)使用finetune方法,通常epoch=10左右就可达到很高的accuracy;若是不使用finetune方法,通常epoch=50~100左右(以上是根据工程经验,数据集在几万张,类别小于100的状况下,若是误导,还请指正)

(4)对权重使用L2正则化,能够有效抑制过拟合

(5)Momentum通常设置0.9,根据前10次梯度方向向量的经验来加上这次的梯度方向向量来更新梯度(防止梯度突变;1/(1-0.9)=10)

(6)label smooth

以上是我依据工程项目经验的一些心得,若是写的有误还请多多包涵并指出!喜欢可关注我微信公众号:52机器视觉

下一篇会介绍深度学习之目标检测,这是一个大坑