此文系第16届智能车智能视觉组-上海交通大学AuTop战队开源算法讲解第七部分--三岔数字识别,专栏及开源方案链接:

llo:第16届智能车智能视觉组-上海交通大学AuTop战队开源汇总


在前一篇文章(木烨:第16届智能车智能视觉组-上海交通大学AuTop战队开源算法讲解(六)Openart识别方案)中,我们提到了数字识别的思路。采用全局分类器的方式,直接判断图像中是否有数字靶牌,以及对应的数字编号。省略了一个找框的步骤,不仅使得计算速度更快,同时也减少了不稳定性的因素(OpenMV的find_rect函数并不稳定)

  1. 模型结构

先放一张模型结构总览图(有点长)使用Netron绘制。

数字分类模型总览图

可以看出来,模型主要由4种子模块构成

  • 基本的特征提取单元:Conv2D+BatchNormalization+ReLU6
    • Conv2D后立刻接上BatchNormalization减少了训练时的梯度消失,同时训练完成后可以将bn层融合到conv层中减少计算量
    • ReLU6限制了输出的范围,便于后续进行int8量化
  • 降采样和正则化MaxPooling2D+SpatialDropout2D
    • 最大池化算是常用降采样方式
    • 通道dropout随机丢弃整个特征图,提升通道间的独立性,同时降低过拟合
  • 空间注意力单元:x*sigmoid(conv(x))
    • 由于数字靶牌仅在图像中占据小部分区域,使用注意力单元帮助网络更好的提取特征
    • 吐槽:说白了不存在什么注意力,都是玄学心理作用
  • 分类头:GlobalMaxPooling2D+Dense
    • 最后一层特征图大小为2*5*512,使用全局最大池化变为512
    • 由于数字靶牌仅在图像中占据小部分区域,全局最大池化并不会丢失过多的特征。

此外建立模型的代码中使用超参数width来控制模型的宽度,经过不同参数的选取测试,发现当width=0.5时,可以在计算速度和模型精度上取得较好的平衡。具体代码实现见开源代码仓库。

2. 数据集生成

由于官方仅提供了十张标准的数字图片,数据量有些少。但如果直接使用OpenArt-mini采集实际数据,不仅工作量大,而且背景单一,可能出现更换场地后识别效果下降的现象。所以我们使用COCO开源数据集作为背景,并将标准数字图片随机贴图到背景图上的方式生成数据集,结合数据增强手段。可以最小化人力的同时,训练出性能优异的模型。

示例图片

示例图片

3. 模型训练

训练步骤基本参照官方训练方案,仅将模型替换成自己搭建的模型。仅使用数据增强得到的图片用于训练集,而采集少量实录数据作为测试集。两个数据域有一定的差异,可以更好的看出模型和数据增强的有效性。在我们的实验中,在测试集上可以轻松达到90%以上的准确率,充分证明了方法的有效性。


SJTU-AuTop完整开源方案链接,如果觉得我们的方案对您有帮助,请在github上帮忙点个star吧:)

llo:第16届智能车智能视觉组-上海交通大学AuTop战队开源汇总