今天学习了mmdetection理论部分,长达一个多小时的视频收获很多,我是做2D姿态估计,top-down的方法也需要先检测,再估计姿态。但之前对检测了解不多,只知道最基础的r-cnn系列,对于锚框和单阶段算法了解很少,但这已经成为检测方向一大部分的内容。
从时间上来说,最开始出现的方法是基于滑窗的:设置一个固定大小的擦虹口,遍历图像所有位置,所到之处用分类模型识别窗口中的内容,为了检测不同大小,不同形状的物体,可以使用不同大小、长宽比的窗口扫描图片。但是效率太低,一张图片需要分类窗口个数次,这是不能接受的计算成本。
改进1:使用启发式算法替换暴力遍历(selective search),但现在用的很少。
改进2:使用卷及网络实现密集预测。用卷积一次性计算所有特征,再取出对应位置的特征进行分类,也就是把窗口映射到特征图上。这样不同特征的感受野自然形成一系列等距离分布的窗,在线性层实现图像分类换成用1×1卷积就能在特征图上进行密集预测。
边界框回归:让模型在预测物体类别同时预测边界框相对于滑窗的偏移量。
基本流程:1.用模型做密集预测,得到特征图,每个位置包含类别概率和边界框的预测结果。
2.保留预测类别不是背景的“框”。
3.基于“框”中心,和边界框回归结果,进行边界框解码,得到边界框精确坐标。
4.后处理:非极大值抑制去掉重叠部分过多的框。
密集预测模型的训练:检测头在每个位置产生一个预测。该预测值应与某个GT值比较产生损失,进而训练检测器。但这个真值在数据标注中并不存在,标注只标出了包含物体的框。我们需要基于稀疏的标注框为密集预测的结果产生对应的真值,这个过程称为匹配。
匹配:对每个标注框,在特征图上找到与其最接近的位置,该位置的分类真值就设为对应物体的类别。怎么判断接近:通常基于中心位置或与标注框的IOU判断,其余位置真值为无物体。采样:选取一部分正、负样本计算loss。
如何处理多尺度问题:图像中不同物体大小差异很大,但使用最后一层特征图通常只擅长预测较大的物体,高层特征图经过多次采样,位置信息逐渐丢失,小物体检测能力较弱。
改进1:图像金字塔,改变输入模型的原始图像大小。
改进2:基于层次化特征:基于主干网络的多级特征图产生预测结果,由于不同层特征图感受野大小不同,天然适合检测不同尺寸的物体,但是低层特征抽象级别不够,预测物体困难。
改进3:FPN。高层次特征包含了足够抽象的语义信息,将高层特征融入低层特征,补充低层特征的语义信息。
剩余部分讲解了各经典算法的具体细节,详情可以看b站视频:目标检测与MMDetection_哔哩哔哩_bilibili