法的实现可以访问链接了解:
https://github.com/hyperparameters/tracking_via_colorization
简单地说,它可以理解为在整个视频序列中识别唯一的对象。要跟踪的对象通常称为目标对象,跟踪可以通过边界框或实例分割来完成,有两种类型的公共对象跟踪挑战。
1. 单目标跟踪:在整个视频序列中跟踪感兴趣的目标,例如VOT挑战
2. 多目标跟踪:在整个视频序列中跟踪多个感兴趣的目标。例如:MOT挑战
一些著名的经典的用于解决目标跟踪CV算法的是:
1. Mean shift
2. Optical flow
3. Kalman filters
其中最著名的一种多目标跟踪算法是SORT,是以卡尔曼滤波器为核心,并且非常成功的一种算法。
随着深度学习时代的到来,社会上出现了非常有创新性的研究并且深度学习方法成功地胜过了传统的CV方法来应对公共跟踪挑战。尽管在公共挑战方面取得了巨大成功但深度学习仍在努力为现实世界中的问题陈述提供通用的解决方案。
在训练深度CNN模型时,我们面临的主要挑战之一是训练数据。
训练数据:深度学习方法需要大量的数据,这几乎每次都会成为一个瓶颈。此外,像多目标跟踪这样的任务很难注释,而且这个过程变得不切实际而且成本高昂。
深度模型数据永远不嫌多
我们都知道有监督和非监督学习技术。这是一种被称为自监督学习的新型学习方式。在这些类型的学习中,我们试着利用数据中已经存在的信息,而不是任何外部标签,或者有时我们说模型是自己学习的。实际上,我们所做的就是训练CNN模型去完成一些其他的任务,间接地帮助我们实现我们的目标,这个模型自我监督。这些任务被称为“代理任务”或“借口任务”。
代理任务的示例如下:
CNN模型学习从灰度图像预测颜色。(来源:https://arxiv.org/abs/1603.08511)
从图像中提取补丁并将其打乱。模型学习如何解开拼图并按照正确 的顺序排列,如图3所示。(来源:https://arxiv.org/abs/1603.09246)
该模型学习在视频序列中对打乱的帧进行排序。[来源:https://arxiv.org/abs/1708.01246]
许多这样的任务可以用作计算机视觉问题的代理任务。这种训练的一个主要好处是训练不需要手动注释数据,并且适合解决生活中实际的用例。
我们已经看到了并了解了什么是自监督模型,您一定猜到了我们将使用着色作为我们的代理任务的名称。
通过给视频着色来实现跟踪
我们使用大量未标记视频学习模型的视觉跟踪无需人工监督。
arxiv.org(https://arxiv.org/abs/1806.09594)
简介
着色是代理任务或借口任务,目标跟踪是主要任务或下游任务。采用大规模的无标记视频对模型进行训练,不需要人工进行任何单一像素的标注。该模型利用视频的时间相干性对灰度视频进行着色。这看起来可能有点混乱,但我会慢慢给大家讲明白。
模型将如何学习跟踪
我们将取两个帧,一个目标帧(时刻t),一个参考帧(时刻t-1),并通过模型。该模型期望通过对参考帧颜色的先验知识来预测目标帧的颜色。通过这种方式,模型内部学会了指向正确的区域,以便从参考框架复制颜色,如图所示。这种指向机制可以用作推理期间的跟踪机制,我们将很快看到如何做到这一点。
模型接收一个彩色帧和一个灰度视频作为输入,并预测下一帧的颜色。模型学会从参考系复制颜色,这使得跟踪机制可以在没有人类监督的情况下学习。[来源:https://ai.googleblog.com/2018/06/self-supervised-tracking-via-video.html]
我们不复制网络中的颜色,而是训练我们的CNN网络学习目标帧的像素和参考帧的像素之间的相似度(相似度是灰度像素之间),然后线性组合时使用此相似度矩阵参考帧中的真实颜色会给出预测的颜色。从数学上讲,设C?为参考帧中每个像素i的真实颜色,C?为目标帧中每个像素j的真实颜色。
[资源链接:https://arxiv.org/abs/1806.09594]
公式1:预测颜色与参考颜色的线性组合
无论是图像、参考帧还是目标帧都经过模型学习后对每个像素进行了低层次的嵌入,这里f?是像素i在参考帧中的嵌入,类似地,f是像素j在目标帧中的嵌入。然后,计算相似度矩阵:
公式2:用softmax归一化的内积相似度
相似矩阵中的每一行表示参考帧的所有像素i和目标帧的像素j之间的相似性,因此为了使总权重为1,我们对每一行应用softmax。
Lets look an example with dimension to make it clear,we try to find a similarity matrix of 1 pixel from target frame.An illustration of this example is shown below.Consider reference image and target image, size (5, 5)=> (25,1)for each pixel, cnn gives embedding of size (64, 1), embedding for reference frame, size (64, 25), embedding for target frame, size (64, 25), embedding for 3rd pixel in target frame, size (64, 1)Similarity Matrix, between reference frame and target pixel, j=2=softmax , size (25, 64) (64, 1)=> (25,1)=> (5, 5)we get a similarity between all the ref pixels and a target pixel at j=2.Colorization, To copy the color (here, colours are not RGB but quantized colour of with 1 channel) from reference frame,, Colors of reference frame size (5, 5)=> (25, 1), Similarity matrix, size (5, 5)=> (1, 25)Predicted color at j=2, , size (1, 25) (25, 1)=> (1, 1)From the similarity matrix in below figure, we can see reference color at i=1 is dominant(0.46), thus we have a color copied for target, j=2 from reference, i=1PS:1. ? denotes transpose2. matrix indices starts from 0
(a)为2帧大小(5,5),(b)为参考帧嵌入与目标像素在j=2处嵌入的内积,(c) softmax后的相似度矩阵,(d)相似度矩阵与参考帧真颜色的线性组合[来源:https://github.com/hyperparameters/tracking_via_colorization]
同样,对于目标帧中的每个目标像素((5,5)=> 25个像素),我们将会有一个相似矩阵的大小(5,5),即大小为(5,5,25)的完整相似度矩阵A??=(25,25)。
在实现中,我们将使用(256 x 256)图像扩展相同的概念。
图像量化
第一行显示原始帧,第二行显示来自实验室空间的ab颜色通道。第三行将颜色空间量化到离散的容器中,并打乱颜色,使效果更加明显。[来源:https://arxiv.org/abs/1806.09594]
颜色是空间频率偏低,所以我们可以处理低分辨率的帧。我们不需要C(255,3)颜色组合,所以我们创建了16个聚类并将颜色空间量化为这些聚类。现在我们只有16种独特的颜色簇(见上图第3栏)。聚类是用k-均值完成的。16个群集会有一些颜色信息的丢失,但足以识别物体。我们可以增加聚类的数目来提高着色的精度,但代价是增加计算量。
[来源:https://arxiv.org/abs/2002.07793]
为了将图像量化成簇,我们将使用LAB颜色空间的AB通道而不是RGB颜色空间通道。上面的图显示了RGB和LAB通道间的相关性,从图中我们可以得出结论
RGB往往比LAB更具相关性。
LAB将强制模型学习不变性,它将强制其学习更强大的表示形式,而不是依赖于本地颜色信息。
可以使用sklearn的KMeans软件包进行聚类。
这个类将用于制作颜色的簇,我们将把它存储为一个pickle。
注意:我使用pytorch来进行实现,它遵循(N, C, H, W)格式。在处理矩阵重塑时要记住这一点。如果你对形状有任何疑问,请随时与我们联系。
该模型从参考帧中学习为视频帧着色。[来源:https://ai.googleblog.com/2018/06/self-supervised-tracking-via-video.html]
输入
该模型的输入是四个灰度视频帧,其下采样为256×256。三个参考帧和一个目标帧。
首先,我们将所有的训练视频压缩到6fps。然后预处理框架以创建两个不同的集合。一个用于CNN模型,另一个用于着色任务。
- Video fps is reduced to 6 fpsSET 1 - for CNN Model- Down sampled to 256 x 256- Normalise to have intensities between [-1, 1]SET 2 - for Colourization- Convert to LAB colour space- Downsample to 32 x 32- Quantize in 16 clusters using k-means- Create one-hot vector corresponding to the nearest cluster centroid
所用的主干是ResNet-18,因此其结果与其他方法相当。ResNet-18的最后一层被更新为32 x 32 x 256的尺寸输出。ResNet-18的输出随后被传送到3D-Conv网络,最终输出为32 x 32 x 64。(下面的代码块显示了从ResNet-18网络获取输入的3D网络)
训练可分为以下3个步骤:
1. 网络传递
我们将使用SET 1的预处理帧,即通过网络传递大小为(256 x 256)的4个灰度帧,以获得具有64个通道的(32 x 32)空间图。对于(32 x 32)图像的每个像素,这可以解释为64维嵌入。因此,我们有四个这样的像素级嵌入,三个用于参考图像,一个用于目标图像 。
2. 相似度矩阵
利用这五个嵌入,我们找到了参考帧和目标帧之间的相似矩阵。对于目标帧中的像素我们将获得一个相似度值,其中所有三个参考帧中的所有像素均通过softmax归一化为1。
3. Colourization着色处理
我们将使用SET 2的预处理帧,即将四个降采样为(32 x 32)并量化的帧用于着色。将三个参考帧与相似度矩阵相结合,得到预测的量化帧。我们发现了具有预测颜色的交叉熵损失,(记住,我们量化帧到16个聚类,现在我们有16个类别。我们发现在这些颜色上有多类交叉熵损失。
跟踪预测的例子[来源:https://ai.googleblog.com/2018/06/self-supervised-tracking-via-video.html]
在学习了着色的任务后,我们有了一个模型,可以计算一对目标框架和参考框架的相似矩阵a??。对于跟踪的实际任务,我们利用了标签空间中模型是非参数的这一特性。我们简单地重复使用等式1来传播,但不是传播颜色,而是传播类别的分布。对于第一帧,我们有真实框掩码,我们将所有实例掩码布置为一独热矢量c?(这类似于训练期间使用的量化颜色的一独热矢量)。将c?与我们的相似性矩阵A相结合,以找到掩码的新位置,但请记住,随后几帧中的c?预测将变得很柔和,表明模型的置信度。为了做出艰难的决定,我们可以简单地选择最自信的那一类。推理算法为:
失效模式
让我们来讨论一下,当模型在某些场景中趋于失败时,这主要是着色失败的情况,这意味着着色与跟踪有很高的相关性。
在以下情况下会发现一些故障:
融界2023年12月30日消息,据国家知识产权局公告,上海哔哩哔哩科技有限公司申请一项名为“灰度处理方法、系统、计算设备及存储介质“,公开号CN117312716A,申请日期为2023年10月。
专利摘要显示,本申请实施例公开了一种灰度处理方法、系统、计算设备及存储介质,其中,该方法包括:获取Web页面灰度发布请求对应的结构化数据;根据结构化数据,生成Web页面对应的HTML文件;将Web页面对应的HTML文件推送至静态文件服务器,由静态文件服务器将HTML文件提供给用户端,以供用户端根据HTML文件进行灰度计算,确定并渲染待展现的HTML内容。本申请在不变动现有静态文件服务器架构的前提下,依据所生成的HTML文件,便捷地实现对静态Web页面的灰度发布能力,实现方式简单,无需添加灰度处理模块,有效地降低了灰度发布能力的开发和运维成本,而且有效减少了对静态文件服务器的影响,优化了静态文件服务器下的灰度处理方式。
本文源自金融界
每一个特定或者特殊的日子里,几乎所有的网站都变成了灰色,那么这种效果是怎么实现的呢?
今天就来简单的实现一下这样的效果。
添加以下全局CSS样式,可以实现此效果:
代码一:
html {
-webkit-filter: grayscale(100%);filter:progid:DXImageTransform.Microsoft.BasicImage(graysale=1);
}
<!-- 可以是整个网站变成灰色的 -->
实现网页颜色变灰这个效果,非常简单:
filter: grayscale(100%);
这样一段代码即可实现,放在html和body的css属性里即可实现。
意思是修改所有的颜色为黑白 (100% 灰度):
灰色网站会加入这段代码,你可以按F12,把这段源码删除,即可变成彩色
代码二:
html {
filter:progidXImageTransform.Microsoft.BasicImage(grayscale=1);
}
使用方法:这段代码可以变网页为黑白,将代码加到CSS最顶端就可以实现素装。建议全国站长动起来。为在地震中遇难的同胞哀悼。
如果网站没有使用CSS,可以在网页/模板的HTML代码<head>和</head> 之间插入:
<style>
html{
filter:progidXImageTransform.Microsoft.BasicImage(grayscale=1);
}
</style>
有一些站长的网站可能使用这个css 不能生效,是因为网站没有使用最新的网页标准协议:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
请将网页最头部的<html>替换为以上代码。
有一些网站FLASH动画的颜色不能被CSS滤镜控制,可以在FLASH代码的<object …>和</object>之间插入:
<param value="false" name="menu"/>
<param value="opaque" name="wmode"/>
最简单的把页面变成灰色的代码是在head 之间加
<style type="text/css">
html {
FILTER: gray
}
</style>
html{
filter: grayscale(100%);
-webkit-filter: grayscale(100%);
-moz-filter: grayscale(100%);
-ms-filter: grayscale(100%);
-o-filter: grayscale(100%);
filter: url("data:image/svg+xml;utf8,#grayscale");
filter:progid:DXImageTransform.Microsoft.BasicImage(grayscale=1);
-webkit-filter: grayscale(1);
}
总结:
以上几种代码(方法),都是通过CSS的滤镜来控制页面的显示而已,唯一不同的就CSS代码及调用的方式。在css的修饰时还有权重问题,所以有时候css代码不生效的时候可以考虑一下代码的权重问题。
欢迎关注第一山,今后将有更多前端开发技术与大家共同交流学习。
*请认真填写需求信息,我们会在24小时内与您取得联系。