
您好,我叫Roman Lapin,我是UNN通用与应用物理高级学院的二年级学生。 今年,我设法通过了甄选,并参加了下诺夫哥罗德的英特尔暑期学校的工作。 我的任务是使用Tensorflow库确定汽车的颜色,我与我的指导者和ICV团队Alexei Sidnev的工程师一起工作。
这就是我得到的。
此任务涉及多个方面:
- 与KDPV一样,汽车可以涂成几种颜色。 例如,在其中一个数据集中,我们有一辆伪装的汽车。
- 根据照明设备和道路上所拍照片的相机,相同颜色的汽车看起来会大不相同。 “照亮”的汽车可能有很小一部分对应于汽车的“真实”颜色。
汽车颜色检测
汽车的颜色是一种非常奇怪的物质。 制造商对生产的汽车颜色有清楚的了解,例如:幻影,冰,黑珍珠,冥王星,石灰,rypto,吴哥,红玉,白金,蓝。 交警对汽车的颜色有相当保守且非常有限的意见。 每个人对颜色都有主观的感觉(您可以回想一下关于衣服颜色的流行故事)。 因此,我们决定标记如下。
在每幅图像上,标记了汽车周围的矩形的顶点的坐标(以下我将使用英文版本-
汽车边界框 ),并且在它们的内部是最能描述车辆
颜色的区域(
颜色框 )。 后者的数量等于汽车的颜色(
n x
色箱 -n色汽车)。
在下文中,由于可能在公共领域发布照片,所以车号变得模糊。
汽车数据集标记将来,我们将分别使用8和810/81两种颜色空间-RGB和LAB。 为了比较不同方法的结果,我们在RGB中使用了8个类来确定颜色,这些颜色是通过将BGR立方体分成8个相等的小立方体而获得的。 它们可以轻松地称为通用名称:白色,黑色,红色,绿色,蓝色,粉红色,黄色,青色。 为了评估任何方法的误差,我们已经使用了LAB颜色空间,在其中确定了颜色之间的
距离 。
有两种通过
颜色框确定颜色的直观方法:中色或中值色。 但是在
颜色框中,有各种颜色的像素,因此我想知道这两种方法的精确度。
对于数据集中每台机器的每个
颜色框的 8种RGB颜色,我们确定了平均像素颜色和中间值,结果显示在下图中。 原则上可以在行中标记“真”颜色(即,在列中分别定义为平均值或中位数的颜色)。 当将一台机器添加到表中时,每种颜色的像素数均被归一化为它们的数量,即,添加到该行的所有值的总和等于1。
研究确定机器颜色作为像素平均颜色'abox的准确性。 平均准确度: 75%研究确定机器颜色作为颜色框像素的中间颜色的准确性。 平均准确度: 76%如您所见,这两种方法之间没有特别的区别,这表明标记良好。 将来,我们使用中位数,因为它显示了最好的结果。
汽车的颜色将根据
汽车边界框内的面积确定。
您需要网络吗?
问题是不可避免的:要解决一个直观上简单的任务,真的需要神经网络吗? 也许您可以采用相同的方式在
汽车边框中获取像素的中值或中间色? 下图显示了此方法的结果。 如稍后所示,它比使用神经网络的方法差。
LAB空间中具有L2误差值的汽车份额在定义为平均值的颜色框颜色与该误差值的汽车边界框颜色之间的分布根据该误差值在定义为中位数的颜色颜色框和汽车边界框颜色之间的LAB空间中具有L2误差值的汽车份额的分布任务方式的描述
在我们的工作中,我们使用Resnet-10架构突出显示功能。 为了解决一个标签和多标签问题
,分别选择了
softmax和
Sigmoid的激活函数。
一个重要的问题是我们可以比较结果的度量标准的选择。 对于一个标签任务,您可以选择与
最大响应相对应的类别。 但是,这种解决方案显然在多标签/多色机器上不起作用,因为argmax会产生一种最可能的颜色。 指标
L1取决于类别的数量,因此,也不能用于比较所有结果。 因此,决定将
ROC曲线下的面积度量(ROC
AUC-曲线下的面积)作为普遍公认的指标。
我们在两个颜色空间中工作。 第一个是标准
RGB ,在其中我们选择了8个类别:我们将RGB立方体分为8个相同的子立方体:白色,黑色,红色,绿色,蓝色,粉红色,黄色,青色。 这样的分区非常粗糙,但是很简单。
将RGB颜色空间分成8个区域此外,我们对LAB色彩空间进行了研究,该色彩空间使用810类进行了划分。 为什么这么多? LAB是在美国科学家
David MacAdam确定存在人眼不可见的颜色区域(
MacAdam椭圆形 )之后引入的。 建立LAB是为了使其中的这些椭圆具有圆形外观(在恒定的L-亮度部分)。
MacAdam椭圆和LAB色彩空间( 来源 )总共有81个圆,这些圆相对于参数L(从0到100)执行了步骤10,得到810个类别。 此外,我们进行了一个常数为L且相应地为81类的实验。
RGB和LAB
对于8类问题和RGB空间,获得了以下结果:
激活功能 | 多标签任务 | ROC AUC |
---|
软最大 | -- | 0.97 |
乙状结肠 | ✓ | 0.88 |
适用于8类问题的机器的颜色识别结果表似乎多标签任务的结果已经相当不错。 为了验证这一假设,我们构造了一个误差矩阵,以0.55作为概率的阈值。 即 如果相应颜色的概率超过该值,则我们假定机器以该颜色涂漆。 尽管将阈值选择得足够低,但可以看出在确定汽车颜色并得出结论时存在典型错误。
八类问题汽车的颜色识别结果表只需查看与绿色或粉红色对应的线条,即可确保模型不完美。 关于为什么以较大的度量值会获得如此奇怪的不成功结果的问题,我们将返回并立即指出:仅考虑8个类别时,大量的颜色分为“白色”和“黑色”类别,因此得出这样的结果。
因此,我们将进入LAB颜色空间并在那里进行研究。
激活功能 | 多标签任务 | ROC AUC |
---|
软最大 | -- | 0.915 |
乙状结肠 | ✓ | 0.846 |
机器颜色识别结果表中的810类问题结果减少了,这是合乎逻辑的,因为类的数量增加了两个数量级。 以S形结果为起点,我们尝试改进模型。
实验室:不同权重的实验
在此之前,所有实验均以损失函数(
loss )中的单位权重进行:
GT是地面真理,W是重量。
您可以
在 LAB颜色空间中输入
距离 。 假设我们在GT中只有一个单位。 然后,它对应于LAB颜色空间中的一些长方体。 该平行六面体(更确切地说,其中心)与所有其他平行六面体(同样,其中心)之间的距离也不同。 根据此距离,您可以尝试以下比例尺:
a)用零代替GT中的一个单位,并且当它离开它时-重量增加;
b)相反,代替GT中的一个单位,取而代之的是重量的下降;
c)选项a)加一个振幅为½的小高斯加法器代替GT中的一个单位;
d)选项a)加上一个振幅为1的小高斯加法器代替GT中的一个单位;
e)选项b),在GT中距统一的最大距离处添加少量添加剂。
我们进行实验的比例尺的最新版本是三重高斯,即三个正态分布,其中心位于GT中的单位处,并且距它们的距离最大。
三个正态分布以GT中的单位为中心,并且与它们之间的距离最大必须对此进行更详细的说明。 您可以选择两个距离最远的平行六面体,并因此选择类,并与原始对象进行比较。 对于与远一个相对应的类别,将分布幅度设置为等于0.8,对于第二个,其分布幅度要小m倍,其中m是从源到远程的距离与源与附近之间的距离的比值。
结果显示在表中。 由于在选项a)的比例尺中权重为零-仅对于GT中的单位,它们的结果甚至比起点还差,因为该网络未考虑成功的颜色定义,因此学习效果更差。 权重b)和e)的变化实际上是一致的,因此它们的结果是一致的。 权重f)-三重高斯的变化形式显示了与初始结果相比最大的百分比增长。
激活功能 | 班数 | 重量类型 | ROC AUC |
---|
乙状结肠 | 810 | a) | 0.844 |
b),e) | 0.848 |
c) | 0.888 |
d) | 0.879 |
f) | 0.909 |
不同重量选项的810类机器的颜色识别结果实验室:尝试新标签
因此,我们进行了不同重量
损失的实验。 然后,我们决定尝试将权重保留为一,并更改标签,这些标签将转移到损失函数中,并用于优化网络。 如果在此之前标签与GT相符,现在他们决定再次使用高斯分布,其中心位于GT的单位位置:
该决定的动机如下。 事实是,使用普通标签,数据集中的所有汽车都属于固定数量的类别,小于810,因此网络学会了确定仅这些类别的汽车的颜色。 使用新标签,非零值将归入所有类别,并且我们可以预期,确定汽车颜色的准确性将会提高。 对于上述高斯分布,我们用两个西格玛(标准差)进行了实验:41.9和20.9。 为什么这样 第一个sigma的选择如下:选取类(28)之间的最小距离,并根据在与GT'noye相邻的类中的分布减小两次的条件确定sigma。 第二个sigma只是第一个sigma的两倍。
具有损失的不同标签的类的训练数据集汽车的分布的确,如表所示,使用这种技巧可以进一步改善结果。 结果,确定的精度达到0.955!
激活功能 | 班数 | 标签类型 | 重量类型 | ROC AUC |
---|
乙状结肠 | 810 | 平常 | 一个 | 0.846 |
平常 | 三高斯 | 0.909 |
新,σ1 | 三高斯 | 0.955 |
新,σ2 | 0.946 |
810类问题机器的颜色识别结果:带有普通标签和单位重量,带有三重高斯形式的普通标签和重量,带有新标签和单位重量实验室:81
如果我们谈论失败的实验,则必须提及尝试训练具有81个类和一个常数参数L的网络的过程。我们在之前的实验中注意到,亮度是由网络非常精确地确定的,因此我们决定只训练参数a和b(因此在LAB中称为其他两个坐标)。 不幸的是,尽管网络能够完美地在飞机上进行训练,从而在度量方面显示出更大的价值,但在网络的输出端将参数L设置为
汽车边界框的平均值的想法崩溃了,因此真实色彩也因此定义了非常不同的想法。
不使用神经网络与解决问题的比较
现在,让我们回到最开始的地方,并在不使用神经网络的情况下,通过识别汽车的颜色来比较发生的情况。
结果如下图所示。 可以看出,峰值已经增加了3倍,并且真实颜色和特定颜色之间存在较大误差的汽车数量大大减少了。
带有L2误差值的汽车份额在LAB空间中定义为中间值的颜色边界框和该误差值的汽车边界框颜色之间的分布在LAB空间中具有L2误差值的汽车份额在神经网络输出的颜色与该误差值的汽车边界框的颜色之间的分布例子
以下是汽车颜色识别的示例。 首先是黑色机器(典型情况)被识别为黑色,并且在LAB空间中,真实颜色与特定颜色之间的距离(18.16)小于类别之间的最小距离(28)。 在第二张图中,网络不仅能够确定汽车是否被照亮(很有可能对应于白色类别中的一种),还能够确定汽车的真实颜色(银色)。 但是,下图所示的机器(也照亮了),未被网络检测为红色。 网络无法确定下图所示的汽车颜色,这是因为所有颜色的概率都太小。
在许多方面,任务是由于需要识别多色汽车。 最后一个图描绘了一个两色调的黑色和黄色汽车。 该网络最有可能识别黑色,这可能是由于该机器在训练数据集中占主导地位,并且具有相似的颜色,而接近真实值的黄色则进入了前3名。
ROC曲线:可视化和问题
因此,在输出处我们获得了相当高的度量结果。 下图显示了用于解决8类问题和810类问题的ROC曲线,以及不使用神经网络的解决方案。 可以看出结果与之前写出的结果略有不同。 之前的结果是使用TensorFlow获得的,下图是使用scikit-learn软件包获得的。
ROC曲线为解决问题提供了几种选择。 右边是左图的左上角您可以将任何固定数字用作阈值(例如,Tensorflow,当您将相应参数设置为50时,以相等的间隔从0到1接受相同数量的阈值),可以在网络的输出端使用这些值,也可以从底部限制它们以免考虑例如,大约为10
-4的值。 下图显示了后一种方法的结果。
ROC曲线,用于解决阈值10 -4的多个选项可以看出,与没有神经网络的问题相比,使用神经网络解决问题的所有曲线在特征上都更好(更高),但是您不能在第一个曲线中选择一个绝对最佳的曲线。 根据用户选择的阈值,不同的曲线将对应于该问题的不同最佳解决方案。 因此,一方面,我们找到了一种方法,可以使我们准确地确定机器的颜色并显示出较高的度量标准,另一方面,我们表明尚未达到极限,并且ROC曲线下的面积度量标准也有其缺点。
准备回答问题并听取评论中的评论。