def checkpoint_filter_fn(state_dict, model, adapt_layer_scale=False):
    """
    convert patch embedding weight from manual patchify + linear proj to conv
    """

    out_dict = {}
    if "model" in state_dict:
        # For deit models
        state_dict = state_dict["model"]

    for k, v in state_dict.items():
        if "patch_embed.proj.weight" in k and len(v.shape) < 4:
            # For old models that I trained prior to conv based patchification
            O, _, H, W = model.patch_embed.proj.weight.shape
            v = v.reshape(O, -1, H, W)
        elif k == "pos_embed" and v.shape[1] != model.pos_embed.shape[1]:
            # To resize pos embedding when using model at different size
            # from pretrained weights
            v = resize_pos_embed(
                v,
                model.pos_embed,
                (
                    0
                    if getattr(model, "no_embed_class")
                    else getattr(model, "num_prefix_tokens", 1)
                ),
                model.patch_embed.grid_size,
            )
        elif adapt_layer_scale and "gamma_" in k:
            # remap layer-scale gamma into sub-module (deit3 models)
            k = re.sub(r"gamma_([0-9])", r"ls\1.gamma", k)
        elif "pre_logits" in k:
            # NOTE representation layer removed as not used in latest 21k/1k
            # pretrained weights
            continue
        out_dict[k] = v
    return out_dict

    convert patch embedding weight from manual patchify + linear proj to conv
    
avalanche/models/timm_vit.py