CV-笔记-重读YOLO目标检测系列 v2

2024-08-22 03:38

本文主要是介绍CV-笔记-重读YOLO目标检测系列 v2,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

    • anchor尺寸设置
    • label制作
    • 输入图像的大小
    • 其他一些加入的改进
    • 网络
      • 网络的预测输出
    • 损失函数
    • 训练参数,学习率
    • 实验结果
    • 引用

哎,看下来 yolo v1 v2总感觉作者写文章一般般,写的不清晰。yolo v2确实复杂!

anchor尺寸设置

不像Faster R-CNN里面一样使用手动设置anchor的尺寸,这里使用k-means来进行聚类,例如我们要五种类型的anchor,那么就聚为5类,那么聚类中心的尺寸就是我们的anchor尺寸。

但是这里的聚类距离选择的不是欧式距离,而是1-IOU(box, centroid)作为距离度量函数。这里说明一下怎么聚类,因为一个anchor是有两个值(RPN中提到的),一个是像素个数,还有一个长宽比,所以这里应该将长宽的大小作为聚类特征(因为长宽大小就决定了有多少像素和长宽比了),论文中说在做目标检测的时候主要是想要一个较高的IOU,但是k-means在聚类的时候是计算一个较近的距离,所以这里是1减去IOU(因为iou越大,1减去iou就越小了)。所以这里用1-IOU衡量,那怎么计算iou呢,我们可以假设box的中心点是(0,0),因为是对现在所有的目标的box进行聚类找出我们的anchor的尺寸,所以我们的数据就是所有目标的box的长宽,然后假设中心点是(0,0),这样我们就可以计算两个box之间的iou了。

其实RPN中是想要多种尺寸的anchor,也就是不同长宽的box,但不是说一定要像RPN中说的一样要指定几种面积,然后每种面积有几种长宽比。所以YOLO V2中就使用聚类来得到不同长宽的anchor(box)。

label制作

置信度:应该也是一个1和0,落在网格里面就是算有目标,这个和RPN不一样,RPN是通过iou计算正负样本的,这里是看是不是落在网格里面,如果不是这个区别那么就变成了普通的RPN了。原文:The network predicts 5 coordinates for each bounding box, t x , t y , t w , t h , and t o 。to就是置信度。

但是,需要注意的是,每个cell中实际上有5个anchor,并不是每个anchor的会预测这个物体,我们只会选择一个长宽和这个bbox最匹配的anchor来负责预测这个物体。那么什么叫长宽最为匹配?这个实际上就是将anchor移动到图像的右上角,bbox也移动到图像的左上角,然后去计算它们的iou,iou最大的其中一个anchor负责预测这个物体。这点和RPN中不一样,RPN只需要iou符合大于某个阈值就可以了。感觉yolo复杂多了。

和RPN还有个不同的是,RPN的是目标和不是目标是两个神经元预测,也就是softmax,这里是一个预测 sigmoid。

在RPN 里面中心点的是回归一个相对于宽高的偏移量,即:
在这里插入图片描述
原文中符号写错了:
在这里插入图片描述
这样回归其实是有缺点的,这个公式回归出来的中心点是不受约束的,它的活动范围是全图,可以想象其实我们回归出t以后然后计算出的x,y的值可以是图像中的任意位置在随机初始化的情况下,模型需要很长时间才能稳定地预测出合理的偏移量

所以yolo v2就把关键点回归约束在网格之内,是相对于网格左上角的一个偏移量,这样归一化以后的偏移量就是在0到1之间。这样回归会更加稳定
tx = bx - cx, ty = by - cy

距离如下图所示,那个对t做变换的参数不用管他,只是为了说明最好是加sigmoid的激活的, σ是sigmoid函数,也就是为了约束到0到1之间。实际上做数据的时候就是转换成t就可以了。
在这里插入图片描述
宽高和RPN一样:

在这里插入图片描述

输入图像的大小

为了使得目标占很大,或者是中心点在图的中间的目标在预测的适合更加准确,所以最好让输出的特征图的像素是个奇数,也就是说把图像隔成奇数个网格,这样就不会像偶数格一样把图像中心分成两部分了,大家可以想象一下3格和4格的区别,4格就把图的中心分割成一半了,如果目标中心点正好在中心区域的周围,那么偏移一点误差也很大了。

其他一些加入的改进

  1. 加入了一个不同层特征的融合。concat连接
  2. 多尺度训练,Every 10 batches our network randomly chooses a new image dimension size. Since our model downsamples by a factor of 32, we pull from the following multiples of 32: {320, 352, …, 608}. Thus the smallest option is 320 × 320 and the largest is 608 × 608. We resize the network to that dimension and continue training.

网络

主干网络使用了darknet-19,因为文章说vgg16虽然效果精度高,但是计算量大。darknet-19是使用1x1来减少计算量,就是bottleneck。网络如下:

在这里插入图片描述
网上的图:

在这里插入图片描述
这是在imagenet上进行预训练的结构,训练检测的时候去掉最后一个卷积层,然后增加一个3x3的卷积层和一个1x1的卷积层。原文:We modify this network for detection by removing the last convolutional layer and instead adding on three 3 × 3 convolutional layers with 1024 filters each followed by a final 1 × 1 convolutional layer with the number of outputs we need for detection。

并且,还增加了一个从最后的3×3×512层到第二个到最后一个卷积层的透传层,这样我们的模型可以使用细粒度的特征。原文(看的不是很清晰):We also add a passthrough layer from the final 3 × 3 × 512 layer to the second to last convolutional layer so that our model can use fine grain features.

anchor的个数也是通过实验选择出来的。最后选择了5性价比比较高,越多效果越好。
在这里插入图片描述

网络的预测输出

其实每个anchor都是预测:4个(坐标值)+1个(置信度)+ n个类别:
在这里插入图片描述
对比YOLO1的输出张量,YOLO2的主要变化就是会输出5个先验框,且每个先验框都会尝试预测一个对象。输出的 13*13*5*25 张量中,25维向量包含 20个对象的分类概率+4个边框坐标+1个边框置信度。

损失函数

??????what?
文章中居然没说用什么loss???, 难道用的是smooth L1,还是yolo中的loss??
应该是结合吧,既然预测宽和高用的是RPN的,预测中心点用的是yolo,预测有没有目标也是yolo的。那么应该就是结合一下了,宽高用smooth L1, 中心点用均方差,有没有目标(置信度)用均方差以上只是猜测,具体看代码。

重温yolo v2 - stone的文章 - 知乎https://zhuanlan.zhihu.com/p/40659490 中的图:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
卧槽 差点被坑了,文章中是把网络输出换算成x,y,w,h之后才进行计算loss的不是直接回归t。RPN中是回归t的

训练参数,学习率

  • 学习率:train the network for 160 epochs with a starting learning rate of 10−3 , dividing it by 10 at 60 and 90 epochs.
  • sgd:We use a weight decay of 0.0005 and momentum of 0.9.
  • 数据增强:We use a similar data augmentation to YOLO and SSD with random crops, color shifting, etc

实验结果

分辨率越高效果越好:
在这里插入图片描述
在这里插入图片描述

引用

  • YOLOv2 / YOLO9000 深入理解 - X-猪的文章 - 知乎https://zhuanlan.zhihu.com/p/47575929
  • 重温yolo v2 - stone的文章 - 知乎https://zhuanlan.zhihu.com/p/40659490

这篇关于CV-笔记-重读YOLO目标检测系列 v2的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1095135

相关文章

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

烟火目标检测数据集 7800张 烟火检测 带标注 voc yolo

一个包含7800张带标注图像的数据集,专门用于烟火目标检测,是一个非常有价值的资源,尤其对于那些致力于公共安全、事件管理和烟花表演监控等领域的人士而言。下面是对此数据集的一个详细介绍: 数据集名称:烟火目标检测数据集 数据集规模: 图片数量:7800张类别:主要包含烟火类目标,可能还包括其他相关类别,如烟火发射装置、背景等。格式:图像文件通常为JPEG或PNG格式;标注文件可能为X

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

基于 YOLOv5 的积水检测系统:打造高效智能的智慧城市应用

在城市发展中,积水问题日益严重,特别是在大雨过后,积水往往会影响交通甚至威胁人们的安全。通过现代计算机视觉技术,我们能够智能化地检测和识别积水区域,减少潜在危险。本文将介绍如何使用 YOLOv5 和 PyQt5 搭建一个积水检测系统,结合深度学习和直观的图形界面,为用户提供高效的解决方案。 源码地址: PyQt5+YoloV5 实现积水检测系统 预览: 项目背景

JavaFX应用更新检测功能(在线自动更新方案)

JavaFX开发的桌面应用属于C端,一般来说需要版本检测和自动更新功能,这里记录一下一种版本检测和自动更新的方法。 1. 整体方案 JavaFX.应用版本检测、自动更新主要涉及一下步骤: 读取本地应用版本拉取远程版本并比较两个版本如果需要升级,那么拉取更新历史弹出升级控制窗口用户选择升级时,拉取升级包解压,重启应用用户选择忽略时,本地版本标志为忽略版本用户选择取消时,隐藏升级控制窗口 2.

flume系列之:查看flume系统日志、查看统计flume日志类型、查看flume日志

遍历指定目录下多个文件查找指定内容 服务器系统日志会记录flume相关日志 cat /var/log/messages |grep -i oom 查找系统日志中关于flume的指定日志 import osdef search_string_in_files(directory, search_string):count = 0