【DL-CV】【深度学习-计算机视觉】系列简介及入门推荐<前篇----后篇>【DL-CV】线性分类器html
在初次进入坑,接触高深的算法环节以前,有必要对计算机视觉的目标和实现有一个大概的了解。虽然说都是些量少易懂的知识点,却主角般地贯穿着整个学习过程,并且做为从小白到学习者思惟转换的桥梁,其必要性是确定的。因此对于从未接触过深度学习的小白,强烈推荐了解,非小白可跳过算法
首先来了解在计算机视觉领域上的图像指的是什么。——图像由像素组成,每一个像素经过三原色(RGB)的明暗组合造成一种颜色,RGB各有256级亮度用数字0~255表示。最终图像就是一个由数字组成的三维数组Rw*h*c,三个维度分别是宽、高、颜色通道。segmentfault
所谓的图像分类问题,则是在已有固定的分类标签集合中找出一个标签分配给输入的图像。这是计算机视觉领域的核心问题之一,而且有着各类各样的实际应用。计算机视觉领域中不少看似不一样的问题(好比物体检测和分割),均可以被归结为图像分类问题,许多算法和原理都是为解决此问题服务的。数组
图像分类对人来讲是简单至极的,但对于本质上只会算数的计算机来讲,问题变得复杂起来。“把表明图像的一堆数字经过数学运算变成一个标签(经过计算得到视觉)” 光是这个过程就看似没法理解了,但实际上这是可行的,很多现有的模型能得到不错的结果,原理与实现以后会介绍,如今咱们来谈谈计算机视觉算法在图像识别方面遇到的一些困难函数
这些在人看来不太影响分类的变化,在计算机看来简直是天差地别,每一种变化都让输入的数字数组发生巨大变化。如何提升算法的健壮性,加强噪音抵抗力,在维持分类结论稳定的同时,保持对类间差别足够敏感,这些都是算法设计者要考虑的问题学习
关于详细的解释,能够参考这篇文章。这里只简单的说明一下,因为类别的多样性与同类的类似性,在算法中逐一指定参数实现某个类的区分是很不现实的(先不考虑能不能直接找出这堆参数),因此目前流行的算法更相似于人类学习的过程——给计算机不少已分类好的数据,而后实现学习算法,让计算机本身调整这堆参数,从而学习到每一个类的区分。这种方法,就是数据驱动方法。测试
以此为基础,整个图像分类过程能够总结为三步:spa
关于数据来源,cs231n课程使用的是图像分类数据集CIFAR-10,这个数据集包含了60000张32X32的小图像。每张图像都有10种分类标签中的一种。这60000张图像被分为包含50000张图像的训练集和包含10000张图像的测试集。本系列也将基于此数据进行实践。.net
在构造分类器(算法)的时候,某些参数和函数的是必需要人为选择的,可是关于选择哪一个才能得到最佳效果,不实践的话很难直接给出答案。相似这样的选择,就叫作超参数。这样一说,调优的方法就很明了了,把可能的选择都试一遍,选择准确率最高的一个就好了(一般做图分析取峰值)。设计
但要注意的是千万不能用测试集来进行调优,由于这会带来对测试集过拟合的风险(用测试集训练出来的分类器跑测试集固然表现好,都熟悉了
)。正确的作法是从训练集中分一部分(一般10%~50%)做为验证集用于调优,剩下的再做为训练集用于学习。
测试数据集只使用一次,即在训练完成后评价最终的模型时使用。
有时候训练集数量较少,分得的验证集更少,不利于超参数的调优,这时会用交叉验证的方法,尽量榨干整个训练集。
原理是把训练集分红N份(一般3,5,10),循环着取其中一份做为验证集,其余做为训练集,共跑N次。对于每一个超参数的N个结果取它们的平均值做为该参数的表现,全部平均值画线链接取峰值对应的参数便可。
一般在深度学习(大型模型)中不会用交叉验证,由于这会使计算量翻N倍。但对于小型数据集值得一试。