首页 > 编程知识 正文

anchor铁锚

时间:2023-05-05 15:01:12 阅读:244483 作者:3171

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/weixin_43013761/article/details/102684412

以下是我个人关于深度学习的所有见解,其后会对深度学习思想,正反向传播,损失函数,正则惩罚,梯度下降,矩阵求导,网络搭建,等等都进行详细的讲解!只有你想不到的,没有我讲不到的。让我用最通俗的语言,为你留下最深刻的印象,后来的年轻人以及我徒弟,好好加油!
深度解剖(0):最通俗易懂,详细无死角的深度学习讲解(目录)
如果有说得不对的地方,欢迎大家指出,我会第一时间进行修改,有兴趣可以加微信a944284742一起讨论技术,如果觉得喜欢,一定要点赞,因为这是对我最大的鼓励。

anchor的生成

在讲解anchor之前,我们先来谈谈anchor(锚点)是怎么来的。我们应该怎么去确定或者生成锚,如果有接触过的朋友,应该知道一般是通过训练数据集聚类获得的,比如yolo3(不懂没关系,继续 往下看)。那么为什么要这样呢?目的是什么 ?

首先,从数据集说起。针对于目标检测,训练数据集的每个样本,都是有标签的,就是已经知道这些框的大小,即长和宽。那么我们是不是可以把这些框进行分类,假设现在把这些框按长度和宽度的不同 ,分成了九个类。然后再从每类框中选出中间的那个box(框),代表这个类的框。

很奇怪奥,为什么要分类,分类干嘛啊?大家想想,这里分类之后,又取了中间那个框,是不是说明,中间那个框,基本是可以圈出自己所在类的物体(不说圈出所有,但是肯定能圈出大部分来)。这样的话,9种类型的框,或者说anchor就能圈出数据集所有物体了。

有人有会说,为什么要9个 ,我一个很大框,不是所有物体都能圈出来了 ,但是,一个框,你没办法准确的把每个物体都很细致的圈出来,框或者anchor太大了,一个anchor可能圈住多个物体。那么还会有人说,我把所有的图片的框,都当做anchor,这样肯定能把每个都目标细致的框出来了 。这样的确是可以,但是这个anchor,是需要我们网络取学习的一个东西,太多的anchor会导致网络参数增多,并且网络很难学习,具体原因请往下看。

anchor的意义

前面说,anchor是需要网络去学习的,那么为什么要学习,学习之后有什么用?首先,我们来看看anchor的意思,他翻译过来读作锚点,锚点是 什么?其在中文中是固定的意思,就是说我们固定几个目标,让机器去学习。

现在就可以回答,网络学习anchor的作用了。其实,使用的是这样的一个思想,假设现在有很多很多的水果,葡萄啊,西瓜,荔枝,榴莲,芒果等等。各种各样的水果都有,那么很显然,他们的形状都是一样的。现在呢,给你一个任务,那就是让你用铁丝做成各种各样的框,然后用这些铁丝,把每个水果都合适的圈出来。

为了完成上面的任务,能精确的框出每个物体,那么你是不是需要为每个类别都构建一个铁圈,比如,葡萄,苹果和西瓜都是使用不一样的铁圈,那么这种情况下,我们为了圈出每个类别的物体,我们就需要构建很多个铁拳。但是大家想,这样的工作是不是很累啊 ,要去做那么多的圈。我们换个思路,我们可不可以把苹果和分为一个类,做一个框,把他们圈出来,也可以把梨子顺便也归为和苹果芒果一个类。这样一来,我们要做的铁框是不是减少了?同理还可以把西瓜和芒果分为一个类。

现在我们相信大家有个模糊的概念,前面说是我们人去做那些铁圈,其实呢,在网络中是机器去制作,或者去学习那些铁框,就是所谓的anchor。那么问题来了,机器学,他怎么去学呢?学的目的是什么?

机器学anchor

在讲机器如何学习anchor的时候,大家先去百度一下IOU的概念。这个太简单了,就是两个图的交集比上并集。这里就不做详细介绍了,下面我贴一副图:


其中的每个不一样的框,就是通过聚类得来的anchor,现在呢,机器就是要学会拿着些框,去框去图中的物体。如果了解过特征图的同学,要注意一下,这里是从特征图(feature map)倒映射在原图的anchor。也就是说,这里的九个框,仅仅是特征图上的一个点。假设你现在的特征图我10x10的大小,那么就应该对应10x10x9=900个框。这里怎么为大家详细的解释呢?你可以把上面的9个框当做一个整体,在原图上滑动,每滑动一次,就对应特征图(feature map)上的一个点,至于滑动的步伐,可以任意选择。假设为2,也就是说,每次滑动,相当在原图上移动了两个像素(这里我不管了啊,反正当做你大概明白怎么回事)。

先不看滑动的过程,就拿下面这个静止的图片来说:
假设其中粉色的矩形,就是我们要检测的物体,可以明显的知道。他和每个框的交集和并集都是不一样的,那么机器就犹豫了,我应该用哪个框去圈呢?所以啊,这里就需要IOU了,当两个框的IOU值为1的时候,就说明这个框,是最合适的了。也就是说啊,机器会从九个anchor中找到IOU最大的哪个,因为他认为是最合适的。

但是呢?上面出现了一个问题,那就是,最合适的IOU可能是最大的哪个框,这样很明显,不合理啊。那么大的框,去框他,应该使用右上角:

绿色的框,去圈他才是最合适的。因为他们大小相近嘛。所以我前面提到到了滑动,如果这9个anchor在原图上,从左到右,自上而下的滑动一次。那么大家想想,是不是滑动到某个位置的时候,其和这个苹果的iou会达到最大值(接近重合)。此时,这个anchor所在的位置,就是网络预测出来物体的位置。

</div> <link rel="external nofollow" href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-e9f16cbbc2.css" rel="stylesheet"> </div>

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。