极智AI | 目标检测实现分享一:详解YOLOv1算法实现

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

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

本文是目标检测类算法实现分享的第一篇,从 用回归做物体检测 算法开山鼻祖 YOLOv1 讲起。YOLO (You Only Look Once) 是充满艺术性和实用性的算法系列,而 YOLOv1 是个开头,在论文《You Only Look Once:Unified, Real-Time Object Detection》中提出。YOLO 目标检测算法以实时著称,并经不断发展能逐步兼顾精度。简单看一些 YOLO 官网的宣传效果:

下面开始,同样这里不止会讲原理还会讲实现及训练。


1、YOLOv1 原理

在论文中其实不止提出了 baseline YOLOv1 模型,还提出了 Fast YOLOv1,而 Fast YOLOv1 旨在让人们看到 YOLO 的效率极限。先来看论文中的实验数据,YOLOv1 的主要对标对象是 Fast R-CNN、DPM,下面是精度 (mAP) 和 性能 (fps) 数据:

训练测试数据集是 PASCAL VOC 0712,硬件是 Nvidia Titan X,这里我们主要关心 Real-Time Detectors,可以看到相比于 DPM 和 Fast R-CNN, YOLOv1 兼顾精度和推理效率,还可以注意到 Fast YOLOv1 的帧率达到了的 155 fps,相当于浮点推理单图 6.5 个 ms,这在当时相当快。

YOLOv1 相比于 Fast-RCNN 能够更加好的区分背景和待检测目标,然而 YOLOv1 并不是一个极度完美的网络,还有一些缺陷 (这跟网络设计相关),如下:

上图是 Fast R-RCNN vs YOLOv1 Error Analysis,可以看到主要有以下几点:

(1) YOLOv1 的预测准确度 Correct 没 Fast R-CNN 高;

(2) YOLOv1 的 Localization 错误率更高,这是由于 YOLOv1 采用直接对位置进行回归的方式进行预测,这不如滑窗式的;

(3) YOLOv1 对于背景预测的错误率更低;

以实验结论为导向,下面介绍 YOLOv1 的网络设计艺术。

1.1 网络结构设计

整个网络由 24 个卷积层 (受 GoogLeNet 启发,有很多 1 x 1 和 3 x 3 交替的结构) 和 2 个全连接层构成,输入图像尺寸为 448 x 448,输出为 7 x 7 x 30,说一下输出为啥是这个 shape。YOLOv1 会把输入图像划成 7 x 7 的 grid,每个 grid 负责预测 2 个目标,对于每个目标来说又有这些属性:x、y、h、w、置信度,然后再加上类别数 20,这样就形成了 7 x 7 x (2 x 5 + 20) = 7 x 7 x 30 的输出 tensor 了。如下:

由于 YOLOv1 将图片划分为 7 x 7 个 grid,虽然每个 grid 负责预测两个目标,但最后会通过抑制只保留一个匹配度最高的 bounding box,也就是说一张图我最多就给你预测七七 49 个目标,那么想一下,如果有两个相邻的目标落在了同一个 grid 中,那么势必会漏检一个,所以 YOLOv1 对于邻近目标的检测效果不好。

1.2 损失函数设计

YOLOv1 的整个损失函数如下,这个比较经典:

一个个来说:

(1) 第一个和第二个都是位置损失。第一个是中心点位置损失,采用简单的平方和进行计算。其中 lij^obj 是一个控制参数,作用是当标签中该 grid 有待检测物体,则为 1,否则为零;

(2) 第二个是宽高损失。这里对 w、h 分别取了根号,原因是这样可以减缓倾向于调整尺寸比较大的预测框,这里的 lij^obj 和第一个中的一样;

(3) 第三个和第四个需要结合起来看,都是预测框的置信度损失。第三个是有目标的时候,第四个是没有目标的时候,我们知道,实际检测时 49 grid 中每个 grid 有目标和没目标也是个长尾问题,往往有目标的情况占少数,所以在这里设计给了 λobj = 5,λnoobj = .5 的权重平衡;

(4) 第五个是类别损失。

原理就讲这么多,接下来是实践。


2、YOLOv1 实现

github 地址:https://github.com/AlexeyAB/darknet

darknet 编译就不多说了,默认已经编译好了,这步不会的同学可以翻看我之前的文章,有相关介绍。

下面介绍一下制作 VOC0712 融合数据集。

2.1 制作 VOC0712 融合数据集

下载数据集

# download datasets
wget https://pjreddie.com/media/files/VOCtrainval_11-May-2012.tar
wget https://pjreddie.com/media/files/VOCtrainval_06-Nov-2007.tar
wget https://pjreddie.com/media/files/VOCtest_06-Nov-2007.tar
# 解压
tar xf VOCtrainval_11-May-2012.tar
tar xf VOCtrainval_06-Nov-2007.tar
tar xf VOCtest_06-Nov-2007.tar

制作 imagelist:

# 生成label及train.txt、test.txt、val.txt
wget https://pjreddie.com/media/files/voc_label.py
python voc_label.py
# 配置 2012train、2007_train、2007_test、2007_val 为训练集,2012_val 为验证集
cat 2007_* 2012_train.txt > train.txt

这个时候的目录结构是这样的:

2.2 训练

然后可以进行训练,这里需要注意的是 YOLOv1 的训练指令和 YOLOv2 和 YOLOv3/v4 的不太一样,YOLOv1 的训练指令如下:

./darknet yolo train cfg/yolov1/yolo.train.cfg

是不是稍微有点好奇,以上命令中并没有指定训练图片路径,这个路径是在代码内部写死的 (包括保存权重的路径 backup/ 也是写死的):

这个地方可以改成自己想指定的 train.txt 的路径,然后重新编译框架:

make clean
make -j32

然后再执行训练指令,开始训练:

可以看到已经开始训练了,这里我们使用了默认的训练配置:

这里的一些参数可以根据自己的需要进行相应的修改。

2.3 验证

训练的过程比较漫长,等训练结束可以测试一下训练结果:

./darknet yolo test cfg/yolov1/yolo.cfg backup/yolo.weights

在 Enter Image Path 中输入待检测图片,如 data/dog.jpg 可以看到检测效果:

这样就完成了 YOLOv1 数据集准备、训练到验证的整个环节。


以上详细分享了 YOLOv1 的原理和实践,希望我的分享能对你的学习有一点帮助。


logo_show.gif


相关文章
|
29天前
|
传感器 人工智能 监控
智慧工地 AI 算法方案
智慧工地AI算法方案通过集成多种AI算法,实现对工地现场的全方位安全监控、精准质量检测和智能进度管理。该方案涵盖平台层、展现层与应用层、基础层,利用AI技术提升工地管理的效率和安全性,减少人工巡检成本,提高施工质量和进度管理的准确性。方案具备算法精准高效、系统集成度高、可扩展性强和成本效益显著等优势,适用于人员安全管理、施工质量监控和施工进度管理等多个场景。
|
1月前
|
传感器 人工智能 监控
智慧电厂AI算法方案
智慧电厂AI算法方案通过深度学习和机器学习技术,实现设备故障预测、发电运行优化、安全监控和环保管理。方案涵盖平台层、展现层、应用层和基础层,具备精准诊断、智能优化、全方位监控等优势,助力电厂提升效率、降低成本、保障安全和环保合规。
智慧电厂AI算法方案
|
3天前
|
机器学习/深度学习 人工智能 算法
X-AnyLabeling:开源的 AI 图像标注工具,支持多种标注样式,适于目标检测、图像分割等不同场景
X-AnyLabeling是一款集成了多种深度学习算法的图像标注工具,支持图像和视频的多样化标注样式,适用于多种AI训练场景。本文将详细介绍X-AnyLabeling的功能、技术原理以及如何运行该工具。
22 2
X-AnyLabeling:开源的 AI 图像标注工具,支持多种标注样式,适于目标检测、图像分割等不同场景
|
14天前
|
机器学习/深度学习 缓存 人工智能
【AI系统】QNNPack 算法
QNNPACK是Marat Dukhan开发的量化神经网络计算加速库,专为移动端优化,性能卓越。本文介绍QNNPACK的实现,包括间接卷积算法、内存重排和间接缓冲区等关键技术,有效解决了传统Im2Col+GEMM方法存在的空间消耗大、缓存效率低等问题,显著提升了量化神经网络的计算效率。
32 6
【AI系统】QNNPack 算法
|
14天前
|
存储 人工智能 缓存
【AI系统】Im2Col 算法
Caffe 作为早期的 AI 框架,采用 Im2Col 方法优化卷积计算。Im2Col 将卷积操作转换为矩阵乘法,通过将输入数据重排为连续内存中的矩阵,减少内存访问次数,提高计算效率。该方法首先将输入图像转换为矩阵,然后利用 GEMM 库加速计算,最后将结果转换回原格式。这种方式显著提升了卷积计算的速度,尤其适用于通道数较多的卷积层。
36 5
【AI系统】Im2Col 算法
|
14天前
|
存储 机器学习/深度学习 人工智能
【AI系统】Winograd 算法
本文详细介绍Winograd优化算法,该算法通过增加加法操作来减少乘法操作,从而加速卷积计算。文章首先回顾Im2Col技术和空间组合优化,然后深入讲解Winograd算法原理及其在一维和二维卷积中的应用,最后讨论算法的局限性和实现步骤。Winograd算法在特定卷积参数下表现优异,但其应用范围受限。
29 2
【AI系统】Winograd 算法
|
3天前
|
人工智能 算法
AI+脱口秀,笑点能靠算法创造吗
脱口秀是一种通过幽默诙谐的语言、夸张的表情与动作引发观众笑声的表演艺术。每位演员独具风格,内容涵盖个人情感、家庭琐事及社会热点。尽管我尝试用AI生成脱口秀段子,但AI缺乏真实的情感共鸣和即兴创作能力,生成的内容显得不够自然生动,难以触及人心深处的笑点。例如,AI生成的段子虽然流畅,却少了那份不期而遇的惊喜和激情,无法真正打动观众。 简介:脱口秀是通过幽默语言和夸张表演引发笑声的艺术形式,AI生成的段子虽流畅但缺乏情感共鸣和即兴创作力,难以达到真人表演的效果。
|
1月前
|
机器学习/深度学习 传感器 人工智能
智慧无人机AI算法方案
智慧无人机AI算法方案通过集成先进的AI技术和多传感器融合,实现了无人机的自主飞行、智能避障、高效数据处理及多机协同作业,显著提升了无人机在复杂环境下的作业能力和安全性。该方案广泛应用于航拍测绘、巡检监测、应急救援和物流配送等领域,能够有效降低人工成本,提高任务执行效率和数据处理速度。
智慧无人机AI算法方案
|
18天前
|
存储 人工智能 缓存
【AI系统】布局转换原理与算法
数据布局转换技术通过优化内存中数据的排布,提升程序执行效率,特别是对于缓存性能的影响显著。本文介绍了数据在内存中的排布方式,包括内存对齐、大小端存储等概念,并详细探讨了张量数据在内存中的排布,如行优先与列优先排布,以及在深度学习中常见的NCHW与NHWC两种数据布局方式。这些布局方式的选择直接影响到程序的性能,尤其是在GPU和CPU上的表现。此外,还讨论了连续与非连续张量的概念及其对性能的影响。
42 3
|
18天前
|
机器学习/深度学习 人工智能 算法
【AI系统】内存分配算法
本文探讨了AI编译器前端优化中的内存分配问题,涵盖模型与硬件内存的发展、内存划分及其优化算法。文章首先分析了神经网络模型对NPU内存需求的增长趋势,随后详细介绍了静态与动态内存的概念及其实现方式,最后重点讨论了几种节省内存的算法,如空间换内存、计算换内存、模型压缩和内存复用等,旨在提高内存使用效率,减少碎片化,提升模型训练和推理的性能。
36 1

热门文章

最新文章

下一篇
DataWorks