MART icon indicating copy to clipboard operation
MART copied to clipboard

Modality dispatch

Open mzweilin opened this issue 1 year ago • 1 comments

What does this PR do?

  • Implement modality_dispatch() in the singledispatch manner.
  • Add modality_dispatch() in Perturber for Initializer and Projector.
    • Remove list-dispatch in Initializer and Projector.
  • Make Enforcer and Composer modality-aware with modality_dispatch()
    • GradientModifier is different because of the way we handle trainable parameters.
  • Annotate modality-aware params in Optimizer for GradientModifier.
  • Add a modality-aware adversary example.

Benign:

CUDA_VISIBLE_DEVICES=0 \
python -m mart \
experiment=ArmoryCarlaOverObjDet_TorchvisionFasterRCNN \
trainer=gpu \
fit=false \
+trainer.limit_test_batches=1 \
+model.load_state_dict.losses_and_detections.model=/home/weilinxu/coder/GARD-with-MART/oscar/model_zoo/carla_rgb_weights_eval6.pt
│      test_metrics/map_50       │       0.6349384784698486

Adversarial:

CUDA_VISIBLE_DEVICES=0 \
python -m mart \
experiment=ArmoryCarlaOverObjDet_TorchvisionFasterRCNN \
trainer=gpu \
fit=false \
+trainer.limit_test_batches=1 \
+model.load_state_dict.losses_and_detections.model=/home/weilinxu/coder/GARD-with-MART/oscar/model_zoo/carla_rgb_weights_eval6.pt \
[email protected]_adv_test=object_detection_rgb_mask_adversary \
+model.test_sequence.seq005=input_adv_test \
model.test_sequence.seq010.preprocessor=["input_adv_test"]
│      test_metrics/map_50       │       0.4633878767490387       │

Type of change

Please check all relevant options.

  • [ ] Improvement (non-breaking)
  • [ ] Bug fix (non-breaking)
  • [x] New feature (non-breaking)
  • [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • [ ] This change requires a documentation update

Testing

Please describe the tests that you ran to verify your changes. Consider listing any relevant details of your test configuration.

  • [x] pytest
  • [x] CUDA_VISIBLE_DEVICES=0,1 python -m mart experiment=CIFAR10_CNN_Adv trainer=ddp trainer.precision=16 trainer.devices=2 model.optimizer.lr=0.2 trainer.max_steps=2925 datamodule.ims_per_batch=256 datamodule.world_size=2 reports 70% (14 sec/epoch).

Before submitting

  • [x] The title is self-explanatory and the description concisely explains the PR
  • [x] My PR does only one thing, instead of bundling different changes together
  • [ ] I list all the breaking changes introduced by this pull request
  • [x] I have commented my code
  • [ ] I have added tests that prove my fix is effective or that my feature works
  • [x] New and existing unit tests pass locally with my changes
  • [x] I have run pre-commit hooks with pre-commit run -a command without errors

Did you have fun?

Make sure you had fun coding 🙃

mzweilin avatar Apr 18 '23 17:04 mzweilin

Do you think we should wait to merge this until we change MART to bound inputs between [0, 1] instead of [0, 255]? See #70.

dxoigmn avatar Jun 22 '23 21:06 dxoigmn