口罩、安全帽识别比赛踩坑记(一) 经验漫谈及随想

口罩、安全帽识别比赛踩坑记(一) 经验漫谈及随想前言       因为疫情迎来的史无前例大假期,从开始理直气壮的天天划手机,到中间百无聊赖的躺尸,再到之后实在憋得慌,就想找点什么事搞一搞。恰好这时,一直关注的极视角联合Intel公司举办了一个对口罩和安全帽进行识别的比赛,能免费用一个月的云服务器对于我这还在用跑个Demo都能卡死的老爷机来说还是相当具有吸引力的。于是…

大家好,又见面了,我是你们的朋友全栈君。

前言

       因为疫情迎来的史无前例大假期,从开始理直气壮的天天划手机,到中间百无聊赖的躺尸,再到之后实在憋得慌,就想找点什么事搞一搞。恰好这时,一直关注的极视角联合 Intel 公司举办了一个对口罩和安全帽进行识别的比赛,能免费用一个月的云服务器对于我这还在用跑个 Demo 都能卡死的老爷机来说还是相当具有吸引力的。于是乎,从3月3日到4月3日这一个月的时间,我几乎足不出户,每天的任务就是把前一天留下的坑想办法填平。

       从熟悉云服务器在线运行代码的流程,熟悉 VSCode 编译环境的架构;到将不可见的数据进行预处理;再到前前后后搭建的 YOLOV3-Tensorflow 版、YOLOV3-Darknet 版和 SSD-Inception2 版算法模型;以及中间的权重转换、IR 转换,包括最后锁死的纯 C++ 的 ev_sdk 封装。

       经历了一个又一个莫名其妙的 Bug,在坚持与放弃的边缘来回徘徊最终又坚定下来继续前行。这过程中熟悉掌握了一些以前没有用过的 Linux 操作和 shell 指令的应用,解决问题和 Bug 的能力又上了一个台阶,领悟了很多能形成比赛或者项目 pipelines 的方法,也认清了自己 C++ 语言上一无所知的不足。

       感觉这次的比赛没有白参加,以前看论文、复现代码,跟着人家的指导囫囵吞枣地跑一遍数据,看两眼结果,就以为自己学会了,眼高于顶。这次终于是打回原形,让我脚踏实地跌跌撞撞一点点去实现一个要落地的项目,才发现哪哪都是问题。会发现真正去做的时候永远比之前看到和想到的要难,而且难很多。

       最终,安全帽比赛第9名,口罩识别比赛第14名,召回率和精确度都低得羞于见人。成绩差强人意,但经过这段时间的打磨,也算是明白了结果其实没那么重要,只要过程中有收获,付出就显得有意义啊。就像人活这一遭就是在享受过程,大家的结果都是个三尺小盒,中间的经历却大相径庭。所以只要尽力而为,没有太遗憾,就是一种成功 ~

—————————————————————————————————————————————–
       这里贴出排名照 ~ 以此劝退大神们的围观,这里只是一只小白在记录他成长的点滴…
—————————————————————————————————————————————–

安全帽口罩

比赛步骤

       这个比赛为期一个月,时间还是很充裕的,从这次比赛中我总结了一下做类似这种项目和比赛的流程,大致分为以下几个步骤:

  1. 赛前准备
    1.1 搭建和熟悉编译环境
    1.2 明确该项目的 pipeline,确定任务量和工期安排
  2. 比赛经过
    2.1 训练部分
          2.1.1 查看数据集并根据模型要求进行预处理(data_pro)
          2.1.2 熟悉并掌握使用模型的主要代码(train/model/…)
          2.1.3 完善周边代码,不限于requirements.txt / shell命令 / 镜像命令Dockerfile / 曲线输出save_plots / 权重转换export_models / …
    2.2 测试部分
          2.2.1 训练完成后进行初步测试,主要检查有无异常
          2.2.2 根据得到权重文件封装SDK,并自测封装是否完成
          2.2.3 进行外部测试,并根据结果和要求不断调参,改进代码
  3. 结论分析
    提交结果,对存在问题进行分析总结,改进模型

       更具体的步骤和模型的实现见 口罩、安全帽识别比赛踩坑记(二)

经验总结

       在做项目中,遇到了许多问题,有技术层面的,有水平不足以支持实际实现的,有“莫名其妙”的,也有一些规划和经验不足的。这里记录一些需要保持的好习惯:

  1. 在做一个项目时最好全程都使用文档(.txt/.doc)做过程笔记,包括冒出来的思路想法,碰到的 Bug,实验的数据、可以改进的地方,重要地方采用不同颜色标记。如这般:

在这里插入图片描述

  1. 发现每一个模型所要求的输入数据的格式虽然有所区别,但区别不大,并且很多操作,譬如将给 labelimg 标注好的数据添加 voc 格式的 .txt 等等,都是通用的,所以借着这次比赛,将这部分的代码做一个整理和总结,后续将放在我的 github 里,以供参考。放一个这次比赛处理数据的 print。
    这里先留一个小尾巴~~ 等整理好再来放github的链接 ~~

在这里插入图片描述

  1. 如果整个项目中需要有多个程序按照顺序运行,比如先运行处理数据集的程序,再运行按照聚类生成锚点的程序,再运行训练的程序,最后运行转换权重和生成曲线图的程序;或者是还需要在 terminal中写部分指令,比较繁琐的状况时,可以直接写一个shell命令,即踩坑记(二)中会详细说明的 start_train.sh 文件。这样在最后提交或者需要书写命令时,一个bash就全解决了。
  2. 在最后炼丹(调参)时,一定要按照对照实验法,即在其他一样的条件下仅仅变动一个部分去看效果,这样才能看出是哪个值的调整会使 loss 值更低,或者分数更高。当然,你硬要说魔改大法好,我也无话可说…嗯,这次比赛中我这部分基本没怎么做好,仅仅是用 K-means聚类修改了锚点值,会发现确实提高了一点分数,然后根据 loss 曲线修改了训练次数、衰减学习率、SSD的锚点框大小范围、长宽比和锚点个数,确实是有一些效果的,当然,这个过程最好用 Excel 记录一下,我这个记录的就很粗糙,部分如下…

在这里插入图片描述

  1. 同样是炼丹环节,一定要学会利用各种曲线图,包括但不限于 loss 值下降曲线图、PR曲线图等等,这个和上面的对照实验结合来用效果更佳。

  2. 及时总结!!这一点很重要,就比如我比赛完,想着终于能放松一下,然后三天过后再来看,原来比赛的网站封了,一些改的代码,还有相关的技术文档全都没了…心态有点点崩~~ 并且因为之前的过程笔记做的不到位,当时碰到的一些问题的解决方法现在好多也遗忘了,没有及时记录,哇,有些恶心的错误我花了一两天才解决的,比如我就记得 shell 命令里,你在 Windows 系统中的 .sh 文件里写完,复制到 Linux 下就不好使了,原因是两个系统中的换行符不一样。等等这些实操中才能遇见的狗血事情…

  3. 一些技术上的经验我都放在踩坑记(二)的实操中记录了,还有比如新学到的一些 Linux 中的操作指令,vim的操作等等我都放在相应的博客里了~

随想

       这次的比赛进行完,也到了该准备毕设小论文、准备工作刷面经和力扣的时候了,回想自己这一年半来的研究生生活,前半年懵懵懂懂献给了那些课程,所幸成绩也挤进了前30%,后面一年里都献给了CV,打了3个检测相关的比赛,两个是主力,一个是辅助,虽然都没拿上很好的名次,但也算从中有些收获;做了两个项目,一个项目从头至尾跟了下来,对传统的目标检测和界面开发也有了些自己的拙见和了解,另一个因为甲方叫停,导致项目流产,有些可惜。
       本想这学期去大厂或者研究所实习一下,长长见识,奈何学校偏远,需要去外地,又赶上疫情,再加上毕设中期安排在尴尬的五月底,文章也没得着落,就没了这股心劲儿。遂决定4月到8月还是沉潜一下,刷刷论文写写文章、刷刷程序员宝典做做题。
       其实这次比赛暴露了我一个很大的问题,不是计算机专业的,没有学过数据结构,也没学过C++,导致了最后改的SDK根本和自己的模型匹配不上,还一点没有思路,直接死在了这里。也发现了光会一些python,其实是不够的,一个是也不精通,仅仅是会看、会改、能自己写点比较简单的;另一个也是发现在实际项目中,大多数都还是要求以C++为开发语言。所以这几个月里,我不仅要刷python,还要把重心转移到 C++上。
       综上述,未来的这秋招之前的4个月里,巩固之前学的知识/刷论文写文章/刷语言的题和自学数据结构这三个事情应当是我的重点。
       加油,未来 ~ ~

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/144470.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 微信小程序php后端搭建_微信小程序访问服务器

    微信小程序php后端搭建_微信小程序访问服务器    在去年的时候,参加过学校的一个创业活动,在团队决定做一个关于图书的微信小程序以后,我负责做微信小程序的后台程序,因为初次接触,决定选用较为简单的PHP作为后台语言,实现了微信小程序的一些基本功能,例如对微信前段来的图片文字进行存储,或者接收到前端传来的关键字对服务器里的数据进行查询并返回前端,利用前端传来图书的ISBN码调用第三方豆瓣图书接口进行图书信息查询,最后还有比较难实现的微信支付功…

  • org.json.JSONObject对象转json,json新增元素,根据json的key获取值。以及list对象格式字符串转jsonArray

    org.json.JSONObject对象转json,json新增元素,根据json的key获取值。以及list对象格式字符串转jsonArray

  • fp6277升压5v电路_锂电池充电升压芯片

    fp6277升压5v电路_锂电池充电升压芯片双节锂电升压充电芯片

  • linux rootfs_linux常用文件系统类型

    linux rootfs_linux常用文件系统类型linux中有一个让很多初学者都不是特别清楚的概念,叫做“根文件系统”。我接触linux前前后后也好几年了,但是对这个问题,至今也不是特别的清楚,至少没法向其他初学者们给出一个很全面很到位的解释。于是,今天我们就来理一理这个话题。

  • 杂学--变量命名神器CODELF的学习和使用

    杂学--变量命名神器CODELF的学习和使用ThereareonlytwohardthingsinComputerScience:cacheinvalidationandnamingthings.             --PhilKarlton一、前言最近关注了一下”掘金”这个技术网站,发现里面有好多好玩的知识和小工具的介绍,今天看到一个叫codeif的工具。原文链接:https://juejin.im/

  • 服务降级的概念及应用手段

    服务降级的概念及应用手段什么是服务降级服务降级,就是对不怎么重要的服务进行低优先级的处理。说白了,就是尽可能的把系统资源让给优先级高的服务。资源有限,而请求是无限的。如果在并发高峰期,不做服务降级处理,一方面肯定会影响整体服务的性能,严重的话可能会导致宕机某些重要的服务不可用。所以,一般在高峰期,为了保证网站核心功能服务的可用性,都要对某些服务降级处理。服务降级手段拒绝服务判断应用来源,高峰时段拒

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号