将自定义 类 添加到预训练数据集
Add custom classes to pre-trained data-set
我使用已经训练(预训练)的数据集使用 yolo+tensorflow 进行对象检测。
我的推理结果很好,但现在我想 "add" 一个新的 class 到预训练数据集。
预训练数据集中有 80 个 classes 如何添加我的自定义 classes 并使其总数达到 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
还有这些 blog1, blog2
如果您已经训练模型 80 classes 并且需要添加另一个 class,那么最好从之前保存的检查点开始重新训练模型。(网络架构应该针对 classes 的总数进行设计,因为在输出层你将拥有等于 classes 数量的神经元,如果不是这样你就不能添加其他class 到数据,因为网络还没有为它设计。)这将利用在以前的 classes 上完成的初始训练。您用于重新训练的数据现在应该包含所有 classes(包括所有以前的 class 和您要添加的新 classes)。它类似于从上次训练的检查点(在 80 classes 上)初始化权重,然后再次使用更多数据(包括所有 classes 80 + 你想要添加的更多数据)进行训练,允许反向传播所有层。
我使用已经训练(预训练)的数据集使用 yolo+tensorflow 进行对象检测。 我的推理结果很好,但现在我想 "add" 一个新的 class 到预训练数据集。 预训练数据集中有 80 个 classes 如何添加我的自定义 classes 并使其总数达到 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 还有这些 blog1, blog2
如果您已经训练模型 80 classes 并且需要添加另一个 class,那么最好从之前保存的检查点开始重新训练模型。(网络架构应该针对 classes 的总数进行设计,因为在输出层你将拥有等于 classes 数量的神经元,如果不是这样你就不能添加其他class 到数据,因为网络还没有为它设计。)这将利用在以前的 classes 上完成的初始训练。您用于重新训练的数据现在应该包含所有 classes(包括所有以前的 class 和您要添加的新 classes)。它类似于从上次训练的检查点(在 80 classes 上)初始化权重,然后再次使用更多数据(包括所有 classes 80 + 你想要添加的更多数据)进行训练,允许反向传播所有层。