#python #tensorflow
#python #tensorflow
Вопрос:
Я написал следующий код, который принимает тензор feature_map формы (n_channels, img_height, img_width)
и область интереса формы (5,)
(элементами которой являются (1, xmin, ymin, xmax, ymax)
) и возвращает максимальный элемент каждого канала в указанной области:
def tf_box_pool(self, feature_map, roi):
''' Extracts region of interest from feature map
'''
# Compute the scaled down region of interest
self.spatial_scale = K.cast(self.spatial_scale, 'float32')
roi_start_w = tf.math.scalar_mul(self.spatial_scale, tf.cast(roi[1], 'float32'))
roi_start_h = tf.math.scalar_mul(self.spatial_scale, tf.cast(roi[2], 'float32'))
roi_end_w = tf.math.scalar_mul(self.spatial_scale, tf.cast(roi[3], 'float32'))
roi_end_h = tf.math.scalar_mul(self.spatial_scale, tf.cast(roi[4], 'float32'))
roi_height = tf.math.round(tf.math.maximum(roi_end_h - roi_start_h 1, 1))
roi_width = tf.math.round(tf.math.maximum(roi_end_w - roi_start_w 1, 1))
h_start = K.cast(roi_start_h, 'int32')
height = K.cast(roi_height, 'int32')
h_end = h_start height
w_start = K.cast(roi_start_w, 'int32')
width = K.cast(roi_width, 'int32')
w_end = w_start width
mapped_region = feature_map[:, h_start:h_end, w_start:w_end]
pooled_features = tf.math.reduce_max(mapped_region, axis=[1,2])
return pooled_features
Теперь у меня есть два тензора, представляющих пакет изображений и пакет списков областей интересов, формы которых являются соответственно (batch_size, n_channels, img_width, img_height)
и (batch_size, n_rois, 5)
.
Я хочу применить функцию, описанную выше, n_rois раз к каждому изображению в первом тензоре, передавая ее вместе с каждой интересующей областью во втором тензоре. Конечным результатом должен быть тензор формы (batch_size, n_rois, n_channels)
Как я могу это сделать?
Комментарии:
1. Вы все это поняли?
2. @rigo Я сделал и написал статью об этом! medium.com/xplore-ai /…