【AI】当传统算法碰到计算机视觉(03)

目录

1、计算机视觉的任务(分类)

1.1 图像的表示

1.2 图像分类的难点

1.3  机器学习套路

2、当传统算法和CV碰撞(憋屈)

2.1 用K紧邻算法做CV分类

2.2 好用的数据集CIFAR-10

3、他来了他来了(神经网络)

3.1  线性函数神经网络

3.2 如何衡量分类的好坏(损失函数)

3.3 正则化惩罚(规避过拟合)

3.4 求损失函数值

4、计算分类得分数值

4.1  得分转为概率Softmax(分类)


1、计算机视觉的任务(分类)

    计算机视觉的任务,其实是个哲学问题:我是谁?而你!又是谁?这是个分类问题。尽管深度学习的内部过程中,提取特征是个黑盒子,但是,我们学习过程中还是要了解里面发生了什么才行,要清楚深度学习做分类任务的原理

1.1 图像的表示

计算机视觉中,一般图像都可以表示为一个矩阵,我们可以用像素来表示成3维图片,每个像素从0到255(越大表示越亮),例如:300*300*3,含义如下,

高度:300

宽度:300

颜色通道:3,RGB三颜色通道

计算机视觉中,基本也都是基于三通到像素矩阵进行各种任务,比如分类

1.2 图像分类的难点

当然这种矩阵表示,也是会碰到的问题,比如环境嘈杂、杂七杂八的东西多、遮蔽等等,都会影响。像李飞飞2017年的时候就结束了,因为计算机能识别的精度远远超过人类了,再去组织图像分类比赛,已经没有意义了,所以这个比赛就解散了。

解决办法:不会的场景,你就针对这个场景标记出来,神经网络就会学习到,所以,输入不能识别的数据就可以,最好带上真实的标签。

1.3  机器学习套路

机器学习的套路,神经网络和机器学习的套路也是差不多的

2、当传统算法和CV碰撞(憋屈)

2.1 用K紧邻算法做CV分类

 用传统算法做计算机视觉可能会遇到问题

我们现在不知道绿色的点是什么形状?就看他周围的圈圈都是啥类型的(绿色点以XX半径画一个圆),周围什么多,他就是什么(K就表示是看周围几个,这个值还挺关键的,比如K=3,绿色周边三角形多,那他就是三角形,但是k=5,他周围是正方形多,他又是正方形了),他的计算基本过程如下:

2.2 好用的数据集CIFAR-10

CIFAR只有100多M(数据大小比较小,都是32*32大小的,有10类标签,50000个训练数据,10000个测试数据,虽然小,但是很适合我们),是我们学习过程中可以玩起来的,很好的数据集。李飞飞的虽然千万级别的,其实 我们根本跑不动,起码要7,8万以上的服务器,才玩的起来,这就没意思了,我就穷屌丝一个,哪买的起。

那接下来,我们就开始设计怎么做分类任务:怎么判断当前的图像属于那个类别。

测试数据:4*4的矩阵图像,判断他是属于10个类别中的哪类?将测试数据和5万个训练数据的像素点的距离都计算出来,看看离哪个比较进:和训练数据集中的每个图片的像素进行矩阵减法,得到差值 ,把每个像素得到的差再相加起来,得到他的偏差了,这个偏差就是和某个图片的距离了。

5万个图像距离都计算出来, 然后,针对这10个类,每个类都选出偏差最小的前10个,看看,有的结果还可以,有的做错了,而且错的离谱。根本问题在于:当前的算法很多特征它还没考虑到。比如马,外侧都是黑色的,跟他相似的都是边界为黑框的,只是对应相减,并没有告诉他哪个是主体,哪个是背景。

结论:背景相同的图片都放在一起了,因为K紧邻没有学习的过程,他不知道哪个是最重要的,哪个应该关注,所以K近邻不适合做图像分类任务。

3、他来了他来了(神经网络)

3.1  线性函数神经网络

    假设猫这个图像就是3个像素点:56,231,24,2,然后做3分类;权重值是3*4的矩阵,3表示3个类(猫:0.2,-0.5,0.1;狗:1.5,1.3,2.1,0.0;船:0,0.25,0.2,-0.3,这些权重就是这些动物的特征,负表示抑制的作用,这个矩阵哪里来的呢,矩阵是优化而来的,开始随机产生,随机算出来),b是偏执,通过矩阵计算得到相应的3*1的矩阵,分别得到相应分类的得分;明明是一只猫,结果得到的还是负数分数,说明w的值不好,需要迭代调整、改进w参数

这个w,权重参数表示比较大,表示对结果影响比较重要,比如2.1(狗的w权重参数会影响决策边界,控制边界走势,b偏置参数,只是微调)

3.2 如何衡量分类的好坏(损失函数)

上面那个猫的分类,得到负分,说明算法做的不好,那他到底又多不好呢,要告诉出来具体的差距是多少,可以通过该损失函数来说明差距具体是多少。损失函数,衡量分类的结果好坏。

损失函数公式:两两之间 max(Sj错误类别-Syj正确类别+1)做个差值,然后将差值相加,就得到一个损失函数的值。

猫的得分,汽车的分类得分还是最高的,说明分类的不好,两两之间 max(Sj错误类别-Syj正确类别+1)做个差值,然后将差值相加,就得到一个损失函数的值。为了防止比较接近的时候取到了,所以加了一个1)先当与是一个容忍程度,错误越离谱的时候,得到的数值会越大

算完之后:猫的损失2.9,汽车为0(做的挺好的),青蛙10.9(损失很大,做的不好)

3.3 正则化惩罚(规避过拟合)

两个模型损失函数值相同,那2个模型都一样么

模型A和模型B算,乘以内积,出来的都是一样的结果,但是模型A只关注第一个(只关注局部,过拟合,产生变异了),模型B均匀的分配到每个点(关注全局,平常会倾向于这样的),再模型训练的时候,参数容易导致类似于模型A这样的情况,出现过拟合,这种情况是要避免的,要有手段减轻负面影响, ,因此就有了正则化惩罚项,入越大,那就对这中过拟合就越敏感

3.4 求损失函数值

第一大部分:表示的是数据的损失函数的损失,后面的这个模型由于权重参数所带来的损失,入越大,不要变异的,小的时候,意识以下就行了,通常我们希望模型不要太复杂。担心神经网络过于强大,导致过你和。

希望神经网络别太强了,容一学傻,

4、计算分类得分数值

4.1  得分转为概率Softmax(分类)

分类我们要做的是术语哪个类,是要算概率,现在给出一个值,还没法表示出概率来。通过softmax,将一个数值,转为一个概率值

第一个矩阵:是猫对应归属丶的得分值(3.2,5.1,-1.7,差距看上不是很大),通过e的x次方,放大这个差异,

4.2 对数函数将损失归一化(可比性)

normalize,做归一化:就是24.5+164+0.18求和,然后分别除这个和,就得到概率值了。有了这个概率值之后,怎么去计算损失呢,用给对数函数

这里我们看到属于正确类别的概率值为0.13,那对于理想的猫的概率,肯定是希望他这个概率为1才好,越接近1,就越没有损失,就越准确。所以用对上数(求出来的都是负数,所以前面加个负号)函数来求损失。到目前为止,这些都还是前向传播,把损失函数算出来了,那如何去更新这个模型,更新里面的w呢,这个就需要反向传播技术。

特别鸣谢:以上材料来自唐宇迪博士讲课素材,表示感谢,更多AI文章请关注VX公众号

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值