SpursLipu / YOLOv3v4-ModelCompression-MultidatasetTraining-Multibackbone

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

Prune problem #30

Closed SISTMrL closed 4 years ago

SISTMrL commented 4 years ago

当我执行normal prune时,当执行到prune_utils.py 中函数prune_model_keep_size的next_conv = pruned_model.module_list[next_idx][0]语句时出现IndexError: index 0 is out of range的错误信息。 command:

  1. python train.py --data data/xray.data -pt --batch_size 2 --accumulate 1 --weights yolov3-result/yolov3/best.pt --cfg cfg/yolov3/yolov3.cfg -sr --s 0.001 --prune 0 --epochs 120
  2. python normal_prune.py --cfg cfg/yolov3/yolov3.cfg --data data/xray.data --weights yolov3-result/yolov3-prune/sr/best.pt --percent 0.5 请问下问题出现在哪里,诚盼回复,十分感谢!
SpursLipu commented 4 years ago

你调小剪植率试试,有可能是稀疏化程度不够,没法剪植这么多

SISTMrL commented 4 years ago

你好,我调试了代码,似乎是代码本身的问题。我用的repo是你大概一个月之前的repo,我查看了生成的网络结构,这里我列举的部分结构是从输入到第一个shortcut

Darknet( (module_list): ModuleList( (0): Sequential( (Conv2d): Conv2d(3, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False) (BatchNorm2d): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) (activation): LeakyReLU(negative_slope=0.1, inplace=True) ) (1): Sequential( (Conv2d): Conv2d(32, 64, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False) (BatchNorm2d): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) (activation): LeakyReLU(negative_slope=0.1, inplace=True) ) (2): Sequential( (Conv2d): Conv2d(64, 32, kernel_size=(1, 1), stride=(1, 1), bias=False) (BatchNorm2d): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) (activation): LeakyReLU(negative_slope=0.1, inplace=True) ) (3): Sequential( (Conv2d): Conv2d(32, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False) (BatchNorm2d): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) (activation): LeakyReLU(negative_slope=0.1, inplace=True) ) (4): Sequential()

其中index为4的是shortcut,我当时第一次跑的时候也注意到这个,但是没有在意。但是今天再次看你的repo,你进行 部分更新,发现你在shortcut实现中添加了类 weightedfeaturefusion来进行融合特征。

所以当代码执行到next_conv = pruned_model.module_list[next_idx][0]时,此时next_idx为4,所以pruned_model.module_list[next_idx]为Sequential(),所以再执行索引操作[0]时出现了错误。

所以我猜测在你原先一个多月前的repo版本里,是没有实现shortcut的feature fusion操作的。今天看了你更新的代码,我先再重新实验下。

问题描述有点长,不知这个bug出现的原因猜测是否正确,烦请你耐心阅读,诚盼回复,十分感谢!

SISTMrL commented 4 years ago

抱歉,有实现这个fusion和concat,这个问题可以关了,我再去试试剪纸操作