eth-sri / eran

ETH Robustness Analyzer for Deep Neural Networks
Apache License 2.0
320 stars 103 forks source link

handle_convolutional_layer() missing 2 required positional arguments: 'predecessors' and 'num_predecessors' #96

Closed gaperezsa closed 3 years ago

gaperezsa commented 3 years ago

hello, im trying to run https://github.com/eth-sri/3dcertify , one of their submodeules is ERAN, i believe i have followed their readme, gurobis software and license, and downloaded the latest release of ELINA, however, when trying to run:

python verify_transformation.py \
    --model models/64p_natural.pth \
    --num_points 64 \
    --transformation RotationZ \
    --theta 1deg \
    --intervals 1 \
    --relaxation taylor \
    --pooling improved_max \
    --experiment example1

i get the error:

Traceback (most recent call last): File "verify_transformation.py", line 153, in (dominant_class, nlb, nub) = eran.analyze_classification_linear(bounds, constraints, params) File "/home/santamgp/Documents/3Dcertify/3dcertify/verifier/eran_verifier.py", line 57, in analyze_classification_linear (dominantclass, , nlb, nub, _) = self.eran.analyze_box( File "/home/santamgp/Documents/3Dcertify/3dcertify/./ERAN/tf_verify/eran.py", line 89, in analyze_box dominant_class, nlb, nub, failed_labels, x = analyzer.analyze() File "/home/santamgp/Documents/3Dcertify/3dcertify/./ERAN/tf_verify/analyzer.py", line 184, in analyze element, nlb, nub = self.get_abstract0() File "/home/santamgp/Documents/3Dcertify/3dcertify/./ERAN/tf_verify/analyzer.py", line 160, in get_abstract0 element_test_bounds = self.ir_list[i].transformer(self.nn, self.man, element, nlb, nub, self.relu_groups, 'refine' in self.domain, self.timeout_lp, self.timeout_milp, self.use_default_heuristic, self.testing) File "/home/santamgp/Documents/3Dcertify/3dcertify/./ERAN/tf_verify/deeppoly_nodes.py", line 468, in transformer handle_convolutional_layer(man, element, *self.get_arguments()) TypeError: handle_convolutional_layer() missing 2 required positional arguments: 'predecessors' and 'num_predecessors'

further inspection of manually going to said file does reveal references to self.predecessors and len(self.predecessors) but said attributes are never set for each object, their initializer does not treat with them at all nor do they inherit them. please help, i just want to reproduce their results

mnmueller commented 3 years ago

Hello @gaperezsa,

Could you please confirm, which commit of ELINA you cloned? This might be the root cause of the issue that you are describing. 3dcertify seems to use ERAN commit "61e3667a4d59efefd195e3623bb1ba483d41332c" and reference to ELINA commit "2c9a4ea". If you mixed the slightly older ERAN version with a recent ELINA one, this is probably the cause of your problem. Please try using the suggested ELINA version.

Cheers, Mark

gaperezsa commented 3 years ago

hello @mnmueller , so, you were right, my problem was mixing a somewhat old version of ERAN with the latest release of ELINA, thank you!!

small comment, another "fix" i had to take was checkout to deepg commit b59e86c46cbb2966d4066e55cb418f2165afd15d instead of last one because the version of ERAN I have uses gurobi 90 but latest deepg uses gurobi91, this is a nightmare of versions.

mnmueller commented 3 years ago

Hello @gaperezsa,

I am glad this resolved your issue. Feel free to suggest updating 3dcertify to be compatible with the most recent versions of ERAN, ELINA, and deepg to the corresponding authors.

Cheers, Mark