SpursLipu / YOLOv3v4-ModelCompression-MultidatasetTraining-Multibackbone

YOLO ModelCompression MultidatasetTraining
GNU General Public License v3.0
445 stars 136 forks source link

知识蒸馏两种网络输出的维度不一致 #25

Closed SISTMrL closed 3 years ago

SISTMrL commented 4 years ago

你好,我在进行知识蒸馏时将训练好的yolov3中的best.pt作为teacher model, 将yolov3-tiny训练好的last.pt作为student model,当开始计算下面这条语句时发生错误: loss_st = criterion_st(nn.functional.log_softmax(output_s / T, dim=1), nn.functional.softmax(output_t / T, dim=1)) (T T) / batch_size 错误信息:RuntimeError: The size of tensor a (45486) must match the size of tensor b (10830) at non-singleton dimension 0 我猜测是由于tiny只有两个yololayer,yolov3有三个yololayer。 知识蒸馏的指令如下:python train.py --data cfg/xray.data --batch_size 2 --KDstr 1 --weights weights/last.pt --cfg cfg/yolov3tiny/yolov3-tiny.cfg --img_size 608 --epochs 80 --quantized 1 --qlayers 72 --t_cfg cfg/yolov3/yolov3.cfg --t_weights yolov3-result/yolov3/best.pt

请问该如何解决这个问题?诚盼回复,十分感谢!

SpursLipu commented 4 years ago

是的 确实是这个问题,我一般都是使用剪植前的模型和剪植后的模型做知识蒸馏训练

SISTMrL commented 4 years ago

我将yolotiny的网络给修改了,加了卷积和一个yololayer,然后重新train from strach,在对得到的best.pt做蒸馏,map上升了0.098,请问这样可以不,map从0.654->0.752

SISTMrL commented 4 years ago

你好,做完知识蒸馏后,一般map相对于原来的提高多少才算是效果较为不错的

SpursLipu commented 4 years ago

一般增加特别多还是要以实验为准,你可以对比以下蒸馏的结果和直接finetuning的结果