-
Allow inherited properties to be set via a transforms argument list at the command line, but exclude properties of classes that directly inherit from br::Object (this excludes e.g. Transform's properties which should be set during training). Properties are set in the same order that is currently used (the order of their property declarations), but all superclass properties are set before base class properties. Changes to the Transform API: add a set of methods supporting non-const project operations. Since overloading with a non-const version of the same function name won't work, the methods are called projectUpdate, since they perform the expected project operation, but also allow the transform to update its internal state. This can be used to support tracking operations, as well as online learning methods. All current classes can implement projectUpdate by calling their const project method. To handle variable input/output situations (e.g. a tracking function may only wish to emit a single template per unique detected object), a "finalize" method is also added to Transform, to be called to indicate that no further calls to projectUpdate will be made, and allow the transform to emit any final templates This is only relevant for non-const project since a time-invariant transform has no way to manage an internal list of templates it is waiting to emit. Add a "timeVarying" method to Transform, which returns a bool indicate whether or not the transform is time-invariant (only projectUpdate should be called for a time-varying transform). Refactor Transforms that maintain a list of subclasses (pipe transform, expand transform, fork transform, random transform) to inherit from a common subclass (CompositeTransform). Time variance for composite transforms is set based on their child transforms -- a composite transform with any time-varying children is time-varying. Some code consolidation via the shared subclass.