Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
611f861
Merge branch 'shapeshifter' into shapeshifter_yolov3
dxoigmn Jun 8, 2023
b117727
WIP
dxoigmn Jun 9, 2023
f5885d2
Merge branch 'shapeshifter' into shapeshifter_yolov4
dxoigmn Jun 15, 2023
317b6c7
Merge branch 'shapeshifter_yolov3' into shapeshifter_yolov4
dxoigmn Jun 16, 2023
8fbc0be
Fix callbacks
dxoigmn Jun 16, 2023
c7e011a
Use _return_as_dict_
dxoigmn Jun 16, 2023
1b2d76e
Fix losses
dxoigmn Jun 16, 2023
f4cc7d6
Reduce batch size
dxoigmn Jun 16, 2023
35ac996
Use logits
dxoigmn Jun 16, 2023
781d70e
Add YOLOv4 collate function
dxoigmn Jun 16, 2023
76da651
Only compute metrics if we have a metric
dxoigmn Jun 16, 2023
ff8fdfd
ConvertBoxesToCXCYHW -> ConvertBoxesToCXCYWH
dxoigmn Jun 16, 2023
c70a354
Add normalize option to ConvertBoxesToCXCYWH
dxoigmn Jun 16, 2023
3e3535f
Add ability to disable one hot encoding and change order of packed la…
dxoigmn Jun 16, 2023
98212ff
Add coco_yolov4 datamodule
dxoigmn Jun 16, 2023
ebf244a
Update sequences
dxoigmn Jun 16, 2023
c7602ae
Remove model checkpoint callback
dxoigmn Jun 16, 2023
41685e7
Make YOLOv3 losses work
dxoigmn Jun 16, 2023
e538aa6
Revert mart/configs/datamodule/coco_yolov3.yaml to shapeshifter_yolov3
dxoigmn Jun 20, 2023
5782d94
bugfix
dxoigmn Jun 20, 2023
83b48ff
Fix config
dxoigmn Jun 20, 2023
b67fa5d
Update YOLOv4 ShapeShifter attack
dxoigmn Jun 20, 2023
a9c490c
Add total variation loss
dxoigmn Jun 21, 2023
098eb2d
Change losses and add total variation
dxoigmn Jun 21, 2023
97ae58d
Add COCO_YOLOv4 experiment
dxoigmn Jun 21, 2023
ec6145a
style
dxoigmn Jun 22, 2023
097bb06
Merge branch 'shapeshifter_yolov3' into shapeshifter_yolov4
dxoigmn Jun 22, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion mart/configs/datamodule/coco_yolov3.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ train_dataset:
fill: 0.5
- _target_: mart.transforms.Resize
size: [416, 416]
- _target_: mart.transforms.ConvertBoxesToCXCYHW
- _target_: mart.transforms.ConvertBoxesToCXCYWH
- _target_: mart.transforms.RemapLabels
- _target_: mart.transforms.PackBoxesAndLabels
num_classes: 80
Expand Down
33 changes: 33 additions & 0 deletions mart/configs/experiment/COCO_YOLOv4.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# @package _global_

defaults:
- override /datamodule: coco_yolov3
- override /model: yolov4
- override /optimization: super_convergence
- override /metric: average_precision

task_name: "COCO_YOLOv4"
tags: ["evaluation"]

optimized_metric: "test_metrics/map"

trainer:
# 117,266 training images, 6 epochs, batch_size=16, 43,974.75
max_steps: 43975
# FIXME: "nms_kernel" not implemented for 'BFloat16', torch.ops.torchvision.nms().
precision: 32

datamodule:
num_workers: 32
ims_per_batch: 16

collate_fn:
path: mart.datamodules.coco.yolov4_collate_fn

model:
optimizer:
lr: 0.001
momentum: 0.9
weight_decay: 0.0005

training_metrics: null
179 changes: 179 additions & 0 deletions mart/configs/experiment/COCO_YOLOv4_ShapeShifter.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,179 @@
# @package _global_

defaults:
- /attack/perturber@model.modules.perturbation: default
- /attack/perturber/initializer@model.modules.perturbation.initializer: uniform
- /attack/perturber/projector@model.modules.perturbation.projector: range
- /attack/composer@model.modules.input_adv: warp_composite
- /attack/gradient_modifier@model.gradient_modifier: lp_normalizer
- override /optimization: super_convergence
- override /datamodule: coco_yolov3
- override /model: yolov4
- override /metric: average_precision
- override /callbacks:
[
model_checkpoint,
lr_monitor,
perturbation_visualizer,
gradient_monitor,
attack_in_eval_mode,
no_grad_mode,
]

task_name: "COCO_YOLOv4_ShapeShifter"
tags: ["adv"]

optimized_metric: "test_metrics/map"

trainer:
# 64115 training images, batch_size=16, FLOOR(64115/16) = 4007
max_steps: 40070 # 10 epochs
# mAP can be slow to compute so limit number of images
limit_val_batches: 100
limit_test_batches: 100
precision: 32

callbacks:
model_checkpoint:
monitor: "validation_metrics/map"
mode: "min"

attack_in_eval_mode:
module_classes:
- _target_: hydra.utils.get_class
path: torch.nn.BatchNorm2d

no_grad_mode:
module_names: "model.yolov4"

perturbation_visualizer:
perturbation: "model.perturbation.perturbation"
frequency: 500

datamodule:
num_workers: 16
ims_per_batch: 8

train_dataset:
annFile: ${paths.data_dir}/coco/annotations/person_instances_train2017.json
val_dataset:
annFile: ${paths.data_dir}/coco/annotations/person_instances_val2017.json
test_dataset:
annFile: ${paths.data_dir}/coco/annotations/person_instances_val2017.json

collate_fn:
path: mart.datamodules.coco.yolov4_collate_fn

model:
modules:
perturbation:
size: [3, 416, 234]

initializer:
min: 0.49
max: 0.51

projector:
min: 0.0
max: 1.0

input_adv:
warp:
_target_: torchvision.transforms.Compose
transforms:
- _target_: mart.transforms.ColorJitter
brightness: [0.5, 1.5]
contrast: [0.5, 1.5]
saturation: [0.5, 1.0]
hue: [-0.05, 0.05]
- _target_: torchvision.transforms.RandomAffine
degrees: [-5, 5]
translate: [0.1, 0.25]
scale: [0.4, 0.6]
shear: [-3, 3, -3, 3]
interpolation: 2 # BILINEAR
clamp: [0, 1]

optimizer:
lr: 0.05 # ims_per_batch / orig_ims_per_batch * orig_lr = (8 / 16) * 0.1
momentum: 0.9

lr_scheduler:
scheduler:
three_phase: true

gradient_modifier: null

training_sequence:
seq005: "perturbation"
seq006: "input_adv"
seq010:
yolov4:
x: "input_adv"
seq020:
losses:
perturbation: "perturbation"
seq030:
loss:
_call_with_args_:
- "losses.hide_objects_loss"
- "losses.total_variation"
weights:
- 1
- 0.0001
seq050:
output:
total_variation: "losses.total_variation"

training_metrics: null
training_step_log:
- loss
- total_loss
- coord_loss
- obj_loss
- noobj_loss
- class_loss
- hide_objects_loss
- target_class_loss
- hide_target_objects_loss
- correct_target_class_loss
- target_count
- score_count
- target_score_count
- total_variation

validation_sequence:
seq005: "perturbation"
seq006: "input_adv"
seq010:
yolov4:
x: "input_adv"
seq020:
losses:
perturbation: "perturbation"
seq030:
loss:
_call_with_args_:
- "losses.hide_objects_loss"
- "losses.total_variation"
weights:
- 1
- 0.0001

test_sequence:
seq005: "perturbation"
seq006: "input_adv"
seq010:
yolov4:
x: "input_adv"
seq020:
losses:
perturbation: "perturbation"
seq030:
loss:
_call_with_args_:
- "losses.hide_objects_loss"
- "losses.total_variation"
weights:
- 1
- 0.0001
Loading