查看: 1883|回复: 3

用深度学习“扫雷”——大白话SSD物体检测的原理

[复制链接]
  • TA的每日心情
    开心
    2024-3-26 15:16
  • 签到天数: 266 天

    [LV.8]以坛为家I

    3303

    主题

    6550

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    32053
    最后登录
    2024-4-30
    发表于 2022-2-11 17:14:15 | 显示全部楼层 |阅读模式
    在上一个“深度学**深井”的故事里,聊到客户基于官方的SSD(单发多框检测器)模型巨幅瘦身成”SlimSSD”而成功实现水表表盘检测的故事。

    而另一篇关于多人体检测的demo,也是物体检测模型的一个生动的应用。
    似乎大家都不约而同地开始从图像分类模型转向物体检测模型——主要还是因为它方便实用,不需要用其它手段找到分类区域,而是交给人工智能来完成。
    在“深井”文里小编留下了一个梗,就是SSD模型是如何工作的,这一次咱们就把它填平。

    从扫雷说起

    假如你被派去扫除一片矩形的雷区,地雷有大有小,形状各异,数量不明,但相同点是它们都是“铁西瓜”。另外,没有像扫雷游戏中“浪漫”的智能提示一块地皮周边有多少个雷,你只能暴力穷举。

    你的装备是一架无人机和很多个磁铁做的矩形探框,探框有多种形状和多种尺寸。

    无人机可以把这些探框播撒在地面上。每个探框都安装了磁力传感器:如果一个地雷的外接框和探框相交的面积,超过两者总共占地面积的一半,探框就会报警,并且相交的比例越大报警声音越大;但如果探框太大、太小、太偏则不能报警。

    比如,下图显示了3种尺寸的探框,每种尺寸有3种形状。对于某种地雷,蓝虚线表示没有报警的探框,红实线表示报警的探框:
    14.png
    左上角的探框太小,右上角的探框太大,都不能触发感应装置报警。而左下角的探框虽然大小合适,但没有投放准确,也无法报警。只有右下角的一组探框准确地盖住了地雷,并且有两个因为面积合适而成功报警。

    那如果是手雷呢,它比上面的地雷要小,形状也不同,比如下图:
    15.png
    和上次“矮胖”的地雷相比,这次是“瘦高”的地雷,就只有瘦高的探框能成功报警了,并且也是由小尺寸的探框查出来的。当然了,其实正方形的探框原本也有机会,只是框得不是特别准——现实情况也如此,哪有那么好的运气每次都很准呢。

    那是不是也有让探框无法报警的情况呢?且看下图:
    16.png
    很不幸,雷区中还埋有没有引爆的飞机上投下来的炸弹。而炸弹的形状过于细长,以致于无论是“站着”还是“躺着”都能瞒过所有尺寸、形状和位置的探框!如果有人从这里过的话……
    总结一下,要想让探框能成功地扫清雷区,需要同时满足以下条件:
    需要多做几种大小的探框(避免大小不合适)
    需要多做几种不同形状的探框(避免形状不合适)
    无人机需要在整个雷区均匀而稠密地播撒探框(避免有的雷没有被有效盖到)

    从探框到锚框

    有了前面对探框扫雷的铺垫,现在该引出正题了,就是“锚框”思想。
    锚框和探框的用法基本相同,最主要的区别如下:
    探框是在“原始”输入下播撒的,而锚框是要在经过一番卷积和池化后下采样的特征图上播撒,密度是每个像素播撒多种形状和尺寸的锚框,同一形状(比如正方形)在同一特征图上也允许有多个尺寸(见下图,每个特征图上有两种不同大小的正方形锚框)。
    探框只在一个原始输入尺寸上播撒,而锚框在多个下采样级别的特征图上播撒,并且不同大小的特征图可以播撒不同大小和不同形状的锚框。不过,实践时一般是先定义一系列形状和尺寸的锚框,然后在不同的特征图上放缩不同倍数。
    常见的情况是在3-6个特征图上播撒锚框,每个特征图的各像素上播撒3-6个大小和形状各异的锚框,所有像素一视同仁。
    一般而言,面积越小的特征图就负责检测体型越大的物体,但具体安排要根据待检物体的形状、大小、姿势而定,如果不合理的话会出现类似上面扫雷例子里漏下很多雷的情况,会严重破坏检测效果。
    下图是来自经典的SSD论文里对锚框的解释,小编添加了内联注解:
    17.png
    倘若上图的地上还有一些蟑螂的话,显然这种尺寸的锚框是检测不到的。

    那么,有了这种“天网恢恢”般稠密的锚框,如何使用它们呢?请接着往下看。

    使用锚框来检测物体

    虽然锚框和前面引子的探框有相似之处,但细一品,就算是模型学到了哪些锚框是“报警的探框”,但似乎还不够,比如,读者小伙伴们肯定想到了两个问题:
    真实物体可能有多种类型,不只是指出“这是个物体”就够了。
    真实物体的外接矩形的形状是千差万别的,仅知道物体被哪个锚框套住还不足以准确地知晓物体的形状。
    恭喜您,已经成功地准确定义了物体检测的明细任务,这也是物体检测模型要学到的。不同模型架构使用锚框的方法不尽相同,下面还是拿SSD来说事。
    SSD如何给出相对于锚框的物体信息
    SSD从两个方面来给出检测结果,检测结果是对各个锚框而言的
    (分类结果)各锚框中的物体在各个类别下的概率。这里还包含背景的概率。所以对于检测N类物体的SSD模型,实际是分了N+1个类别。
    (定位结果)各锚框如何通过“小幅漂移和变形”而准确框住物体,这需要给出4个编码后的位移量。
    其中,分类结果和图像分类的表达方式相同,都是加和为1的各类概率,实际使用时只需找到符合预设阈值的最大的。对于定位结果,需要说明的是,编码关系并不是简单的位移,而是有点小复杂(为了易于训练),这里就不拿出来晕惑人了。

    下图给出了SSD模型的一般化模式图:
    18.png
    图中上半的“骨干”部分一般是来自某个图像分类模型的卷积神经子网,它们常常借助分类器(图中金色虚线框)来训练,训练完毕后丢掉分类器即可。

    骨干网络中一般有很多层,这些层往往以相同的模式重复。SSD模型需要选择几个不同尺度的特征图并引出来,分别作分类和定位的处理,这两者也是通过接上一小段卷积神经网络实现的。最后再把分类结果和定位结果汇聚(concatenation)在一起,送给后处理阶段,用于从大量的锚框中筛选出最具代表性的(分类置信度最高并且套住不同物体)少部分。

    SSD模型的后处理

    前面说到,SSD在好几个尺度的特征图上逐像素播撒多个形状和尺寸的锚框。这种广撒网式简单粗暴的暴搜常常产生成千上万个锚框。这也是SSD能检测密集物体的“基因“所在。不过,即使是密集物体也往往远远少于成千上万个,更何况很多应用只检测几个甚至一个物体。这就需要对锚框做筛选,这就是后处理操作,后处理是通过“非最大值抑制(NMS)”算法实现的。通俗地说大概是每个物体边上都会扎堆很多锚框,还有不少没有框住物体的锚框在游荡,NMS就是从每个扎堆的框中挑出占位最正的一个并且清理游荡的锚框,具体地说大概分3步:
    从分类支中得到各锚框的类别,从预铺的锚框中筛选出模型足够肯定有物体的框(类别置信度足够高),删除余下的“游荡”者
    挑出当前置信度最大的(占坑最正的)框,根据定位支给出的“小幅变形与漂移”结果,删除在这个框附近“扎堆”的其它框;通过相交面积除以总占地面积来判断(IoU)
    重复这个过程直到所有锚框处理完毕或者达到预设的检出物体上限
    上面NMS的效果可以由下图形象地表示,其中灰色的虚线框是没能框住物体的“游荡者”,蓝色虚拟框是框住物体但因为分类不肯定而淘汰的,红色实线框是最终留下来的:
    19.png
    需要强调的是:能留下来的不一定是真正最准的那个,而是分类置信度最高的。比如图中特意标出一个金色的被淘汰的锚框,虽然它框得最准,奈何分类置信度不够高,仍然被红色的不是那么准的那个“小人得志”,导致这种情况的原因可能是模型没有训练好,也可能是数据集标注不准。
    SSD模型的质量评价
    (损失函数设计理念)

    包括SSD在内的任何物体检测模型都主要由以下4大能力来评价它们的质量:
    查出物体的能力:给出有/无物体的置信度
    过滤背景的能力:给出是不是背景的置信度
    套准物体的能力:给出物体外接矩形框的坐标
    分辨物种的能力:判断物体属于各类别的概率
    用四个字表示, 就是“查、滤、套、辨”。

    上述能力带权加和作为最终的评价分数。而训练的目标,就是调整模型中的参数以尽量提高这个分数(真实操作是取分数的负值作为“损失函数”并且最小化之)。

    上面四大能力也体现在SSD的损失函数定义中了,尽管公式有一点小复杂。值得说明的是SSD的“查物”和“分类”的能力是合在一起由各类别的预测概率给出的——与之相对的是YOLOv1模型把“查物”和“分类”区别对待。

    下回预告——具体的SSD例子

    介绍完了SSD的工作原理,一不小心篇幅已经相当长了。那就容小编在下次和小伙伴们细细道来吧,这里先简单“剧透”一下,这是一个顶视图的人体检测例子,用了一个“大刀阔斧”精简后的SSD,实现在i.MX RT1170上每秒运行11次的效果(在RT1060上约7次每秒):
    20.png




    签到签到
    回复

    使用道具 举报

  • TA的每日心情

    4 小时前
  • 签到天数: 1481 天

    [LV.10]以坛为家III

    203

    主题

    2万

    帖子

    64

    超级版主

    Rank: 8Rank: 8

    积分
    92875
    最后登录
    2024-4-30
    发表于 2022-2-11 20:41:56 | 显示全部楼层
    我还以为说的是扫雷的游戏呢,哈哈哈
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    7 小时前
  • 签到天数: 1283 天

    [LV.10]以坛为家III

    21

    主题

    1万

    帖子

    1

    金牌会员

    Rank: 6Rank: 6

    积分
    13262
    最后登录
    2024-4-30
    发表于 2022-2-12 10:38:30 | 显示全部楼层
    感谢管管的分享! 期待下篇
    跟着日天混 ,三天饱九顿!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    5

    帖子

    0

    注册会员

    Rank: 2

    积分
    69
    最后登录
    2024-4-11
    发表于 2022-3-1 14:58:06 | 显示全部楼层
    期待具体的代码
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-30 18:12 , Processed in 0.132843 second(s), 25 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表