Giter Site home page Giter Site logo

Comments (25)

YimianDai avatar YimianDai commented on July 3, 2024 4

首先,关于怎么使用预训练参数的问题,我觉得应该是没问题的,您可以逐层手工从 pretrained_net 里面把对应层的权重付给你自己网络(假设叫 net)的对应层。在 MXNet 里面,大概就是如下:

pretrained_net = resnet50_v1b(pretrained=True)
params = pretrained_net.collect_params()
net = create_new_net( bala bala)

for key in params:
    param = params[key]
    net.collect_params()[key].set_data(param.data())

但是因为新的网络加入了注意力层之类的, key 的名词肯定有变化,你需要打印出来看看,不行的话就一行行 net.collect_params()[new_key].set_data(params[old_key].data()) 。总之一个原则,属于 pretrained_net 的层就复制权重,属于自己加的你就初始化,手动来肯定是行的。

其次,我是觉得你要空间细节信息,未必一定要通过空间注意力机制,local channel attention 也可以。我是做小目标检测的,我一开始也是从空间注意力机制入手的,不过那个论文投 ECCV 悲剧了后来也就没管了。我不喜欢 Spatial Attention 的一点是,里面 Conv 的 kernel size 或者 dilation rate 的数值对最终的性能影响太大了,其实是设置了一个与当前输入相关的超参数。我更喜欢 Channel Attention 是因为 Channel Attention 其实不需要这个设置,bottleneck ratio r 一般就是 4,ResNet-50 以上那种 expansion 4 倍的块,那么就是 16,基本不用微调。如果要实现不同的尺度,你可以通过改变 AdaptiveAVGPooling 的大小来实现不同尺度的 Channel Attention,一样可以 cover 到不同 scale 的 object。

关于注意力在哪里加入的问题,我是倾向于尽可能的加,最好每层都加。我在 Attention as Activation 一文中做过类似的实验,实验截图如下所示。至少在对 ResNet-8(b = 1)、ResNet-14(b = 2)、ResNet-20(b = 3)、ResNet-26(b = 4) 这些较浅的网络上,Local Channel Attention 层数比例越高(从 0 到 100%),网络性能越好。我在 Semantic Segmentation 任务上也做了类似的实验得到了类似的效果,是针对 Spatial Attention,不过那篇论文悲剧了,截图就先不贴了。

image

性能最好的时候就是我论文里说得 Fully Attentional Network,其实本身人类视觉系统其实就是每一层都受到注意力机制的调控,哪怕是最初的 V1 层,这也是我写 Attention as Activation 这篇文章的灵感。至于理论,你应该也能看得出来,我学术能力不强,也只是个刚入深度学习领域的萌新,😂😂😂。我自问没有能力从理论来解释这些,所以也从不去烦恼这个。我更喜欢神经科学,如果你也感兴趣,你可以去搜一下 Visual Working Memory / Target Template 的文章,我自己是从这个角度来理解 Attention Mechanism 的。其实我写得 Attention as Activation 第一版,完全是围绕 Visual Working Memory 来构建 story 的,但是外导不喜欢,最后全部删了 😂😂😂。

谢谢您的祝福。工作是不可能顺利的,我快到毕业大限了,论文还没送外审,每天焦躁的要死。

from open-aff.

YimianDai avatar YimianDai commented on July 3, 2024 1

这位兄弟,您好。

  1. 首先,我答应的是等我这周日答辩完之后,等我空下来跑一下 resnet 18 的代码。现在还没到下周,我还在赶答辩 PPT,您能否等到下周再提醒我。

  2. 其次,我之前的回复里已经给您解释了我目前的处境,我最近忙于准备答辩以及找工作。我周日答辩,下周三前要准备完全部归档材料提交学位会,时间非常紧。请您体谅一下勉强毕业的码畜的艰辛。

  3. 再次,我这个 repo 是理论上只对我论文里的内容负责,ResNet 18 的实验本身就不在我的论文里,我本可以不答应这个要求的,毕竟跑一次 ImageNet 对我来说也是不小的负担。我是看您之前说您实验室没有足够的机器,而您又想看一下 ResNet 18 在 ImageNet 上的结果,我是出于热心才答应帮您跑得。帮您跑额外的实验这个是 情分,不是本分,您能否对我宽容一些,别那么苛刻。等我忙完目前让我焦头烂额的事情可否?

  4. 最后,我自己也没有属于自己的机器,我也是要申请排队等待机器,什么时候能够审批通过、分配到机器也不在我的掌控之内,请您耐心等待下。

from open-aff.

YimianDai avatar YimianDai commented on July 3, 2024

ResNet-18 的我可以找机器闲置的时候跑,但我在的实验室本身没有任何机器,是远程用的合作导师的,他也有自己的博士生会用机器,所以可能没法很快给您 ResNet-18 的预训练模型,您应该说的是 ImageNet 的吧?我不会把这个 Issue 关掉,等我跑好了我会再回复您。

已经有无数论文说明了注意力机制肯定是可以增强网络的 expressive power 的。至于低层细节特征,我觉得是可以的,关键是要选取好 Attention 的 Scale,因为 Attention 本质上也是卷积层。SNIP、TridentNet 这些论文都反复强调了网络性能与 感受野和物体大小的匹配程度很重要,所以你如果要抓取低层次的细节信息,我个人认为不应该用 SENet/SKNet 里面的 Global Channel Attention,您可以试试就只用 AFF 里面的 Local Channel Attention 那个分支。

我觉得 AFF 在 CIFAR-100 上面表现比较好的原因(哪怕不用 AutoAugment、Label Smoothing 这些原来的 AFF-ResNeXt 也可以达到 90.3% 的准确率),就在于 CIFAR 的图片很小,而 AFF 里面的 Local Channel Attention 比较适合抓取 低层次的细节信息,本质原因还是 receptive field 和 object Instance scale 相匹配。另外,我在另外一篇论文 https://arxiv.org/abs/2009.14530 代码:https://github.com/YimianDai/open-acm 做了类似的实验, Local Channel Attention 对于捕捉 低层次的细节信息 是非常有效的。

但您是要像传统方向算子那样,我不太明白您的意思,总之 Local Channel Attention 是可以用在语义分割小目标上面的。

该注意力机制是可以即插即用的,SENet 或者 SKNet 里面的注意力机制怎么即插即用,AFF 里面的 MS-CAM 就怎么即插即用。事实上,AFF 论文里也给出了 AFF 用在 同层的 InceptionNet、短跳连接的 ResNet、长跳连接的 FPN 乃至 AFF 内部(iAFF)这四种情形。其实相比于 SENet, AFF 里面的 MS-CAM 只是多了一条 Local Channel Attention 分支而已。这篇论文也不是说提出了一个多么 fancy 的 Attention 模块,说实话挺简单的结构。我更想传达的意思是,Channel Attention 也可以用 尺度 这个概念,也可以做成 Multi-scale Channel Attention,仅此而已。

最后,如果相比 Vanilla ResNet 和 AFF-ResNet,那肯定会增加一丢丢参数,但比例蛮小的。 但如果你考虑到 AFF / iAFF 模块带来的性能提升,那么这一丢丢额外的参数其实是超值的。您可以看论文的 图 7,我做了随着网络层数加深也就是参数变多,普通的 ResNet 和 AFF-ResNet / iAFF-ResNet 的性能比较。您可以看到,AFF-ResNet / iAFF-ResNet 可以用更少的网络参数实现比最普通的 ResNet 更好的性能。这里实验所有模型设置都是一模一样的,没有出现某些用了什么 data Augmentation trick,某些没有用这些现象。您也可以通过把 traning script 里面的 mixup,label smooting,autoaugment 都关掉,然后把 channel-times 设置成 1,blocks 从 1 到 5 变动 复现出实验结果。我是蹭谷歌免费的 Colab 机器跑得,保存训练模型到本地挺麻烦的,有的时候吃饭回来机器就被收回了,但是图 7 的模型很小,要复现花不了多少时间。

总之,相比于普通的 ResNet,使用注意力模块的网络可以在使用更少的参数的情况下得到相同乃至更好的性能,这个不仅是 AFF-ResNet 这样,SENet、SKNet 都可以。

from open-aff.

roger-cv avatar roger-cv commented on July 3, 2024

首先,十分感谢作者您的回复,原谅我没有将问题表达清楚,确实如您所说,我说的就是在ImageNet上进行预训练后得到的resnet18模型,这个预训练模型在我的算法框架中主要是对特征进行提取。您的回复不止解答了我关于预训练模型的问题,更让我对注意力机制这块有了进一步的认识,谢谢您!
其次,由于低层次的细节信息对我做的方向很重要,所以我想在预训练的resnet18中加入注意力机制从而能够将不同尺度的细节信息进行捕获并将它们进行特征融合,我觉得这种特征对于后面分类有一定帮助。我现在正在尝试将CBAM、BAM和SENet加入resnet18中来测试这三种注意力机制对性能的影响,我发现,SENet并没有像网上所言能带来性能的提升(至少对我做的东西没有提升),我还以为是由于SENet不包含空间注意力模块的原因,毕竟CBAM和BAM效果都会多多少少比paper上高一点。今天听您讲local channel attention,那可能是Global Channel Attention的原因。当然,AFF我也会做实验看一下效果的!
紧接着,是我另外两个问题,还希望您能解答一下。第一,我现在只是在resnet18最开始的maxpool之前和最后的avgpool之前加入那三种注意力机制,因为我想使用预训练resnet18的权重参数,如果我在这两个池化之间(也就是resnet block)加入注意力就只能重新从零开始训练resnet18,而实验室也没有这么多的资源让我使用ImageNet来训练resnet18,所以,想问一下您,有办法既能保存预训练模型参数又能在resnet block引入注意力机制吗?毕竟,那四个block中的细节信息也是很重要的。第二,我认为注意力机制在哪个地方加入也是有讲究,希望作者您能指教一下哈,另外,注意力机制的优势可以从消融实验结果体现,如何从理论上更好的解释注意力机制对整个特征提取模型的贡献呢?
最后,祝工作顺利,期待您的回复。

from open-aff.

roger-cv avatar roger-cv commented on July 3, 2024

哇,您真的是算回issue最快的作者了,我想再次感谢您。对于您所提的预训练模型参数保存方法,我一定要去试一下,嘿嘿。
其实,我一直认为,要捕获空间细节信息,那SpatialAttention肯定是要比ChannelAttention效果好的,但自己的实验结果又让人挺困惑的,确实如您所说,空间注意力中,卷积核的大小对最终的性能会产生很大影响,一般情况下,我想应该是浅层中使用大卷积核(比如7x7),深层中使用小卷积核(比如3X3),但不同方向,不同任务那肯定需要微调的,这里面又得需要大量的实验咯。
另外,我看了您的实验效果,确实可以在每层后都加入attention,不知道您所说的层和我说的层是一样的不,我附带了一个截图,还想和您继续讨论一下注意力机制加在什么位置。(红色的1和2是我现在正在尝试的,蓝色是我认为的层)
最后,其实我问您从理论解释注意力机制,也是在问我自己,你不可能说我加在这里效果好,我就加,那为什么你要加在这里呢?对吧,我觉得我还需要再去补一下这方面的理论。感谢您分享的资料,我正在看。
因为我自己也要快开题了,自己的创新点,实验这些都还没怎么做,所以我也是比较焦虑的,好像大家读研都在焦虑的一种状态里面,哈哈哈,那互相祝福吧,希望作者您身体健康,毕业顺利吧!期待您的回复呀!
image

from open-aff.

YimianDai avatar YimianDai commented on July 3, 2024

Channel Attention 确切地说是 SENet、SKNet 里面的 Global Channel Attention 捕获空间细节信息不好是因为 GlobalAVGPooling 把空间分布彻底搞没了,但 Local Channel Attention,或者你只下采样 2 倍、4 倍然后做 Local Channel Attention,空间信息还在,没道理不能 highlight 空间信息。

我个人习惯,把 Conv+BN+ReLU 叫做一层,两三个 Conv+BN+ReLU 组成的 Residual Block 就叫 Block,几个 Residual Block 组成一个 Stage,几个 Stage 组成一个 Network。

加在 1 你的 Computational Cost 会非常大,为了减少计算量,对于 ImageNet 上的实验,AFF-ResNet 对前两个 Stage 都没有加 AFF 模块,只对后面 2 个 Stage 加了 Block-wise 的 AFF 模块。2 的位置没问题,AFF-ResNet 也加了,但这个时候还有多少空间信息值得你用 Spatial Attention 需要思考一下,这个时候 feature map 只有 7 x 7 了吧?

Attention as Activation 里面的 ablation study 的结果是鼓励在第一个 ReLU 就使用 Local Channel Attention 的,然而这还是跟 网络深度、具体的数据集性质、注意力类型有关。去年的 NIPS 论文 Stand-Alone Self-Attention in Vision Models 里面的实验的结论就是在网络的 Stem 阶段(最初层、几层)使用 Self-Attention 效果反而不如 传统 Conv+BN+ReLU 的 Stem。所以具体 work bu work 还需要自己探索。但我不认为 深度学习是 玄学,效果好总有效果好的理由。

from open-aff.

roger-cv avatar roger-cv commented on July 3, 2024

您说,全局平均池化把空间分布搞没了,可以这么认为吗?因为平均池化可以保留更多的图像背景信息,最大池化可以保留更多的纹理信息。所以这里的空间分布是指纹理信息分布吗?
加在[1]处计算消耗大,是因为特征图的大小原因吗?那我后面的注意力确实应该加在resnet18的后两个stage,但我的想法是:浅层网络可以捕获更多的纹理信息,而深层网络更多的是语义信息的获取,我需要的是纹理信息,但如果我在后两个stage加attention岂不是没什么效果,反之,如果我在前两个stage加attention,我的计算量会变得很大。这让我很困惑。另外,我的图像输入是3x256x256,然后输出特征是512x8x8。我应该怎么去估计这8x8的特征图上的空间信息呢?
希望作者您能帮忙解答一下,谢谢!
image

from open-aff.

YimianDai avatar YimianDai commented on July 3, 2024

我感觉,既然你要这么浅层的细节,那就不要在 stem 阶段又做 stride = 2 的 conv,又做 max pooling,这样肯定损失细节,干脆别下采样、多做几次 conv 然后输出原图像大小的浅层特征做 Attention,作为 FPN、U-Net 融合时这样最浅层的特征就好了,我在 Asymmetric Contextual Modulation (代码:https://github.com/YimianDai/open-acm)里就是这么做的,你的 task 的细节不可能比那篇论文 2x2 到 9x9 的红外小目标更小了吧。

下采样一定会损失细节,你要保留细节就保留 feature map 的 Resolution,而不是下采样后再靠 Attention 来亡羊补牢,这个用处不会很大。我在 Asymmetric Contextual Modulation 里面对比了正常 ResNet 方案(上来就是跟你这样下采样)和不下采样的,两者性能差异很大。

image

你这么强调细节,只靠最后 8 x 8 的 feature map 肯定不行,肯定要像 FPN、U-Net 那样走 low-level and high-level feature map fusion 的路子。

from open-aff.

roger-cv avatar roger-cv commented on July 3, 2024

您好,您的意思是把最开始的maxpool替换掉,从而保留更多的细节特征吗?那最后的avgpool处怎么处理比较好一点呢?我其实想保留detailed fine-grained information,就像lbp那样,中心和其周围的像素点的大小关系不会因光照等而改变,从而能够提取到更加稳定的特征。您说的对,我确实要做feature map fusion,我也确实像这么做,只是没找到能够很好融合这low-level和mid-level and high-level的方法。

from open-aff.

YimianDai avatar YimianDai commented on July 3, 2024

所以你的任务最后还是 图像分类吗?抱歉,我自动代入 语义分割了

from open-aff.

roger-cv avatar roger-cv commented on July 3, 2024

是的,到最后就是一个二分类的task,抱歉,我应该一开始就说明白。哈哈哈

from open-aff.

swjtulinxi avatar swjtulinxi commented on July 3, 2024

作者你好,在FPN结构中做语义分割时我是不是可以在用这个模块时不做通道压缩,

from open-aff.

YimianDai avatar YimianDai commented on July 3, 2024

您是要在 Cross-layer feature fusion (long skip connection)里面用,还是就是像目前的 AFF-ResNet 里的 short skip connection 上面用?我觉得您都可以试一试,唯一要注意的是要防止 overfitting,以及模型过大。因为如果是在 ResBlock 里面用 AFF/iAFF 的话,ResNet-50 以上会对 channel number 默认扩充 4 倍,此时不做通道压缩的话很可能会 overfitting。

或者您可以试一下 ECA-Net: Efficient Channel Attention for Deep Convolutional Neural Networks 的方法,这篇文章的作者提出做通道压缩不利于 Channel Attention。

from open-aff.

Jiawei0o0 avatar Jiawei0o0 commented on July 3, 2024

作者您好,想要请教您关于AFF模块和iAFF模块的一些问题。就我目前的理解来说,iAFF的提出是为了解决AFF面临的iinitial feature integration (初始特征融合?不知道理解的准不准确)问题。就形式来看,iAFF是AFF模块的一个迭代。类是0号AFF接上了1号AFF,那么0号AFF模块是不是也面临initial feature integration的问题呢?还是说通过这种迭代的形式弱化了其影响?我看了下您的消融实验,iAFF相较AFF有所提升,那么继续迭代会是什么样的结果呢,因为没有在论文里看到相关的讨论,(当然也可能是我没有注意,请指出。)所以想请教一下您。期待您的回答。

from open-aff.

YimianDai avatar YimianDai commented on July 3, 2024

是的,如您所说,iAFF 最最里面还是有 X + Y 的问题,我复制下在其他 issue 里面回复别人的话:

第三层,iAFF,iAFF (X, Y) = X * M (AFF (X, Y)) + Y * (1 - M (AFF (X, Y))),(AFF (X, Y) 是上一层 AFF 得到的特征),用 AFF (X, Y) 代替了(或者说缓解了)注意力模块 M 中我们不想要的 X + Y,改善了注意力模块的输入质量,输出权重也相应的改善了。其实 AFF (X, Y) 里面还是有 X + Y,所以这个过程可以一直迭代下去,所以叫做 iterative AFF,但是考虑到边际效应以及计算量、内存使用的增长,我们就止步于此了。

的确没有进一步讨论了,最主要的还是受制于 GPU 资源,别看 FLOPs 其实只增长了大约如下图所示的那么一丢丢,但其实所有的 Attention 模块 X' = G(X) * X,是会将 X 再复制一份的,继续迭代下去,对于内存和推理时间都是个负担。我是远程蹭得别人的 GPU,所以最初稿实验做得有点少。谢谢您关注我的工作,我等把手头的工作修改好就找机会把再多迭代一次的实验补上。

image

from open-aff.

roger-cv avatar roger-cv commented on July 3, 2024

@YimianDai 作者,抱歉再次打扰您,我试了将resnet18中的八个短连接全换成AFF/iAFF,但是效果却没有原本的x+y好,有很大的性能差异,本质上讲,我做的方向也是图像分类,按道理来讲不应该差异这么大吧。这是怎么回事呢?有没有可能是预训练模型的原因呢?我加载了在ImageNet上预训练的resnet18的模型参数。
image

from open-aff.

YimianDai avatar YimianDai commented on July 3, 2024

是 ResNet 18 在 ImageNet 上吗?抽空我自己跑一下吧(手头有 4 个幻灯片😂😂😂,先做完最急的两个我就跑跑看),到时我会把结果放上来的。上周末我刚出差回来,这两周还同时在找工作,还有最大头的毕业答辩,事情多得有点崩溃。

from open-aff.

roger-cv avatar roger-cv commented on July 3, 2024

@YimianDai 是的,是在ImageNet上训练得到的ResNet18,希望作者您能提供一个pytorch版本的预训练resnet18版本。麻烦了,我们这边实验室也没设备能自己跑预训练模型。

from open-aff.

YimianDai avatar YimianDai commented on July 3, 2024

好的,请您稍微耐心等下。我最近实在是有点焦头烂额,等缓过这阵一定会补上的。

from open-aff.

roger-cv avatar roger-cv commented on July 3, 2024

@YimianDai 谢谢您,

from open-aff.

roger-cv avatar roger-cv commented on July 3, 2024

@YimianDai 作者,您那部分可视化是怎么做出来的呀?这个GradCAM要插入到网络中吗?

from open-aff.

YimianDai avatar YimianDai commented on July 3, 2024

@roger-cv 我是按照 https://mxnet.apache.org/versions/1.4.1/tutorials/vision/cnn_visualization.html 这个教程来得

基本的步骤就是:

  1. 用 gradcam 里面的 运算符 conv / relu 构建一个跟你训练好的模型一模一样的网络,只是把标准的 conv / relu 替换成 gradcam 的 conv 和 relu
  2. 将训练好的模型的权重赋予新的模型
  3. 调用显示热力图的函数就可以了

from open-aff.

roger-cv avatar roger-cv commented on July 3, 2024

@YimianDai 感谢!

from open-aff.

roger-cv avatar roger-cv commented on July 3, 2024

作者,请问一下resnet18的预训练模型大概什么时候能公布呀

from open-aff.

roger-cv avatar roger-cv commented on July 3, 2024

十分抱歉,我太着急了,您先忙完您那边的事情吧。

from open-aff.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.