Skip to content

Semantic discrepancy between DISTS and ContentLoss parameters #261

@snk4tr

Description

@snk4tr

Describe the bug
ContentLoss is a super class of multiple feature-based metrics including DISTS. However, there is a semantic discrepancy between these two for parameters such as weights and layers:

  • For ContentLoss: weights is a collection of scalars, which are used to scale feature outputs from layers;
  • For DISTS: weights is a collection of scalars, which are used to scale features that are computed in a sophisticated way, provided by the custom self.distance function, which produces two types of features (structure_distance and texture_distance), which also include the initial data tensor.

This misalignment leads to the following: in general case len(weights) == len(layers) because otherwise some weights or layers are ignores and not used during computation of the feature-based metric. However, neither assert nor warning can be used in the ContentLoss class because it will provide incorrect behaviour for DISTS.

To Reproduce
Steps to reproduce the behavior:

  1. Put assert len(layers) == len(weights) in the initializer for the ContentLoss class;
  2. Run tests or manually run code with feature-based metrics;
  3. Observe that initialization of DISTS fails due to the added assert;
  4. Observe error message, where len(layers) == 5 and len(weights) == 12.

Expected behavior
All feature-based metrics have the same semantic for passed parameters.

Additional context
The problem was revealed during work on #258

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions