Closed Aurora-zgz closed 5 months ago
Hi @Aurora-zgz, thank you for your question.
As you correctly noted, as single IterativeAdaptationLayer
can handle an arbitrary number of objects. However, to achieve iterative adaptation, we stack a number (in this case 3) of such layers to create the IterativeAdaptationModule
. The iteration you mention goes over layers and not over objects, so the line output = layer(output)
just says that the input to the next layer is the output of the previous layer. You can see the exact same thing in the transformer.py
file, lines 32-36. This is the same as packing your layers in the nn.Sequential
object and not using the loop.
Why the outputs
list? Basically, we just gather the output of every layer in this list. We need this because we apply auxiliary losses to intermediate layers (see more details in the paper). Therefore, the 0th dimension in all_prototypes
refers to the number of layers in the IterativeAdaptationModule
(it's probably a bit confusing because both the number of objects and adaptation layers is 3 but try changing one and you will see the difference).
Let me know if this helps.
Thank you very much for your reply. The explanation was very clear and helpful to me.
Hi, I am a bit confused about your code, and I would greatly appreciate it if you could answer my questions.
For example,near 150 in the ope. py file . What is the purpose of the for loop in the above code? Why do we need to perform three layer operations on the output and put each result output into outputs? What is the difference between output and outputs. Only one layer can obtain processed num_objects=3 prototypes? If it's convenient, I hope to receive your reply as soon as possible. Thank you