Поделиться через


Обнаружение объектов с помощью более быстрого R-CNN

Оглавление

Сводка

изображение

Выше приведены примеры изображений и заметок объектов для набора данных Продуктового набора данных (слева) и набора данных Pascal VOC (справа), используемого в этом руководстве.

Более быстрый R-CNN — это алгоритм обнаружения объектов, предложенный Shaoqing Ren, Kaiming He, Ross Girshick и Jian Sun в 2015 году. Исследовательская статья называется "Быстрый R-CNN: к Real-Time обнаружению объектов с помощью региональных сетей предложений", и архивируется в https://arxiv.org/abs/1506.01497. Быстрее R-CNN строится на предыдущих работах, чтобы эффективно классифицировать предложения объектов с помощью глубоких сверточных сетей. По сравнению с предыдущей работой, Более быстрый R-CNN использует сеть предложений региона и не требует внешнего метода для предложений кандидатов в регионе.

Это руководство структурировано в три основных раздела. В первом разделе приводится краткое описание того, как запустить Более быстрый R-CNN в CNTK в предоставленном примере набора данных. Второй раздел содержит подробные сведения обо всех шагах, включая настройку и параметризацию более быстрого R-CNN. В заключительном разделе рассматриваются технические сведения о алгоритме и сети предложений в регионе, чтение и расширение входных данных, а также различные варианты обучения для Ускорения R-CNN.

Быстрый запуск

В этом разделе предполагается, что система настроена для использования API Python CNTK. Далее предполагается, что вы используете Python 3.5 в Windows или 3.5/3.6 в Linux. Подробные инструкции см. в пошаговые инструкции. Чтобы запустить более быстрый R-CNN, установите следующие дополнительные пакеты в среде cntk Python.

pip install opencv-python easydict pyyaml

Запуск примера toy

Мы используем набор данных о том, что образы, полученные из холодильника, используются для демонстрации Fast R-CNN (аналогично примеру Fast R-CNN). Набор данных и предварительно обученная модель AlexNet можно скачать, выполнив следующую команду Python из папки Examples/Image/Detection/FastRCNN:

python install_data_and_model.py

После выполнения скрипта под папкой Examples/Image/DataSets/Grocery будет установлен набор данных toy. Модель AlexNet будет загружена в папку PretrainedModels . Рекомендуется хранить скачанные данные в соответствующей папке, так как файлы конфигурации предполагают, что расположение по умолчанию.

Обучение и оценка более быстрого запуска R-CNN

python run_faster_rcnn.py

Результаты комплексного обучения в Продуктовой программе с помощью AlexNet в качестве базовой модели должны выглядеть примерно так:

AP for          gerkin = 1.0000
AP for          butter = 1.0000
AP for         joghurt = 1.0000
AP for          eggBox = 1.0000
AP for         mustard = 1.0000
AP for       champagne = 1.0000
AP for          orange = 1.0000
AP for           water = 0.5000
AP for         avocado = 1.0000
AP for          tomato = 1.0000
AP for          pepper = 1.0000
AP for         tabasco = 1.0000
AP for           onion = 1.0000
AP for            milk = 1.0000
AP for         ketchup = 0.6667
AP for     orangeJuice = 1.0000
Mean AP = 0.9479

Визуализация прогнозируемых ограничивающих прямоугольник и меток на изображениях, открытых FasterRCNN_config.py из папки и заданных FasterRCNN

__C.VISUALIZE_RESULTS = True

Образы будут сохранены в папке FasterRCNN/Output/Grocery/ при запуске python run_faster_rcnn.py.

Пошаговые инструкции

Установка

Чтобы запустить код в этом примере, требуется среда Python CNTK (см. здесь справку по настройке). Установите следующие дополнительные пакеты в среде Python cntk.

pip install opencv-python easydict pyyaml

Предварительно скомпилированные двоичные файлы для регрессии ограничивающего прямоугольного поля и не максимального подавления

Examples\Image\Detection\utils\cython_modules Папка содержит предварительно скомпилированные двоичные файлы, необходимые для запуска более быстрого R-CNN. Версии, которые сейчас содержатся в репозитории, — это Python 3.5 для Windows и Python 3.5, 3.6 для Linux, все 64-разрядные версии. Если вам нужна другая версия, ее можно скомпилировать, выполнив описанные ниже действия.

Скопируйте созданные cython_bbox двоичные файлы и cpu_nms (или) gpu_nmsиз $FRCN_ROOT/lib/utils$CNTK_ROOT/Examples/Image/Detection/utils/cython_modules.

Пример модели данных и базовых показателей

Мы используем предварительно обученную модель AlexNet в качестве основы для обучения Faster-R-CNN (для VGG или других базовых моделей см. использование другой базовой модели. Пример набора данных и предварительно обученной модели AlexNet можно скачать, выполнив следующую команду Python из папки FastRCNN :

python install_data_and_model.py

Конфигурация и параметры

Параметры группируются в три части:

  • Параметры детектора (см. )FasterRCNN/FasterRCNN_config.py
  • Параметры набора данных (см. пример utils/configs/Grocery_config.py)
  • Параметры базовой модели (см. пример utils/configs/AlexNet_config.py)

Три части загружаются и объединяются в get_configuration() метод в run_faster_rcnn.py. В этом разделе мы рассмотрим параметры детектора. Здесь описаны параметры набора данных, параметры базовой модели. В следующем примере мы рассмотрим содержимое FasterRCNN_config.py сверху вниз. В конфигурации используется EasyDict пакет, позволяющий легко обращаться к вложенным словарям.

# If set to 'True' training will be skipped if a trained model exists already
__C.CNTK.MAKE_MODE = False
# E2E or 4-stage training
__C.CNTK.TRAIN_E2E = True
# set to 'True' to use deterministic algorithms
__C.CNTK.FORCE_DETERMINISTIC = False
# set to 'True' to run only a single epoch
__C.CNTK.FAST_MODE = False
# Debug parameters
__C.CNTK.DEBUG_OUTPUT = False
__C.CNTK.GRAPH_TYPE = "png" # "png" or "pdf"
# Set to True if you want to store an eval model with native UDFs (e.g. for inference using C++ or C#)
__C.STORE_EVAL_MODEL_WITH_NATIVE_UDF = False

Первый блок параметров содержит инструкции более высокого уровня, касающиеся процесса обучения. __C.CNTK.TRAIN_E2E позволяет выбрать сквозную или 4-этапную схему обучения. Здесь описаны сведения о двух схемах обучения. __C.CNTK.FAST_MODE = True выполняется только одна эпоха; Полезно проверить, работает ли программа установки, и все параметры верны. __C.CNTK.DEBUG_OUTPUT = True создает дополнительное сообщение отладки в выходных данных консоли. В нем также отображаются графы вычислений CNTK для моделей обучения и eval (обратите внимание на требования к построениям графов CNTK). Полученные графы хранятся в папке FasterRCNN/Output . __C.STORE_EVAL_MODEL_WITH_NATIVE_UDF = True будет хранить вторую модель оценки, которая использует только машинный код (без слоев Python). Например, эту модель можно загрузить и оценить с помощью C++ или C#.

# Learning parameters
__C.CNTK.L2_REG_WEIGHT = 0.0005
__C.CNTK.MOMENTUM_PER_MB = 0.9
# The learning rate multiplier for all bias weights
__C.CNTK.BIAS_LR_MULT = 2.0

# E2E learning parameters
__C.CNTK.E2E_MAX_EPOCHS = 20
__C.CNTK.E2E_LR_PER_SAMPLE = [0.001] * 10 + [0.0001] * 10 + [0.00001]

Второй блок содержит параметры обучения. Это в основном обычные параметры обучения CNTK. Единственным исключением является __C.CNTK.BIAS_LR_MULTмультипликатор скорости обучения, используемый для всех предвзятости в сети. Он по сути обучает предвзятые отклонения с дважды текущей скоростью обучения, которая также делается в исходном коде Более быстрый R-CNN. Количество эпох и частоты обучения на выборку указывается отдельно для двух различных схем обучения (4-этапные параметры не указаны выше).

# Maximum number of ground truth annotations per image
__C.INPUT_ROIS_PER_IMAGE = 50
__C.IMAGE_WIDTH = 850
__C.IMAGE_HEIGHT = 850

# Sigma parameter for smooth L1 loss in the RPN and the detector (DET)
__C.SIGMA_RPN_L1 = 3.0
__C.SIGMA_DET_L1 = 1.0

# NMS threshold used to discard overlapping predicted bounding boxes
__C.RESULTS_NMS_THRESHOLD = 0.5
# all bounding boxes with a score lower than this threshold will be considered background
__C.RESULTS_NMS_CONF_THRESHOLD = 0.0

# Enable plotting of results generally / also plot background boxes / also plot unregressed boxes
__C.VISUALIZE_RESULTS = False
__C.DRAW_NEGATIVE_ROIS = False
__C.DRAW_UNREGRESSED_ROIS = False
# only for plotting results: boxes with a score lower than this threshold will be considered background
__C.RESULTS_BGR_PLOT_THRESHOLD = 0.1

__C.INPUT_ROIS_PER_IMAGE указывает максимальное количество заметок правды земли на изображение. В настоящее время для CNTK требуется задать максимальное число. Если есть меньше заметок, они будут заполнены внутри. __C.IMAGE_WIDTH и __C.IMAGE_HEIGHT являются измерениями, которые используются для изменения размера и заполнения входных изображений. __C.RESULTS_NMS_THRESHOLD — это порог NMS, используемый для отмены перекрывающихся прогнозируемых ограничивающих прямоугольника в оценке. Более низкий порог дает меньше удалений и, следовательно, более прогнозируемые ограничивающие прямоугольники в окончательных выходных данных.

# Use horizontally-flipped images during training?
__C.TRAIN.USE_FLIPPED = True
# If set to 'True' conv layers weights from the base model will be trained, too
__C.TRAIN_CONV_LAYERS = True

# RPN parameters
# IOU >= thresh: positive example
__C.TRAIN.RPN_POSITIVE_OVERLAP = 0.7
# IOU < thresh: negative example
__C.TRAIN.RPN_NEGATIVE_OVERLAP = 0.3
# If an anchor statisfied by positive and negative conditions set to negative
__C.TRAIN.RPN_CLOBBER_POSITIVES = False
# Max number of foreground examples
__C.TRAIN.RPN_FG_FRACTION = 0.5
# Total number of examples
__C.TRAIN.RPN_BATCHSIZE = 256
# NMS threshold used on RPN proposals
__C.TRAIN.RPN_NMS_THRESH = 0.7
# Number of top scoring boxes to keep before apply NMS to RPN proposals
__C.TRAIN.RPN_PRE_NMS_TOP_N = 12000
# Number of top scoring boxes to keep after applying NMS to RPN proposals
__C.TRAIN.RPN_POST_NMS_TOP_N = 2000
# Proposal height and width both need to be greater than RPN_MIN_SIZE (at orig image scale)
__C.TRAIN.RPN_MIN_SIZE = 16

__C.TRAIN.USE_FLIPPED = True будет дополнять обучающие данные, перевернув все изображения каждой другой эпохи, т. е. первая эпоха имеет все регулярные изображения, вторая — все изображения перевернуты, и т. д. __C.TRAIN_CONV_LAYERS определяет, будут ли свертальные слои из входных данных на карту сверточных признаков обучены или исправлены. Исправление коэффициентов конвового слоя означает, что весы из базовой модели принимаются и не изменяются во время обучения. (Вы также можете указать, сколько уровней conv требуется обучить, см. раздел "Использование другой базовой модели". Для параметров rpn обратитесь к комментариям рядом с их определением или обратитесь к исходному исследовательском документу для получения дополнительных сведений. Также для следующих параметров детектора:

# Detector parameters
# Minibatch size (number of regions of interest [ROIs]) -- was: __C.TRAIN.BATCH_SIZE = 128
__C.NUM_ROI_PROPOSALS = 128
# Fraction of minibatch that is labeled foreground (i.e. class > 0)
__C.TRAIN.FG_FRACTION = 0.25
# Overlap threshold for an ROI to be considered foreground (if >= FG_THRESH)
__C.TRAIN.FG_THRESH = 0.5
# Overlap threshold for an ROI to be considered background (class = 0 if
# overlap in [LO, HI))
__C.TRAIN.BG_THRESH_HI = 0.5
__C.TRAIN.BG_THRESH_LO = 0.0

# Normalize the targets using "precomputed" (or made up) means and stdevs
__C.BBOX_NORMALIZE_TARGETS = True
__C.BBOX_NORMALIZE_MEANS = (0.0, 0.0, 0.0, 0.0)
__C.BBOX_NORMALIZE_STDS = (0.1, 0.1, 0.2, 0.2)

Запуск более быстрого R-CNN на Pascal VOC

Чтобы скачать данные Pascal и создать файлы заметок для Pascal в формате CNTK, выполните следующие скрипты:

python Examples/Image/DataSets/Pascal/install_pascalvoc.py
python Examples/Image/DataSets/Pascal/mappings/create_mappings.py

dataset_cfg Изменение метода run_faster_rcnn.py на get_configuration()

from utils.configs.Pascal_config import cfg as dataset_cfg

Теперь вы намерены обучать данные Pascal VOC 2007 с помощью python run_faster_rcnn.py. Будьте осторожны, что обучение может занять некоторое время.

Более быстрый запуск R-CNN на основе собственных данных

Подготовка собственных данных и аннотирование их с помощью ограничивающих прямоугольников с наземными истинами описывается в описании обнаружения объектов с помощью Fast R-CNN. После хранения образов в описанной структуре папок и примечаниях к ним выполните команду

python Examples/Image/Detection/utils/annotations/annotations_helper.py

после изменения папки в этом скрипте на папку данных. Наконец, создайте MyDataSet_config.py в папке utils\configs следующие существующие примеры, как в этом фрагменте кода:

...

# data set config
__C.DATA.DATASET = "YourDataSet"
__C.DATA.MAP_FILE_PATH = "../../DataSets/YourDataSet"
__C.DATA.CLASS_MAP_FILE = "class_map.txt"
__C.DATA.TRAIN_MAP_FILE = "train_img_file.txt"
__C.DATA.TRAIN_ROI_FILE = "train_roi_file.txt"
__C.DATA.TEST_MAP_FILE = "test_img_file.txt"
__C.DATA.TEST_ROI_FILE = "test_roi_file.txt"
__C.DATA.NUM_TRAIN_IMAGES = 500
__C.DATA.NUM_TEST_IMAGES = 200
__C.DATA.PROPOSAL_LAYER_SCALES = [8, 16, 32]

...

__C.CNTK.PROPOSAL_LAYER_SCALESиспользуется в generate_anchors() (см. ).utils/rpn/generate_anchors.py Начиная с базового размера 16 трех привязок с пропорциями 0.5, 1.0 и 2.0 создаются в результате (8 x 24, 16 x 16, 24 x 8). Они умножаются на каждый масштаб слоя предложения, что приводит к девяти привязкам (64 x 192... , ). 768 x 256 Это абсолютные пиксельные координаты w.r.t. входного изображения. Все привязки применяются в каждой пространственной позиции карты сверточных признаков для создания интересующих кандидатов областей. Адаптируйте эти уровни предложений в соответствии с размерами объектов в наборе данных и размером входного изображения, который вы используете. Например, для набора данных Продуктового продукта, который мы используем__C.DATA.PROPOSAL_LAYER_SCALES = [4, 8, 12], и размер 850 x 850 входного изображения (см. ).utils/configs/Grocery_config.py

Чтобы обучить и оценить более быстрый R-CNN на основе данных, измените dataset_cfg метод run_faster_rcnn.py на get_configuration()

from utils.configs.MyDataSet_config import cfg as dataset_cfg

и выполните команду python run_faster_rcnn.py.

Технические сведения

Как и большинство детекторов объектов на основе DNN Быстрее R-CNN использует обучение передачи. Она начинается с базовой модели, которая является моделью, обученной для классификации изображений. Базовая модель разделена на две части, первая из которых состоит из всех сверточных слоев до (и за исключением) последнего слоя пула, а вторая часть — оставшаяся часть сети из (и исключение) последнего слоя пула до (снова исключая) окончательный уровень прогнозирования. Выходные данные первой части иногда называются картой сверточных признаков. Он используется в качестве входных данных на уровень пула roi, который выполняет операцию объединения с частью входной карты, которая соответствует предложениям региона на исходном изображении. Предложения по регионам являются вторыми входными данными на уровень пула roi. В Более быстрых R-CNN эти предложения создаются небольшой подсетью, называемой сетью предложений региона (RPN, см. следующий раздел).

Выходные данные уровня пула roi всегда будут иметь одинаковый фиксированный размер, так как он объединяет любые входные данные (сверточная карта признаков + предложение региона) к одному и тому же размеру выходных данных. Обратите внимание, что размер входных данных, т. е. размер сверточных подвигов карты и, следовательно, размер входного изображения может быть произвольным. Для обучения алгоритму используются четыре функции потери, два для RPN и два для детектора (см. также следующий раздел). Следующий метод содержится FasterRCNN_train.py и показывает высокоуровневую конструкцию модели Ускорения R-CNN. Полный код и см. в FasterRCNN_train.pyutils/rpn/rpn_helpers.py ней.

def create_faster_rcnn_model(features, scaled_gt_boxes, dims_input, cfg):
    # Load the pre-trained classification net and clone layers
    base_model = load_model(cfg['BASE_MODEL_PATH'])
    conv_layers = clone_conv_layers(base_model, cfg)
    fc_layers = clone_model(base_model, [cfg["MODEL"].POOL_NODE_NAME], [cfg["MODEL"].LAST_HIDDEN_NODE_NAME], clone_method=CloneMethod.clone)

    # Normalization and conv layers
    feat_norm = features - Constant([[[v]] for v in cfg["MODEL"].IMG_PAD_COLOR])
    conv_out = conv_layers(feat_norm)

    # RPN and prediction targets
    rpn_rois, rpn_losses = create_rpn(conv_out, scaled_gt_boxes, dims_input, cfg)
    rois, label_targets, bbox_targets, bbox_inside_weights = \
        create_proposal_target_layer(rpn_rois, scaled_gt_boxes, cfg)

    # Fast RCNN and losses
    cls_score, bbox_pred = create_fast_rcnn_predictor(conv_out, rois, fc_layers, cfg)
    detection_losses = create_detection_losses(...)
    loss = rpn_losses + detection_losses
    pred_error = classification_error(cls_score, label_targets, axis=1)

    return loss, pred_error

После обучения сеть преобразуется в модель оценки, удаляя все части, которые не требуются для оценки, например функции потери. Окончательная модель оценки имеет три выходных данных (дополнительные сведения см. в FasterRCNN_train.py следующих статьяхcreate_faster_rcnn_eval_model()):

  • rpn_rois — абсолютные пиксельные координаты кандидатов rois
  • cls_pred - вероятности класса для каждого roI
  • bbox_regr — коэффициенты регрессии на класс для каждого ROI.

Чтобы использовать модель оценки из Python, можно использовать из FasterRCNN_EvaluatorFasterRCNN_eval.py. Вы можете загрузить модель один раз, а затем оценить отдельные изображения по мере использования. Метод process_image() вычислителя принимает путь к изображению в качестве аргумента, вычисляет модель на этом изображении и применяет регрессию ограничивающего прямоугольного поля к результирующим роузам. Он возвращает регрессированные roIs и соответствующие вероятности класса:

    evaluator = FasterRCNN_Evaluator(model, cfg)
    regressed_rois, cls_probs = evaluator.process_image(img_path)

Сеть предложений в регионе

Быстрее R-CNN использует так называемое предложение региона netwrok (RPN), которое создает интересующие кандидаты регионы (ROIs) на основе входного изображения. Это выступает против Fast R-CNN, который требует, чтобы предложения региона были предоставлены внешним источником. RPN по сути строится тремя слоями сверток и новым слоем, называемым слоем предложений. Новые слои реализуются как определяемая пользователем функция (UDF) в Python или C++ (см. дополнительные сведения ниже). Код Python, создающий RPN в CNTK, находится в utils/rpn/rpn_helpers.pyпапке utils/rpn .

Входные данные для RPN — это сверточная карта признаков, то же самое, что входные данные на уровень пула ROI. Эти входные данные передаются в первый слой свертки RPN, и результат распространяется на два других слоя сверток. Один из последних прогнозирует оценки классов для каждого региона кандидата, т. е. для каждой привязки в каждой пространственной позиции (9 привязок x 2 оценивает ширину x высоту x). Эти два показателя преобразуются (с помощью узла softmax) в оценки объектности для каждого кандидата, которые интерпретируются как вероятность того, что регион-кандидат содержит объект переднего плана или нет. Другой сверточный слой прогнозирует коэффициенты регрессии для фактической позиции ROI еще раз для каждого кандидата (9 якорей x 4 коэффициента x ширины x высоты).

Коэффициенты регрессии и оценки объектности (вероятности переднего плана и фона) передаются на уровень предложений. Этот слой сначала применяет коэффициенты регрессии к созданным привязкам, обрезает результат к границам изображения и отфильтровывает области кандидатов, которые слишком малы. Затем он сортирует кандидатов по вероятности переднего плана, применяет не максимальное подавление (NMS) для уменьшения числа кандидатов и, наконец, выборки требуемого количества roIs для его выходных данных.

Во время обучения Более быстрый R-CNN требуется два дополнительных новых слоя: целевой слой привязки и целевой слой предложения. Целевой слой привязки создает целевые значения для оценки объектности и коэффициенты регрессии RPN, используемые в функциях потери RPN. Аналогичным образом целевой слой предложения создает метки целевого класса для roIs и коэффициенты целевой регрессии на класс для окончательного детектора, который используется в функциях потери детектора.

Во время оценки требуется только уровень предложений (так как не требуются целевые объекты для функций потери). Уровень предложений в CNTK доступен в Python, а также на C++, целевые слои в настоящее время доступны только в Python. Таким образом, обучение Более быстрой R-CNN в настоящее время необходимо выполнить из API Python. Для хранения модели оценки после обучения, использующего набор __C.STORE_EVAL_MODEL_WITH_NATIVE_UDF = Trueреализации уровня собственных предложений.

Источник чтения и мини-пакета

При масштабировании изображений или перелистывания изображений для расширения данных также необходимо применить те же преобразования к заметкам о действительности на земле. (Перелистывание также должно применяться к кэшируемым предложениям в 4-этапном обучении, см. следующий раздел.) Так как эти присоединенные преобразования изображений и заметок в настоящее время не поддерживаются встроенными средствами чтения CNTK, мы используем пользовательское средство чтения Python и UserMinibatchSource более быстрый R-CNN. Они содержатся в utils/od_reader.py и utils/od_mb_source.py соответственно.

Обучение E2E и 4 этапа

Более быстрый исследовательский документ R-CNN описывает два метода обучения сети. Комплексное обучение обучает всю сеть в одном обучении с использованием всех четырех функций потери (потеря rpn регрессии, потеря объекта rpn, потеря регрессии детектора, потеря класса детектора). Мы используем комплексное обучение по умолчанию, вы можете выбрать между ними, задав соответствующий параметр__C.CNTK.TRAIN_E2E.FasterRCNN_config.py

Схема обучения на 4 этапе чередуется между обучением только сети предложений региона (сохранение детектора фиксированной) и обучением только детектора (исправление весов RPN). Эта схема обучения реализована в train_faster_rcnn_alternating()FasterRCNN_train.py. Это немного более сложно и часто использует клонирование частей модели, чтобы обеспечить замораживание и обучение весов выборочно. Кроме того, в 4-м этапе обучения предложения из RPN буферизуются после этапов 1 и 3 и используются на последующем этапе.

Использование другой базовой модели

Чтобы использовать другую базовую модель, необходимо выбрать другую конфигурацию модели в методе get_configuration()run_faster_rcnn.py. Две модели поддерживаются сразу:

    # for VGG16 base model use:         from utils.configs.VGG16_config import cfg as network_cfg
    # for AlexNet base model use:       from utils.configs.AlexNet_config import cfg as network_cfg

Чтобы скачать модель VGG16, используйте сценарий скачивания в <cntkroot>/PretrainedModels:

    python download_model.py VGG16_ImageNet_Caffe

Если вы хотите использовать другую базовую модель, необходимо скопировать файл конфигурации utils/configs/VGG16_config.py и изменить его в соответствии с базовой моделью:

# model config
__C.MODEL.BASE_MODEL = "VGG16"
__C.MODEL.BASE_MODEL_FILE = "VGG16_ImageNet_Caffe.model"
__C.MODEL.IMG_PAD_COLOR = [103, 116, 123]
__C.MODEL.FEATURE_NODE_NAME = "data"
__C.MODEL.LAST_CONV_NODE_NAME = "relu5_3"
__C.MODEL.START_TRAIN_CONV_NODE_NAME = "pool2" # __C.MODEL.FEATURE_NODE_NAME
__C.MODEL.POOL_NODE_NAME = "pool5"
__C.MODEL.LAST_HIDDEN_NODE_NAME = "drop7"
__C.MODEL.FEATURE_STRIDE = 16
__C.MODEL.RPN_NUM_CHANNELS = 512
__C.MODEL.ROI_DIM = 7

Для изучения имен узлов базовой модели можно использовать plot() метод из cntk.logging.graph. Обратите внимание, что модели ResNet в настоящее время не поддерживаются, так как объединение roi в CNTK пока не поддерживает среднее пулирование roi.