yolov2相对于yolo来说的优势就是文章题目所说的,更好,更快,更强。下面来看看yolov2如何达到这个目的的。
随着BN的提出,且在各种网络大量的引入,yolov2引入了BN(batch normalization)。文章还发现BN不仅改善了网络性能,还有一定的正则化的作用,因此文章移除了yolo中使用的dropout *** 作。
关于BN具体的计算,可以参考 BN及其改进算法
在yolov1的时候采用的是 大小的来进行分类任务, 大小的来进行检测任务。
文章认为直接切换为高分辨率,可能对网络性能有所伤害。yolov2在使用了 大小的训练的分类网络中,再用 大小的来训练10轮分类网络,之后用得到的网络来训练检测网络。
借助fasterrcnn的思想,预测坐标的偏移量比直接预测坐标更容易学习,所以yolov2引入anchor的思想。
fasterrcn预测方式如下:
上式中,x,y是预测的框中心, 、 是anchor框的中心点坐标, 、 是anchor框的宽和高, , 是网络的输出。
注意:这里与yolo9000原文不同的是,上式中是‘-’号,但是按照fasterrcnn的公式推导其实应该为‘+’,这样更好理解
fasterrcnn这种训练方式对于 和 没有约束,使得训练早期坐标不容易稳定。
所以yolov2的预测方式如下:
上式中, 分别为预测参数, 为归一化的预测框的中心坐标和长宽, 是当前网格距离左上角的距离,该距离也为规划化后的距离, 表示anchor的长宽, 表示sigmoid函数。上述中的归一化指的是每个网格的长宽为1。这里可以看出因为加了sigmoid函数,使得预测出的 始终为0-1的,就不容易造成训练早期的坐标不稳定了。
在yolov1中,因为每个网格负责预测两个框,对于大小为 大小的featuremap来说,yolov1只能预测出 个预测框。但是引入anchor后,对于 的featuremap来说,可以预测出 个预测框(这里假定使用更大的分辨率图像作为输入,且anchor类型有9累)。所以引入anchor对于模型性能的提升,增大了优化的空间。(虽然引入anchor,使得文章的map下降了,但是召回升高了很多)
yolov2中anchor定义不同于fasterrcnn是人工预设的比例和大小,文中通过k-means来聚类出k类anchor类,文章最终k=5。这里聚类时距离的度量值如下定义:
上式中centroid为聚类中心,box为其它待聚类的框,IOU为iou计算公式。可以看出IOU越大,两个框越近。
为了对小物体有更好的检测效果,文章想直接利用更为精细的特征来检测小物体,所以在进行最终的下采样之前,引入了passthrough的方法,该方法利用了下采样之前的特征是的对小物体的检测更为精确。
关于passthrough方法,网友给出的图非常详细,如下图所示:
yolov1中对于检测任务采用的是 来训练网络。yolov2为了适应多尺度的物体检测,网络的训练时采用多种尺寸,这些尺寸为32的倍数,有 。训练过程中,每10个batches后随机选择这些尺度中的一个输入网络进行训练。
文中提出了一个新的网络结构叫做Darknet-19,网络结构如下图所示。
表中展示的是分1000类的网络结构。
对于检测任务,网络结构相对上述分类结构有所改动。
文章的这部分主要是用来证明yolov2有较强的特征提取性能,采用了一些整理标签的方法,融合了COCO和Imagenet来做一些实验。
在这篇文章中,我们将使用来自 AWS 上的 COCO 数据集(可定制)的图像设置和运行 YOLO。
一般来说,分类技术在自动驾驶 汽车 中没有多大帮助,因为它只预测图像中的一个对象,并且不给出该图像的位置。 而目标检测在自动驾驶 汽车 中非常重要,可以检测场景中的对象及其位置。 YOLO(你只看一次)是由 Joseph Redmon 等人创建的一种高速实时对象检测算法。 YOLO使用卷积神经网络 (CNN)解决概率的回归问题。 后来又进行了一些修改。 为了进行预测,YOLO 只需要通过 CNN 进行一次前向传播。 它输出具有相应边界框的对象。 它广泛用于自动驾驶 汽车 以检测场景中的物体。
第 1 步:设置帐户(这步可以跳过)
登录wandbai网站并复制以下内容:
来自 wandbai/authorize 的 API 密钥
wandbai/settings 中的团队名称。 默认团队名称将是用户 ID。
第 2 步:创建 AWS 实例(如果你在本机训练这步也可以跳过)
在创建实例时,选择“Deep Learning AMI (Ubuntu 1804) Version 470 — ami-01f1096e6659d38fa”AMI,因为它具有深度学习任务所需的库。 如果我们在“选择AWS机器映像 (AMI)”步骤中搜索“deep learning”,我们可以找到这。为“实例类型”选择 P3 实例。 实例类型 p32xlarge(V100) 就足够了。为了节省成本,请在“配置实例”步骤下选择 Spot 实例。
第 3 步:安装依赖项
登录 AWS 实例后,使用以下命令创建 conda 环境并设置 Weights & Bias 环境变量:
第 4 步:训练、验证和测试
第 5 步:检查指标
验证集真实标签
验证集预测标签
训练的损失
测试
以上所有结果都会保存在文件夹yolov5runsdetectexp下
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)