基于yolo的变电站高压隔离开关状态识别

日记
背景:忽然接了个项目, 数院导师给的, 要求很简单, 就是识别变电站隔离开关状态,只要做个demo出来就可以。平时自己的导师也没给我项目做,所以我就尝试了一下,历时三天。

2020.1.16

说是没训练数据,于是自己百度识图找了30张图片,但多样性很大,比如:
1.开关种类多
2.角度多
3.多尺度
4.分辨率太小(经过压缩)
5.分辨率变化大(摄像机不同)
6.环境不同(背景差异大)
这些问题不是不可以解决,只要图片有1k张我觉得没问题(笑)。除了百度识图,其他软件也试过,都没找到合适的图,还是百度识图靠谱,至少在这个问题上。
用ImageAI训练,mAP 0.1~0.2,完蛋。只有在训练集上效果还ok。
最后知网搜了一下发现有人在做这个问题,但用的是传统方法,比如模板匹配;也有用机器学习,但是是手工特征+机器学习,18年了似乎还没用深度学习、目标检测。

2020.1.17

得到了42张图片,随机划分28train+14test,决定用ImageAI进行实验,因为代码量少,环境也没问题。这里稍微说一下具体做法吧。
1.使用LabelImg进行标签。
很快就标好了,就是on和off,平均每张图大概有3个框,每个框包含一堆配对的黑色柱子,希望yolo能定位到配对柱子,并且根据柱子间有杠连接为"on",无杠连接为"off".
2.写train.py test.py vis.py
3.训练,用1080ti x2 训练了半小时,大概50个epoch(4batches),然后得到结果。
很遗憾忘记记录了,只记得mAP(IoU>0.5)大概在0.6以上。
为什么高:上面提到的6个多样性,现在只剩下2和3两个多样性。尤其是1和6,相当于测试集中的前景和背景信息都泄露了。(不过反正实际需求就是这样)
为什么低:只有28个训练图像,按ImageAI的推荐最好每物体200张,那这里应该有400张(不过这个推荐应该考虑了更多的多样性,比如6)。
14个测试图出现了2个错误,都是同一个区域同时检测出"on"和"off",一个是角度太偏,另一个是遮挡,不过"on"的分数大十几分,所以可以根据这个原理筛掉,但现在先懒得做。

2019.1.18

得知实际使用的环境大概是巡航机器人+笔记本,有两个要求,一是速度,二是显卡配置可能不太好(现在还没跟我说是什么显卡)。
由于ImageAI没有小模型,所以在github找了一个yolo-tiny来训练。

https://github.com/simon3dv/detect_isolating_switch_statue_v2

总结:
一开始需求很不明确, 没训练数据, 不知道算力要求...
需求明确之后用Yolo半天解决了,把仅有的42张图片分了训练集和验证集, 标注了一下, 然后用Yolo训练, 效果还算可以, 不过验证集变化还是偏少了,在其他场合测试可能没那么好的效果。最后挣了几百块。

posted @ 2020-05-28 11:27  SimingFan  阅读(837)  评论(0编辑  收藏  举报