RoboMaster

标题: RMUL2022山东区域交流会02-神经网络优化与运动预测算法分享 [打印本页]

作者: 山东站区域赛务    时间: 2022-2-28 12:21
标题: RMUL2022山东区域交流会02-神经网络优化与运动预测算法分享
RMUL 2022 山东区域第二场线上圆桌交流会来啦~

【会议主题】神经网络优化与运动预测算法分享
【关键词】轻量化、Singer模型、视觉算法
【形式】嘉宾分享+自由问答+问卷反馈抽奖
【时间】北京时间2022/2/14 20:00-21:00
【嘉宾】哈尔滨工业大学(威海)HERO战队 22赛季视觉组成员-鲁浩海、郭舒典

本期为大家邀请到哈尔滨工业大学(威海)HERO
战队的视觉组队员,与大家分享基于22赛季规则做出的视觉算法优化。分享包括YOLOX、四点模型、Singer模型等内容的详细解读,在上一期分享后,反馈“希望听到具体视觉算法分享”的朋友们不要错过~

会议回放:【直播回放】RM2022高校课程沙龙-山东02:神经网络优化与运动预测算法分享

资料包下载(含PPT+论文+书籍):
[attach]31883[/attach]

[attach]31882[/attach]
[attach]31881[/attach]
[attach]31880[/attach]
[attach]31879[/attach]

[attach]31878[/attach]



下表为嘉宾分享与自由问答的摘录提要:(部分问题为B站弹幕问题,编辑时已丢失,故仅摘录主题)
  在模型量化的时候精度损失太大怎么办?
  
分享一下我个人观点,首先可能是这个模型的一些层,它不支持你量化它,可能从它设计时就不允许,那么它量化的时候精度损失很大就很正常。
  另外,如果损失精度很大,但又想量化的话,那可以用精度损失感知量化,它会自动感知模型量化的时候损失了多少精度,如果精度损失过大的话,它就不会量化这些层。相当于这个模型中,它部分层被量化,部分层不会被量化,可以使用这种量化方式来避免量化损失精度过大。
  或者,如果是int8量化损失过大的话,那么直接使用FP16(半精度浮点数)也是可以的。
  就是一般来说,各种层就算它不支持量化,它也是可以使用半精度浮点数的。
  YOLO回归问题
  
我们采用的方法是直接回归这4个点,就是说,因为标签它给出了矩形框的四个点坐标,然后我们YOLO预测的时候,预测的也是这四个点的坐标,所以我们回归的时候就直接回归了这四个点的偏移。
  原来的YOLO的那些中心点,还有它的长和宽,因为它本质上也是用来表达矩形框位置的,所以我们就把它去掉,它跟我们刚才讲的那个四个点的回归重复了,就是说我们现在只回归四个点的偏移
  运动预测论文可以分享吗
  
(见资料包)
  在Label Assignment这一步里,计算四个顶点和Label时,为什么不可以直接用四个顶点的凸多边形、去和Label进行计算,而去做那么多的特殊处理?
  
这个其实是因为一开始我们绕了很多弯路,并没有想到会有这么多这种问题,所以说对它的处理可能也有些复杂。
  你使用凸多边形的这个当然是可以的,但是使用凸边形,只有一种情况就是说,它可能这四个点的顺序发生了错误,那么我们用凸多边形进行计算肯定是可以的。
  但是还有一种情况,就是本来那四个点就是一个四边形,它就没有凸多边形可以用。那对于这种情况,我们还是要把它挑出来,而后边那两步,我当时说检查四个点顺序那一步,其实做的就是求它的凸多边形,因为它是四个点,一开始给出了四个点的顺序,如果正常连线是一个八字形的话,那么后边那一步其实就相当于求出了凸多边形。
  Label Assignment是模型里自带的一步吗?还是拼在一起的?
  
在YOLOX里面它是自带这一步的,不过我们对它进行了一些修改
  
  识别一帧图片需要多长时间
  
我们在NUC上跑OpenVINO的YOLO,目前最快(把各种加速属性全都用上)情况下,能够做到大概15毫秒一帧图片
  YOLO模型使用什么数据集进行训练
  
我们目前的YOLO模型是使用直接采集的数据进行训练的,就是我们在自己学校场地上拍摄了一部分数据集,进行了一些训练,当然还有做一些数据增强什么的。
  至于通过其他大规模的数据集训练,我们没有(进行),是因为主要考虑到比如说像网上常见的那种数据集。或者常见的训练模型(比如ImageNet上的分类网络),它是常见的物体的特征,跟装甲板的特征区别比较明显,可能预训练的效果并不是那么好。
  另外之前我看过一篇文章,我记不清具体的出处了,它说很多网络如果用ImageNet进行预训练的话,可能对于分类网络的能力提升没有那么好。
  所以我们最终没有尝试使用大规模的其他训练集学习后进行迁移学习,我们是直接训练
  四点模型要求
  
  我们目前使用的数据集规模大概在两三千张,因为我们现在也属于一个比较基础的阶段,没有做特别成熟的成果。
  这个数据集的要求,曝光背景环境就是,只要是不同的数据集,肯定都能学习,但学习出来效果如何,那肯定就是会有区别。我觉得这个得看你真实比赛上场的时候,这个相机的曝光是什么样子的。背景环境肯定是越贴近于场上环境越好。这样越能学习副样本的真实特征(场上干扰物品的特征),才能够越不容易误识别。
  具体说多大规模的数据集才够用,这个我也没有办法准确回答
  
  帧率是否过低
  
  15毫秒推理大概67帧的话肯定是比较低,但因为这是我们的初版模型,说实话还有很多地方可以进行优化。
  我目前采用的这个15毫秒模型,也没有经过任何的量化,然后,YOLOX的结构,也几乎没有经过任何大的调整
  
加速的主要方式
  
  我个人认为加速的主要方式是
  1.模型优化,模型结构上的优化
  2. 对模型进行量化
  3.多线程推理
  我目前个人感觉,相对最容易出现明显提升的主要这几个
  
  数据集里,如果说样本分类特别不均衡,比如一个类别的标签数量是另外一个类别的四五倍以上,这样训练时会不会出现,标签少的分类的检测精度降低?
  我目前用的,因为条件有限,就是改了一下代码,大概统计出各个数据集的比例,再给这个比例算一算,然后给各个预测出来的分类损失做加权。
  这个办法效果怎么样,有没有更好的解决办法?

  
  数据集不均衡的问题我们也遇到过,我个人感觉有两种办法。
  那种类别比较少的图片,如果它相对来说也没有那么少的话,那你可以限制一些数据比较多的类别,把丢掉一部分,防止网络专门去学习这几个多的类别,而不去学习那几个少的类别。
  另外一个,我们也是刚在尝试,就是有一种分类的loss函数是focal  loss,它会考虑样本不均衡问题,就是它的loss本身就会涉及到样本均衡,然后就会去平衡样本分布。这个我个人感觉,要比手动加权更科学合理一点。但是具体它的作用有多少,我也没有办法很量化地回答,我们也属于一个比较基础的探索阶段,用这种loss函数能比普通loss函数好多少,我们也没有什么详细的实验。不过网上有一些文章说,换成focal之后,它的MAP长了6~7个点。
  
我们的条件比较有限,网上有没有质量好一些的开源装甲板的数据集
  
  我们用的数据集,一部分网上的数据集是上交开源的内录数据集,他们的数据网站里有很多上交自己开源的比赛的内录视频。
  我觉得质量非常高,我们之前用的也是这个,也用它来补充了一部分我们自己的数据集
  
  四点模型识别范围
  
  我觉得你可能想问的是,对于不同大小的目标,它识别效果怎么样?
  就我个人理解,不同大小目标实验效果怎么样,应该跟你的网络结构关系更大一点,跟它是四点模型还是矩形框模型关系应该不是很大。
  我感觉,小目标识别得好不好,主要在于网络有没有考虑到多种尺度的目标检测。对于远距离小目标,要看神经网络训练时输入图像的分辨率,(分辨率)越高,它那张特征图的尺度相对越大,对于小目标识别就会越好一些
  
  四点模型的数据标注有什么注意点
  
  我个人没有遇到特别需要注意的点,但有一个小问题,也是我之前踩过的一个小坑。
  必须保证所有的点的顺序都是一样的,并且准确地标到装甲板的四个点(标点的位置不能差特别多),差得非常多的话,可能学习到的特征会发生偏移。
  至于别的需要注意的点,我没有遇到过
  
  你们有用上交的标注软件吗?他们的标签怪怪的
  
  (队里)其他人用过,我没有负责数据集标注这一部分,我拿到的数据就已经是他转成我们团队内部约定好的格式的,所以我也不太清楚上交格式是怎么样的
  
移动装甲板速度
  
  移动装甲板的速度大概有3m/s,然后是个变速,它会有加速、匀速、减速
  

畅游知识海洋,更多丰富内容请见培训体系:https://www.robomaster.com/zh-CN/robo/training-system
往期课程沙龙及PPT:https://bbs.robomaster.com/forum ... d=7984&extra=page=1









欢迎光临 RoboMaster (https://bbs.robomaster.com/) Powered by Discuz! X3.2