口罩、安全帽识别比赛踩坑记(二) 比赛流程及 SSD / YOLO V3 两版本实现

本篇文章主要对比赛流程中的各个环节进行展开说明,并对笔者践行过的代码及更改的地方进行记录。如哪里有侵权请联系笔者进行删除。另外在这里对比赛举办方表示感谢 ~ ~其中开源代码会在整理后放在github上,并给出相应的链接,这里先留一个小尾巴~ ~相关有用的链接如下:口罩、安全帽识别比赛踩坑记(一) 经验漫谈及随想比赛官方开发环境指导Dockerfile官方文档OpenVINO官方文档...
摘要由CSDN通过智能技术生成

本篇文章主要对比赛流程中的各个环节进行展开说明,并对笔者践行过的代码及更改的地方进行记录。如哪里有侵权请联系笔者进行删除。另外在这里对比赛举办方表示感谢 ~ ~

其中开源代码会在整理后放在github上,并给出相应的链接,这里先留一个小尾巴~ ~

相关有用的链接如下:

-----------------------------------------------------------------------------------------------------------------------------------------

1. 赛前准备

       赛前的准备包括了两部分,一部分是熟悉 VSCode 的界面和代码的编译调试,一部分是通过官方给出的行人检测的 Demo 跑一遍整个过程,熟悉一下 pipeline。

1.1 熟悉编译环境

       这次官方提供了两个在线编译的环境,一个是 jupyter notebook,另一个是 VSCode,因为笔者之前一直采用的 Pycharm 作为 IDE,据查的攻略说更贴近后者,所以就使用的 VSCode 作为编辑器。
       安装和初始配置过程见: 配置python3.6.8 + VSCode
       个人感觉 VSCode的界面看着更舒适些,但一个严重的缺陷是没有 console 功能,代码无法实时试错,这个缺陷让使用惯 Pycharm 和 matlab 的我就很难受。也不知道为啥网上那些骨灰级的程序猿都一边倒向 VSCode,也许是在 C++ 上另有一番神奇之处?还望知道的大大给我解解惑,让我也长长见识(好吧,我感觉能看到这里的可能也没几个知道的家伙,毕竟前言的贴图已经把大佬的目光阻隔住了…)

1.2 熟悉pipeline

       这次比赛最大的特点就是它不像我们平时在实验室那种“空谈”性质的 pipeline ——跑完模型,直接得结果。而是增加了算法工业化落地时所必需的加速和优化性能的环节,以及封装成一个产品的环节。通过跑了一遍官方给的用 ODA(object detection API)中的 SSD-InceptionV2 模型实现对行人检测的 Demo,我梳理了整个比赛所需要做的工作。包含以下部分:
在这里插入图片描述其中的几个环节备注如下:

  • Dockerfile:是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。因为在线服务器的环境,需要构建镜像来使用不同的框架。具体见 2.5.2节。
  • 权重冻结:将原本模型的权重值.weights或.ckpt转换为.pb文件。pb是protocol(协议) buffer(缓冲)的缩写。TensorFlow训练模型后存成的pb文件,是一种表示模型(神经网络)结构的二进制文件,不带有源代码,也一般无法映射成源代码。pb文件作为SavedModel的一部分,可以加载回TensorFlow进行部署或进一步训练。具体见 2.5.3 节。
  • IR转换:将.pb文件转换为openvino模型进行推理加速,内含 .xml、.bin 和 .mapping 文件。在将算法工业化落地时需要加速和优化模型性能,OpenVINO是英特尔基于自身现有的硬件平台开发的一种可以加快高性能计算机视觉和深度学习视觉应用开发速度工具套件,支持各种英特尔平台的硬件加速器上进行深度学习,并且允许直接异构执行。具体见 2.5.4 节。
  • SDK封装:SDK即“软体开发工具包”,一般是一些被软件工程师用于为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件的开发工具的集合。通俗点是指由第三方服务商提供的实现软件产品某项功能的工具包。通常SDK是由专业性质的公司提供专业服务的集合,比如提供安卓开发工具、或者基于硬件开发的服务等。也有针对某项软件功能的SDK,如推送技术、图像识别技术、移动支付技术、语音识别分析技术等,在互联网开放的大趋势下,一些功能性的SDK已经被当作一个产品来运营。开发者不需要再对产品的每个功能进行开发,选择合适稳定的SDK服务并花费很少的经历就可以在产品中集成某项功能。SDK相当于开发集成工具环境,API就是数据接口。在SDK环境下调用API数据。具体见 2.6节。

2. 比赛经过

       首先查看本次比赛的数据集和评分标准。

2.1 数据集

       口罩和安全帽的数据集都是不可见的,官方给出了100张样例图片,训练集和测试集都是内网存储,我们是在外网操作样例,然后指定地址会有关联。以下是 ls 出的样例存储,可以发现 xml 和图片是一起存放的。

在这里插入图片描述

       每一类的训练集大约10000张,测试集5000张;采用VOC2007的标注格式,水平框;图片既有 jpg,也有 png;口罩 labels 和安全帽 labels 如下(安全帽会有各种颜色的安全帽以及对人脸和人身的标注,方便各种算法的实施,比如先对人身再对头盔的二次标注(猜测))。

在这里插入图片描述
在这里插入图片描述

       明确了官方给出的数据集样式及labels,就可以对数据集进行各种预处理,不同的模型要求的处理结果不一样,我把这部分的具体内容放在 github 里分别来谈。但可以看到的是,无论哪种模型,都会经历先转化为 VOC2007 的格式,然后或者如 yolov3 将 xml 里的坐标、labels 等信息按照顺序转化为 .txt 的行,方便 train.py 中读取;或者如 SSD 里那样将 xml 转化为 csv,然后再转化为 tfrecord 方便读取。

2.2 评分标准和输出规范
2.2.1 评分标准

       在构建模型时,一定要先明确评分标准,这次比赛的评分标准是 F1-scores 占比 75%,FPS 占比 20%, 硬件能耗值 5%, 构成一个总体的 scores。

在这里插入图片描述

F1- scores

       目标检测或者分类中最常见的衡量指标是准确率(你给出的结果有多少是正确的)和召回率(正确的结果有多少被你给出了),当然我们希望检索结果 Precision 越高越好,同时 Recall 也越高越好,但事实上这两者在某些情况下是有矛盾的。比如极端情况下,我们只搜索出了一个结果,且是准确的,那么 Precision 就是100%,但是 Recall 就很低;而如果我们把所有结果都返回,那么比如Recall 是 100%,但是 Precision 就会很低。因此在不同的场合中需要自己判断希望 Precision 比较高或是 Recall 比较高。如果是做实验研究,可以绘制 Precision-Recall 曲线来帮助分析。

       而F值,则是综合这二者指标的评估指标,用于综合反映整体的指标。F-Measure 是 Precision 和 Recall 加权调和平均:
在这里插入图片描述
当参数α=1时,就是最常见的F1,也即
在这里插入图片描述

可知F1综合了P和R的结果,当F1较高时则能说明试验方法比较有效。

举个例子某池塘有1400条鲤鱼,300只虾,300只鳖。现在以捕鲤鱼为目的。撒一大网,逮着了700条鲤鱼,200只虾,100只鳖。那么,这些指标分别如下:
正确率 = 700 / (700 + 200 + 100) = 70%
召回率 = 700 / 1400 = 50%
F1-scores = 70% * 50% * 2 / (70% + 50%) = 58.3%

FPS

       FPS 是图像领域中的定义,是指画面每秒传输帧数,通俗来讲就是指动画或视频的画面数。其是测量用于保存、显示动态视频的信息数量。每秒钟帧数愈多,所显示的动作就会愈流畅。其中的 f 就是 Frame(画面、帧),p 就是 Per(每),s 就是 Second(秒)。用中文表达就是多少帧每秒,或每秒多少帧。电影是24fps࿰

  • 4
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值