赞
踩
标题:BiFormer: Vision Transformer with Bi-Level Routing Attention
论文:https://ieeexplore.ieee.org/document/10203555
https://arxiv.org/abs/2303.08810
GitHub:https://github.com/rayleizhu/BiFormer
模型结构
BiFormer是一种新型的视觉Transformer架构,它通过引入一种称为Bi-Level Routing Attention(BRA)的机制来提高计算效率和性能。这种机制通过在粗粒度的区域级别上过滤掉与查询无关的键值对,然后在剩余的候选区域(即路由区域)中应用细粒度的令牌对令牌注意力。BiFormer的设计旨在使查询能够以自适应的方式关注一小部分最相关的令牌,从而在不受到其他无关令牌干扰的情况下提高性能。BiFormer在多个计算机视觉任务上进行了实证测试,包括图像分类、目标检测和语义分割,证明了其设计的有效性。
Bi-Level Routing Attention (BRA): BiFormer的核心创新是BRA机制,它通过两级路由来实现动态、查询感知的稀疏性。在第一阶段,它在区域级别上构建一个亲和图,并通过剪枝来保留每个节点的前k个连接。这样,每个区域只需要关注前k个路由区域。在第二阶段,它应用令牌对令牌的注意力,通过聚集关键值对来实现高效的注意力计算。
内容感知的计算分配: BiFormer通过BRA机制实现了对计算的灵活分配,使得每个查询只关注与其语义上最相关的一小部分键值对,从而提高了计算效率。
GPU友好的实现: BiFormer的设计考虑到了GPU的内存操作特性,通过密集矩阵乘法而不是稀疏矩阵乘法来实现注意力机制,从而提高了模型在现代GPU上的运行效率。
BiFormer在多个计算机视觉任务上展示了显著的性能提升:
conda env create -f environment.yaml -n biformer
如果在已经有torch的环境里,使用下面语句安装没有安装的包库
conda env update -f environment.yaml
安装.yaml环境的教程来自于:
https://blog.csdn.net/qq_42536162/article/details/134666873
(因为我使用安装好了torch和mmcv的环境,下面是我额外需要安装的。如果用上面方法安装好了环境,请跳过后面所有环境安装部分)
安装 timm,hydra,submitit,omegaconf,fvcore,einops
使用pip就行,例如安装timm命令:
pip install timm
python hydra_main.py \
data_path=./data/in1k input_size=224 batch_size=128 dist_eval=true \
+slurm=${CLUSTER_ID} slurm.nodes=1 slurm.ngpus=8 \
model='biformer_small' drop_path=0.15 lr=5e-4
python main.py --data-path ./data/MRI --output_dir ./run --input-size 224 --batch-size 32 --model biformer_small
成功开始训练:
我使用了医疗肿瘤分类数据集
最终300epoch结果为:
时间还是挺短的,确实是效率高,不过精度一般
环境里输入:
pip install hydra-core --upgrade
将 from torch._six import inf 调整为下面
from torch import inf
因为GitHub里给的训练命令是分布式的,而如果只有一张卡,不使用分布式,运行就会报错。所以使用下面代码:
python main.py --data-path ./data/MRI --output_dir ./run --input-size 224 --batch-size 32 --model biformer_small
在main.py添加下面语句,因为源代码里没有定义log_dir(运行结果存储位置)
parser.add_argument('--log_dir', type=str, default='run',
help='Directory for saving model checkpoints and TensorBoard logs')
如下面图所示:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。