基于TensorFlow Object Detection API 实现用双层模型进行安全帽与口罩的检测与判定
前言
本文章主要讲述是如何利用双层模型去实现先判定人体,再在人体范围内检测安全帽与口罩,而不会去讲述如何训练一个物体检测模型,如果你需要学习的是如何训练,建议移步完全新手适合,亲妈级教程,我本人也是贼新手,但是居然跟着学会了,针不辍。
另外,本文章建议结合目录食用。
项目分析
是这样的,为什么想到双层模型呢?
举个栗子:我们现在需要做安全帽检测,但是又必须做到完全忽视静置的安全帽,这个用一层模型是有点难做到的,因为你数据集里就算是包括人头在内的安全帽,但是由于安全帽本身占标注范围大部分面积,所以模型一样会认为静置安全帽很像佩戴安全帽。
如果使用两层模型,我们先进行人体判断,再忽视掉静置安全帽,只保留佩戴安全帽。
另外还有其他好处在于:有了人体识别模型的话,逻辑上是不用去收集与训练未佩戴安全帽的人头的,在人体中偏头部没有检测出安全帽就是没戴。其实这里可以仔细想想,因为佩戴安全帽和未佩戴安全帽都有人脸在其内部如果要把这两种情况打成两个标签,其实两个混淆的概率还真蛮大的,如果有人体识别的话,完全可以只打安全帽本帽标签,而且安全帽本帽的特征是简单且明显的,可以大大减少误判的概率。
besides,人体识别模型官方给的太好用啦!这个模型是不用自己训练的,TensorFlow官方给的预训练模型中这个识别是已经有的,而且准确度很不错。
讲到这还几乎都是闲话,但是我还是要再加一句,如果你是因为关注双层模型才搜索到这的,还是要结合我上面说的,仔细想想你的业务要不要使用双层模型,虽然在我这个项目里双层模型确实有一些优势,但是不得不承认这是在牺牲时间换效率,当然你也可以把人体和安全帽标签放在一个模型里,这样就不用一张图片过两个模型了。但是我为什么没这么做,因为在我想到时我已经太懒了,说到底还是条懒狗,帮我实现,thank you!!!
技术可行性的分析
你把一张图片经过一个模型,它主要会给你返回3个列表:
1:100对[x1,y1,x2,y2],就是被识别物体的左上角和右下角,然后就可以画框了嘛。
2:100个编号(可有重复),对应上面的位置分别是你模型的哪种物体。
3:100个0-1之间的小数,置信度,对应这上面那个位置的那个东西有多像训练集中你给的那个东西。
总的来说就是告诉你:这个图片的那个位置,有置信度那么像你给我训练的那种东西。
因为我这个模型只识别一个物体,所以全都是编号1啦,此外100这个数字也是可以调整的。
所以接下来我们要做的事情也很简单了,首先选取所有人体模型中大于你想要的置信度的坐标,然后再选取安全帽模型中大于你想要的置信度的坐标,然后以人体模型的坐标作为外循环,去匹配安全帽坐标。
如果能匹配到该人体偏头部有安全帽,则判定该人带了安全帽,则根据坐标在人体边上画蓝框,安全帽画绿框。
如果该人体偏头部没有安全帽,则判定该人未佩戴安全帽,则该人画红框。
同样口罩也是一个道理,所以最终的逻辑大概为这样
回到一个模型双层识别上,其实逻辑没变过,只是需要提前根据物体类别号将坐标分组,两层模型的概念没变过。
项目实现
啊呀,这个代码的意义真的不大,毕竟这个你也没办法拿去用,主要是当时我写得很丑陋。
所以你要真的care的话,你加我QQ吧1633326908,好过大厅广众难看。
不过,话说回来,不是,我寻思着我文章也没人看呐!
后话
还是之前说过的,多结合一下项目的需求,仔细看看是不是确实有必要引入双层模型的概念,尽管可以只用一个模型解决双层模型问题,也不会降低太多性能。
欢迎评论区留言讨论,我经常回来看的,主要是想确定一下:不会吧不会吧,真的完全没有人看我的文章吗?
Respect!!!