Qing

Results 394 comments of Qing

@zzhanq 把正则化的相关内容去掉,默认的 paper_cnn.py 里面没有加 regularization_loss

> 感谢您的回答!现在我已可以跑通整个模型结构,是更改了fpn的输入尺寸和resnet的4个layer输出尺寸相同即可,然后还有一点疑问,就是slimpruner这个工具的参数移植在哪呀,而且我部分修改的网络从哪里进行筛选需要转移的参数,我知道需要大模型的剪枝部分的参数移植才能恢复较高的精度。 - 「4」 里面的 restored_model:是已经加载了大模型参数的部分网络,例如一个 backbone 的实例(nn.Module类) - 执行完 `pruner.run(prune_ratio=0.75)` 以后 `pruner.pruned_model` 即为加载了大模型参数,并剪枝了的模型,可以用 torch.save 保存 - 恢复的时候也只恢复部分的网络,参考截图里的「5」

是的,4 里面的 pruned_model 直接finetune,然后保存到你喜欢的地方。5 是加载 finetune 好的剪枝模型的步骤,pruned_state_dict 需要你自己加载 4 里面 finetune 好的参数

> > 是的,4 里面的 pruned_model 直接finetune,然后保存到你喜欢的地方。5 是加载 finetune 好的剪枝模型的步骤,pruned_state_dict 需要你自己加载 4 里面 finetune 好的参数 > > 所以就是其实步骤4就已经够了,5只是用来做迭代剪枝的创建模型的方式是吧。其实就是怕参数移植问题,我做了一些尺寸的修改,具体你可以看一下我回复dy1998的,我也是直接加载的原稀疏大模型,应该没问题吧。因为我这边精度恢复效果不太好,所以比较担心这点 如果只剪 backbone 的话,稀疏化训练的正则也应该只应用到 backbone 的参数上,这里可能要改下。你是 finetune 了多少步呢?我之前是训 DBNet,语义分割作文本检测,0.5 的剪枝率(backbone+fpn+head都剪了)基本是无损的

> > > > 是的,4 里面的 pruned_model 直接finetune,然后保存到你喜欢的地方。5 是加载 finetune 好的剪枝模型的步骤,pruned_state_dict 需要你自己加载 4 里面 finetune 好的参数 > > > > 所以就是其实步骤4就已经够了,5只是用来做迭代剪枝的创建模型的方式是吧。其实就是怕参数移植问题,我做了一些尺寸的修改,具体你可以看一下我回复dy1998的,我也是直接加载的原稀疏大模型,应该没问题吧。因为我这边精度恢复效果不太好,所以比较担心这点 > > > > > > 如果只剪 backbone 的话,稀疏化训练的正则也应该只应用到...

detectron2。业务上用的话其实剪枝前可以直接试试mobilenet v3,可能就能满足需求了 。。

部署有两种选择 1. 剪枝 fine tune 完的小模型保存成 onnx,torchscript 或者 tensorrt 这种既保存网络结构也保存网络参数模型格式 2. 像你说的「创建大模型然后赋值了保存的小模型的参数」 - 创建大模型的时候是不需要原先模型的参数的,只要build好网络结构 - 中间 pruner.apply_pruning_result 这一步会把大模型的参数剪掉,这样 pruner.pruned_model.load_state_dict 就能 load 小模型的参数

apply_pruning_result 不是置零,是真的修改了conv 的权重 https://github.com/Sanster/pytorch-network-slimming/blob/e3fd71d3d2d21b00acc03249cc83f15c7161a077/src/pns/functional.py#L62

这样做目的是为了什么呢?据我所知没有,只能转 onnx,torchscript 这种。

可以的,要改 build 网络的代码,把每层 Conv/BN 的 channel 数传进去,类似原作者的 pytorch 实现 [link](https://github.com/Eric-mingjie/network-slimming/blob/master/models/vgg.py#L17) ```python defaultcfg = { 11 : [64, 'M', 128, 'M', 256, 256, 'M', 512, 512, 'M', 512, 512], 13 :...