| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 了解CV和RoboMaster视觉组(五)目标跟踪:基于深度学习的方法 -> 正文阅读 |
|
[人工智能]了解CV和RoboMaster视觉组(五)目标跟踪:基于深度学习的方法 |
--neozng1@hnu.edu.cn 5.4.4.NN-Based这部分内容在我们前面介绍光流法的文章中已经看到了一些端倪,根据前面的知识我们应该可以轻松地得到一种基于CNN的跟踪器:输入前一帧图像和初始的位置还有当前帧图像,输出即为预测的bbox。当然,这只是CNN-based方法其中的一种。聪明的你应该可以分析得到,刚刚提到的pipeline代表了一种判别式的方法的端到端框架,我们利用深度网络提取深度特征生成滤波器(卷积核),然后再次利用深层的网络作为分类器和回归器对浅层网络滤得的特征进行判别并输出当前帧中的目标框。
在前面我们已经见识到网络强大的特征提取和表示以及对非线性映射的拟合能力,下面给出在目标跟踪中能用能用网络替代的模块(包括全网络的架构): 5.4.4.1.特征提取模块传统跟踪算法中直接使用像素级特征的大有人在,也有使用HoG、HoColor这些稍稍高级一些的特征。他们的优点就是计算起来非常快,缺点也很明显:表达能力相对较差。而深度特征的表示能力在这几年来的飞跃式提升是大家有目共睹的,自然而然我们可以使用CNN对初始帧进行处理得到feature map。有改进者结合了深度特征和简单的梯度/颜色特征,加入一个置信度模块:对于简单的样本就直接利用速度最快的HOG等特征进行初步筛选,如果一看就是背景直接跳过即可;若出现置信度不高的情况,再进一步使用CNN进行提取。这也是很多级联方法的惯用trick,如经典的Haar人脸检测器就是利用这种方法避免让所有输入都通过整个流程。 特征提取器有两种方法,离线和在线。离线的提取器一般就是在ImageNet等训练集上进行预训练,然后直接用于生成深度特征。而在线学习则是和其他传统方法一样,从前一帧的GT附近截取数个ROI并在其上进行在线训练。也可以采取中庸之道,使用pre-train+在线fine-tune的方法。 cnn的卷积操作应当为典型的空域卷积,前面介绍KCF的时候我们就知道频域中的许多性质可以帮助我们加速运算——卷积在频域变成了简单的乘法。其中,在线方法可以在频域利用傅里叶变换的性质(复矩阵对角化/循环矩阵对角化/FFT等)加速提取特征和训练。 针对目标尺度和角度的变化,可以采用多尺度训练/FPN等目标检测中常用的技巧来进行针对性优化。至于亮度/对比度等不变性,对于网络来说都是小菜一碟,只需要在训练时装入经过数据增强的样本即可。 5.4.4.2.候选区域生成不同的跟踪方法有不同的候选区域生成策略,最简单粗暴的方法就是对整张图片都运行(这就没有任何”策略“可言了)。这一个步骤也可以对应到目标检测网络中的回归器。 相关滤波方法一般是采样GT周围的ROI(例如KCF就是把GT扩展2.5倍,利用循环矩阵在频域良好的性质进行计算),生成式方法则是寻找数个特征点/群,将那些有较多成对匹配点的区域作为ROI。之前在 5.2.6.6 中介绍vision attention的时候提到有通道域和空间域的注意力,那么网络可以利用attention机制对ROI中的特定区域进行筛选,减小搜索空间。 再进一步就可以利用 5.3.2 中介绍的运动学建模和运动预测方法,利用历史的时间序列数据建模物体的运动,KF、PF、IMM等方法在目标跟踪中都是可用的,不过由于深度信息的缺失(仅仅在二维平面上估计运动,丢失了 z z z轴的信息),处于复杂运动状态下的物体很难用线性预测器预测。因此可以使用网络替代这些组件中的部分模块,用网络的输出提供协方差/噪声建模等信息,更好的建模非线性因素。 既然是序列信息,RNN/LSTM/Transformer必然也是可用的,并且可以增加时间注意力机制(对比通道域和空间域,在RNN中是另一个维度),建模历史不同时刻帧对于当前跟踪的重要性。 5.4.4.3.分类器/回归器(fine-tune)之前介绍的判别式算法,其滤波器(可以看作分类器)都是在线训练的,而对于由神经网络构造的判别器和回归其,更合适的方法是离线训练。对于分类器,较好的方法是参照人脸识别中常用的few-shot learning,设计一个判别函数,利用triplet损失或Siamese网络来进行训练。不了解这两者的同学可以参考吴恩达深度学习第四章-Siamese网络以及吴恩达深度学习第四章-Triplet损失。 对于Siamese(一般称作孪生网络),我们可以并行训练两个网络,分别用于提取gt和候选区域的特征。
然后,对cnn输出的最后一层特征进行embedding(再提一嘴,也可以直接当作最后输出的特征就已经是嵌入在某个空间中了),并利用一些尺度度量的手段如欧式距离、海明距离等等来计算两个向量的距离/估算相似度。最后输出一个分数,高分代表相似,低分代表不确定/不相似。许多时候我们也不需要直接训练两个网络,而是直接训练一个网络并在另一个网络上共享参数,即下图中的”share“所示的虚线。 在triplet loss中,我们期望相同的同类别样本的距离尽量小同时希望不同类别样本的距离尽量大,因此设计的损失函数如下: 其中 x i a x^a_i xia?是anchor即参考样本(正类), x i p x^p_i xip?是正样本, x i n x^n_i xin?是负样本, τ \tau τ就是所有成对的训练资料(在训练中可以取任一样本作为anchor,然后取另一和anchor同类的样本作为positive,最后取任意一个其他类的样本作为negative)。加入的 α \alpha α是一个极小的值用于正则化,防止网络”走捷径“:在最小化同类样本距离的同时却使得正样本和负样本的距离很接近零,即前一项损失几乎是零,第二项只要稍稍大于零就完成了训练目标。最后,网络输入两张图像(gt和ROI),输出他们之间的距离,根据这个距离进行判别即可。 对于回归器而言,其目的是输出当前帧跟踪框的位置。但是上面介绍的分类器都是运行在某个区域(ROI)上的,意思是我们要先确定用于提取特征和匹配的框,然后再运行分类器,然而一般可能的预测区域都是通过 5.4.2.2 中介绍的方法得到的。那么在这里,我们则是执行类似目标检测网络中two-stage的方法,候选区域生成作为“RPN”,后面再跟一个回归器用于对候选框的位置进行微调。不过对于判别式的跟踪而言,倘若回归器生成的bbox太过于贴合目标,有可能还会适得其反:不同于目标检测,目标跟踪中背景信息也是很重要的特征(特别是对于只提取上一帧 bbox中特征的方法 ),tracker应当很好地分离背景和前景,并且获取他们之间的差异,倘若完全没有提取到背景信息跟踪器将会很难区分下一帧的目标和背景。 5.4.4.4.端到端方法
当然DeepSORT也还是有很多问题,后续也提出了很多针对性的改进:
对于RM比赛,由于目标较为稀疏并且我们的相机采样率极高,甚至可以直接使用tracking by IOU的方法,直接使用两帧之间目标的IOU来判断当前检测框内的物体是否是同一物体。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 10:50:44- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |