def profile_model()

in cvnets/models/detection/ssd.py [0:0]


    def profile_model(self, input: Tensor) -> None:
        # Note: Model profiling is for reference only and may contain errors.
        # It relies heavily on the user to implement the underlying functions accurately.

        overall_params, overall_macs = 0.0, 0.0

        logger.log('Model statistics for an input of size {}'.format(input.size()))
        logger.double_dash_line(dashes=65)
        print('{:>35} Summary'.format(self.__class__.__name__))
        logger.double_dash_line(dashes=65)

        # profile encoder
        enc_str = logger.text_colors['logs'] + logger.text_colors['bold'] + 'Encoder  ' + logger.text_colors[
            'end_color']
        print('{:>45}'.format(enc_str))
        enc_end_points, encoder_params, encoder_macs = self.encoder.profile_model(input, is_classification=False)

        ssd_head_params = ssd_head_macs = 0.0
        x = enc_end_points["out_l5"]
        for os, ssd_head in zip(self.output_strides, self.ssd_heads):
            if os == 8:
                _, p, m = module_profile(module=ssd_head, x=enc_end_points["out_l3"])
                ssd_head_params += p
                ssd_head_macs += m
            elif os == 16:
                _, p, m = module_profile(module=ssd_head, x=enc_end_points["out_l4"])
                ssd_head_params += p
                ssd_head_macs += m
            elif os == 32:
                _, p, m = module_profile(module=ssd_head, x=enc_end_points["out_l5"])
                ssd_head_params += p
                ssd_head_macs += m
            else: # for all other feature maps with os > 32
                x, p1, m1 = module_profile(module=self.extra_layers["os_{}".format(os)], x=x)
                _, p2, m2 = module_profile(module=ssd_head, x=x)
                ssd_head_params += (p1 + p2)
                ssd_head_macs += (m1 + m2)

        overall_params += (encoder_params + ssd_head_params)
        overall_macs += (encoder_macs + ssd_head_macs)

        ssd_str = logger.text_colors['logs'] + logger.text_colors['bold'] + 'SSD  ' + logger.text_colors[
            'end_color']
        print('{:>45}'.format(ssd_str))

        print(
            '{:<15} \t {:<5}: {:>8.3f} M \t {:<5}: {:>8.3f} M'.format(
                self.__class__.__name__,
                'Params',
                round(ssd_head_params / 1e6, 3),
                'MACs',
                round(ssd_head_macs / 1e6, 3)
            )
        )

        logger.double_dash_line(dashes=65)
        print('{:<20} = {:>8.3f} M'.format('Overall parameters', overall_params / 1e6))
        # Counting Addition and Multiplication as 1 operation
        print('{:<20} = {:>8.3f} M'.format('Overall MACs', overall_macs / 1e6))
        overall_params_py = sum([p.numel() for p in self.parameters()])
        print('{:<20} = {:>8.3f} M'.format('Overall parameters (sanity check)', overall_params_py / 1e6))
        logger.double_dash_line(dashes=65)