#tensorflow #object-detection-api
#tensorflow #object-detection-api
Вопрос:
Я следовал этому руководству по реализации Tensorflow Object Detection API.
Предпочтительный способ — использование предварительно подготовленных моделей.
Но для некоторых случаев нам нужно обучаться с нуля.
Для этого нам просто нужно закомментировать две строки в файле конфигурации как
#fine_tune_checkpoint: "object_detection/data/mobilenet_v1_1.0_224/mobilenet_v1_1.0_224.ckpt"
#from_detection_checkpoint: true
Если я хочу инициализировать вес с помощью инициализации веса Xavier, как я могу это сделать?
Ответ №1:
Как вы можете видеть в определении конфигурации protobuf, вы можете использовать 3 инициализатора:
- TruncatedNormalInitializer truncated_normal_initializer
- VarianceScalingInitializer отклонение_scaling_initializer
- random_normalinitializer random_normal_initializer
Инициализатор variancescaling — это то, что вы ищете. Это общий инициализатор, который вы можете в принципе превратить в инициализатор Xavier, установив factor=1.0, mode='FAN_AVG'
, как указано в документации.
Итак, установив инициализаторы как
initializer {
variance_scaling_initializer {
factor: 1.0
uniform: true
mode: FAN_AVG
}
}
в вашей конфигурации вы получаете инициализатор Xavier.
Но также, даже если вам нужно потренироваться на новых данных, рассмотрите возможность использования предварительно обученной сети в качестве инициализации вместо случайной инициализации. Более подробную информацию смотрите в этой статье.
Ответ №2:
Средство извлечения функций mobilenet_v1 импортирует магистральную сеть из research / slim /nets:
25: from nets import mobilenet_v1
Код mobilenet создает экземпляры слоев в соответствии со спецификацией следующим образом:
net = slim.conv2d(net, depth(conv_def.depth), conv_def.kernel, stride=conv_def.stride, scope=end_point)
Смотрите
https://github.com/tensorflow/models/blob/master/research/slim/nets/mobilenet_v1.py#L264
Как вы можете видеть, они не kwargs
передаются в conv2d
вызов, поэтому с текущим кодом вы не можете указать, какой weights_initializer
из них будет использоваться.
Однако, по умолчанию инициализатором в любом случае является Xavier, так что вам повезло.
Я должен сказать, что модель обучения и обнаружения объектов без предварительной подготовки feature extractor к какой-либо вспомогательной задаче может просто завершиться неудачей.
Комментарии:
1. Боюсь, он хочет использовать Object Detection API, а не напрямую mobilenet, и там параметры обучения не задаются с использованием исходного кода.
2. Да, мое обучение с нуля не удалось. Но я сделал то же самое, инициализация с помощью Xavier с использованием Caffe дала хорошие результаты.