近期在做一个从各个做人脸算法的厂家提取他们的特征值,然后将特征值下发到各个算法厂家的终端设备上以实现刷脸开门的需求功能。实现技术很简单,根据算法协议将采集到的照片传给各个厂家,换取特征,然后根据厂家的设备协议,将特征推送给终端设备。做的过程中对特征值产生了好奇心,于是学习了一下这块的概念。
特征是用来描述数据的可观测属性或特性的数值,可以是数值型、类别型或者其他类型的数据。在机器学习和数据挖掘任务中,特征用于表示数据样本的不同方面,以便让机器学习算法能够从中学习和推断模式。在图像处理中,特征工程是一个非常重要的步骤,用于从图像中提取有意义的特征。通过特征工程,可以将原始图像转换为更具表达能力和适用性的特征表示形式,以便于机器学习算法的处理和分析。目标是使这些特征能表征数据的本质特点,使基于这些特征建立的模型在未知数据上的性能,可以达到最优、最大限度地减少“垃圾进,垃圾出”。特征提取得越有效,意味着构建的模型性能越出色。特征工程主要包括特征构建(Feature Construction)、特征选择(Feature Selection)、特征提取(Feature Extraction)。
特征工程在图像处理中的作用是多方面的:
1、降低数据维度:图像数据通常具有高维度,通过特征工程可以从原始图像中提取出更紧凑的特征表示,降低数据维度,减少计算和存储的开销。
2、增强图像的表达能力:通过选择合适的特征提取方法,可以将图像中重要的、与目标任务相关的信息提取出来,提高图像的表达能力。
3、改善模型的性能:提取到的特征可以用于训练机器学习模型,帮助模型更好地理解和学习图像的特征,提高模型的性能和泛化能力。
4、适应不同任务需求:根据具体的图像处理任务,可以选择合适的特征提取方法,并进行适当的特征工程,以满足任务的需求。
在特征工程中,有许多常用的算法和库可以用于特征提取任务。以下是一些常见的算法和库:
1、OpenCV:OpenCV(Open Source Computer Vision Library)是一个广泛使用的计算机视觉库,提供了许多用于图像处理和特征提取的函数和工具。它支持各种传统特征提取方法,如颜色直方图、纹理特征、形状特征等。
2、Scikit-learn:Scikit-learn是一个常用的机器学习库,提供了许多特征提取和预处理方法。例如,可以使用Scikit-learn中的函数进行特征选择、特征变换(如标准化、归一化等)、降维(如主成分分析)等。
3、Keras和TensorFlow:Keras和TensorFlow是深度学习框架,提供了丰富的卷积神经网络(CNN)模型和函数,可以用于图像特征提取。通过这些框架,可以加载预训练的CNN模型,并从中提取中间层的特征表示。
4、PyTorch:PyTorch是另一个流行的深度学习框架,也支持图像特征提取任务。类似于Keras和TensorFlow,PyTorch提供了预训练的CNN模型和函数,方便进行特征提取。
5、Featuretools:Featuretools是一个用于自动特征工程的Python库。它可以根据数据中的关系和时间信息,自动构建新的特征。Featuretools能够识别实体、关系和时间索引,自动生成具有预测能力的特征。
6、Dlib:Dlib是一个功能强大的C++机器学习库,提供了用于计算机视觉和图像处理的工具和算法。它支持面部特征提取、物体检测、形状分析等任务。
这只是一小部分用于特征提取的算法和库,实际上还有很多其他可用的工具和方法,具体选择取决于任务的要求、数据类型和个人偏好。根据具体情况,可以选择适当的工具和方法进行特征提取。
在做特征提取的过程中,我们会发现每个厂家对图片提取特征的特征值不一样,这是由于他们使用不同的特征提取算法、不同的特征维度、不同的参数设置以及不同的数据预处理等因素造成的。这种差异可能是基于不同的研究或实际需求,或是出于专利或商业保密等原因选择不同的方法和参数。
个人感觉还是处于商业保密上的考虑,因为我们在做特征提取的时候,还负责为他们部署特征服务,他们的特征服务都是使用了各自的密钥做了加密和授权,防止被其他厂家获取。当然了这些不同厂家的特征是不会互通使用的,要不然核心技术就被暴露了。