将自定义类添加到预先训练的数据集



我使用已经训练(预训练(的数据集使用yolo+tensorflow进行对象检测。 我的推理结果很棒,但现在我想将一个新类"添加"到预先训练的数据集中。 预训练数据集中有 80 个类,如何添加我的自定义类并使其总共 81 或 82 个? 推理 git-hub "https://github.com/thtrieu/darkflow"。

在迁移学习的情况下,使用对著名数据集(如"Imagenet","fashion-mnist"等(的预训练权重。这些数据集定义了类别和标签的数量,这些类别和标签可能与我们的数据集相同,也可能不同。最佳做法是在预训练模型输出的输出层上方添加层。例如在 keras 中:

from tensorflow.keras.applications import mobilenet
from tensorflow.keras.layers import Dense, Flatten
output = mobilenet(include_top=False)
flatten = Flatten()(output)
predictions = Dense(number_of_classes, activation='softmax')(layer)

在这种情况下,您需要使用数据集训练(或更好地称之为微调(模型。mobilenet 网络将使用预训练的权重,最后一层将仅根据您的数据集使用您定义的类数进行训练。

您还可以使用:

from tensorflow.keras.applications import mobilenet
preds = mobilenet(include_top=Flase, classes=number_of_classes, weights='imagenet')

有关更多信息,您可以参考: Keras-Applications 和这些博客1,博客2

如果您已经为 80 个类训练了模型,并且需要添加另一个类,那么最好从以前保存的检查点开始重新训练模型。网络架构应该设计为类的总数,因为在输出层,你将拥有等于类数的神经元,如果不是这种情况,你不能向数据添加其他类,因为网络不是为它设计的。这将利用以前课程的初始培训。用于重新训练的数据现在应包含所有类(包括所有以前的类和要添加的新类(。这类似于初始化上次训练的检查点(在 80 个类上(的权重,然后再次使用更多数据(包括要添加的所有类 80 + 更多(进行训练,允许在所有层中进行反向传播。

相关内容

  • 没有找到相关文章

最新更新