vit源码中to_patch_embedding理解

 self.to_patch_embedding = nn.Sequential(
            Rearrange('b c (h p1) (w p2) -> b (h w) (p1 p2 c)', 
            p1 = patch_height, p2 = patch_width),
            nn.Linear(patch_dim, dim),
        )

Rearrange是einops中的一个方法

einops:灵活和强大的张量操作,可读性强和可靠性好的代码。支持numpy、pytorch、tensorflow等。
代码中Rearrage的意思是将传入的image(3,224,224),按照(3,(h,p1),(w,p2))也就是224=hp1,224 = wp2,接着把shape变成b (h w) (p1 p2 c)格式的,这样把图片分成了每个patch并且将patch拉长,方便下一步的全连接层

还有一种方法是采用窗口为16*16,stride 16的卷积核提取每个patch,然后再flatten送入全连接层。

你可能感兴趣的:(深度学习,pytorch深度学习实战,Python,深度学习,pytorch)