记录一些略看的视频目标检测论文,持续更新。。。
github:https://github.com/breezelj/video_object_detection_paper
视频目标检测(video object detection)简单综述:
概要:目标检测已经做到很成熟了,但是视频目标检测确实还在发展之中,视频目标检测主要挑战在于在长视频中往往有些帧的质量非常差,比如目标物体出现以下情况,单纯的目标检测算法难以胜任(图片来自于FGFA论文)
既然单帧图片进行检测效果不好,视频目标检测的主要考虑就是如何去融合更多的时空上面的特征,比如从bbox,frame,feature,proposal等level进行特征融合,从而弥补在训练或者检测中单帧得到的特征的不足。大概就是从上面level上面去融合特征,怎么去融合特征。
数据集:常用的数据集就是ImageNet VID dataset, 其中训练集包含了3862个video snippets,验证集含有555个snippets。共有30个类,这些类别是ImageNet DET dataset类别的子集。有时候训练集也可以用ImageNet DET这30个类的图片集。
评价标准:沿用目标检测中的mAP,但是会根据目标的速度分为mAP(slow), mAP(medium), mAP(fast), 划分标准按照FAFG论文中的方法为求当前帧与前后10帧的IOU的平均得分值score,the objects are divided into slow (score > 0.9), medium (score ∈ [0.7, 0.9]), and fast (score < 0.7) groups。
目录
1.Flow-Guided Feature Aggregation for Video Object Detection(ICCV 2017)
2.Leveraging Long-Range Temporal Relationships Between Proposals for Video Object Detection(ICCV 2019)
3.Sequence Level Semantics Aggregation for Video Object Detection(ICCV 2019)
4.Temporal Context Enhanced Feature Aggregation for Video Object Detection
5.Relation Distillation Networks for Video Object Detection
6.Mining Inter-Video Proposal Relations for Video Object Detection
1.Flow-Guided Feature Aggregation for Video Object Detection(ICCV 2017)
论文链接:https://arxiv.org/abs/1703.10025v2
主要贡献: 论文的主要算法流程如下图
流程图中的Nfeat才用的是resnet101(其中最后一个block stride改为了1,采用了dilation conv),F(Ii, Ij )用的FlowNet, embedding features采用Embedding network, 按照文中的说法Embedding network(It has three layers: a 1 × 1 × 512 convolution, a 3 × 3 × 512 convolution, and a 1 × 1 × 2048 convolution. It is randomly initialized.) 最后detection network采用R-FCN。Nfeat会随着帧数不断的更新。
最后是实验结果图,就想作者在文中说的,这个方法的速度还是有些慢的。
其他 :
- 物体速度越快,光流的效果就会越差
- 只是融合了当前帧相邻的前后帧,是否有些局部,是否有一个更加全局的特征融合
2.Leveraging Long-Range Temporal Relationships Between Proposals for Video Object Detection(ICCV 2019)
论文链接:http://openaccess.thecvf.com/content_ICCV_2019/papers/Shvets_Leveraging_Long-Range_Temporal_Relationships_Between_Proposals_for_Video_Object_Detection_ICCV_2019_paper.pdf
主要贡献:受non loca,relation network的启发设计了一个relation block来发掘视频序列中targetframe与support frames提取的proposal之间的关系,在这个relation block中还引入了feat norm以及一个graph loss进一步提高准确率
主要框架图,这个图为了简化support frame只画了一帧。
relation block的结构图
对于图中的feat norm文中采用了两种方式,即uncentered and zero-centered normalizations. zerocentered normalization uses LayerNorm that includes additional learnable parameters,并且对比了效果,结果证明加了loss的 center-norm取得了更好的精度。
对于文中的graph loss,一个好的矩阵G是满足当proposal xi,xj属于同一个instance的时候,Gij的值比较大,不属于同于个instance的时候,Gij的值比较小。loss公式如下。
yij是lable,当xi与xj是不同的instance的时候值为0,否则值为1. 在featture norm之后
,
因为在featnorm之后G的值会被bounded,也就是值会比较小,所以在softmax之前会乘以常数10,
文中还对relation block的位置进行了实验,(support source layer → target source layer(s)),即support与target的feature来自哪里的fc,其中fc6→{fc6, fc7}就对应着主要框架图中的结构,support feature来自fc6,target feature来自fc6,fc7,有两个relation block,可以看出这种情况下效果最好。
最后backbone为resnet101的时候,mAP=81.0
其他:
- graph loss的作用是为了让相同proposal的feature尽可能的接近,从而取得更好的结果,从实验中看也确实取得了更好的效果,那是否可以理解为relation block是在用相同instance proposal的feature来强化target frame proposal,而弱化不同的呢,可以试试输出最后得到的每个support frame proposal对于target proposal的贡献
- 实验中的graph loss差不多就是一个二分类的交叉熵,距离度量也是采用的L2,感觉可以考虑其他的损失函数形式和距离度量方法
3.Sequence Level Semantics Aggregation for Video Object Detection(ICCV 2019)
论文链接:https://arxiv.org/abs/1907.06390v2
主要贡献:以faster rcnn为backbone设计了一个selsa模块来提高在视频目标检测数据集即VID中的精度,训练集是DET与VID。这个selsa模块其实就是一个attention模块,训练的时候采用三帧,旨在对rpn输出的proposal提取的roi_feature进行融合,即生成一个similarity(900*900, 三帧每帧提取300个proposal,矩阵的每个值含义为每两个proposal提取出来的特征的余弦距离)矩阵,使得相同物体的proposal得到的roi_feature之间的距离尽可能小,最后用这个similarity矩阵对原来的proposal得到的特征(900*1024, 1024是在roi_pool得到的特征900*256*7*7之后flatten,接着用了一个fc(256*7*7,1024))进行加权,使得最后的proposal提取出来的roi_feature更加具有上下文的特征。最后计算loss的时候,作者采取的方法也很暴力,直接去掉另外两帧得到的特征即得到(300*1024),接着在经过box_head(其实就是两个fc,reg_fc,cls_fc)计算损失。测试的时候采用21帧,计算第11帧的精度的时候其前后10帧都是随机从该sequence中选取的。
贴一张文中的实验结果图
整个网络结构其实就是faster rcnn提取的roi_feature之后接fc-selsa-fc-selsa-box_head, selsa模块pytorch代码待补充(分析与non local联系)。。。
其他:
- 文中说这个selsa的attention模块得到的similarity矩阵有一种Spectral Clustering的思想,即将相同物体的proposal最后得到的特征尽可能聚集在一起,不同的尽可能分开,但是在代码中没有显式的体现出来
- 训练的时候采用三帧,但是在进行proposal_target的时候只用到了一帧的gt,在计算最后的loss的时候直接把三帧得到的proposal特征900*300丢弃掉其他两帧的,是否还有其他处理方式
- 开源代码中的backbone resnet101结构跟原来的resnet101有些不一样,在resnet101的block4提取出proposal并计算rpn loss,但是又在resnet的block5进行roi_pool,block5没有产生stride,而且由于没有stride,又为了增加感受野采用了dilation
4.Temporal Context Enhanced Feature Aggregation for Video Object Detection
论文详解:
5.Relation Distillation Networks for Video Object Detection
论文详解: