大多数深度学习神经网络往往是针对特定分辨率编写的,例如224*224。当这些网络面对分辨率增加的图片时,计算量会激增,同时性能也没啥变化甚至退步。作者设计了一个递归网络,不断地从低分辨率图像中确认信息丰富的区域,然后从这些信息丰富的区域裁剪出图像块,继续分析,直到确定原始分辨率图像中哪一处信息最丰富,最终依照这些信息丰富的区域进行分类。
架构部分就是摘要部分的具象化展示。图中,LVL1是原图像长宽缩小到1/4得到的图像。一个特征提取模块分析将图像均分为四块后,那些块包含了丰富的分类所需信息,并将这些块的输出结果定为1。然后根据这个结果,将分辨率扩大一倍的图像,即长宽为原图像1/2的图像对应部分裁剪出来,分别丢入下一个特征提取模块。同时,特征提取模块提取的特征还会放入特征编码模块,最终不同分辨率中,信息丰富部分的特征一起取平均,丢进分类器。
作者给的例子是从224*224,到448*448,最后到原始的896*896。但实际上,这玩意理论上可以应付任何高分辨率图像,而且中间图像可以不止两个,而是有多个中间图像。
特征提取模块是CNN,要预设好输入尺寸,上图例子中,预定尺寸为224*224。位置模块是一系列1*1卷积核。位置编码模块是一个全连接层,输入是特征提取模块提取出来的f和不知道从哪冒出来的位置编码p。
由于模型中有取样步骤,即根据位置模块在某一分辨率图像中选取特定区域的的操作,因此无法直接使用端到端的损失函数。作者便借鉴强化学习的方法,提出了一个损失函数
这个公式中,M代表阶段数,例如示意图中的阶段数为3,N为传统概念的Batchsize。原文中说,p(yi)是通过位置参数li取样后,分类正确的概率,个人猜测是将每一段的图取样后,放大分辨率然后输入到分类器中,得到的正确类的logits值softmax之后的结果。
原文说p(li)是位置序列li被用于图像xi的概率,个人认为是经过位置模块计算后,被采样的图像块占全部图像块的百分比。
Ri是一个离散的指示函数,分类正确时为1,错误时为0。b是每一轮epoch更新一次,根据Ri的值做指数平均移动
这是网络在ImageNet上的实验结果,Locs是指每一层采样的图像块个数,在实验中,作者为了公平对比BagNet-77,只设定了两层,第一层图像为77*77,第二层为原始的224*224。采样快大小为5*5。
如图可知,虽然因为模块多,模型的参数也比BagNet-77稍微多一些,但因为每一层只需要针对信息丰富的部分进行特征提取,所以计算量和耗时都短得多。随着采样快变多,要计算的东西也增多,所以计算量和精读都会有所上升。
之后,作者又在fMoW上进行了实验,将Efficient-B0作为特征提取的backcone。该数据集是卫星图像数据集。
如图,该模型同样取得了很好地结果。对于高分辨率的输入图像,依旧能保持较低的计算量。不过要注意到的是,在896*896的那一行,每一层取样6块的性能反而不如4块,这说明取样块数太多时,会添加许多冗杂信息,干扰模型分类,最后费力不讨好。
提取图像的信息,然后反过来确定应该关注图像的哪个位置,这一过程更加贴近人在仔细观察一件事物的过程,先大体扫一遍,然后找出感兴趣的点或可能的关键点进行仔细观察。这说明事物的信息可以指导如何观察这样事物。
同时,该模型要提前预设好每层采样块数,这导致多了一个超参数,对于更大分辨率的现实场景可能会成为一个缺点,值得进一步研究。
因篇幅问题不能全部显示,请点此查看更多更全内容
怀疑对方AI换脸可以让对方摁鼻子 真人摁下去鼻子会变形
女子野生动物园下车狼悄悄靠近 后车司机按喇叭提醒
睡前玩8分钟手机身体兴奋1小时 还可能让你“变丑”
惊蛰为啥吃梨?倒春寒来不来就看惊蛰
男子高速犯困开智能驾驶出事故 60万刚买的奔驰严重损毁