open-mmlab / mmdetection

OpenMMLab Detection Toolbox and Benchmark
https://mmdetection.readthedocs.io
Apache License 2.0
28.52k stars 9.29k forks source link

How to Utilize the Two-Stage Deformable DETR(如何使用二阶段DeformableDETR) #11671

Open taiwuyouxu opened 2 months ago

taiwuyouxu commented 2 months ago

After using Mask2FormerTransformerEncoder to obtain the feature memory extracted by the transformer encoder, where Mask2FormerTransformerEncoder inherits from DeformableDetrTransformerEncoder, I intend to further process the memory to serve as prior knowledge for the query, similar to the two-stage approach of DeformableDETR. However, I am unsure about how to proceed with the next steps. Currently, I am attempting to directly inherit the gen_encoder_output_proposals method from DeformableDETR, but this results in an error.

(我在使用了Mask2FormerTransformerEncoder得到由transformer encoder提取的特征memory后,其中Mask2FormerTransformerEncoder继承了DeformableDetrTransformerEncoder。我想将memory进一步处理,类似二阶段的DeformableDETR一样,作为先验知识给query,但是不知道怎么下一步操作。我目前的操作是直接继承DeformableDETR的gen_encoder_output_proposals方法,但是会报错:)

ImportError (note: full exception trace is shown but execution is paused at: _run_module_as_main) cannot import name 'ConditionalDetrTransformerDecoder' from partially initialized module 'mmdet.models.layers' (most likely due to a circular import) (/home/dpr/mmdetection/mmdet/models/layers/init.py) File "/home/dpr/mmdetection/mmdet/models/detectors/conditional_detr.py", line 8, in from ..layers import (ConditionalDetrTransformerDecoder, File "/home/dpr/mmdetection/mmdet/models/detectors/init.py", line 10, in from .conditional_detr import ConditionalDETR File "/home/dpr/mmdetection/mmdet/models/layers/msdeformattn_pixel_decoder.py", line 19, in from ..detectors.deformable_detr import DeformableDETR File "/home/dpr/mmdetection/mmdet/models/layers/init.py", line 12, in from .msdeformattn_pixel_decoder import MSDeformAttnPixelDecoder File "/home/dpr/mmdetection/mmdet/models/backbones/csp_darknet.py", line 11, in from ..layers import CSPLayer File "/home/dpr/mmdetection/mmdet/models/backbones/init.py", line 2, in from .csp_darknet import CSPDarknet File "/home/dpr/mmdetection/mmdet/models/init.py", line 2, in from .backbones import # noqa: F401,F403 File "/home/dpr/.conda/envs/maskformer4/lib/python3.8/importlib/init.py", line 127, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "/home/dpr/.conda/envs/maskformer4/lib/python3.8/site-packages/mmengine/registry/registry.py", line 376, in import_from_location import_module(loc) File "/home/dpr/.conda/envs/maskformer4/lib/python3.8/site-packages/mmengine/registry/registry.py", line 451, in get self.import_from_location() File "/home/dpr/.conda/envs/maskformer4/lib/python3.8/site-packages/mmengine/registry/build_functions.py", line 98, in build_from_cfg obj_cls = registry.get(obj_type) File "/home/dpr/.conda/envs/maskformer4/lib/python3.8/site-packages/mmengine/registry/build_functions.py", line 232, in build_model_from_cfg return build_from_cfg(cfg, registry, default_args) File "/home/dpr/.conda/envs/maskformer4/lib/python3.8/site-packages/mmengine/registry/registry.py", line 570, in build return self.build_func(cfg, args, **kwargs, registry=self) File "/home/dpr/.conda/envs/maskformer4/lib/python3.8/site-packages/mmengine/runner/runner.py", line 836, in build_model model = MODELS.build(model) File "/home/dpr/.conda/envs/maskformer4/lib/python3.8/site-packages/mmengine/runner/runner.py", line 429, in init self.model = self.build_model(model) File "/home/dpr/.conda/envs/maskformer4/lib/python3.8/site-packages/mmengine/runner/runner.py", line 462, in from_cfg runner = cls( File "/home/dpr/mmdetection/tools/train.py", line 110, in main runner = Runner.from_cfg(cfg) File "/home/dpr/mmdetection/tools/train.py", line 121, in main() File "/home/dpr/.conda/envs/maskformer4/lib/python3.8/runpy.py", line 87, in _run_code exec(code, run_globals) File "/home/dpr/.conda/envs/maskformer4/lib/python3.8/runpy.py", line 194, in _run_module_as_main (Current frame) return _run_code(code, main_globals, None, ImportError: cannot import name 'ConditionalDetrTransformerDecoder' from partially initialized module 'mmdet.models.layers' (most likely due to a circular import) (/home/dpr/mmdetection/mmdet/models/layers/init.py)