Transformer广泛应用于NLP后,在CV领域也引起了广泛关注,但是将单词token替换为图像的patch使得Transformer计算量大幅增加。本文提出一种新的注意力机制Cross Attention,不再计算全局注意力而是将注意力的计算局限在patch内部来捕获局部信息,在单通道特征图之间的patch应用attention来捕获全局信息。这两种操作都比标准Self-Attention所需的计算量要小,替换为这两种操作后本文可以在降低计算成本的同时保持较好的性能,并且为解决视觉任务建立也一种称之为Ctrss Attention Transformer(CAT)的层次网络,在COCO数据集和ADE20K数据集上的实验结果证明了CAT可以作为一种通用的backbone。
Cross Attention Block (CAB) = Inner-Patch Self-Attention Block (IPSA) + Cross-Patch Self-Attention Block (CPSA)
IPSA:就是标准的基于patch的attention,即attention的输入为Bnphnpw, phpw, C大小的tensor,得到的是空间大小为phpw, phpw的attention矩阵。该模块建模了patch内部的全局关系。
CPSA:这里处理的方式和以往的改进不太一样。这里attention计算的输入为BC, nphnpw, phpw。对应的attention矩阵大小为nphnpw, nphnpw,这里计算过程中是把每个patch内部单一通道上的空间维度作为了每个patch信息的表示,从而通过相似性计算将这一维度给吸收了。这一模块基于通道独立的操作设计,构建了全局patch之间轻量的信息交互形式。
CAT变体模型配置信息表:
在YOLOv5项目中添加模型作为Backbone使用的教程:
(1)将YOLOv5项目的models/yolo.py修改parse_model函数以及BaseModel的_forward_once函数
(2)在models/backbone(新建)文件下新建Cat.py,添加如下的代码:
(3)在models/yolo.py导入模型并在parse_model函数中修改如下(先导入文件):
(4)在model下面新建配置文件:yolov5_cat.yaml
(5)运行验证:在models/yolo.py文件指定–cfg参数为新建的yolov5_cat.yaml