商汤视觉跟踪算法两部曲之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 都给我们提供了一个非常有价值的范例和起点。期待大家基于这个框架玩出更多新花样。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐