ain-soph / trojanzoo

TrojanZoo provides a universal pytorch platform to conduct security researches (especially backdoor attacks/defenses) of image classification in deep learning.
https://ain-soph.github.io/trojanzoo
GNU General Public License v3.0
274 stars 62 forks source link

Classifier layer does not exist #115

Closed programehr closed 2 years ago

programehr commented 2 years ago

Hi,

I'm using the 1.0.8 version. Running ABS defense on resnet_comp18, I get the following error:

  File ".../trojanzoo/trojanzoo/utils/model.py", line 102, in get_layer
    raise ValueError('Layer name not correct')
ValueError: Layer name not correct

I realized that it is looking for a layer named classifier which is absent. I did the following ad-hoc fix:

layer_output_name = [k0 for k0 in self.model.get_layer_name() if k0.startswith('classifier')][0]
result.append(self.model.get_layer(h.flatten(end_dim=1), layer_input=layer,
                                   layer_output=layer_output_name).detach().cpu())

I'm not sure if it was the right thing to do. Is there something else I should do?

Thanks.

ain-soph commented 2 years ago

No, that's not correct. get_layer expected to get a layer_output: str but now you pass a list to it. https://ain-soph.github.io/trojanzoo/trojanzoo/utils/model.html#trojanzoo.utils.model.get_layer

I'm currently working on 1.1 version of trojanzoo, which shall contain huge updates, and fix all places inconsistent from original paper. And besides, the current docs only work for v1.1 or newer as well.
https://ain-soph.github.io/trojanzoo/

I just updated ABS in current github repo. You may take a try by installing using develop mode pip install -e .
Sadly ABS docs are still not done yet. Hope my codes could bring you a clean overview.

ain-soph commented 2 years ago

We expect model structure is

[preprocess, features, pool, flatten, classifier]

This is defined in trojanzoo.models._Model (https://ain-soph.github.io/trojanzoo/trojanzoo/models.html#trojanzoo.models._Model) Does your model structure follow this pattern?

programehr commented 2 years ago

No, that's not correct. get_layer expected to get a layer_output: str but now you pass a list to it. https://ain-soph.github.io/trojanzoo/trojanzoo/utils/model.html#trojanzoo.utils.model.get_layer

That actually is a str and the code works. I'm just wondering if it is logically correct or not. I'm currently working on 1.1 version of trojanzoo, which shall contain huge updates, and fix all places inconsistent from original paper. And besides, the current docs only work for v1.1 or newer as well. https://ain-soph.github.io/trojanzoo/

I just updated ABS in current github repo. You may take a try by installing using develop mode pip install -e . Sadly ABS docs are still not done yet. Hope my codes could bring you a clean overview.

I have built my code on top of 1.0.8, and it is a bit difficult to a newer version. I may give it a try, though.

programehr commented 2 years ago

We expect model structure is

[preprocess, features, pool, flatten, classifier]

This is defined in trojanzoo.models._Model (https://ain-soph.github.io/trojanzoo/trojanzoo/models.html#trojanzoo.models._Model) Does your model structure follow this pattern?

I used the examples/defense code with model=resent18_comp and dataset=cifar10. So I guess it should be correct.

ain-soph commented 2 years ago

I see. I missed your [0] here and thought it was a list. So you are actually taking the first layer of classifier.
Yes, it should work.

For the version, I have to say there are a bunch of breaking changes. If you are previously using 1.0.8 and dependent on some concrete implementation, you might find a lot of API changes. There are slight differences for ABS between trojanzoo 1.0.8 and original code. But it shall be fine. You may try the new version in the future.

The new version brings documentation, better code qualities, better code structure and better implementation consistency with original paper (I consulted many first authors of those papers). This is to support the TrojanZoo publication in EuroSP.

Btw, a small survey question. I planned to move to python 3.10 only after PyTorch 1.11 release (within one week). Do you think it’s totally unacceptable if you want to use the library in the future?

ain-soph commented 2 years ago

I'll close this issue if there is no further concern.

Feel free to reopen it if you have any question.