极智AI | 目标检测实现分享二:听说克莱今天复出了?详解YOLOv2算法与克莱检测

本文涉及的产品
视觉智能开放平台,分割抠图1万点
视觉智能开放平台,视频资源包5000点
视觉智能开放平台,图像资源包5000点
简介: 大家好,我是极智视界,本文详细介绍一下 YOLOv2 算法的设计与实现,包括训练。

大家好,我是极智视界,本文详细介绍一下 YOLOv2 算法的设计与实现,包括训练。

本文是目标检测类算法实现分享的第二篇,之前已经写过一篇:

(1) 《【模型训练】目标检测实现分享一:详解 YOLOv1 算法实现》;

从名字就可以看出 YOLOv2 是在 YOLOv1 的基础上的改进版,在论文《YOLO9000: Better, Faster, Stronger》中提出,同时提出了 YOLO9000 模型,这个模型结构和 YOLOv2 一样,只是训练方式做了创新,本文主要关注 YOLOv2,就不多说 YOLO9000 了。同样这里不止会将原理还会讲实践,话不多说,下面开始。


1、YOLOv2 原理

先来看实验数据:

上图是 YOLOv2 和当时主流的检测模型的效率精度对比图 (数据集为 VOC0712),从效率精度综合考虑越往右上越好,所以可以看出 YOLOv2 在兼顾效率和精度方面做得很好。然后说一下为啥图上 YOLOv2 有好几个点,这分别对应不同的输入分辨率的结果,数据如下:

YOLOv1 有两个缺陷:

(1) 位置错误率高 / 偏移严重;

(2) 召回率低;

YOLOv2 主要针对以上两个缺陷进行了改进,来看看到底做了哪些改进能让 YOLOv2 有这么大的提升,新加 tricks 总览如下:

下面一一道来。

1.1 Batch Normalization

BN 层是现在检测网络中常用的算子,从 BN 出来的数据服从高斯分布,能够极大的加快模型收敛,同时也能提高模型的准确率。作者测试在 YOLO 的卷积层后加了 BN 层后 mAP 能提 2 个点,结构差不多是这样:

1.2 High Resolution Classifier

相对于的 YOLOv1 backbone 在 ImageNet 数据集上预训练输入分辨率 224 x 224,YOLOv2 调整为先以 448 x 448 的分辨率在 ImageNet 数据集上训练 10 个 epoch,再用 COCO 检测数据集进行微调。作者测试更高分辨率的预训练能让 mAP 提 2 个点。

1.3 Convolutional With Anchor Boxes

YOLOv1 中采用全连接层直接对预测框进行回归预测,由于各种目标的长宽比相差很大,又没什么约束,预测框很难自适应不同的目标。YOLOv2 借鉴了 Faster R-CNN 中 RPN 网络先验框的概念,用 卷积 + Anchor Box 替换 YOLOv1 的全连接层。YOLOv2 在进行如此操作后,mAP 略有下降,召回率却大幅提升。

YOLOv2 在使用 Anchor 后还有两个问题:

(1) Anchor 尺寸手工选择,不能很好适应物体实际尺度;

(2) 使用 Anchor 对于位置预测具有不稳定性。

下面会针对以上这两点缺陷进行相应改善。

1.4 Dimension Clusters

这个 trick 主要是为了解决 Anchor 尺寸手工选择,不能很好适应物体实际尺度的问题。这里是采用了 k-means 根据训练集中的先验框自动聚类来生成 Anchor的宽高,具体怎么做的呢。为了预测框和真实框的 IOU 更高,设计 k-means 聚类的距离指标为:

然后选取不同数量的聚类中心,在 VOC 和 COCO 数据集上的测试数据如下:

作者发现当聚类中心数 k = 5 时能够在模型复杂度和高的召回率之间获得一个好的平衡,这样就完成了 Anchor Box 的自动选择。

1.5 Direct location prediction

这个 trick 是为了解决 Anchor 对于位置的预测的不稳定性。YOLOv1 中是这么计算预测框的中心位置的:假设需要计算的预测框的中心位置为 (x, y),网络输出的坐标偏移值为 (tx, ty)、先验框的尺度为 (xa, ya)、grid cell 的中心坐标为 (xa, ya),则有:

若这么计算,问题就来了,上面的算式是没有约束的,也就是最后算出的预测框中心位置极为不稳定,这是 YOLOv1 中位置错误率高的重要原因。YOLOv2 对此进行了改进,使用 sigmoid 函数控制偏移值在 (0, 1) 之间,且偏移是相对于 grid cell 的左上顶点,采用这样的方式将预测框的中心点约束在当前的 grid cell 中,而不会乱跑。用算式表达是这样:假设 grid cell 的左上顶点为 (cx, cy),bounding box 先验的宽高为 pw 和 ph,网络对于 bounding box 预测的 5 个坐标值为 tx, ty, tw, th 和 to,那么预测框的位置可以这么计算:

1.6 Fine-Grained Features

YOLOv2 最后预测是在 13 x 13 的 feature map 上,这个优化是在从 26 x 26 x 512 到 13 x 13 x 2048 的过程中加入类似残差网络的恒等映射结构,以减少特征细粒度的损失,这里把它称为 passthrough 层,结构类似这样:

这个优化能带来 1 个点的性能提升。

1.7 Multi-Scale Training

这是源于 YOLOv2 把 YOLOv1 的全连接层给替了,只是用卷积和池化层,所以可以动态的调整输入分辨率。这里采用的训练技巧是每隔 10 个 batch 调整为 {320, 352, ..., 608} 中的一种,因此最大的分辨率为 608 x 608,最小的分辨率为 320 x 320,这是动态调整的,所以能更好的适应不同尺度的检测对象。

1.8 Darknet-19

提出了 YOLOv2 的 backbone:darknet-19。当时的检测框架的 backbone,因 VGG-16 具有强大的特征提取能力,最为受欢迎,但它开销巨大,需要 30.96 billion 浮点运算。而 YOLOv1 的 backbone 是基于 GoogleNet 的结构,模型前向复杂度降低到 8.52 billion operations。而 YOLOv2 进一步优化,借鉴 NIN (Network in Network) 的思想,采用 1 x 1 和 3 x 3 卷积交替的形式,结合 BN 层来稳定训练,形成了 darknet-19 的 backbone,模型前向复杂度进一步降低至 5.58 billion operations。

来看一下 darknet-19 的模型结构:

以上把 YOLOv2 的改进点说了一遍,下面进入实践环节。


2、YOLOv2 实践

以 darknet 训练 YOLOv2 为例,默认已准备好 darknet 环境和 VOC0712 数据集 (不会的可以查看我的上一篇)。

2.1 训练

YOLOv2 的训练指令和 YOLOv1 有一些不同,YOLOv1 的训练数据集路径和权重保存路径在代码中写死,而 YOLOv2 可以从指令传入,在 voc.data 配置中读取。

在 cfg 目录下建一个 yolov2 文件夹,并加入 voc.data、voc.names、yolov2_train.cfg(用于训练)、yolov2.cfg(用于推理)。最后形成的目录 tree 差不多是这样:

其中 voc.names 中是类别名字,而 voc.data 差不多长这样:

然后执行训练:

./darknet detector train cfg/yolov2/voc.data cfg/yolov2_train.cfg -gpus 0

会有对应的 loss 变换图,可以直观的看收敛的怎么样:

在 YOLOv2 的训练过程中,它会自行调整输入的分辨率的。等训练完了可以看下效果。

2.2 验证

今天克莱复出,那就做一个克莱检测吧~

执行检测:

./darknet detector demo cfg/voc.data cfg/yolov2/yolov2.cfg cfg/yolov2/backup/yolov2.weights data/nba_kelai.mp4

是不是有老科那味儿了~



logo_show.gif

相关文章
|
2月前
|
传感器 人工智能 监控
智慧工地 AI 算法方案
智慧工地AI算法方案通过集成多种AI算法,实现对工地现场的全方位安全监控、精准质量检测和智能进度管理。该方案涵盖平台层、展现层与应用层、基础层,利用AI技术提升工地管理的效率和安全性,减少人工巡检成本,提高施工质量和进度管理的准确性。方案具备算法精准高效、系统集成度高、可扩展性强和成本效益显著等优势,适用于人员安全管理、施工质量监控和施工进度管理等多个场景。
|
3天前
|
机器学习/深度学习 人工智能 算法
Enhance-A-Video:上海 AI Lab 推出视频生成质量增强算法,显著提升 AI 视频生成的真实度和细节表现
Enhance-A-Video 是由上海人工智能实验室、新加坡国立大学和德克萨斯大学奥斯汀分校联合推出的视频生成质量增强算法,能够显著提升视频的对比度、清晰度和细节真实性。
24 8
Enhance-A-Video:上海 AI Lab 推出视频生成质量增强算法,显著提升 AI 视频生成的真实度和细节表现
|
14天前
|
机器学习/深度学习 人工智能 算法
X-AnyLabeling:开源的 AI 图像标注工具,支持多种标注样式,适于目标检测、图像分割等不同场景
X-AnyLabeling是一款集成了多种深度学习算法的图像标注工具,支持图像和视频的多样化标注样式,适用于多种AI训练场景。本文将详细介绍X-AnyLabeling的功能、技术原理以及如何运行该工具。
80 2
X-AnyLabeling:开源的 AI 图像标注工具,支持多种标注样式,适于目标检测、图像分割等不同场景
|
5天前
|
机器学习/深度学习 人工智能 安全
阿里云先知安全沙龙(武汉站) ——AI赋能软件漏洞检测,机遇, 挑战与展望
本文介绍了漏洞检测的发展历程、现状及未来展望。2023年全球披露的漏洞数量达26447个,同比增长5.2%,其中超过7000个具有利用代码,115个已被广泛利用,涉及多个知名软件和系统。文章探讨了从人工审计到AI技术的应用,强调了数据集质量对模型性能的重要性,并展示了不同检测模型的工作原理与实现方法。此外,还讨论了对抗攻击对模型的影响及提高模型可解释性的多种方法,展望了未来通过任务大模型实现自动化漏洞检测与修复的趋势。
|
26天前
|
机器学习/深度学习 缓存 人工智能
【AI系统】QNNPack 算法
QNNPACK是Marat Dukhan开发的量化神经网络计算加速库,专为移动端优化,性能卓越。本文介绍QNNPACK的实现,包括间接卷积算法、内存重排和间接缓冲区等关键技术,有效解决了传统Im2Col+GEMM方法存在的空间消耗大、缓存效率低等问题,显著提升了量化神经网络的计算效率。
36 6
【AI系统】QNNPack 算法
|
26天前
|
存储 人工智能 缓存
【AI系统】Im2Col 算法
Caffe 作为早期的 AI 框架,采用 Im2Col 方法优化卷积计算。Im2Col 将卷积操作转换为矩阵乘法,通过将输入数据重排为连续内存中的矩阵,减少内存访问次数,提高计算效率。该方法首先将输入图像转换为矩阵,然后利用 GEMM 库加速计算,最后将结果转换回原格式。这种方式显著提升了卷积计算的速度,尤其适用于通道数较多的卷积层。
49 5
【AI系统】Im2Col 算法
|
26天前
|
存储 机器学习/深度学习 人工智能
【AI系统】Winograd 算法
本文详细介绍Winograd优化算法,该算法通过增加加法操作来减少乘法操作,从而加速卷积计算。文章首先回顾Im2Col技术和空间组合优化,然后深入讲解Winograd算法原理及其在一维和二维卷积中的应用,最后讨论算法的局限性和实现步骤。Winograd算法在特定卷积参数下表现优异,但其应用范围受限。
33 2
【AI系统】Winograd 算法
|
14天前
|
人工智能 算法
AI+脱口秀,笑点能靠算法创造吗
脱口秀是一种通过幽默诙谐的语言、夸张的表情与动作引发观众笑声的表演艺术。每位演员独具风格,内容涵盖个人情感、家庭琐事及社会热点。尽管我尝试用AI生成脱口秀段子,但AI缺乏真实的情感共鸣和即兴创作能力,生成的内容显得不够自然生动,难以触及人心深处的笑点。例如,AI生成的段子虽然流畅,却少了那份不期而遇的惊喜和激情,无法真正打动观众。 简介:脱口秀是通过幽默语言和夸张表演引发笑声的艺术形式,AI生成的段子虽流畅但缺乏情感共鸣和即兴创作力,难以达到真人表演的效果。
|
2月前
|
机器学习/深度学习 传感器 人工智能
智慧无人机AI算法方案
智慧无人机AI算法方案通过集成先进的AI技术和多传感器融合,实现了无人机的自主飞行、智能避障、高效数据处理及多机协同作业,显著提升了无人机在复杂环境下的作业能力和安全性。该方案广泛应用于航拍测绘、巡检监测、应急救援和物流配送等领域,能够有效降低人工成本,提高任务执行效率和数据处理速度。
智慧无人机AI算法方案
|
30天前
|
存储 人工智能 缓存
【AI系统】布局转换原理与算法
数据布局转换技术通过优化内存中数据的排布,提升程序执行效率,特别是对于缓存性能的影响显著。本文介绍了数据在内存中的排布方式,包括内存对齐、大小端存储等概念,并详细探讨了张量数据在内存中的排布,如行优先与列优先排布,以及在深度学习中常见的NCHW与NHWC两种数据布局方式。这些布局方式的选择直接影响到程序的性能,尤其是在GPU和CPU上的表现。此外,还讨论了连续与非连续张量的概念及其对性能的影响。
51 3

热门文章

最新文章