目标检测YOLOv3

2024-03-30 03:08
文章标签 目标 检测 yolov3

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

文章目录

  • 1.目标检测基础概念
    • 1.2 边界框(bounding box,bboxx)
      • 1.2.1 锚框(Anchor box)
      • 1.2.2 交并比(Intersection if Union, IoU)
  • 2. 单阶段目标检测模型YOLOv3
    • 2.1 YOLOv3模型设计思想
    • 2.2 产生候选区域
      • 2.2.1 生成锚框
      • 2.2.2 生成预测框(xywh)
      • 2.2.3 对候选区域进行标注
    • 2.3 卷积神经网络提取特征
    • 2.4 根据输出特征图计算预测框位置和类别
      • 2.4.1 建立输出特征图与预测框之间的关联
      • 2.4.2 计算预测框是否包含物体的概率
      • 2.4.3 计算预测框位置坐标
      • 2.4.4 计算物体属于每个类别概率
    • 2.5 损失函数
    • 2.6 多尺度检测
    • 2.7 预测

参考:https://www.paddlepaddle.org.cn/tutorials/projectdetail/1659421

1.目标检测基础概念

1.2 边界框(bounding box,bboxx)

表示物体的位置,是正好能包含物体的矩形框

表示形式:

1. xyxy,即(x~1~, y~1~, x~2~, y~2~),其中(x~1~,y~1~)是矩形框左上角的坐标,(x~2~,y~2~)是矩形框右下角的坐标.
2. xywh,即(x,y,w,h),其中(x,y)是矩形框中心点的坐标,w是矩形框的宽度,h是矩形框的高度。

1.2.1 锚框(Anchor box)

锚框是由人们假想出来的一种框。先设定好锚框的大小和形状,再以图像上某一个点为中心画出矩形框。

1.2.2 交并比(Intersection if Union, IoU)

描述两个框之间的重合度
I o U = A ∩ B A ∪ B IoU=\frac{A\cap B}{A \cup B} IoU=ABAB

在这里插入图片描述

# 计算IoU,矩形框的坐标形式为xyxy,这个函数会被保存在box_utils.py文件中
def box_iou_xyxy(box1, box2):# 获取box1左上角和右下角的坐标x1min, y1min, x1max, y1max = box1[0], box1[1], box1[2], box1[3]# 计算box1的面积s1 = (y1max - y1min + 1.) * (x1max - x1min + 1.)# 获取box2左上角和右下角的坐标x2min, y2min, x2max, y2max = box2[0], box2[1], box2[2], box2[3]# 计算box2的面积s2 = (y2max - y2min + 1.) * (x2max - x2min + 1.)# 计算相交矩形框的坐标xmin = np.maximum(x1min, x2min)ymin = np.maximum(y1min, y2min)xmax = np.minimum(x1max, x2max)ymax = np.minimum(y1max, y2max)# 计算相交矩形行的高度、宽度、面积inter_h = np.maximum(ymax - ymin + 1., 0.)inter_w = np.maximum(xmax - xmin + 1., 0.)intersection = inter_h * inter_w# 计算相并面积union = s1 + s2 - intersection# 计算交并比iou = intersection / unionreturn iou
# 计算IoU,矩形框的坐标形式为xywh
def box_iou_xywh(box1, box2):x1min, y1min = box1[0] - box1[2]/2.0, box1[1] - box1[3]/2.0x1max, y1max = box1[0] + box1[2]/2.0, box1[1] + box1[3]/2.0s1 = box1[2] * box1[3]x2min, y2min = box2[0] - box2[2]/2.0, box2[1] - box2[3]/2.0x2max, y2max = box2[0] + box2[2]/2.0, box2[1] + box2[3]/2.0s2 = box2[2] * box2[3]xmin = np.maximum(x1min, x2min)ymin = np.maximum(y1min, y2min)xmax = np.minimum(x1max, x2max)ymax = np.minimum(y1max, y2max)inter_h = np.maximum(ymax - ymin, 0.)inter_w = np.maximum(xmax - xmin, 0.)intersection = inter_h * inter_wunion = s1 + s2 - intersectioniou = intersection / unionreturn iou

2. 单阶段目标检测模型YOLOv3

2.1 YOLOv3模型设计思想

  1. 按一定规则在图片上产生一系列的候选区域,根据这些候选区域与物体真实框之间的位置关系进行标注(与真实框足够近的候选区域标记为正样本,偏离真实框较大的区域被标注为负样本)。

  2. 使用卷积神经网络提取图片特征并对候选区域的位置和类别进行预测。

    每个预测框可以看成一个样本,其标签为相对真实框的位置和预测的类别。通过网络模型预测其位置和类别,将网络的预测值和标签值进行比较,就可以建立起损失函数。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y4VI9Mtw-1626073973964)(%E7%9B%AE%E6%A0%87%E6%A3%80%E6%B5%8BYOLOv3.assets/image-20210505160342147.png)]

2.2 产生候选区域

  1. 按一定规则在图片上生成一系列位置固定的锚框,将这些锚框看作是可能的候选区域。
  2. 对锚框是否包含目标物体进行预测,如果包含物体还需预测所包含物体的类别、预测框相对锚框位置需要调整的幅度。

2.2.1 生成锚框

将原始图片划分成 m × n m\times n m×n个区域,每个区域产生 k k k 个锚框

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3pAvosqD-1626073973965)(%E7%9B%AE%E6%A0%87%E6%A3%80%E6%B5%8BYOLOv3.assets/image-20210505161406607.png)]

2.2.2 生成预测框(xywh)

锚框预测框
中心坐标(以小方格宽度为单位长度) c x + 0.5 c y + 0.5 c_x+0.5 \\ c_y+0.5 cx+0.5cy+0.5 b x = c x + σ ( t x ) b y = c y + σ ( t y ) b_x=c_x+\sigma(t_x)\\b_y=c_y+\sigma(t_y) bx=cx+σ(tx)by=cy+σ(ty)
大小 p h p w p_h \\ p_w phpw b h = p h e t h b w = p w e t w b_h=p_he^{t_h} \\ b_w=p_we^{t_w} bh=phethbw=pwetw

σ ( x ) = 1 1 + e x p ( − x ) \sigma(x)=\frac{1}{1+exp(-x)} σ(x)=1+exp(x)1

2.2.3 对候选区域进行标注

  • 标注锚框是否包含物体

    m × n × k m\times n \times k m×n×k 个锚框中选取 I o U IoU IoU最大的标注为正类1,其他标注为负类0( I o U IoU IoU大于ios_threshold的设置为-1,不参与损失函数的计算),最终每个真实框可对应一个标注为正类的锚框。

  • 标注预测框的位置坐标标签
    d x ∗ = σ ( t x ∗ ) = g t x − c x d y ∗ = σ ( t y ∗ ) = g t y − c y t w ∗ = l o g ( g t w p w ) t h ∗ = l o g ( g t h p h ) d^*_x=\sigma(t^*_x)=gt_x-c_x \\ d^*_y=\sigma(t^*_y)=gt_y-c_y \\ t^*_w=log(\frac{gt_w}{p_w}) \\ t^*_h=log(\frac{gt_h}{p_h}) dx=σ(tx)=gtxcxdy=σ(ty)=gtycytw=log(pwgtw)th=log(phgth)
    网络预测 ( σ ( t x ) , σ ( t y ) , t w , t h ) (\sigma(t_x),\sigma(t_y),t_w,t_h) (σ(tx),σ(ty),tw,th)与目标值 ( d x ∗ , d y ∗ , t w ∗ , t h ∗ ) (d^*_x,d^*_y,t^*_w,t^*_h) (dx,dy,tw,th)计算损失函数,建立起回归问题,通过网络学习使得 t t t足够接近 t ∗ t^* t,从而求解出预测框位置。

  • 标注锚框包含物体类别的标签

    使用one-hot向量标注物体类别

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bBqQGUZo-1626073973966)(%E7%9B%AE%E6%A0%87%E6%A3%80%E6%B5%8BYOLOv3.assets/image-20210508221830053.png)]

2.3 卷积神经网络提取特征

通过卷积网络提取图像特征。

YOLOv3使用的骨干网络为Darknet53

在这里插入图片描述

2.4 根据输出特征图计算预测框位置和类别

对于一个预测框,网络需要输出 ( 5 + C ) (5+C) (5+C)个实数来表征包含物体、位置和形状尺寸以及属于每个类别的概率。则所有预测框一共需要网络输出的预测值数目为:

2.4.1 建立输出特征图与预测框之间的关联

输出特征图大小与方块区域大小相等

最后输出通道数为 k ( 5 + C ) k(5+C) k(5+C)

在这里插入图片描述

P 0 [ t , 0 : 4 + C , i , j ] P0[t,0:4+C,i,j] P0[t,0:4+C,i,j] 与输入的第 t t t张图片上小方块区域 ( i , j ) (i,j) (i,j)的第1个预测框所需要的 5 + C 5+C 5+C个预测值对应

P 0 [ t , ( k − 1 ) ( 5 + C ) : k ( 5 + C ) − 1 , i , j ] P0[t,(k-1)(5+C):k(5+C)-1,i,j] P0[t,(k1)(5+C):k(5+C)1,i,j] 与输入的第 t t t张图片上小方块区域 ( i , j ) (i,j) (i,j)的第 k k k个预测框所需要的 5 + C 5+C 5+C个预测值对应

2.4.2 计算预测框是否包含物体的概率

P 0 [ t , 4 , i , j ] P0[t,4,i,j] P0[t,4,i,j] 与输入的第 t t t张图片上小方块区域 ( i , j ) (i,j) (i,j)的第1个预测框的objectness对应

P 0 [ t , ( k − 1 ) ( 5 + C ) + 4 , i , j ] P0[t,(k-1)(5+C)+4,i,j] P0[t,(k1)(5+C)+4,i,j] 与输入的第 t t t张图片上小方块区域 ( i , j ) (i,j) (i,j)的第 k k k个预测框的objectness对应

2.4.3 计算预测框位置坐标

P 0 [ t , 0 : 3 , i , j ] P0[t,0:3,i,j] P0[t,0:3,i,j] 与输入的第 t t t张图片上小方块区域 ( i , j ) (i,j) (i,j)的第1个预测框的位置对应

P 0 [ t , ( k − 1 ) ( 5 + C ) : ( k − 1 ) ( 5 + C ) + 3 , i , j ] P0[t,(k-1)(5+C):(k-1)(5+C)+3,i,j] P0[t,(k1)(5+C):(k1)(5+C)+3,i,j] 与输入的第 t t t张图片上小方块区域 ( i , j ) (i,j) (i,j)的第 k k k个预测框的位置对应

2.4.4 计算物体属于每个类别概率

P 0 [ t , 5 : 4 + C , i , j ] P0[t,5:4+C,i,j] P0[t,5:4+C,i,j] 与输入的第 t t t张图片上小方块区域 ( i , j ) (i,j) (i,j)的第1个预测框的类别对应

P 0 [ t , ( k − 1 ) ( 5 + C ) + 5 : k ( 5 + C ) − 1 , i , j ] P0[t,(k-1)(5+C)+5:k(5+C)-1,i,j] P0[t,(k1)(5+C)+5:k(5+C)1,i,j] 与输入的第 t t t张图片上小方块区域 ( i , j ) (i,j) (i,j)的第 k k k个预测框的类别对应

2.5 损失函数

  • 表征是否包含目标的损失函数
  • 表征物体位置的损失函数
  • 表征物体类别的损失函数

2.6 多尺度检测

目的:能够检测尺寸较小的目标,需要在尺寸较大的特征图上建立预测输出。

方法:将高层的特征图尺寸放大后跟低层级的特征图进行融合。

在这里插入图片描述

  • 开启端到端训练

在这里插入图片描述

2.7 预测

在这里插入图片描述

这篇关于目标检测YOLOv3的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

基于CTPN(tensorflow)+CRNN(pytorch)+CTC的不定长文本检测和识别

转发来源:https://swift.ctolib.com/ooooverflow-chinese-ocr.html chinese-ocr 基于CTPN(tensorflow)+CRNN(pytorch)+CTC的不定长文本检测和识别 环境部署 sh setup.sh 使用环境: python 3.6 + tensorflow 1.10 +pytorch 0.4.1 注:CPU环境

yolov3 上生产

1、在生产环境上编译darknet,执行make命令就好哦。  通过以后,拿到libdarknet.so 2、改一改../python/darknet.py文件 3、把darknet里的四个模型文件地址改一改就可以了     后面我会写一篇详细的,今天我要回家了

3月份目标——刷完乙级真题

https://www.patest.cn/contests/pat-b-practisePAT (Basic Level) Practice (中文) 标号标题通过提交通过率1001害死人不偿命的(3n+1)猜想 (15)31858792260.41002写出这个数 (20)21702664840.331003我要通过!(20)11071447060.251004成绩排名 (20)159644

基于深度学习的轮廓检测

基于深度学习的轮廓检测 轮廓检测是计算机视觉中的一项关键任务,旨在识别图像中物体的边界或轮廓。传统的轮廓检测方法如Canny边缘检测和Sobel算子依赖于梯度计算和阈值分割。而基于深度学习的方法通过训练神经网络来自动学习图像中的轮廓特征,能够在复杂背景和噪声条件下实现更精确和鲁棒的检测效果。 深度学习在轮廓检测中的优势 自动特征提取:深度学习模型能够自动从数据中学习多层次的特征表示,而不需要

自动驾驶---Perception之Lidar点云3D检测

1 背景         Lidar点云技术的出现是基于摄影测量技术的发展、计算机及高新技术的推动以及全球定位系统和惯性导航系统的发展,使得通过激光束获取高精度的三维数据成为可能。随着技术的不断进步和应用领域的拓展,Lidar点云技术将在测绘、遥感、环境监测、机器人等领域发挥越来越重要的作用。         目前全球范围内纯视觉方案的车企主要包括特斯拉和集越,在达到同等性能的前提下,纯视觉方

YOLOv9摄像头或视频实时检测

1、下载yolov9的项目 地址:YOLOv9 2、使用下面代码进行检测 import torchimport cv2from models.experimental import attempt_loadfrom utils.general import non_max_suppression, scale_boxesfrom utils.plots import plot_o

Java内存泄漏检测和分析介绍

在Java中,内存泄漏检测和分析是一个重要的任务,可以通过以下几种方式进行:   1. 使用VisualVM VisualVM是一个可视化工具,可以监控、分析Java应用程序的内存消耗。它可以显示堆内存、垃圾收集、线程等信息,并且可以对内存泄漏进行分析。 2. 使用Eclipse Memory Analyzer Eclipse Memory Analyzer(MAT)是一个强大的工具,可

Failed to establish a new connection: [WinError 10061] 由于目标计算机积极拒绝,无法连接

在进行参数化读取时发现一个问题: 发现问题: requests.exceptions.ConnectionError: HTTPConnectionPool(host='localhost', port=8081): Max retries exceeded with url: /jwshoplogin/user/update_information.do (Caused by NewConn

基于CDMA的多用户水下无线光通信(3)——解相关多用户检测

继续上一篇博文,本文将介绍基于解相关的多用户检测算法。解相关检测器的优点是因不需要估计各个用户的接收信号幅值而具有抗远近效应的能力。常规的解相关检测器有运算量大和实时性差的缺点,本文针对异步CDMA的MAI主要来自干扰用户的相邻三个比特周期的特点,给出了基于相邻三个匹配滤波器输出数据的截断解相关检测算法。(我不知道怎么改公式里的字体,有的字母在公式中重复使用了,请根据上下文判断字母含义) 1

前景检测算法_3(GMM)

因为监控发展的需求,目前前景检测的研究还是很多的,也出现了很多新的方法和思路。个人了解的大概概括为以下一些: 帧差、背景减除(GMM、CodeBook、 SOBS、 SACON、 VIBE、 W4、多帧平均……)、光流(稀疏光流、稠密光流)、运动竞争(Motion Competition)、运动模版(运动历史图像)、时间熵……等等。如果加上他们的改进版,那就是很大的一个家族了。