新闻动态
News
首页 > 新闻动态
返回

深入浅出说 Yolo


当我们谈起计算机视觉时,首先想到的就是图像分类,这是计算机视觉最基本的任务之一。在图像分类的基础上,有着更复杂和有意思的任务,如目标检测,物体定位,图像分割等。


其中目标检测是一件比较实际且具有挑战性的计算机视觉任务,可以把这看成图像分类与定位的结合。


给定一张图片,目标检测系要能够识别出图片的目标并给出其位置。图片中目标数是不定的,而且要给出目标的精确位置,可知目标检测相比分类任务更复杂。


目标检测的一个实际应用场景就是无人驾驶。在无人车上安装的目标检测系统,需要根据摄像头看到的情况,快速地检测出前面的行人与车辆,作出实时决策,保障无人驾驶的安全性与高效性。


近几年来,目标检测算法取得了很大的突破。比较流行的算法可以分为两类:


第一类是基于 Region Proposal 的 R-CNN 系算法(R-CNN,Fast R-CNN, Faster R-CNN),它们是 two-stage 的,需要先使用启发式方法(selective search)或者 CNN 网络(RPN)产生 Region Proposal,然后再在 Region Proposal 上做分类与回归。


第二类是 Yolo、SSD 这类 one-stage 算法,其仅仅使用一个 CNN 网络直接预测不同目标的类别与位置。


第一类方法是准确度高一些,但是速度慢;第二类算法是速度快,但是准确性要低一些。


Yolo 算法,其全称是 You Only Look Once: Unified, Real-Time Object Detection


You Only Look Once 意指只需要一次 CNN 运算,Unified 指的是这是一个统一的框架,提供 end-to-end 的预测,而 Real-Time 则体现出 Yolo 算法速度快;


Yolo 的 CNN 网络将输入的图片分割成 S*S 的单元格,然后每个单元格负责去检测那些中心点落在该格子内的目标。


如下图,狗的中心点所在的单元格,负责检测到狗。


3-220216163406415.jpg


每个单元格会预测 B 个边界框(bounding box)以及边界框的置信度(confidence score)。所谓置信度其实包含两个方面,一是这个边界框含有目标的概率,二是这个边界框的准确度。


前者记为 Pr(Object),当该边界框是背景时(即不包含目标),此时 Pr(Object)=0 。而当该边界框包含目标时,Pr(Object)=1 。


边界框的准确度可以用预测框与实际框(ground truth)的 IOU(intersection over union,交并比)来表征,记为 3-220216163H2955.png  。


因此置信度可以定义为  3-220216163J4151.png


请注意 Yolo 的置信度并不仅仅是边界框是否含有目标的概率,也反映了边界框的准确度,是两个因子的乘积。


边界框的大小与位置可以用 4 个值来表征:(x,y,w,h) ,其中(x,y)是边界框的中心坐标,而 w 和 h 是边界框的宽与高。这样,每个边界框的预测值实际上包含 5 个元素:(x,y,w,h,c),其中前 4 个表征边界框的大小与位置,最后一个值是置信度。


还有分类问题,所以对于每一个单元格还要给出 C 个类别概率值,即由该单元格负责预测的边界框目标属于各个类别的概率。


总结一下,每个单元格需要预测(B*5+C)个值。如果将输入图片划分为 S*S 网格,那么最终预测值为 S*S*(B*5+C)大小的张量。整个模型的预测值结构如下图所示。


3-220216163Z2I8.png


Yolo 采用卷积网络来提取特征,然后使用全连接层来得到预测值。


我们用3-220216164011Y9.png 来表示每个单元格预测的类别信息,将其和边界框的置信度相乘,得到的值是单元格属于某一类的概率,即 class-specific confidence score。


3-2202161640463K.png


得到每个单元格的 class-specific confidence score 后,设置阈值,滤掉得分低的单元格,对保留的单元格进行 NMS 处理,得到最终的检测结果。


上一篇:GPU 对 SQL 提升的性能测试报告