构造训练样本和设计损失函数

在进行模型训练时,我们需要构造训练样本和设计损失函数,才能利用梯度下降对网络进行训练。

训练样本的构建

将一幅图片输入到yolo模型中,对应的输出是一个7x7x30张量,构建标签label时对于原图像中的每一个网格grid都需要构建一个30维的向量。对照下图我们来构建目标向量:

构造训练样本和设计损失函数

20个对象分类的概率

对于输入图像中的每个对象,先找到其中心点。比如上图中自行车,其中心点在黄色圆点位置,中心点落在黄色网格内,所以这个黄色网格对应的30维向量中,自行车的概率是1,其它对象的概率是0。所有其它48个网格的30维向量中,该自行车的概率都是0。这就是所谓的"中心点所在的网格对预测该对象负责"。狗和汽车的分类概率也是同样的方法填写

2个bounding box的位置

训练样本的bbox位置应该填写对象真实的位置bbox,但一个对象对应了2个bounding box,该填哪一个呢?需要根据网络输出的bbox与对象实际bbox的IOU来选择,所以要在训练过程中动态决定到底填哪一个bbox。

2个bounding box的置信度

预测置信度的公式为:

构造训练样本和设计损失函数

利用网络输出的2个bounding box与对象真实bounding box计算出来。然后看这2个bounding box的IOU,哪个比较大,就由哪个bounding box来负责预测该对象是否存在,即该bounding box的Pr(Object)=1,同时对象真实bounding box的位置也就填入该bounding box。另一个不负责预测的bounding box的Pr(Object)=0。

上图中自行车所在的grid对应的结果如下图所示:

构造训练样本和设计损失函数

损失函数

损失就是网络实际输出值与样本标签值之间的偏差:

构造训练样本和设计损失函数

yolo给出的损失函数:

构造训练样本和设计损失函数

构造训练样本和设计损失函数

模型训练

Yolo先使用ImageNet数据集对前20层卷积网络进行预训练,然后使用完整的网络,在PASCAL VOC数据集上进行对象识别和定位的训练。

Yolo的最后一层采用线性激活函数,其它层都是Leaky ReLU。训练中采用了drop out和数据增强(data augmentation)来防止过拟合。

模型预测

将图片resize成448x448的大小,送入到yolo网络中,输出一个 7x7x30 的张量(tensor)来表示图片中所有网格包含的对象(概率)以及该对象可能的2个位置(bounding box)和可信程度(置信度)。在采用NMS(Non-maximal suppression,非极大值抑制)算法选出最有可能是目标的结果。

总结:yolo模型预测速度非常快,处理速度可以达到45fps,其快速版本(网络较小)甚至可以达到155fps。训练和预测可以端到端的进行,非常简便。准确率会打折扣对于小目标和靠的很近的目标检测效果并不好。

文章来源于:王晴儿网页设计博客 欢迎分享交流,转载请注明出处

本文来自投稿,不代表重蔚自留地立场,如若转载,请注明出处https://www.cwhello.com/262469.html

如有侵犯您的合法权益请发邮件951076433@qq.com联系删除

(0)
黑马程序员黑马程序员订阅用户
上一篇 2023年5月8日 01:09
下一篇 2023年5月8日 01:10

相关推荐

  • 重蔚php学习第二十七天——php可变变量,匿名函数

    运算符:赋值运算符,算术运算符,错误抑制符,比较运算符,逻辑运算符,三元运算符,位运算符,连接运算符,自操作运算符(在项目计算当中,非常不建议使用多个自操作一起运算) 源码反码补码 整数的原码反码和补…

    2017年5月5日 PHP自学教程
    0380
  • PHP函数的数据可视化函数。

    PHP作为一种高性能、易学易用的服务器端脚本语言,功能十分强大。在开发过程中,经常需要对数据进行可视化,以便更好地展示和分析数据,这时就需要使用到PHP函数的数据可视化函数。数据可视化是指将复杂的数据经过…

    2023年5月22日
    03
  • 构造函数的细节和注意事项

    构造函数的细节和注意事项 构造函数没有返回值,即没有return, 就算写了也没有用处 在创建一个类的新对象时,系统会自动的调用该类的构造方法完成对新对象的初始化 构造函数的作用是完成对成员属性的初始化任务,而…

    2018年4月11日
    0270
  • PHP8中的函数:str_contains(),字符串搜索的新方法。

    随着PHP8的发布,该语言引入了一种新的字符串搜索函数str_contains(),这个函数在字符串中搜索指定的子字符串,并返回一个布尔值来表示该字符串是否包含指定的子字符串。这个新函数提供了一种简单和快速的方式,用…

    2023年5月21日
    024
  • 经验分享Oracle中两个字段相加减运算。

    在Oracle数据库中,我们可以使用加法(+)和减法()运算符来进行两个字段的相加减运算,这种运算可以在SELECT语句中使用,也可以在WHERE子句或HAVING子句中使用,以下是一些详细的技术教学,包括如何使用这些运算…

    2024年6月20日
    01
  • 常用函数总结(数学函数)

    函数名 描述 实例 输入 输出 abs() 求绝对值 $abs = abs(-4.2); //4.2 数字 绝对值数字 ceil() 进一法取整 echo ceil(9.999); // 10 浮点数 进一取整 floor() 舍去法取整 echo floor(9.999); // 9 浮点数 直接舍去…

    2016年5月17日
    0400
  • php的成员方法(函数)

    一个需求 当我们需要让对象完成某个任务(比如计算,比如上传下载文件,分页等等), 就需要在类中定义函数, 这时我们就将这样的函数称为 成员方法. 举例说明: 代码:

    2018年4月9日
    0212
  • PHP构造方法(函数)

    一个需求,引出构造函数 什么是构造函数呢?在回答这个问题之前,我们来看一个需求:前面我们在创建人类的对象时,是先把一个对象创建好后,再给他的年龄和姓名属性赋值,如果现在我要求,在创建人类的对象时,就指…

    2018年4月11日
    0370

联系我们

QQ:951076433

在线咨询:点击这里给我发消息邮件:951076433@qq.com工作时间:周一至周五,9:30-18:30,节假日休息