tanluren / yolov3-channel-and-layer-pruning

yolov3 yolov4 channel and layer pruning, Knowledge Distillation 层剪枝,通道剪枝,知识蒸馏
Apache License 2.0
1.5k stars 446 forks source link

YOLO知识蒸馏损失函数设计 #98

Open ghang0 opened 4 years ago

ghang0 commented 4 years ago

你好,我最近在学习YOLO知识蒸馏算法,我想问下,你的代码里软目标损失计算时为什么除以了batch_size,在最后加上硬目标损失(这部分好像代码没有除以batch_size),而且最后的loss,又乘以了batch_size/64。这部分我看的有点蒙。 能给我解释一下吗? 1、loss_st = criterion_st(nn.functional.log_softmax(output_s/T, dim=1), nn.functional.softmax(output_t/T,dim=1)) (TT) / batch_size 2、loss += soft_target 3、loss *= batch_size / 64

chumingqian commented 4 years ago

我看了一下,也没有见他们蒸馏 示例在哪里, parser.add_argument('--t_cfg', type=str, default='', help='teacher model cfg file path for knowledge distillation') parser.add_argument('--t_weights', type=str, default='', help='teacher model weights')

tanluren commented 4 years ago

这里处理得是不够好,不过目的都是为了使损失规模限制在一定范围内,各项参数可以调整的,我写的未必是最优或者适合所有数据集

chumingqian commented 4 years ago

抱歉,只是好奇一下,还是再请问一下 你们的蒸馏 是否 是建立在 剪枝的基础上, 如果 没有剪枝的基础,再YOLOV3你们蒸馏是否会有效果

tanluren commented 4 years ago

不限于剪枝的,本质还是大模型指导小模型,只不过剪枝的模型本身结构相似,蒸馏效果更好