-
Notifications
You must be signed in to change notification settings - Fork 371
Description
pruning on yolov12,have this problem:
Traceback (most recent call last):
File "E:\code\Python\big thesis\yolov12-main\ultralytics\yolov12_pruning.py", line 418, in
prune(args)
File "E:\code\Python\big thesis\yolov12-main\ultralytics\yolov12_pruning.py", line 346, in prune
pruner = tp.pruner.BNScalePruner(
^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\anaconda3\envs\yolov12\Lib\site-packages\torch_pruning\pruner\algorithms\batchnorm_scale_pruner.py", line 85, in init
super(BNScalePruner, self).init(
File "D:\anaconda3\envs\yolov12\Lib\site-packages\torch_pruning\pruner\algorithms\base_pruner.py", line 253, in init
for group in self.DG.get_all_groups(ignored_layers=self.ignored_layers, root_module_types=self.root_module_types):
File "D:\anaconda3\envs\yolov12\Lib\site-packages\torch_pruning\dependency\graph.py", line 314, in get_all_groups
group = self.get_pruning_group(
^^^^^^^^^^^^^^^^^^^^^^^
File "D:\anaconda3\envs\yolov12\Lib\site-packages\torch_pruning\dependency\graph.py", line 251, in get_pruning_group
_fix_dependency_graph_non_recursive(*group[0])
File "D:\anaconda3\envs\yolov12\Lib\site-packages\torch_pruning\dependency\graph.py", line 236, in _fix_dependency_graph_non_recursive
new_indices = mapping(new_indices)
^^^^^^^^^^^^^^^^^^^^
File "D:\anaconda3\envs\yolov12\Lib\site-packages\torch_pruning\dependency\index_mapping.py", line 37, in call
new_idxs.append( _helpers._HybridIndex( idx = (i.idx // self._stride), root_idx=i.root_idx ) )
MemoryError
I have tried to change code,like this:
for i in range(args.iterative_steps):
model.model.train()
for name, param in model.model.named_parameters():
param.requires_grad = True
ignored_layers = []
unwrapped_parameters = []
# for m in model.model.modules():
# if isinstance(m, (Detect,)):
# ignored_layers.append(m)
for m in model.model.modules():
if isinstance(m, (Detect, C2f, SPPF)):
ignored_layers.append(m)
example_inputs = example_inputs.to(model.device)
# pruner = tp.pruner.GroupNormPruner(
# model.model,
# example_inputs,
# importance=tp.importance.GroupMagnitudeImportance(), # L2 norm pruning,
# iterative_steps=1,
# pruning_ratio=pruning_ratio,
# ignored_layers=ignored_layers,
# unwrapped_parameters=unwrapped_parameters
# )
# 1. 建议明确指定 root_module_types,避免剪枝器尝试分析不必要的层
# 2. importance 建议使用 MagnitudeImportance,这是基于 BN 层 gamma 值剪枝的标准做法
pruner = tp.pruner.BNScalePruner(
model.model, # 【修改点1】建议保持使用 model.model (即 nn.Module 对象)
example_inputs,
ignored_layers=ignored_layers,
importance=tp.importance.MagnitudeImportance(p=2), # 【修改点2】替换 GroupMagnitudeImportance
pruning_ratio=0.5,
root_module_types=[nn.Conv2d] # 【建议新增】只针对卷积层进行修剪
)
but it is still in trouble,can you help me?