用例子说结论:
这是 base 的配置:
loss_bbox=dict(type='L1Loss', loss_weight=1.0, 其他参数)
这是继承base的文件
loss_bbox=dict(
_delete_=True,
type='IoULoss',
eps=1e-6,
loss_weight=1.0,
reduction='none')
_delete_
参数会将 base 的 loss_bbox 配置全部失效,而最终留下的只有新的配置:
loss_bbox=dict(
_delete_=True,
type='IoULoss',
eps=1e-6,
loss_weight=1.0,
reduction='none')
而不是:
loss_bbox=dict(
_delete_=True,
type='IoULoss',
eps=1e-6,
loss_weight=1.0,
reduction='none',
其他参数)
当时有些奇怪,为什么 _delete_
不出现在应该被删除的那个配置里,而是写在留下的那个配置里呢?
咱们写程序有个默认的习惯,维护旧代码应该 只增不改, 添加新功能,应该只增加代码,而不是修改代码,这就对代码的可拓展性要求较高
回到那个 _delete_
出现位置的设计,我猜也是出于这一点吧,不改旧配置文件,只改新配置文件,很nice
但是这个 键 的名字,其实可以改一下,总有一种删除当前配置的感觉
参考自:
https://zhuanlan.zhihu.com/p/346203167
https://github.com/open-mmlab/mmdetection/issues/4485