探索商汤视觉跟踪算法两部曲之SiamMask
这个框架有意思的地方在于,跟踪的初始化超简单,只需要提供视频跟踪的 box 输入就行,但是输出的时候却能同时得到 box 和 mask 两个结果。CVPR 2019 年,商汤提出了一个超厉害的对视觉目标(VOT)和对视频目标(VOS)的统一框架,主角就是 SiamMask。想象一下,在自动驾驶里,准确跟踪多个目标对于车辆的决策和行驶安全至关重要,而 SiamMask 的这种可扩展性就能大显身手啦。
商汤视觉跟踪算法两部曲之SiamMask , CVPR 2019商汤提出了对视觉目标(VOT)和对视频目标(VOS)的统一框架。 将跟踪的初始化只需要提供视频跟踪的box输入即可,输出时却能同时得到box和mask两个输出。 只需要在Siamese网络中额外增加一个Mask分支即可。 本工程提供复现该论文的C++工程代码及编译配置说明文档。 对基于深度学习的跟踪算法有部署兴趣的可以自己将这种singleTracker改成Multi-objects tracker 并在多任务的自动驾驶场景中使用。
在计算机视觉领域,商汤的技术一直备受瞩目。CVPR 2019 年,商汤提出了一个超厉害的对视觉目标(VOT)和对视频目标(VOS)的统一框架,主角就是 SiamMask 。
这个框架有意思的地方在于,跟踪的初始化超简单,只需要提供视频跟踪的 box 输入就行,但是输出的时候却能同时得到 box 和 mask 两个结果。怎么做到的呢?其实只需要在 Siamese 网络中额外增加一个 Mask 分支就 OK 啦。
下面我们简单看看可能涉及到的代码逻辑(这里只是示意,并非完整可运行代码):
// 假设这里定义了Siamese网络类
class SiameseNetwork {
public:
// 网络初始化相关代码
SiameseNetwork() {
// 初始化网络层等操作
}
// 前向传播函数
void forwardPropagation() {
// 这里进行常规的Siamese网络前向传播计算
// 比如特征提取等操作
}
};
// 新增的Mask分支类
class MaskBranch {
public:
MaskBranch() {
// 初始化Mask分支相关参数等
}
void generateMask() {
// 这里根据Siamese网络输出的特征来生成Mask
// 可以是一些卷积操作,将特征转换为Mask输出
}
};
// 整体的SiamMask类整合Siamese网络和Mask分支
class SiamMask {
private:
SiameseNetwork siameseNet;
MaskBranch maskBranch;
public:
SiamMask() {
// 初始化SiamMask相关操作
}
void process() {
siameseNet.forwardPropagation();
maskBranch.generateMask();
// 这里还可以处理最终输出,整合box和mask等
}
};
这段代码简单模拟了 SiamMask 的结构,SiameseNetwork 类负责常规的 Siamese 网络操作,MaskBranch 类则专门处理新增的 Mask 分支,SiamMask 类将两者整合起来完成整个流程。
更棒的是,本工程还提供了复现该论文的 C++ 工程代码及编译配置说明文档。对于那些对基于深度学习的跟踪算法有部署兴趣的小伙伴来说,这简直是个宝藏。你完全可以自己动手,把这种 singleTracker 改成 Multi - objects tracker ,然后应用到多任务的自动驾驶场景中。想象一下,在自动驾驶里,准确跟踪多个目标对于车辆的决策和行驶安全至关重要,而 SiamMask 的这种可扩展性就能大显身手啦。
无论是研究算法的原理,还是实际应用部署,SiamMask 都给我们提供了一个非常有价值的范例和起点。期待大家基于这个框架玩出更多新花样。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)