最近用YOLO训练过程中遇到的问题和猜测。

收敛速度比较慢

YOLO的训练比较明显的一个现象就是收敛比较慢,YOLO训练可以看作是是三个任务的联合训练,分别是:Objectness[O],一个BinaryCrossEntropy训练或者Logistic regression;Boundbox[B],一个数值回归的训练;Classification[C]任务,多类的分类任务,其实也是BCE。起码目前我观察的现象:

  1. O的训练:首先网络会被训练到基本都是100%的输出接近于0,后续才慢慢的收敛到接近GroundTruth。
  2. 同时,由于在训练过程中,B和C的任务只训练GT中objectness应该为1的点,一张图中,非目标区域的都是不参与训练的。
  3. 由于O任务的训练的收敛速度较慢,在O收敛的比较好之前,B和C的任务很难进一步学习。

O的收敛

其中1的问题,还是FocalLoss期望解决的问题,那就是正反案例的极度不平衡的问题。造成初期大量的负样例将整个O的输出推到了接近0的位置上。后续的训练才会慢慢的调整,让正样例能够准确预测。

这一过程,会浪费了不少算力。怎样让网络更加有效的训练?我能想到的是:

  1. Loss的计算加入类似FocalLoss的方法,让训练更加倾向于那些预测比较偏离的案例。当然原文已经试过了这个手段,但是是不是需要更加有针对性的调整?类似的试验我也进行过,但是目前也没有很明确的结论。
  2. 采用一些针对性的采样手段,我目前知道的比如SNIPER,让训练过程在采样阶段就忽略掉作用不大的图像区域,集中算力训练难度较大的。

BC任务

BC任务需要等待O的训练问题,第一直觉应该是加大BC在整体loss上的比重,让他们可以早点快速学习。同时,带来的问题是,可能会对O的训练有负面影响。不过这样的方法也只是在训练中多了个人肉调参的手段,是否有更加根本的解决方法?


XYWH尺度不一致

由于XY在YOLO用通过Sigmoid函数做了限制,然而WH的预测没有。这样的情况是,这两者的尺度不是一个量级的,那么在Loss中的比例,也就不可避免的有了倾向性。当然,随着训练的继续,两者的Loss会慢慢的接近。但是,这个问题和前一点中BC需要等待O训练是一个性质。直觉上看,应该也会拖慢收敛速度,或者起码,两个任务的收敛不是在一个步调上。

这样尺度不一致的问题,可以通过选择更加合理的anchors来缓解。让训练集的目标框的大小更加和anchors贴近,会缩小WH的尺度,整体上XYWH的预测范围会更加接近。

同时WH的预测在目标框小于和大于对应anchor的两个区间的尺度的变化速度是不一致的,这是ln函数的特性造成的。我的怀疑是,这个特性,会不会给网络的训练带来负面影响?


XY的Sigmoid先验

由于Sigmoid的特性,在极值附近和中间值附近的训练难度是完全不一样的,那么我们可以想象,对目标中心位置的预测的难度是越靠近边缘越大的。
这样的一个先验的限制,是不符合数据集合分布的,目标出现的位置应该是比较平均的。


Anchor数量

Anchor的数量选择会带来一个平衡问题。需要根据具体的数据集来确定:

  • 一个目标框大小变化不大的数据集,比较多的anchors会让B任务的训练数据分散,造成每个anchor的预测得不到充分的训练;不如少点anchors,让每个anchor都分配更多的数据来训练。
  • 变化较大的数据集,如果anchors数量太少,没法控制好WH的预测范围。训练过程中,偶尔的一个错误,会让B的loss变得太大(尤其是用MSE这种对outlier比较敏感的loss)破坏原本稳定的训练。

“单点确认”可能会降低召回

YOLO的O任务是针对目标中心点的,这也是因为B任务中XY只负责预测对应grid里的中心位置。
不过这样的限制显得过于严格了,网络未必可以确认feature map中哪个位置对应目标的正中,在feature map尺寸比较大的情况下,这个问题会更加明显一些。

另外一种情况是,目标框的中心点并不是图中目标的中心点:比如单手展开的行人,标注的目标框的中心点往往都已经不在目标主体上了。这个也会在训练的过程中给网络带来一些混淆。

yolo如何降低loss_YOLO训练中的问题与怀疑相关推荐

  1. yolo如何降低loss_YOLO详解

    创新 核心思想 效果 改进 实践 1. 创新 YOLO将物体检测作为回归问题求解.基于一个单独的end-to-end网络,完成从原始图像的输入到物体位置和类别的输出.从网络设计上,YOLO与rcnn. ...

  2. 3模型大小_分布式训练中数据并行远远不够,「模型并行+数据并行」才是王道...

    选自arXiv 作者:Saptadeep Pal等 机器之心编译参与:魔王.杜伟 数据并行(DP)是应用最广的并行策略,对在多个设备上部署深度学习模型非常有用.但该方法存在缺陷,如随着训练设备数量不断 ...

  3. 深度学习训练中噪声减小吗_【机器学习 155】DoubleEnsemble

    更新:根据大家评论区和私信的反馈,我们把文章重新更新了一版在 arxiv 上.这次更新主要修改了方法部分的叙述和其他一些typos.欢迎大家围观- 相信关注我专栏的也有很多对于金融感兴趣的同学,这里给 ...

  4. 神经网络训练中的Tricks之高效BP(反向传播算法)

    神经网络训练中的Tricks之高效BP(反向传播算法) zouxy09@qq.com http://blog.csdn.net/zouxy09 Tricks!这是一个让人听了充满神秘和好奇的词.对于我 ...

  5. 为什么vue-loader设置transformasseturls无效_拓展训练中“常见的无效提问”

    作为拓展训练培训师而言,提问是一项不可或缺的互动技能.它贯穿培训全过程,对提升学员学习参与兴趣度.达成课程效果有非常重要的作用.我们把那些在过程中未能实现预期目的的提问称为"无效提问&quo ...

  6. 简短加密_神经网络训练中回调的简短实用指南

    简短加密 Callbacks are an important part of neural network training. These are actions that can be perfo ...

  7. 如何解决 Iterative 半监督训练 在 ASR 训练中难以落地的问题丨RTC Dev Meetup

    前言 「语音处理」是实时互动领域中非常重要的一个场景,在声网发起的「RTC Dev Meetup丨语音处理在实时互动领域的技术实践和应用」活动中,来自微软亚洲研究院.声网.数美科技的技术专家,围绕该话 ...

  8. 深度神经网络模型训练中的 tricks(原理与代码汇总)

    点击上方"计算机视觉工坊",选择"星标" 干货第一时间送达 作者丨Jack Stark 来源丨机器学习小王子 原文链接|https://mp.weixin.qq ...

  9. 多模态预训练中的Prompt(ALPRO,Frozen)

    以往的文章更新过,背景就不再赘述: Cross-modal Pretraining in BERT(多模态预训练) CLIP,DALL-E 预训练新范式(Prompt-tuning,Prefix-tu ...

最新文章

  1. Ant Design Vue 表格数据按树型展示
  2. 【报告分享】5G赋能中国智慧城市白皮书.pdf(附下载链接)
  3. 微服务那么热,创业公司怎么选用实践?
  4. linux通过rpm和yum安装包
  5. Kotlin基础-对象声明和表达式
  6. javascript 简易时钟
  7. matlab 半方差分析,地统计学半方差分析几个名词含义说明
  8. 编程语言常见符号合集
  9. sql server 字符串转成日期格式
  10. 计算机画图讲课ppt,画图教学课件
  11. 手机坏了微信聊天记录怎么恢复?不用怕,用这招
  12. (论文笔记)An Attention Enhanced Graph Convolutional LSTM Network for Skeleton-Based Action Recognition
  13. 在python中怎么定义一个范围_如何定义范围
  14. 华为鸿蒙麒麟玉兔_华为注册整本山海经?操作系统取名鸿蒙芯片取名麒麟
  15. CollageIt 3 Pro for mac(拼贴精灵3专业版)
  16. VB--. 和 ! ?
  17. geemap的详细安装步骤及环境配置
  18. java设置打印机默认纸张A4
  19. 新媒体管家插件永久停服了
  20. appium、夜神模拟器 环境配置 出现报错 整理及其解答

热门文章

  1. CMap的使用(转)
  2. 十四、View Port 2.0
  3. SOA(在Tuscany 中开发web service)
  4. CCF201712试题
  5. HDU2094 产生冠军【set】
  6. I00015 打印等腰三角形字符图案(底边在上)
  7. HDU1106 排序【字符串+整数+排序】
  8. 中英文对照 —— 哲学
  9. WinEdt LaTex(三)—— 宏包
  10. matlab figure 调整大小、字体、线宽