SPP和SPPF的比较

SPP的结构是将输入并行通过多个不同大小的MaxPool层,然后做进一步融合,能在一定程度上解决多尺度问题。

而SPPF结构则是讲输入串行通过多个5*5的MaxPool层,这里需要注意两个5*5的MaxPool层和一个9*9的MaxPool的计算结果是一样的,而串行三个5*5的MaxPool层和一个13*13的MaxPool层计算结果是一样的。

做个实验对比一下:

import time
import torch
import torch.nn as nn

class SPP(nn.Module):
    def __init__(self):
        super().__init__()
        self.maxpool1 = nn.MaxPool2d(5, 1, padding=2)
        self.maxpool2 = nn.MaxPool2d(9, 1, padding=4)
        self.maxpool3 = nn.MaxPool2d(13, 1, padding=6)

    def forward(self, x):
        o1 = self.maxpool1(x)
        o2 = self.maxpool2(x)
        o3 = self.maxpool3(x)
        return torch.cat([x, o1, o2, o3], dim=1)
    
class SPPF(nn.Module):
    def __init__(self):
        super().__init__()
        self.maxpool = nn.MaxPool2d(5, 1, padding=2)

    def forward(self, x):
        o1 = self.maxpool(x)
        o2 = self.maxpool(o1)
        o3 = self.maxpool(o2)
        return torch.cat([x, o1, o2, o3], dim=1)
    
def main():
    input_tensor = torch.rand(8, 32, 16, 16)
    spp = SPP()
    sppf = SPPF()
    output1 = spp(input_tensor)
    output2 = sppf(input_tensor)

    print(torch.equal(output1, output2))

    t_start = time.time()
    for _ in range(100):
        spp(input_tensor)
    print(f"spp time : {time.time()- t_start}")

    t_start = time.time()
    for _ in range(100):
        sppf(input_tensor)
    print(f"sppf time : {time.time()- t_start}")

if __name__== '__main__':
    main()

最终输出为:

通过对比发现,两者的计算结果是一模一样的,但是计算时间SPPF比SPP快乐两倍多。

相关推荐
weixin_48705841几秒前
【在 PyTorch 中使用 tqdm 显示训练进度条,并解决常见错误TypeError: ‘module‘ object is not callable】
人工智能
practical_sharp1 分钟前
基于Pytorch的CIFAR100数据集上从ResNet50到VGG16的知识蒸馏实验记录
人工智能·pytorch·python
leijiwen1 分钟前
构建一个去中心化的零售生态参与者的商业模型
人工智能·去中心化·零售
泰勒朗斯14 分钟前
NVIDIA /CUDA 里面的clock rate详细介绍
人工智能
Munger hunger21 分钟前
trtllm 部署新体验
人工智能
Donvink22 分钟前
YOLO系列论文综述(从YOLOv1到YOLOv11)【第2篇:YOLO系列论文、代码和主要优缺点汇总】
人工智能·深度学习·yolo
阿里云大数据AI技术1 小时前
国内首家! 阿里云人工智能平台 PAI 通过 ITU 国际标准测评
人工智能·阿里云·云计算·itu
CRMEB系统商城4 小时前
多商户系统推动旅游业数字化升级与创新,定制化旅游促进市场多元化发展
大数据·人工智能·旅游
weixin_409411024 小时前
vllm在h100单机多卡上部署异常记录与可以尝试的解决方案
人工智能
chenchihwen6 小时前
大语言模型LLM的微调代码详解
人工智能·深度学习·语言模型