简介
Yolo意思是You Only Look Once,创造性的将候选区和对象识别这两个阶段合二为一,看一眼就能知道有哪些对象以及他们的位置。
首先,先讲述一下Yolo的基本工作原理和Rcnn,以便为后续的讲解做铺垫,Yolo会遍历图片中有可能的位置,地毯式地搜索不同大小、不同宽高比,逐一检测其中是否存在某个对象,挑选其中概率最大的结果作为输出。
Rcnn:先从图片中搜索出一些可能存在对象的候选区(Selective Search),大概2000个左右,然后对每个候选区进行对象识别。(先提出候选区--->识别候选区对象)
YOLO网络结构图:
输入输出的映射关系
输入:
输入就是原始图像,唯一要求是缩放到448x448的大小。主要是因为Yolo的网格中,卷积层最后接了两个全连接层,全连接层要求固定大小的向量作为输入,所以倒推回去也就是要求原始图像有固定的尺寸。那么Yolo设计的尺寸就是448x448。
输出:
输出是一个7x7x30的张量。
7x7网格:
根据YOLO的设计,输入图像被划分为7x7的网格(grid),输出张量中的7x7就对应着输入图像的7x7网格。或者我们把7x7x30的张量看作7x7=49个30维的张量,也就是输入图像中的每个网格对应输出一个30维的向量。(并不是说仅仅网格内的信息被映射到一个30维的向量,经过神经网络对输入图像信息的提取和变换,网格周边的信息也会被识别和整理,最后编码到那个30维向量中。)
30维向量:
网格数量bounding box数量
设网格数量为SxS,每个网格产生B个边框,网格与待识别C个不同的对象,这时,
输出的向量长度为 C+Bx(4+1)
整个输出的tensor就是: S x S x ( C + B x ( 4 + 1 ) )
(Yolo选择的参数时7x7网络,2个bounding box,20种对象,因此输出向量 = 20 + 2 x ( 4 + 1 ) ) = 30,整个输出的tensor就是 7x7x30)
损失函数
损失函数就是计算网络实际输出值与样本值之间的偏差。