@@ -67,13 +67,16 @@ struct _FiLMParams
6767 // / \brief Constructor
6868 // / \param active_ Whether FiLM is active at this location
6969 // / \param shift_ Whether to apply both scale and shift (true) or only scale (false)
70- _FiLMParams (bool active_, bool shift_)
70+ // / \param groups_ Number of groups for grouped convolution in the condition-to-scale-shift submodule (default: 1)
71+ _FiLMParams (bool active_, bool shift_, int groups_ = 1 )
7172 : active(active_)
7273 , shift(shift_)
74+ , groups(groups_)
7375 {
7476 }
7577 const bool active; // /< Whether FiLM is active
7678 const bool shift; // /< Whether to apply shift in addition to scale
79+ const int groups; // /< Number of groups for grouped convolution in the condition-to-scale-shift submodule
7780};
7881
7982// / \brief Parameters for constructing a single Layer
@@ -215,48 +218,53 @@ class _Layer
215218 // Initialize FiLM objects
216219 if (params.conv_pre_film_params .active )
217220 {
218- _conv_pre_film =
219- std::make_unique<FiLM>( params.condition_size , params.channels , params.conv_pre_film_params .shift );
221+ _conv_pre_film = std::make_unique<FiLM>(
222+ params.condition_size , params.channels , params.conv_pre_film_params .shift , params. conv_pre_film_params . groups );
220223 }
221224 if (params.conv_post_film_params .active )
222225 {
223226 const int conv_out_channels =
224227 (params.gating_mode != GatingMode::NONE ) ? 2 * params.bottleneck : params.bottleneck ;
225- _conv_post_film =
226- std::make_unique<FiLM>( params.condition_size , conv_out_channels, params.conv_post_film_params .shift );
228+ _conv_post_film = std::make_unique<FiLM>(params. condition_size , conv_out_channels,
229+ params.conv_post_film_params . shift , params.conv_post_film_params .groups );
227230 }
228231 if (params.input_mixin_pre_film_params .active )
229232 {
230233 _input_mixin_pre_film =
231- std::make_unique<FiLM>(params.condition_size , params.condition_size , params.input_mixin_pre_film_params .shift );
234+ std::make_unique<FiLM>(params.condition_size , params.condition_size , params.input_mixin_pre_film_params .shift ,
235+ params.input_mixin_pre_film_params .groups );
232236 }
233237 if (params.input_mixin_post_film_params .active )
234238 {
235239 const int input_mixin_out_channels =
236240 (params.gating_mode != GatingMode::NONE ) ? 2 * params.bottleneck : params.bottleneck ;
237- _input_mixin_post_film = std::make_unique<FiLM>(
238- params.condition_size , input_mixin_out_channels, params.input_mixin_post_film_params .shift );
241+ _input_mixin_post_film =
242+ std::make_unique<FiLM>(params.condition_size , input_mixin_out_channels,
243+ params.input_mixin_post_film_params .shift , params.input_mixin_post_film_params .groups );
239244 }
240245 if (params.activation_pre_film_params .active )
241246 {
242247 const int z_channels = (params.gating_mode != GatingMode::NONE ) ? 2 * params.bottleneck : params.bottleneck ;
243248 _activation_pre_film =
244- std::make_unique<FiLM>(params.condition_size , z_channels, params.activation_pre_film_params .shift );
249+ std::make_unique<FiLM>(params.condition_size , z_channels, params.activation_pre_film_params .shift ,
250+ params.activation_pre_film_params .groups );
245251 }
246252 if (params.activation_post_film_params .active )
247253 {
248254 _activation_post_film =
249- std::make_unique<FiLM>(params.condition_size , params.bottleneck , params.activation_post_film_params .shift );
255+ std::make_unique<FiLM>(params.condition_size , params.bottleneck , params.activation_post_film_params .shift ,
256+ params.activation_post_film_params .groups );
250257 }
251258 if (params._1x1_post_film_params .active )
252259 {
253- _1x1_post_film =
254- std::make_unique<FiLM>(params. condition_size , params.channels , params._1x1_post_film_params .shift );
260+ _1x1_post_film = std::make_unique<FiLM>(params. condition_size , params. channels ,
261+ params._1x1_post_film_params . shift , params._1x1_post_film_params .groups );
255262 }
256263 if (params.head1x1_post_film_params .active && params.head1x1_params .active )
257264 {
258- _head1x1_post_film = std::make_unique<FiLM>(
259- params.condition_size , params.head1x1_params .out_channels , params.head1x1_post_film_params .shift );
265+ _head1x1_post_film =
266+ std::make_unique<FiLM>(params.condition_size , params.head1x1_params .out_channels ,
267+ params.head1x1_post_film_params .shift , params.head1x1_post_film_params .groups );
260268 }
261269 };
262270
0 commit comments