Python 使用slim中的预训练模型训练ssd_v3

Python 使用slim中的预训练模型训练ssd_v3,python,tensorflow,Python,Tensorflow,我想通过SLIM()中的预训练模型,使用对象检测API来训练ssd inception_v3模型 我尝试使用配置来训练目标检测模型: model { ssd { num_classes: 1 image_resizer { fixed_shape_resizer { height: 240 width: 320 } } feature_extractor { type: "ssd_incept

我想通过SLIM()中的预训练模型,使用对象检测API来训练ssd inception_v3模型 我尝试使用配置来训练目标检测模型:

model {
  ssd {
    num_classes: 1
    image_resizer {
      fixed_shape_resizer {
        height: 240
        width: 320
      }
    }
    feature_extractor {
      type: "ssd_inception_v3"
      depth_multiplier: 1.0
      min_depth: 16
      conv_hyperparams {
        regularizer {
          l2_regularizer {
            weight: 3.99999989895e-05
          }
        }
        initializer {
          truncated_normal_initializer {
            mean: 0.0
            stddev: 0.0299999993294
          }
        }
        activation: RELU_6
        batch_norm {
          decay: 0.999700009823
          center: true
          scale: true
          epsilon: 0.0010000000475
          train: true
        }
      }
      override_base_feature_extractor_hyperparams: true
    }
...
创建文件model.ckpt-0.*后,我停止了进程,加载并打印了所有张量的名称

在那之后,我从使用中加载了预训练的模型

当我比较输出时,我并没有看到ssd incpetion v3模型的很多层。例如:

接收v3/AuxLogits/Conv2d\u 2a\u 5x5/重量 接收V3/混合7c/分支3/Conv2d\U 0b\U 1x1/重量

在ssd_inception_v3的模型中,我看到5c之前有混合层


SSD和SLIM型号中的功能提取器有什么不同?通常,是否可以在对象检测API中为分类器从SLIM加载权重以进行检测。

您可以看到在中发生的情况。 它使用
inception\u v3.inception\u v3的'Mixed\u 5d'、'Mixed\u 6e'、'Mixed\u 7c'的输出。inception\u v3\u base
(注意
\u base
)并创建3个具有512、256、128个通道的附加特征映射(这发生在
特征映射生成器中。多分辨率特征映射
特征映射布局
)。 可通过配置为检测模型加载分类器的权重:

train_config{
    ...
    fine_tune_checkpoint: <path_to_inception_checkpoint>
    fine_tune_checkpoint_type: "classification"
}
列车配置{
...
微调检查点:
微调检查点类型:“分类”
}

当然,检查点必须与您使用的型号相匹配,例如,
ssd\u inception\u v3

谢谢您的建议!当我从参数fine_tune_checkpoint_type:“classification”开始时,我发现没有这个参数与我得到的结果没有什么区别。如果我理解正确,我不需要负责分类的重量,因为我想训练检测器。如果我使用预先学习的模型,正如我已经说过的,警告会退出,尽管在检查点中应该需要这些权重,即使考虑到您的评论,在构建功能时也会使用第7c层。[InceptionV3/Mixed_7c_1_Conv2d_3_1x1_256/BatchNorm/beta]在checkpoint中不可用…
fine_tune_checkpoint\u type:“classification”
确实是默认值,因此在您的情况下实际上不需要它。这意味着您正在加载一个经过分类培训的检查点,但您正在对其进行微调以进行检测,因此将恢复大多数层(特征提取层),但负责基于特征映射进行分类的最终层除外。关于你收到的警告,这是标准的。请参见此处的示例:谢谢您的建议。他们真的帮了大忙!现在我有点困惑。我得到了非常奇怪的结果。我比较了三种非专业化:1。从头开始训练。2.从预先训练好的模型开始训练(from_detection_checkpoint:false,因为我没有检测器的检查点)。3.通过手动加载权重开始训练(为此,您首先开始手动训练以创建第0步,然后中断训练并手动替换预训练模型中的权重)。由于比较权重,所有三个模型都具有不同的权重。
train_config{
    ...
    fine_tune_checkpoint: <path_to_inception_checkpoint>
    fine_tune_checkpoint_type: "classification"
}