0

我想使用TensorFlow ObjectDetection API在 COCO 数据集上训练一个自定义 SSDLite- MobileNetV2对象检测器。我想要更高的输入分辨率,而不是(300,300)的固定输入分辨率,例如VGA(640,480)或(544,544)。由于该架构是完全卷积的,因此可以具有不同的输入分辨率。但是,我想通过以下方式稍微更改 SSD 架构:

使用 300x300 的原始输入分辨率,在第一个 3x3 卷积和 5 个反向瓶颈之后,我们有一个 19x19x96 的特征图,在另外两个瓶颈之后 - 10x10x320,然后是 1x1 - 10x10x1280,然后通过使用 3x3 深度可分离卷积变为5x5x512、3x3x256、2x2x256 和 1x1x128。然后在 19x19 - 19x19x576 的扩展版本、10x10x1280 以及所有其他分辨率较低的特征图(5x5、3x3、2x2、1x1)上进行预测 - 总共 6 个。

如果我的输入分辨率为 554x554,则如下所示:在 3x3 转换和 5 个反向瓶颈之后,它是 34x34x96,在另外两个之后 - 17x17x320,但是为了达到 1x1 分辨率,我需要一个额外的层:9x9、5x5、 3x3、2x2,然后是 1x1。

我想修改架构的方法是跳过 2x2 分辨率,并通过未填充的 3x3 深度可分离卷积从 3x3 直接获得 1x1。我的问题是这是否可以在不修改大量代码的情况下使用 TensorFlow ObjectDetection API,例如通过更改配置文件或轻微修改代码。

编辑:添加了 Python 标签。

EDIT2 - 尝试使问题更清楚:在当前具有当前填充的架构中,为了从 3x3 的特征图传递到 1x1,我需要通过 2x2 的特征图(3x3 转换,步幅 = 2,填充)。我想知道是否可以更改配置以使用单个 3x3 转换直接从 3x3 到 1x1 特征图,如果没有 - 如何编辑/制作替代 ssd_mobilenet_v2_feature_extractor (或其他代码)以实现那。

4

1 回答 1

0

如果您只想更改输入分辨率,请更改您的 .config 文件(从https://github.com/tensorflow/models/tree/master/research/object_detection/samples/configs获取)。找到这个: image_resizer { fixed_shape_resizer { height: 300 width: 300 } } 更改高度和宽度值。如果要更改网络架构,会有点困难。ssdlite_mobilenet_v2使用的网络架构是ssd_mobilenet_V2。基本网络是slim/mobilenet/上的mobilenet v2,编写一些自定义代码并定义自己的模型(https: //github.com/tensorflow/models/blob/master/research/object_detection/g3doc/defining_your_own_model.md)。

于 2018-09-26T20:44:57.167 回答