推广 热搜:   公司  快速  中国  企业    行业  设备  上海  未来 

【目标检测】英雄联盟能用YOLOv5实时目标检测了 支持onnx推理

   日期:2025-01-03     移动:http://keair.bhha.com.cn/mobile/quote/6052.html

目录

一、项目介绍

二、项目结构

三、准备数据

1.数据标注

2.数据转换格式

四、执行训练

1.anchors文件

2.标签文件

3.预训练模型

4.训练数据

5.修改配置

6.执行训练

五、执行预测

1.检测图片

2.检测视频

3.heatmap

五、转换onnx

1.导出onnx文件

2.检测图片

3.检测视频


 系列文章

【目标检测】英雄联盟能用YOLOv5实时目标检测了 支持onnx推理

【目标检测】YOLOv5能识别英雄和小兵?原理解析~

        dcmyolo(dreams create miracles,中文:大聪明目标检测工具包。该项目基于pytorch搭建,构建的目的是提供一个拥有更好性能的 YOLO版本 ,同时拥有丰富的中文教程和源码细节解读,提供算法工具箱,给出不同体量模型的实验数据,为算法落地带来便利。项目本着方便开发者的目的,开箱即用,推理阶段直接将dcmyolo目录考到项目中,实例化一个类,然后调用即可。

        很多教程都是基于coco和voc数据集,我也会提供基于coco数据集的预训练模型。为了增加趣味性,下面我将以检测英雄联盟中的英雄、小兵和塔为案例,仔细介绍dcmyolo的使用方法。

项目链接:     https://github.com/oaifaye/dcmyolo

数据链接     https://pan.baidu.com/s/1P7dYyd5B8ofBXaQEnzYO_g   提取码:faye 

测试视频     https://pan.baidu.com/s/127KmDvrXNEYXBYHHRWeizw  提取码:faye 

预训练模型https://pan.baidu.com/s/1a7uPLqBByAOgHSZfYebHaQ 提取码:faye 

标注工具     https://pan.baidu.com/s/1YDrpr1SJOxL5-wpo1nlLfw  提取码:faye 

ONNX查看工具 Netron

效果演示:     英雄联盟能用YOLOv5实时目标检测了_英雄联盟

dcmyolo                                    项目主目录

        + data                               存放训练和测试的数据

        - dcmyolo                          实现该项目所有核心功能,移植的时候直接考这个目录就可以

                - model                      模型构建相关

                        + backbone       各种backbone,现在只有CSPdarknet,以后会继续丰富

                        yolo_body.py     构建模型的类,实例化后进行使用

                + model_data            存放模型文件

                + utils                         工具类

        labelme2voc.py                 将labelme的json文件转换成voc格式

        voc2annotation_txt.py       将VOC格式转换成项目需要的格式

        make_anchors.py             生成数据集的anchors文件

        train_dcmyolo.py               执行训练

        export.py                           导出onnx等格式的文件

        predict_dcmyolo.py           推理demo

        predict_onnx.py                pth转换onnx,onnx执行推理的demo

        我们需要制作train.txt、val.txt、test.txt三个文件,格式如下

 

        文件中一个图片一行,一行中每段信息用空格隔开,第一段是图片存放的路径,这里我们就放在项目中的data/wangzhe/JPEGImages目录;其余的段表示框的位置和所属类别,每段中用有逗号分成5个部分,分别表示左上x,左上y,右下x,右下y,所属类别的index。

        如果只有图片,没有标注,我们需要执行下面的数据标注和数据格式转换步骤,过程很简单,就是体力活。

        如果使用开源数据集,我们需要自己动手把数据集的标注文件转换成如上格式,不需要下面的步骤。

        如果使用我整理好的英雄联盟手游数据,下载数据后直接在项目的data目录解压缩,直接就能用,也不需要下面的步骤。

        这一步骤用于制作自己的数据集,标注工具我们使用labelme,标注之后使用脚本将标注文件转换成voc格式,然后再从voc转换成我们需要的格式,labelme下载链接在上面,解压缩之后使用方法如下

        (1)双击main.exe打开labelme

         (2)选择要标注的图片目录,这里我准备了100多张英雄联盟的截图,比如放在项目中的data/wangzhe_org/目录。

         (3)该文件夹下所有的图片会列在右侧,选一张图片,右键图片区域选择矩形框

         (4)用矩形框选一个目标(英雄,填入类别名称,点击OK完成一个目标的标注。注意:一定要从左上到右下进行框选;同一张图片有多少目标标注多少目标,不要遗漏;同一类别的名称必须一样,不同类别的名称不能相同;类别名称使用英文(大小写敏感,不要有标点。

         (5)标注完一张图片,选择下一个图片时会提示保存json文件,保存到默认目录即可,不要改目录。

        我们已经得到了labelme生成的json格式的标准文件,我们需要先将它先转换成VOC格式,再转换成我们需要的格式。

        (1)转换成VOC格式

        执行项目中的labelme2voc.py文件,实例如下:

 

         其中dcmyolo/model_data/wangzhe_classes.txt文件,共3种标签文件内容如下

 

        VOC格式有如下4个文件 ,Annotations存放标签文件、AnnotationsVisualization存放用框标注好的图片,方便我们检查、JPEGImages存放图片、class_names.txt存放所有类别的标签,我们接下来只使用Annotations和JPEGImages

        (2)转换项目需要的格式

        执行项目中的voc2annotation_txt.py文件,实例如下:

 

        至此我们生成了项目需要的标签文件,可以训练了。

        所有数据文件、配置文件的文件名和目录都可以自定义,下面我将按照我的习惯存放这些文件。

        文件放在dcmyolo/model_data/wangzhe_classes.txt

        原版的yolov5中提到的一个改进是不需要手动生成anchors,其实是在训练之前掉了一下生成anchors的方法,我更习惯手动生成anchors,也不麻烦。

        anchors的作用我将在下一篇讲原理的时候提到,现在我们只管生成就好了,使用make_anchors.py生成

 

        生成后的文件wangzhe_anchors.txt长这样

 
 

        文件放在dcmyolo/model_data/wangzhe_classes.txt,内容就是标签三个类别,每行一个类别

 
 

       下载预训练模型后,解压缩放在dcmyolo/model_data/。

        预训练模型有两种,backbone和yolov5,backbone只是在imagenet上预训练的分类模型,yolov5是在coco数据集训练的yolov5模型。如果既加载backbone又加载yolov5的预训练模型,backbone参数将被覆盖。yolov5预训练模型包含一些backbone没有的卷积层,如果fine-tuning建议使用yolov5的预训练模型,收敛更快。

        将上面的数据集解压缩,放到data目录即可。

        如果是自己标注的数据,核心的三个文件train.txt、val.txt、test.txt放到data/wangzhe/目录,同时要保证这三个文件中的图片路径是对的就可以了,目录结构如下,其中ImageSets目录是临时目录,训练用不到,可以没有。

        所有参数定义及注释如下,为了省地方去掉了前面的parser.add_argument

 

        示例脚本train_dcmyolo.sh

 
 

        执行下面的脚本执行训练,训练结果会放在logs_wangzhe目录下。

 
 

        推理和预测的方法都在predict_dcmyolo.py中,可以执行检测图片、检测视频和热图,所有参数定义如下,同样为了省地方,去掉了parser.add_argument

 
 

        检测图片,示例脚本如下

 

        在控制台中输入一个图片路径,检测结果会显示出来

        测试视频可以从上方链接下载,示例脚本如下,检测结果会放在指定的输出位置

 
 

        示例脚本如下

 

        与检测图片类似的,在控制台中输入一个图片路径,然后heatmap会显示出来。可以很明显的看到激活区域,证明模型确实很好的检测到了目标。

        导出onnx格式的模型,有利于模型加速,方便模型部署。所有onnx相关的方法放在predict_onnx.py中。可以执行导出onnx文件、检测图片和检测视频,所有参数定义如下,同样为了省地方,去掉了parser.add_argument

 
 

        导出的onnx建议包含nms,这样onnx输出的结果直接就能用,不需要程序再做后处理。添加 --append_nms参数就能联通nms导出了,onnx结果回报存在指定的输出路径。示例脚本如下

 
 

        使用onnx模型检测图片,示例脚本如下

 

        在控制台中输入一个图片路径,检测结果会显示出来,可以看到onnx和pytorch的结果是一致的。

        测试视频可以从上方链接下载,示例脚本如下,检测结果会放在指定的输出位置

 

        

        YOLOv5实时检测英雄联盟的功能就简单介绍到这里,下一篇我会介绍YOLOv5的实现原理,dcmyolo项目也会持续维护,会有越来越多的功能加入进来,敬请期待。

本文地址:http://keair.bhha.com.cn/quote/6052.html    康宝晨 http://keair.bhha.com.cn/ , 查看更多

特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


相关最新动态
推荐最新动态
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  粤ICP备2023022329号