"Incremental" 在 OpenCV 中进行人脸训练
"Incremental" face training in OpenCV
我一直在使用 OpenCV 进行人脸检测。我有几个我做过的项目 - 一个使用 pre-built 模型进行人脸检测。其他一些人做不同的事情,我收集自己的图像并训练自己的模型。当我做后者时,通常使用的数据集比你用于面部训练的数据集小得多。
在我的面部识别器上 - 我使用的许多常见面孔 没有 被正确检测到(由于面具、帽子、护目镜、眼镜等奇怪的属性)。所以我想重新训练我自己的模型 - 但是获取巨大的“库存”数据集,将我的图像添加到其中可能需要很长时间。
所以问题是:有没有办法从 现有 模型(XML 文件)和 运行 训练器开始会添加我的图片吗?
这叫做“迁移学习”。 Tenserflow(Keras)对此有很多支持。它基本上包括采用具有预先存在的权重的预先存在的模型,“冻结”某些层上的权重,在现有层中或下方添加新层,然后仅重新训练未冻结的层。
它不能用来轻松地“继续”学习,但可以用来在训练中添加额外的东西——对于更新的方面(比如潜在地,将蒙面人添加到已经训练好的未蒙面人模型中,正如我原来的问题)
我一直在使用 OpenCV 进行人脸检测。我有几个我做过的项目 - 一个使用 pre-built 模型进行人脸检测。其他一些人做不同的事情,我收集自己的图像并训练自己的模型。当我做后者时,通常使用的数据集比你用于面部训练的数据集小得多。
在我的面部识别器上 - 我使用的许多常见面孔 没有 被正确检测到(由于面具、帽子、护目镜、眼镜等奇怪的属性)。所以我想重新训练我自己的模型 - 但是获取巨大的“库存”数据集,将我的图像添加到其中可能需要很长时间。
所以问题是:有没有办法从 现有 模型(XML 文件)和 运行 训练器开始会添加我的图片吗?
这叫做“迁移学习”。 Tenserflow(Keras)对此有很多支持。它基本上包括采用具有预先存在的权重的预先存在的模型,“冻结”某些层上的权重,在现有层中或下方添加新层,然后仅重新训练未冻结的层。
它不能用来轻松地“继续”学习,但可以用来在训练中添加额外的东西——对于更新的方面(比如潜在地,将蒙面人添加到已经训练好的未蒙面人模型中,正如我原来的问题)