[AAAI 2021 时序动作提名生成] BSN++长文详细解读

论文链接:https://arxiv.org/abs/2009.07641

论文代码:https://github.com/xxcheng0708/BSNPlusPlus-boundary-sensitive-network(非官方!)

原作者Haisheng Su解析:https://zhuanlan.zhihu.com/p/344065976

注意:论文没有官方的源码开源,下文中的代码都是摘录至非官方实现版本,精度与原文还是有不少差距。代码可能存在出入,仅供参考!!!

前情回顾和引入

问题定义:在Temporal Action Proposal Generation(时序动作提名生成)任务中,对于一段未剪辑的视频 

 ,其中 代表视频的第t个RGB帧,是视频的总帧数,有时间动作实例集合  作为注释,其中 和 分别代表动作实例  的开始和结束时间。我们希望预测得到的动作提名集合  能够尽可能地覆盖真实集合  。

BSN++文如其名,是对ECCV 2018上的BSN方法进行的改进。值得一提的是,BSN++的作者Haisheng Su也是BSN的原作者之一。此外,文章虽说名为BSN++,但是也能看见不少BMN的影子。BMN和BSN++这两篇文章也算是BSN的“正统”续作了。无论从网络的整体流程,数据的处理细节,还是从论文的写作结构上来看,三篇文章都有很强的相似性。可以对照着来阅读,效果更佳。

现有的时序动作提名生成方法可以大致分为两大类:

  1. Top-down(自上而下):基于滑动窗口或者预先定义的anchors来生成proposals,再使用二分类器去评估proposal的置信度。以这种方式产生的proposal在持续时间范围上缺乏灵活性,并会产生不精确的边界。

  2. Bottom-Up(自下而上):以BSN为代表的方法,为每个时间位置生成动作概率,通过动作概率的组合生成proposals,并通过提名评估模块为每个proposal生成置信度分数。最终能够得到具有灵活持续时间和可靠置信度得分的动作提名。

BSN作为Bottom-Up流派中的开创性工作,也存在着一些问题。其中部分问题已经在BMN中得到了解决:

  1. BSN中提名特征构建和置信度评估过程无法并行地对Proposals处理:BMN引入了边界匹配机制来评估密集分布的提名的置信度。

  2. BSN中构造的Proposal特征过于简单,无法很好地捕捉时间上下文:BMN中的BM feature map包含了所有可能的proposal的特征,可以利用卷积更好地聚合相邻提名信息 。

  3. BSN是多阶段而非统一的框架:BMN利用Base Module作为共享主干,在TEM和PEM两个分支中同时生成时间边界概率序列和BM置信图,进行端到端的联合训练。

但是,还有一些问题依然没有得到关注和解决:

  1. BSN只使用了边界附近的局部细节来生成边界概率,而没有利用整个视频序列中丰富的时间上下文。

  2. BSN在置信度评估中没有考虑提名与提名之间的关系。

  3. BSN中忽略了proposals中的存在的正负样本和持续时间分布不均衡问题。

BSN++针对上述问题提出了相应的解决方案:

  1. 提出了一个互补边界生成器,以利用“局部和全局”、“过去和未来”上下文进行精确的时间边界预测。

  2. 提出了一个用于提名可信度评估的关系模块,采用两个自注意力模块从两个互补的方面对提名关系进行建模。

  3. 提出了一个两阶段重采样方案,包括 IoU-balanced (positive-negative)采样scale-balanced采样。

Video Feature Encoding

图1.Video Feature Encoding

数据集设置和特征编码方面,BSN++沿用了BMN的设置。前面BMN的解读中有详细的说明,这里不再赘述。

BSN++

图2.BSN++

BSN++由三个模块组成:

1.Base Net:与BMN中的Base Module一致:增大时间感受野,提供共享主干特征。

2.Complementary Boundary Generator:使用嵌套的U形编码器-解码器结构,从正向和反向两个角度处理输入视频特征以生成边界概率序列。

3.Proposal Relation Block:通过两个负责互补依赖关系的自注意模块对提名关系进行建模,生成每个提名对应的置信度分数。

接下来分别对这三部分进行介绍,并从整体上对训练和推断过程进行分析。

Base Net

实现同BMN,Base Module通过两个核为3的1D卷积为后续两个分支(互补边界生成器和提名关系模块)提供共享特征。对于每一个window,其输出大小为 

 的特征。

 

# feat_dim: 400
# hidden_dim_1d: 128
self.x_1d_b = nn.Sequential(
nn.Conv1d(self.feat_dim, self.hidden_dim_1d,
kernel_size=3, padding=1, groups=4),
nn.BatchNorm1d(self.hidden_dim_1d),
nn.ReLU(inplace=True),
nn.Conv1d(self.hidden_dim_1d, self.hidden_dim_1d,
kernel_size=3, padding=1, groups=4),
nn.BatchNorm1d(self.hidden_dim_1d),
nn.ReLU(inplace=True)
)

经过BaseNet后,分为两个分支,分别为Complementary Boundary Generator和Proposal Relation Block。

Complementary Boundary Generator

图3.CBG模块

无论是BSN还是BMN中,都只使用了简单的卷积串联来生成边界概率,这样只能关注到边界附近的局部细节。为了能够更好地捕获高级的全局上下文和低级的局部细节,作者从U-Net结构中得到启发,将边界生成器设计为NestedUNet编码器-解码器网络,如上图左下所示。具体而言,每个圆圈表示具有512个filter且步长1,内核大小3的1D卷积,以及相应的BN和ReLU层。

通过两个下采样层来扩展感受野,然后使用相同数量的上采样层来恢复原始时间分辨率。圆圈之间的虚线表示skip connection,用于缩小编码器和解码器间的语义gap。其中下采样通过nn.MaxPool1d实现,上采样通过nn.Upsample实现。最后 

 的输出大小为  。通过Sigmoid将范围限制在[0, 1],得到两个大小为T的概率序列,分别对应动作起始概率和动作结束概率。

NestedUNet代码如下:

class ConvUnit(nn.Module):
"""
BSN++中CBG模块的UNet中的每个单元unit
"""

def __init__(self, in_ch, out_ch, is_output=False):
super(ConvUnit, self).__init__()
# out_ch: 2
module_list = [nn.Conv1d(in_ch, out_ch, kernel_size=3,
stride=1, padding=1, bias=True)]
if is_output is False:
module_list.append(nn.BatchNorm1d(out_ch))
module_list.append(nn.ReLU(inplace=True))
self.conv = nn.Sequential(*module_list)

def forward(self, x):
x = self.conv(x)
return x

class NestedUNet(nn.Module):
"""
UNet - Basic Implementation
Paper : https://arxiv.org/abs/1505.04597
"""
def __init__(self, in_ch=400, out_ch=2):
super(NestedUNet, self).__init__()

self.pool = nn.MaxPool1d(kernel_size=2, stride=2)
self.up = nn.Upsample(scale_factor=2)

n1 = 512
filters = [n1, n1 * 2, n1 * 3]
# UNet的第一列
self.conv0_0 = ConvUnit(in_ch, filters[0], is_output=False)

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值