Tensorflow MobileNetV1 SSD Coco实施如何工作

Tensorflow MobileNetV1 SSD Coco实施如何工作,tensorflow,machine-learning,conv-neural-network,pytorch,object-detection,Tensorflow,Machine Learning,Conv Neural Network,Pytorch,Object Detection,我试图以一种有效的方式将Tensorflow模型转换为PyTorch模型,因此我得到了所有Tensorflow层,并将它们映射到预定义的MobileNet v1_SSD类的层中 该类取自并参考了官方文件中定义的标准MobileNetV1 SSD体系结构。问题是,当我将层从TF映射到PyTorch时,我得到了一些层维度不匹配的情况,比如初始架构有一些变化。 根据下载的模型调整类,我得到以下结果: extras = ModuleList([ Sequential( Conv2

我试图以一种有效的方式将Tensorflow模型转换为PyTorch模型,因此我得到了所有Tensorflow层,并将它们映射到预定义的MobileNet v1_SSD类的层中

该类取自并参考了官方文件中定义的标准MobileNetV1 SSD体系结构。问题是,当我将层从TF映射到PyTorch时,我得到了一些层维度不匹配的情况,比如初始架构有一些变化。 根据下载的模型调整类,我得到以下结果:

extras = ModuleList([
    Sequential(
        Conv2d(in_channels=1024, out_channels=256, kernel_size=1),
        ReLU(),
        Conv2d(in_channels=256, out_channels=512, kernel_size=3, stride=2, padding=1),
        ReLU()
    ),
    Sequential(
        Conv2d(in_channels=512, out_channels=128,kernel_size=1),
        ReLU(),
        Conv2d(in_channels=128, out_channels=256, kernel_size=3, stride=2, padding=1),
        ReLU()
    ),
    Sequential(
        Conv2d(in_channels=256, out_channels=128, kernel_size=1),
        ReLU(),
        Conv2d(in_channels=128, out_channels=256, kernel_size=3, stride=2, padding=1),
        ReLU()
    ),
    Sequential(
        Conv2d(in_channels=256, out_channels=64, kernel_size=1),
        ReLU(),
        Conv2d(in_channels=64, out_channels=128, kernel_size=3, stride=2, padding=1),
        ReLU()
    )
])

regression_headers = ModuleList([
    Conv2d(in_channels=512, out_channels=3 * 4, kernel_size=1, padding=1),
    Conv2d(in_channels=1024, out_channels=6 * 4, kernel_size=1, padding=1),
    Conv2d(in_channels=512, out_channels=6 * 4, kernel_size=1, padding=1),
    Conv2d(in_channels=256, out_channels=6 * 4, kernel_size=1, padding=1),
    Conv2d(in_channels=256, out_channels=6 * 4, kernel_size=1, padding=1),
    Conv2d(in_channels=128, out_channels=6 * 4, kernel_size=1, padding=1), 
])

classification_headers = ModuleList([
    Conv2d(in_channels=512, out_channels=3 * num_classes, kernel_size=1, padding=1),
    Conv2d(in_channels=1024, out_channels=6 * num_classes, kernel_size=1, padding=1),
    Conv2d(in_channels=512, out_channels=6 * num_classes, kernel_size=1, padding=1),
    Conv2d(in_channels=256, out_channels=6 * num_classes, kernel_size=1, padding=1),
    Conv2d(in_channels=256, out_channels=6 * num_classes, kernel_size=1, padding=1),
    Conv2d(in_channels=128, out_channels=6 * num_classes, kernel_size=1, padding=1),
])
好的:模型之间的转换没有错误

失败:我在评估PyTorch模型时遇到了一个问题,因为内核大小以及extras/classification/regression中的一些in_通道和out_通道与初始架构规范不匹配

RuntimeError:张量a(2781)的大小必须与张量b(3000)在非单态维度1的大小相匹配

问题 有人知道Tensorflow开发人员是如何实现这个模型的吗?那么,在选择锚时,他们是如何管理第一层(从6*num_类到3*num_类)的输出减少的呢