def _create_builder(arch_name_or_def: typing.Union[str, dict]): if isinstance(arch_name_or_def, str): assert arch_name_or_def in modeldef.MODEL_ARCH, ( f"Invalid arch name {arch_name_or_def}, " f"available names: {modeldef.MODEL_ARCH.keys()}") arch_def = modeldef.MODEL_ARCH[arch_name_or_def] else: assert isinstance(arch_name_or_def, dict) arch_def = arch_name_or_def arch_def = mbuilder.unify_arch_def(arch_def, ["blocks"]) scale_factor = 1.0 width_divisor = 1 bn_info = {"name": "bn", "momentum": 0.003} drop_out = 0.2 arch_def["dropout_ratio"] = drop_out builder = mbuilder.FBNetBuilder(width_ratio=scale_factor, bn_args=bn_info, width_divisor=width_divisor) builder.add_basic_args(**arch_def.get("basic_args", {})) return builder, arch_def
def _build_model(arch_def, dim_in): arch_def = fbnet_builder.unify_arch_def(arch_def, ["blocks"]) torch.manual_seed(0) builder = fbnet_builder.FBNetBuilder(1.0) model = builder.build_blocks(arch_def["blocks"], dim_in=dim_in) model.eval() return model
def _build_model(arch_def, dim_in): arch_def = fbnet_builder.unify_arch_def(arch_def, ["blocks"]) torch.manual_seed(0) builder = fbnet_builder.FBNetBuilder(1.0) builder.add_basic_args(**arch_def.get("basic_args", {})) model = builder.build_blocks(arch_def["blocks"], dim_in=dim_in) model.eval() return model, builder
def _create_and_run(self, arch_name, model_arch): arch = fbnet_builder.unify_arch_def(model_arch, ["blocks"]) builder = fbnet_builder.FBNetBuilder() model = builder.build_blocks(arch["blocks"], dim_in=3) model.eval() res = model_arch.get("input_size", 224) inputs = torch.zeros([1, 3, res, res]) output = flops_utils.print_model_flops(model, inputs) self.assertEqual(output.shape[0], 1)
def _get_fbnet_builder_and_arch_def(cfg): arch_def = _parse_arch_def(cfg) # NOTE: one can store extra information in arch_def to configurate FBNetBuilder, # after this point, builder and arch_def will become independent. basic_args = arch_def.pop("basic_args", {}) builder = mbuilder.FBNetBuilder( width_ratio=cfg.MODEL.FBNET_V2.SCALE_FACTOR, width_divisor=cfg.MODEL.FBNET_V2.WIDTH_DIVISOR, bn_args=_get_builder_norm_args(cfg), ) builder.add_basic_args(**basic_args) return builder, arch_def
def _create_builder(arch_name_or_def: typing.Union[str, dict]): if isinstance(arch_name_or_def, str) and arch_name_or_def in modeldef.MODEL_ARCH: arch_def = modeldef.MODEL_ARCH[arch_name_or_def] elif isinstance(arch_name_or_def, str): try: arch_def = json.loads(arch_name_or_def) assert isinstance(arch_def, dict), f"Invalid arch type {arch_name_or_def}" except ValueError: assert arch_name_or_def in modeldef.MODEL_ARCH, ( f"Invalid arch name {arch_name_or_def}, " f"available names: {modeldef.MODEL_ARCH.keys()}") else: assert isinstance(arch_name_or_def, dict) arch_def = arch_name_or_def arch_def = mbuilder.unify_arch_def(arch_def, ["blocks"]) builder = mbuilder.FBNetBuilder() builder.add_basic_args(**arch_def.get("basic_args", {})) return builder, arch_def