英文:
Comparing the Weights and Biases of several different Yolov8s models trained through transfer learning
问题
I have 3 different yolov8s models which I would like to assess:
-
使用普通的
model.train()
命令训练的Yolov8s模型。 -
使用冻结骨干部分训练的Yolo8vs模型。
-
所有层都被冻结后训练的Yolov8s模型。
我正在使用回调函数来冻结权重,如下所示:
def freeze_layer(trainer):
model = trainer.model
num_freeze = 10
print(f"冻结{num_freeze}层")
freeze = [f'model.{x}.' for x in range(num_freeze)] # 要冻结的层
for k, v in model.named_parameters():
v.requires_grad = True # 训练所有层
if any(x in k for x in freeze):
print(f'冻结{k}')
v.requires_grad = False
print(f"{num_freeze}层已冻结")
if __name__ == "__main__":
model = YOLO(yolov8s.pt)
model.add_callback("on_train_start", freeze_layer)
model.train(
data="coco128.yaml",
epochs=300,
imgsz=640
)
我想要能够评估这3个神经网络之间的权重和偏差的差异。我想要查看迁移学习后哪些神经元已经"死亡",并评估所有三个神经网络之间的主要差异。有没有标准解决方案可以用来获得这种对神经网络的洞察?
我已经比较了yolo提供的标准训练指标,如MAP和损失,一切都符合预期。冻结的层数越多,性能就越差。当我冻结整个网络时,性能比其他两个实例要差得多。
当涉及到比较相同的网络架构但训练方式不同时,我几乎不知道从哪里开始。
非常感谢任何帮助。
英文:
I have 3 different yolov8s models which I would like to assess:
-
Yolov8s trained with the normal model.train() command
-
Yolo8vs model trained with a frozen backbone
-
Yolov8s model trained with all layers frozen
I am using a callback function to freeze the weights, see below:
def freeze_layer(trainer):
model = trainer.model
num_freeze = 10
print(f"Freezing {num_freeze} layers")
freeze = [f'model.{x}.' for x in range(num_freeze)] # layers to freeze
for k, v in model.named_parameters():
v.requires_grad = True # train all layers
if any(x in k for x in freeze):
print(f'freezing {k}')
v.requires_grad = False
print(f"{num_freeze} layers are freezed.")
if __name__ == "__main__":
model = YOLO(yolov8s.pt)
model.add_callback("on_train_start", freeze_layer)
model.train(
data="coco128.yaml",
epochs=300,
imgsz=640
)
I want to be able to assess the differences in the weights and biases between these 3 neural networks. I want to see which neurons are dead after transfer learning and assess the major differences between all three neural networks. Are there any standard solutions to use to gain this kind of insight into a neural network?
I have compared the standard training metrics that yolo provides like MAP and Loss and everything is as expected. The more layers you freeze the worse performce gets. And when I freeze the whole network the performance is much worse than the other 2 instances.
I barely know where to begin when it comes to comparing the same network architetchure but just trained differently.
Any help is much appreciated.
答案1
得分: 1
YOLO架构相当复杂(取决于您使用的大小),比较/匹配特定层中间表示的权重可能相当不直观。一种方法是在每个层上可视化中间激活。您还可以绘制每个层的权重分布。或计算每个模型权重之间的范数。
英文:
YOLO architecture is quite complicated (depending on which size you're using), and it can be quite counter-intuitive to compare / match the weights of intermediate representations in a specific layer. One approach would be to Visualize the intermediate activations at each layer. You can also plot the distribution of the weights for each layer. Or calculating the norm between the weights of each model.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论