YOLO算法学习记录(1)

现今,基于深度学习的目标检测的算法主要有 R-CNN系列、SSD 和 YOLO 等。

YOLO 目标检测法,即 you only look once (YOLO) at an image,是一种基于深度学习的目标检测算法。YOLO 是第一个采用了回归思想实现 one-stage 检测的算法,如今它已经发展到 YOLOv3,检测能力已大大好于第一代的 YOLO。相比作为后辈的 SSD 算法,性能也得以超越。
以下以每代YOLO发展为主线,进行学习:

YOLO

YOLO虽然会产生更多的局部错误,但是它不容易将主体和背景混淆,而且由于损失函数贯穿整个检测网络,其还可以根据检测性能直接进行端到端(end-to-end)的优化。

网络模型
YOLO 首先将输入图片统一调整成 448×448 像素,然后再将图像划分为 S×S 的网格。如果检测对象的中心落入网格单元格(grid cell)中,则该网格单元格负责检测该对象。每个网格单元格对其中的包络框(bounding boxes)进行评分,用以预测网格单元格中存在检测物的可能性。如果预测值为 0, 则代表网格单元格中不存在检测物。

YOLO 的每个网格单元格都可以提供复数的包络框,但是一个包络框只选择得分最高、最有可能性的物体进行预测。由于每个网格单元格只能进行局部预测,因此它可以避免同时落于几个有良好置信度的单元格之间,但是却不是所需要抓取事物的问题。

由于 YOLO 将检测作为回归问题来处理,不需要复杂的模型。如图 所示的 YOLO 网络结构就是基于 GoogleNet 模型,其网络有 24 个卷积层,然后是 2 个完全连接层。

最后YOLO 输出一个S×S×(5×B+C)的张量, 当使用 PASCAL VOC 时,一般为 7×7×30。其中S 为最开始将图像划分网格的行列数,5 代表YOLO使用的 5 个参数(x,y,w,h,confidence),B 为每个网格单元格中设置的包络框(bounding boxes)的数量,C 为能够识别的前景种类的数量。

YOLOv2

YOLOv2 相对于第一代YOLO,最大的改变是进行了标准化操作。通过给所有卷积层添加批量标准化(Batch Normalization),不仅使模型标准化,同时还抛弃了更多的冗余信息,显著地提高了收敛特性。

YOLOv2 首先使用完整的 448×448 分辨率对图像进行训练。这使网络有时间调整其滤波器,以便在更高分辨率的输入上更好地工作。其在检测学习时,直接使用卷积特征提取器上的完全连接层来预测包络框的坐标,而不像 Faster R-CNNR-CNN 需要手工来提取包络框。
YOLOv2的网络模型

YOLO9000

由于其可同时检测多达 9418 个类别,所以就被命名为 YOLO9000。

YOLO9000 构建了自己的 WordTree 来对图像定义进行分类,包含了 ImageNet 和 COCO。其概念借鉴于 WordNet,一种在知识图谱中应用广泛的语义网络数据库,可以指明各个名词,实体之间的上下级关系。如果有一个图片的标签拥有上层概念,那么通过 WordTree,这个图片就会同时获得这个上层概念的标签,总之现在一张图片是多标记的,标记之间不需要相互独立。
这种方法的好处: 在对物体进行分类时,如果已经确定为上层概念的物体,但是无法确定是否为其下某个下层概念的物体时,直接使用上层概念,而不使用下层概念。

YOLOv3

在网络结构上,YOLOv2 取消了第一代 YOLO 所有的全连接层,而 YOLOv3 比 YOLOv2 更进一步,将卷积神经网络里面最常见的池化层全部取消掉了,而原先池化层用来缩小特征尺寸的功能改由通过增加原卷积核的步长来实现。这一改进可以算是卷积神经网络中最能提升速度的做法,不仅使得 YOLOv3 的运算速度更快,还可以将节省的运算性能应用到更多实用的操作上。

比如将网络深度增加到了 53 层;还比如 YOLOv3 另一个重要的改进是可以同时输出 3 个不同尺寸的特征图,分别为 13×13,26×26 和 52×52,如图 3 所示。这样就使得 YOLOv3 相对于前面几个版本,更能对小目标进行检测,但是也弱化了其对大物体的检测能力。最后YOLOv3 不再使用Softmax 对每个框进行分类,而改用多个独立的 logistic 分类器代替,而logistic 只对获取到的锚框中拥有目标可能性得分最高的那一个进行操作。
YOLOv3网络模型
在图像检测领域,YOLO 算法已经成为最为广泛使用的检测算法之一。其有着较高的检测精度和检测速度,能够满足实时性的要求。
明天继续学习,继续更新。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux创始人LinusTorvalds有一句名言:Talk is cheap, Show me the code.(冗谈不够,放码过来!)。 代码阅读是从入门到提高的必由之路。尤其对深度学习,许多框架隐藏了神经网络底层的实现,只能在上层调包使用,对其内部原理很难认识清晰,不利于进一步优化和创新。  YOLOv3是一种基于深度学习的端到端实时目标检测方法,以速度快见长。YOLOv3的实现Darknet是使用C语言开发的轻型开源深度学习框架,依赖少,可移植性好,可以作为很好的代码阅读案例,让我们深入探究其实现原理。  本课程将解析YOLOv3的实现原理和源码,具体内容包括: YOLO目标检测原理  神经网络及Darknet的C语言实现,尤其是反向传播的梯度求解和误差计算 代码阅读工具及方法 深度学习计算的利器:BLAS和GEMM GPU的CUDA编程方法及在Darknet的应用 YOLOv3的程序流程及各层的源码解析本课程将提供注释后的Darknet的源码程序文件。  除本课程《YOLOv3目标检测:原理与源码解析》外,本人推出了有关YOLOv3目标检测的系列课程,包括:   《YOLOv3目标检测实战:训练自己的数据集》  《YOLOv3目标检测实战:交通标志识别》  《YOLOv3目标检测:原理与源码解析》  《YOLOv3目标检测:网络模型改进方法》 建议先学习课程《YOLOv3目标检测实战:训练自己的数据集》或课程《YOLOv3目标检测实战:交通标志识别》,对YOLOv3的使用方法了解以后再学习本课程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值