目标检测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)
描述两个框之间的重合度
IoU=A∩BA∪BIoU=\frac{A\cap B}{A \cup B} IoU=A∪BA∩B
# 计算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模型设计思想
按一定规则在图片上产生一系列的候选区域,根据这些候选区域与物体真实框之间的位置关系进行标注(与真实框足够近的候选区域标记为正样本,偏离真实框较大的区域被标注为负样本)。
使用卷积神经网络提取图片特征并对候选区域的位置和类别进行预测。
每个预测框可以看成一个样本,其标签为相对真实框的位置和预测的类别。通过网络模型预测其位置和类别,将网络的预测值和标签值进行比较,就可以建立起损失函数。
2.2 产生候选区域
- 按一定规则在图片上生成一系列位置固定的锚框,将这些锚框看作是可能的候选区域。
- 对锚框是否包含目标物体进行预测,如果包含物体还需预测所包含物体的类别、预测框相对锚框位置需要调整的幅度。
2.2.1 生成锚框
将原始图片划分成m×nm\times nm×n个区域,每个区域产生kkk 个锚框
2.2.2 生成预测框(xywh)
锚框 | 预测框 | |
---|---|---|
中心坐标(以小方格宽度为单位长度) | cx+0.5cy+0.5c_x+0.5 \\ c_y+0.5cx+0.5cy+0.5 | bx=cx+σ(tx)by=cy+σ(ty)b_x=c_x+\sigma(t_x)\\b_y=c_y+\sigma(t_y)bx=cx+σ(tx)by=cy+σ(ty) |
大小 | phpwp_h \\ p_wphpw | bh=phethbw=pwetwb_h=p_he^{t_h} \\ b_w=p_we^{t_w}bh=phethbw=pwetw |
σ(x)=11+exp(−x)\sigma(x)=\frac{1}{1+exp(-x)} σ(x)=1+exp(−x)1
2.2.3 对候选区域进行标注
标注锚框是否包含物体
m×n×km\times n \times km×n×k 个锚框中选取IoUIoUIoU最大的标注为正类1,其他标注为负类0(IoUIoUIoU大于ios_threshold的设置为-1,不参与损失函数的计算),最终每个真实框可对应一个标注为正类的锚框。
标注预测框的位置坐标标签
dx∗=σ(tx∗)=gtx−cxdy∗=σ(ty∗)=gty−cytw∗=log(gtwpw)th∗=log(gthph)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∗)=gtx−cxdy∗=σ(ty∗)=gty−cytw∗=log(pwgtw)th∗=log(phgth)
网络预测(σ(tx),σ(ty),tw,th)(\sigma(t_x),\sigma(t_y),t_w,t_h)(σ(tx),σ(ty),tw,th)与目标值(dx∗,dy∗,tw∗,th∗)(d^*_x,d^*_y,t^*_w,t^*_h)(dx∗,dy∗,tw∗,th∗)计算损失函数,建立起回归问题,通过网络学习使得ttt足够接近t∗t^*t∗,从而求解出预测框位置。标注锚框包含物体类别的标签
使用one-hot向量标注物体类别
2.3 卷积神经网络提取特征
通过卷积网络提取图像特征。
YOLOv3使用的骨干网络为Darknet53
2.4 根据输出特征图计算预测框位置和类别
对于一个预测框,网络需要输出(5+C)(5+C)(5+C)个实数来表征包含物体、位置和形状尺寸以及属于每个类别的概率。则所有预测框一共需要网络输出的预测值数目为:
2.4.1 建立输出特征图与预测框之间的关联
输出特征图大小与方块区域大小相等
最后输出通道数为k(5+C)k(5+C)k(5+C)
P0[t,0:4+C,i,j]P0[t,0:4+C,i,j]P0[t,0:4+C,i,j] 与输入的第ttt张图片上小方块区域(i,j)(i,j)(i,j)的第1个预测框所需要的5+C5+C5+C个预测值对应
P0[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,(k−1)(5+C):k(5+C)−1,i,j] 与输入的第ttt张图片上小方块区域(i,j)(i,j)(i,j)的第kkk个预测框所需要的5+C5+C5+C个预测值对应
2.4.2 计算预测框是否包含物体的概率
P0[t,4,i,j]P0[t,4,i,j]P0[t,4,i,j] 与输入的第ttt张图片上小方块区域(i,j)(i,j)(i,j)的第1个预测框的objectness对应
P0[t,(k−1)(5+C)+4,i,j]P0[t,(k-1)(5+C)+4,i,j]P0[t,(k−1)(5+C)+4,i,j] 与输入的第ttt张图片上小方块区域(i,j)(i,j)(i,j)的第kkk个预测框的objectness对应
2.4.3 计算预测框位置坐标
P0[t,0:3,i,j]P0[t,0:3,i,j]P0[t,0:3,i,j] 与输入的第ttt张图片上小方块区域(i,j)(i,j)(i,j)的第1个预测框的位置对应
P0[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,(k−1)(5+C):(k−1)(5+C)+3,i,j] 与输入的第ttt张图片上小方块区域(i,j)(i,j)(i,j)的第kkk个预测框的位置对应
2.4.4 计算物体属于每个类别概率
P0[t,5:4+C,i,j]P0[t,5:4+C,i,j]P0[t,5:4+C,i,j] 与输入的第ttt张图片上小方块区域(i,j)(i,j)(i,j)的第1个预测框的类别对应
P0[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,(k−1)(5+C)+5:k(5+C)−1,i,j] 与输入的第ttt张图片上小方块区域(i,j)(i,j)(i,j)的第kkk个预测框的类别对应
2.5 损失函数
- 表征是否包含目标的损失函数
- 表征物体位置的损失函数
- 表征物体类别的损失函数
2.6 多尺度检测
目的:能够检测尺寸较小的目标,需要在尺寸较大的特征图上建立预测输出。
方法:将高层的特征图尺寸放大后跟低层级的特征图进行融合。
- 开启端到端训练
2.7 预测
目标检测YOLOv3相关推荐
- GPU端到端目标检测YOLOV3全过程(下)
GPU端到端目标检测YOLOV3全过程(下) Ubuntu18.04系统下最新版GPU环境配置 · 安装显卡驱动 · 安装Cuda 10.0 · 安装cuDNN 1.安装显卡驱动 (1)这里采用的是P ...
- GPU端到端目标检测YOLOV3全过程(上)
GPU端到端目标检测YOLOV3全过程(上) Basic Parameters: Video: mp4, webM, avi Picture: jpg, png, gif, bmp Text: doc ...
- 深度学习-目标检测YOLOV3 YOLOv4原理详解
2.YoloV3核心基础内容 2.1 网络结构可视化 Yolov3是目标检测Yolo系列非常非常经典的算法,不过很多同学拿到Yolov3或者Yolov4的cfg文件时,并不知道如何直观的可视化查看网络 ...
- yolov3 指定gpu_GPU端到端目标检测YOLOV3全过程(中)
GPU端到端目标检测YOLOV3全过程(中) 计算机视觉初级部分知识体系 总结了一下自己在 图像点(pixel值)运算 1. 直方图: 2. 线性/非线性变换: 3. 灰度均衡化/规定化: 4.H-S ...
- yolov3目标检测android,目标检测 | YOLOv3训练自己的数据全流程
1.构建YOLOv3网络的cfg文件 该文件表示的是你的检测网络的结构,类似caffe的prototxt文件. YOLOv3的cfg文件 上篇介绍YOLOv3网络中提到的去掉上采样操作的YOLOv3c ...
- 目标检测YOLOv3论文详解
第二节 YOLOv3 2.1 YOLOv3简介 YOLO系列的目标检测算法可以说是目标检测史上的宏篇巨作,YOLOv3是YOLO (You Only Look Once)系列目标检测算法中的第三版,v ...
- 目标检测yolov3+文字识别CRNN 实现文本检测和识别
参考链接: https://github.com/chineseocr/chineseocr https://zhuanlan.zhihu.com/p/34757009 https://wenku.b ...
- 目标检测——YOLOV3的学习笔记
1 可以参考的资料 1.1 GiantPandaCV的资料 在GiantPandaCV公众号的后台回复"yolov3"获取相关的资料: 1.2 熊猫群主的聚类脚本: 熊猫群主的聚类 ...
- Autoware1.14-摄像头目标检测YOLO-V3
下载YOLO-V3 权重文件 权重地址:https://pjreddie.com/media/files/yolov3.weights 建议存放地址:autoware.ai/install/visio ...
最新文章
- Kafka文件存储机制及offset存取
- Android 设置EditText光标Cursor颜色及粗细
- ubuntu下codeblocks起步
- 购买绝版书的好地方——淘宝
- Mysql使用Data Modeler
- sitemesh3.0的配置以及在静态html中的使用
- 2019 年诺贝尔物理学奖揭晓!三得主让宇宙“彻底改观”!
- 【Oracle】ERROR: ORA-28000: the account is locked
- php位置,php – 如何有效地找到一个给定位置附近最近的位置
- MariaDB数据存储引擎的选择
- 并查集-A Bug's Life(poj2492)
- H5唤起web地图导航
- 一文读懂什么是数字证书
- 基于LeNet的手写汉字识别(caffe)
- 编写python程序实现分段函数_python分段函数如何编写?_后端开发
- Linux上github提示Permission denied (publickey),如何才能解决?
- NVIDIA嵌入式开发板Jetson TX1教程
- 历年茅台计算机招聘考试真题,2020贵州茅台招聘考试试题及答案(7)
- qt 调用linux键盘输入,嵌入式linux上QT标准键盘输入的实现
- java获取text plain_request中获取post的json对象数据content-type=“text/plain”
热门文章
- Android加速度传感器原理
- 什么是光端机,什么是PDH光端机,什么是SDH,什么是SPDH
- OpenSea上如何创建自己的NFT(Polygon)
- 福州大学java期末试卷,Java Web认证题.doc
- html布局属性,hTML之FLEX布局属性
- 在access中一列称为_在数据表中,每一行称为一条____,每一列称为一个____。
- 网易我的世界手机版服务器文件在哪个文件夹,网易我的世界手机版怎么导入地图_手机版地图导入教程...
- プログラム・ライブラリ
- 抖音获取douyin分享口令url API 返回值说明
- mysql主从配置duxi_做Mysql主从时,注意使用replicate_wild_do_table和replicate-wild-ignore-table...