Details und Highlights zur Implementierung des MobileViT-Codes

MobileViT

Das Bild stammt von Regisseur B.
Fügen Sie hier eine Bildbeschreibung ein
Fügen Sie hier eine Bildbeschreibung ein
In jedem Patch werden die Token an den entsprechenden Positionen herausgenommen, um eine Sequenz zu bilden [ganz erstaunlich]. Es fühlt sich an, als ob die B C H*W-Tensoren
in [B, C, H, W] bleiben unverändert, diese Maße können beliebig verändert werden. Entfaltungscode:

    def my_unfold(x): 
        # [B,C,H,W] -> [B,C,n_h,p_h,n_w,p_w]
        x = x.reshape(batch_size , in_channels, num_patch_h, patch_h, num_patch_w, patch_w)
        #[B,C,n_h,p_h,n_w,p_w]->[B,C,n_h,n_w,p_h,p_w]
        x = x.transpose(3, 4)
        #[B,C,n_h,n_w,p_h,p_w]->[B,C,n_h*n_w,p_h*p_w]即[B,C,N,P]
        x = x.reshape(batch_size, in_channels, num_patches, patch_area)
        #[B,C,N,P]->[B,P,N,C]  
        x = x.transpose(1,3)
        #[B,P,N,C]->[BP,N,C]   BP是所有batch里patch总数
        x = x.reshape(batch_size*patch_area, num_patches, -1)

        return x

Acho que você gosta

Origin blog.csdn.net/weixin_44040169/article/details/127943022
Recomendado
Clasificación