Python 使用slim中的预训练模型训练ssd_v3
我想通过SLIM()中的预训练模型,使用对象检测API来训练ssd inception_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
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"
}