IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 极市平台ECV2021比赛经验分享 -> 正文阅读

[人工智能]极市平台ECV2021比赛经验分享

1.写在比赛之前

最近极市平台举办了今年2021年的ECV比赛活动,其实第一次接触到这个比赛是去年差不多也是下半年这个时候,当时应该是第一届,参加的人不是特别多,今年极市给ECV2021制定的奖金还是十分丰富的,第一名能得到60000元的现金奖励加上一台笔记本,这个吸引力放在同年的所有同类型比赛中也是十分有竞争力的。

ECV2021的比赛总共有8个赛道,每个赛道的奖励方案都一样,下面放一张图,大家可以感受一下。

极市ECV2021奖金方案
除了第一有丰富奖品之外,其余名次(Top8)的选手都可谓是雨露均沾,即便是奖金区最后一名选手都能拿到5000元现金奖励以及一个Intel计算棒作为额外奖品(这里真的不得不提一下,Intel的计算棒真的还挺好玩,特别是现在openvino对CNN,RNN等方法的支持越来越全面后,基本上有一个计算棒后就可以diy很多好玩的小应用)

2.比赛内容分享

本次比赛我主要参加的是其中几个跟目标检测相关的赛道,对于不熟悉极市平台的小伙伴来说,我感觉初次在这个平台上比赛,还是先看看官方的docs。因为这个平台跟其他地方的比赛有个很大的不一样是数据保密性和模型部署,因此在训练和测试的时候都是采用docker挂载个人数据区然后提交训练脚本的方式完成,平时大家需要在编码环境中进行环境构建以及代码编写,调试。整个流程还是挺考验一个人的工程开发意识的,所以最好还是先去看看文档。

再不济,可以把新人任务做一下熟悉熟悉。

2.1编码环境

首先在平台上报名以后,可以从环境中进行实例启动,然后进入到编码环境。如下所示。

环境构建实例
启动实例以后就可以开始进行在线编码,平台总共提供了两种编码环境,分别是jupyter notebook和vs code,可能平时做数据分析的小伙伴都喜欢前者,但我感觉在CV和NLP等比赛中,大家都是喜欢用vs code管理一个工程进行编码。

在线vs code点击进入以后即可开始环境搭建以及代码编写,界面如下,还是很方便的。

在线编码vs code平台一览

在vs code中,初次进入之后我们需要完成两个任务

  1. 环境搭建,第一次进入的时候极市一般都会用一个初始的docker镜像完成初始化,比如我主要用pytorch,选择的pytorch镜像就包含了pytorch1.4,openvino2021.3,操作系统貌似是Ubuntu18的,后期比如转openvino的时候肯定要用道德onnx或者onnxruntime都需要安装一下。vs code自带了terminal,大部分小伙伴应该都是知道的,编码环境->左上角菜单->Terminal->new terminal,即可找到,然后再terminal里面就当在一个正常的Linux环境中搭建好自己的代码吧。
  2. 代码编写,在上图中,左边菜单栏中大家可以注意两个目录,trainev_sdk,这两个文件夹是需要重点关注的,因为他们分别是在开启训练任务和测试任务时会被挂载到对应的任务服务器上的文件夹。他们的路径分别是.

训练代码路径
/project/train
测试代码路径
/usr/local/ev_sdk

2.2模型训练

接下来我们来看看模型的训练过程,一般来说,总是上GitHub去找到一个合适的目标检测库,然后判断适不适合这个比赛,适合的话就开始干。

本次比赛,我们以yolov5为例,yolov5这个方法就不做过多介绍,不过他也没有正式的论文来介绍自己,但不妨碍他依然是一个优秀的库,包含了很多实用的训练技巧,模型结构等,最重要的是各种平台的部署案例和教程都很完整,简直可以说良心。更多的信息大家可以到正式主页上进行了解 了解yolov5

大家可以看下目前yolov5残暴的性能。

yolov5 coco性能
在平台实际应用中,最终的部署肯定不局限于用yolov5的代码训练好一个模型就行,还是要在openvino平台上进行部署才能得到最终的精度分数和性能分数,从而才能参加平台的最终排行榜排名。因此我们继续检索,采用这个库的思想完成剩余的内容。yolov5_openvino并且,为了方便使用这个库的内容,我们采用这个库里面说的yolov5 v3.1版本代码。感谢大佬们的开源工作。

首先获取yolov5工程

git clone https://github.com/ultralytics/yolov5.git

pytorch版本的yolov5到最终的模型需要经历以下步骤,pytorch的pth权重->对应的onnx权重->openvino的xml和bin文件

在v3.1版本的yolov5中用于进行pt模型转onnx模型的程序对nn.Hardswish()进行了兼容,模型转换过程大为化简,模型可以通过pytorch的jit直接导出,如果是采用了之前的yolov5版本代码,那么对于这个算子可能就要稍微花点时间进行转换支持了,其实万变不离其宗,之前版本的代码只需要对这个算子进行数学公式的理解以后即可采用torch.api进行拼接完成。

2.2.1训练准备

首先肯定到原本的主页去看看如何操作

yolov5官方的指南: https://github.com/ultralytics/yolov5/wiki/Train-Custom-Data

描述信息准备

在yolov5的文件夹下/yolov5/models/目录下可以找到以下文件

yolov5s.yaml
yolov5m.yaml
yolov5l.yaml

这三个文件分别对应s(小尺寸模型),m(中尺寸模型)和l(大尺寸模型)的结构描述信息。

  • nc

需要识别的类别数量,coco数据集原始的默认类别数量为80,我们需要把它修改成实际训练数据集中的样本类别数。

  • anchors

通过kmeans等算法根据自己的数据集得出合适的锚框。这里需要注意:yolov5内部实现了锚框的自动计算训练过程默认使用自适应锚框计算。经过实际测试,自己通过kmeans算法得到的锚框在特定数据集上能取得更好的性能。

2.2.2数据准备

这部分请参考yolov5官方指南里面的设置,注意标注格式是class x_center y_center width height,其中x_center y_center width height均是根据图像尺寸归一化的0到1之间的数值。

2.2.3执行训练

以采用yolov5s为例

python ~/src_repo/yolov5/train.py --batch 16 --epochs 10 --data ~/src_repo/xxx.yaml --cfg ~/src_repo/yolov5/models/yolov5s.yaml --weights ""

其中

  • –data 参数后面需要填充的是训练数据的说明文件.其中需要说明训练集,测试集,种类数目和种类名称等信息,具体格式可以参考yolov5/data/coco.yaml.
  • –cfg 为在训练准备阶段完成的模型结构描述文件.
  • –weights 后面跟预训练模型的路径,如果是""则重新训练一个模型.推荐使用预训练模型继续训练,不使用该参数则默认使用预训练模型.
  • –noautoanchor 该参数可选,使用该参数则禁止自适应anchor计算,使用–cfg文件中提供的原始锚框.

2.2.4模型转换

经过训练,模型的原始存储格式为.pt格式,为了实现OpenVINO部署,需要首先转换为.onnx的存储格式,之后再转化为OpenVINO需要的.xml和.bin的存储格式。

pt格式转onnx格式

这一步的转换主要由yolov5/models/export.py脚本实现.

可以参考yolov5提供的简单教程

使用该教程中的方法可以获取onnx模型,但直接按照官方方式获取的onnx模型其中存在OpenVINO模型转换中不支持的运算。因此,使用该脚本之前需要进行一些更改:

opset_version!!(这个很重要,这次ECV2021内置的openvino2021.3对opset_version=10的支持是十分不错的,推荐大家用这个version number)

/yolov5/models/export.py

torch.onnx.export(model, img, f, verbose=False, opset_version=12, input_names=[‘images’], output_names=[‘classes’, ‘boxes’] if y is None else [‘output’])

opset_version=12,将导致后面的OpenVINO模型装换时遇到未支持的运算 因此设置为opset_version=10。

Detect layer export

model.model[-1].export = True

设置为True则Detect层(包含nms,锚框计算等)不会输出到模型中。

设置为False包含Detect层的模型无法通过onnx到OpenVINO格式模型的转换。

需要执行如下指令:

python ./models/export.py --your_weight.pt文件路径 --img 640 --batch 1

需要注意的是在填入的.pt文件路径不存在时,该程序会自动下载官方预训练的模型作为转换的原始模型,转换完成则获得onnx格式的模型。

转换完成后可以使用Netron进行可视化,对于陌生的模型,该可视化工具对模型结构的认识有很大的帮助。

netron可视化示例
onnx格式转换OpenVINO的xml和bin格式

OpenVINO是一个功能丰富的跨平台边缘加速工具箱,本文用到了其中的模型优化工具和推理引擎两部分内容。我个人认为这是现在PC平台最好的部署工具,在X86计算架构上,openvino的地位是不可撼动的,当然如果你觉得你知道的某个公司优化得更好,那么我也不争,反正要我在x86上部署,肯定无脑openvino。

更多参考信息请查看openvino

回到极市平台的ECV2021比赛中,在/usr/local/ev_sdk/models文件夹下,极市已经给大家准备好了一个openvino转换的示例,不过是TensorFlow的。但是对于mo.py工具来说,大部分参数都是相通的。

这里我们展示一个onnx转成openvino模型文件的示例代码:

# 这次官方提供的镜像已经将openvino安装配置好了
python /opt/intel/openvino/deployment_tools/model_optimizer/mo_onnx.py \
		--input_model your_onnx.onnx \ #文件路径
		--output_dir your_save_path # 期望模型输出的路径

2.3推理部署

to be continue。。。

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-08-02 10:49:09  更:2021-08-02 10:50:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/22 14:43:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码