前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >口罩、安全帽识别比赛踩坑记(一) 经验漫谈及随想

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

作者头像
全栈程序员站长
发布2022-08-31 09:19:09
2910
发布2022-08-31 09:19:09
举报
文章被收录于专栏:全栈程序员必看

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

前言

因为疫情迎来的史无前例大假期,从开始理直气壮的天天划手机,到中间百无聊赖的躺尸,再到之后实在憋得慌,就想找点什么事搞一搞。恰好这时,一直关注的极视角联合 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个月里,巩固之前学的知识/刷论文写文章/刷语言的题和自学数据结构这三个事情应当是我的重点。 加油,未来 ~ ~

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年5月1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 比赛步骤
  • 经验总结
  • 随想
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档