1.前言

  本人是在先前学习中有同学提到了极市平台,当时一看还不错,至少这个平台有实战项目,可以用来实践.只可惜当时刚学到神经网络知识,还没接触到yolo系列的目标检测和实例分割.等学习完后,来到极市平台,说实话我就是为了实战来的.后来极市平台升级了,把业务逻辑上的模型开发和模型部署封装分开了,感觉使用起来更方便了.
  大家一定会问这个平台有什么优势?和kaggle,阿里天池比赛平台有什么区别啊?实战经验自己做项目也可以积累啊?模型处理和部署和其他的有什么不同啊?
  极市是针对视觉AI开发使用的一个平台,数据集的数据标注都是标注好的(但也有标漏的),已实际的需求出发,从检验模型的评分到业务逻辑的检验,再到最后c++的封装,部署到实际设备一整套开发流程.

2.平台操作介绍

1.数据集的标注
  目标检测的2d框标注,采用VOCxml的标注文件,实例分割的标注采用了mask的png图片标注,当然这些都是平台标注好的数据.

2.模型训练
 a.编码模式(少量的数据,图片都是被处理过的),在可编译环境(在线IDE JupyterLab和VSCode)使用模型代码预训练数据来进行调试,使用共用的显卡资源(Tesla T4 *1)16GB的GPU资源,so大家使用时把batch_size调小点,GPU占用也小些,这样大家调试代码时都可以使用.
 b.训练模式就是有真实数据的训练模式,把编码模式下的代码以及所有标注数据挂载到虚拟环境中训练,当然不是编码状态下,所以都是不可见的.但可以通过 模型开发->训练->训练任务中的实时日志,来查看日志输出面板,以及通过tensorboard查看训练时的metrics.

3.评分标准模型测试
模型训练好了,当然要测试下模型的精度,介绍一下介绍模型的评分标准
  评分得分=F1—Score*0.9+fps得分*0.1
  F1—Score=2PR/(P+R)
算法性能得分fps标准值为100,采用了在MAP0.5时的F1-score评分,

  我感觉很有实际应用的价值,(往往训练的模型P不错,就是R召回率比P低太多,说明模型的学习不足),fps也是不能忽略的.因此上100fps就是fps满分了.
  模型测试,自己在指定的ji.py文件中写入业务代码,返回box信息的json,平台系统自动计算出评分.(自己也可以把需要检测的业务逻辑代码写在这里,平台升级后ji.py只是模型测试)

4.算法开发封装
  同模型开发一样,也是编码模式和调试模式,在c++文件中写入实际业务检测的逻辑代码,TensorRT部署封装后加载前面的onnx模型,运行实际数据(视频及图片文件)查看检验的效果,最后提交封装提交给极市平台进行实际设备的检验.这里就不细说了,自己来极市平台体验,肯定你会受益颇多!

3.经验总结

  上面说的太长了,不想看极市平台的文档的可以看下来了解一下.一路实践过来,坑是真的多,现在我来填坑,同样也是经验的积累.模型以及网络结构原理网上都有,这里就不叙述了.下面是自我总结的干货了,有错误请指出.
  我最刚开始没摸清流程,照着平台文档中心的<<基于YOLOV5的新手任务实践>>来做,总算是把模型开发的流程跑通了,测试一看别人的fps上100,自己的只有30左右,后来来到实训周训练营以及sdk封装训练营,在同学们和导师的提示后,经过一次次实验,终于使yolov5s的pt模型文件终于达到了99-100fsp左右,精度只比自己最高值低一点.

1.fps就是运算的时间,什么会影响运算的时间,模型的大小,输入的数据尺寸,输出后处理数据的参数,以及nc类别数

# 基于YOLOV5的新手任务实践 ji.pyconf_thres = 0.3  # confidence thresholdiou_thres = 0.05  # NMS IOU thresholdmax_det = 1000  # maximum detections per imageimgsz = [1024,1024]

  这几项参数,imgsz尺寸过大严重影响运算时间,可以自己调整正常训练的640,以及480,为了fps更高也可以480-32*N,自己去试验fps得分了,当然fps快了,模型精度也是会下降的,conf_thres和iou_thres是nms 的阈值,就是nms选取0.45就可以了,也可以自己调试0.35,0.4等.

2.训练时通过查看tensorboard 的metrics可以知道lr的是否过大,如下图学习率过大容易导致loss下不去

第二张图片(主要是展示上下波动频率大,不要在意数值) P精确率 在上下震荡中,就说明lr 学习率就过大了,可以适当调小学习率

3.极市上的这篇文章太经典了,训练的步骤说的很清楚,我把他的部分实用技巧差不多都借鉴过来了
title: ECV 2021 冠军方案解读:船只数量检测方案
site: https://cvmart.net/community/detail/5755

  • a.采用cache加快运行速度,并使用图像编码解码,使内存占用缩小为原来的1/6
# 自己修改的code
# 使用cv2编码 压缩图像
self.ims[i] = np.array(cv2.imencode('.jpg', self.ims[i])[1])
.............
# 使用cv2解码
im = None if im is None else cv2.imdecode(im, cv2.IMREAD_COLOR)
.............
return im, self.im_hw0[i], self.im_hw[i]
  • b.采用了每[0]/5(i%5==0) epoch冻结head,[1-4]/5冻结backbone 进行训练,代码你们应该都能写出来
  • c.通过冲浪学科,找到了一篇csdn修改SAM优化器的文章,照着修改代码,修改出了SAM优化器的yolov5.说实话效果不是很明显,但是训练时间变为了2倍
  • d.训练完的模型调优时可以通过nms的iou和conf阈值,以及输入imgsz参数的调整,达到精度与fps的最优,从imgsz =480 iou=0.45 conf=0.3开始调整

4.yolov5s模型训练时可以使用 --rect --cache参数,可以大大缩短训练时间,rect可以减少GPU显存占用,(这样就可以调大batch_size参数了) ,但--rect矩阵式没有一般的训练效果好(还是够用),--AdamW是为了开始快速到达鞍点使用的,后面模型微调时效果没有SGD好.使用rect+cache+480img_size 训练起来,简直是神速,12GB图像文件*6/7的train集,1个epoch只要2分钟左右,但是求快不如求稳更好,所以只用cache(编码解码方式).
  yolov5使用--cache, --worker 设置大了, 出现 CUDA out of memory 或者data = fetcher.fetch(.........)错误,最后只能设置成2.
  yolov7 --rect --Adam 2种都使用,效果完全不行,可能是我使用方式不对.

5.超参数的调整,只能靠自己经验了,lr大了调整为一半或者下降一个数量级,其他的超参数loss的权重以及数据增强调整就大家自己摸索了

6.转换onnx文件后,c++封装时碰到的问题

  正常情况下应该是只有一个最优框,但此时出现3个box框.通过修改iou阈值后,直接有最小和中间的框,大框消失了.在ev_sdk_demo4.0_pedestrian_intrusion_yolov5中,我查看c++的nms代码发现,它是置信度从小到大排列开始挑选box,和python中所学到的nms中置信度conf大到小排列方式开始塞选完全相反,并且没有使用多类别方式的box iou比较方式,因为多类别的box重叠在一起,所以最大的框消失了.比如说这里的人和电动车的box进行了比较,把人的box框留下了,电动车最大的box框剔除掉了.

  当时的解决方法是box使用了偏移量,和修改nms的iou阈值,达到了只剩下最大框的效果,还是有少许误检.每个类别的box+类别偏移量,来比较iou阈值,能自己写nms的c++代码应该会更快些,可以避免不必要的重复比较运算.

  后来在平台群上看到和我一样的情况(大框中框同时存在),才知道是哪个地方出问题了.原因是yolov5的官方代码导出onnx支持的tensort主版本是8,而平台的版本主版本是7,感谢平台的大佬提示错误原因

# 转换前 需要下面的code
################################grid = model.model[-1].anchor_gridmodel.model[-1].anchor_grid = [a[..., :1, :1, :] for a in grid]
################################torch.onnx.export(..........)

5.还有一些其他的没有解决的问题,pt模型在img_size=384时fps为99左右,转换后的onnx模型在c++中性能fps只有49.58,感觉应该是输入图片尺寸自己没有处理的问题,

6.在线ide的JupyterLab开发环境中右边的双竖滚动条好影响操作,自己笔记本分辨率低了所以上下界面显示不全,一拖文件的Tab标题栏的就上下分栏了(VSCode环境中没有这个情况)

解决:F12 把/html/body/div/div[3]/div/div/div/div[class="ide-body"] 中 min-height;取消掉这样就取消了双滚动条了,(副作用就是Terminal中偶尔看不见最后一行 只能按键盘↓去到达最底端)

以上有错误请指出!!!

4.小结

  在这个平台实训训练营中确实学会到了许多,很多都是实际中遇到的问题,还有很多高手在其中指点.当时的三个框这个问题我没想到调整nms阈值可以解决问题,感谢导师的提点.后续要学习的内容还有很多,感谢各位老师和同学.也希望平台能对手机端的布局进行调整.

极市平台实训经验分享相关推荐

  1. 极市平台实训打榜经验分享

    9月份我参加了极市平台举办的计算机视觉算法实训周,在这个期间我选择了自己感兴趣的电梯间电动车识别的项目进行实战学习,在这个过程中,自己也从不太懂得的小白,一步一步的慢慢的会利用平台提供的资源来进行训练 ...

  2. 短视频如何赚钱 短视频自媒体实操经验分享+真实

    以今日头条为例,视频的播放量主要通过系统推荐来获得,它的智能推荐系统(俗称人工智能)就是把合适的新闻推荐给对他感兴趣的人群.头条每天的内容几百万,不可能靠小编来干预推荐,都是智能机器人根据网友的互动数 ...

  3. 云计算架构师分享:容器云在金融企业的落地方案 | 周末送资料(原题:某保险公司容器云PaaS平台建设实践经验分享)

    [摘要]随着技术和社区的成熟,容器.Kubernetes.微服务等新事物不再只是概念,已在很多企业落地并发挥了生产力,对容器和PaaS的需求也从试探性转向规模化推广和纵深探索,建设企业级容器PaaS平 ...

  4. stm32移植paho_如何在STM32上移植Linux?超详细的实操经验分享

    原标题:如何在STM32上移植Linux?超详细的实操经验分享 刚从硬件跳槽为嵌软时,没有任何一丝的准备.一入职,领导就交代了一项特难的任务--在stm32上移植linux! 瞬间我就懵了,没办法硬着 ...

  5. 对接第三方系统实操经验分享

    对接第三方系统实操经验分享 前言 为使得指示性更强,有以下名词说明 A系统:是指要发起对接的我方系统,可以理解成 Client B系统:是要对接的第三方系统,可以理解成 Server 对接第三方的特殊 ...

  6. 万字干货:大道至简,用户增长模型体系/完整方法论/实操经验分享

    相信大家这两年可能都有这种感觉,无论大小厂都开始关注起了增长,都在聊起了增长,在聊这个之前,我们有必要知道2个问题. 1. 什么是增长? 小学时我们都学过这样的数学题:一个水池子打开进水口X小时装满水 ...

  7. 外卖cps返利怎么做,我的一些实操经验分享

    之前写过一篇<近期实操的"月躺赚3000块"的小项目>,很多朋友也因此关注我,不过当时用的是订阅号,引流也都采用的免费渠道,也是认知不够,小"富"即 ...

  8. 微信第三方平台-授权流程经验分享

    原文地址: www.jianshu.com/p/67836ffa9- 在做微信第三方平台开发的时候,虽然授权的技术实现流程比较简单,但是相对于一个key直接集成的一些其他的服务来说,还是有一些步骤,过 ...

  9. 今日头条自媒体平台实操经验分享,让你月入上万不是梦

    最近自媒体火的不得了,无论是今日头条,腾讯自媒体.百度百家还是这两天炙手可热的UC云观,似乎让所有的从业者找到了微信公众号之后的另外一波红利机会! 说实在的,网上赚钱只要你在恰当的时机切入进去,是个傻 ...

最新文章

  1. android 手写字体识别,一种基于Android系统的手写数学公式识别及生成MathML的方法...
  2. RxSwift之UI控件UIGestureRecognizer扩展的使用
  3. python 多维数组轴_python – numpy通过任意轴重塑多维数组
  4. 教你如何在 elasticsearch 中重建索引
  5. 案例八:shell自动化管理账本脚本
  6. 关于接地:数字地、模拟地、信号地、交流地、直流地、屏蔽地、浮
  7. ubuntu11.10 源码编译安装php5.3.8,Ubuntu 11.10编译安装Nginx、PHP 5.3.8、MySQL、MongoDB、Memcached、SSL、SMTP...
  8. 机器视觉:偏振片应用
  9. 问题记录:既然MAC能唯一标识一台设备,那为什么我们还需要IP呢?
  10. 如何查询远程计算机的名称,如何解析远程计算机名称以获取它在java中的IP地址...
  11. 蚁群算法原理及python代码实现
  12. 在国产系统(Linux)上,安装运行Steam游戏详解
  13. 长连接与短连接的区别
  14. Ti-Click:通过浏览器快速搭建 TiDB 在线实验室 | Ti-可立刻团队访谈
  15. win11桌面出现ie图标且无法删除,打开是2345主页:解决方法
  16. 下拉框输入模糊查询_高考英语听力考试查询、网上填报志愿时间、诈骗陷阱提防!全在这里了...
  17. 在LINUX下面建立GPRS无线MODEM拨号
  18. Oceans (where feet may fail)
  19. 第三方支付平台:微信支付接口
  20. 求无限循环小数的循环节

热门文章

  1. 删除word 2016 三个减号加回车出现的横线
  2. 查找域控命令_域控服务器CMD命令大全
  3. 腾讯SNG后台技术总监:千锤百炼造就亿万级后台架构
  4. [C++] count函数
  5. 保留thinkvantage一键恢复功能的Linux与vista双系统安装
  6. IDEA14--SVN安装的使用心得
  7. 系统 CPU 效率高,DMA 技术功不可没!
  8. YUYV转灰度图和JPG图片
  9. jquery-1.10.2.min.map 404 (Not Found)问题及解决
  10. 「PS-CC2019新版教程-有作业」选区工具-基础篇