最近在听Andrew Ng讲解目标检测的视频,包括目标定位,特征点检测,卷积的滑动窗口的实现,Bounding Box预测,交并比,非极大值抑制,AnchorBoxes,YOLO算法以及候选区域,并通过查阅相关的资料,对以上内容有了初步的理解,趁热打铁,总结如下。
一、目标定位(Object Localization)
图片分类:图片分类问题已经不陌生了,例如,输入一张图片到多层卷积神经网络,它会输出一个特征向量,并反馈给softmax单元来预测图片的类型。
定位分类问题:不仅要用算法判断出图中是否有一辆汽车,而且还要标注汽车的位置,一般用边框(Bounding Box)来标注。通常只有一个较大的对象位于图片的中间位置,我们要对它进识别和定位。
对象检测问题:图片可以含有多个对象 ,甚至单张图片会有多个不同的分类对象。因此图像分类的思路可以帮助我们学习对象定位,而对象定位的思路又可以帮助我们学习对象检测。
![](https://i-blog.csdnimg.cn/blog_migrate/5243324e2d5a844841256df84dbdb8bd.png)
![](https://i-blog.csdnimg.cn/blog_migrate/8017c96d4b56a781c1ee16478096829d.png)
![](https://i-blog.csdnimg.cn/blog_migrate/16c313af2bcee4e8ad6e8a2fa81cbe65.png)
举个栗子(example):
如果你正在构建汽车自动驾驶系统,那么对象可以包括以下几类:行人、汽车、摩托车和背景,背景就是图片中没有行人、汽车、摩托车三类对象,输出结果便会是背景对象,这四个对象就是softmax函数可能输出的结果,这就是目标分类的过程。但是如果你还想定位图片中的位置,该怎么做呢?我们可以让神经网络多输出几个单元,输出一个边界框。具体说就是让神经网络再多输出 4 个数字,标记,
,
,
这四个数字是被检测对象的边界框的参数化表示。
图片的左上角是(0,0),右下角是(1,1),要确定边界框的具体位置,需要指定红色方框的中心点,这个点表示为 ( ,
),边界框的高度为
,宽度为
。因此训练集不仅包含神经网络要预测的对象分类标签,还要包含表示边界框的这四个数字,接着采用监督学习算法,输出一个分类标签,还有四个参数值,从而给出检测对象的边框位置。此例中,
的理想值是 0.5,
大约是 0.7,
约为 0.3,
约为 0.4。
目标标签y的定义如下:
它是一个向量,第一个组件表示是否含有对象,如果对象属于前三类(行人,汽车,摩托车),则
= 1,如果是背景,则图片中没有要检测的对象,则
= 0,我们可以这样理解
,它表示被检测对象属于某一分类的概率,背景分类除外。
,
,
表示对象属于1-3类的哪一类,是行人,汽车,还是摩托车。神经网络中的损失函数,其参数为类别y和网络输出