本文整理匯總了Python中utils.unmold_mask方法的典型用法代碼示例。如果您正苦於以下問題:Python utils.unmold_mask方法的具體用法?Python utils.unmold_mask怎麽用?Python utils.unmold_mask使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類utils
的用法示例。
在下文中一共展示了utils.unmold_mask方法的2個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Python代碼示例。
示例1: unmold_detections
# 需要導入模塊: import utils [as 別名]
# 或者: from utils import unmold_mask [as 別名]
def unmold_detections(self, detections, mrcnn_mask, image_shape, window):
"""Reformats the detections of one image from the format of the neural
network output to a format suitable for use in the rest of the
application.
detections: [N, (y1, x1, y2, x2, class_id, score)]
mrcnn_mask: [N, height, width, num_classes]
image_shape: [height, width, depth] Original size of the image before resizing
window: [y1, x1, y2, x2] Box in the image where the real image is
excluding the padding.
Returns:
boxes: [N, (y1, x1, y2, x2)] Bounding boxes in pixels
class_ids: [N] Integer class IDs for each bounding box
scores: [N] Float probability scores of the class_id
masks: [height, width, num_instances] Instance masks
"""
# How many detections do we have?
# Detections array is padded with zeros. Find the first class_id == 0.
zero_ix = np.where(detections[:, 4] == 0)[0]
N = zero_ix[0] if zero_ix.shape[0] > 0 else detections.shape[0]
# Extract boxes, class_ids, scores, and class-specific masks
boxes = detections[:N, :4]
class_ids = detections[:N, 4].astype(np.int32)
scores = detections[:N, 5]
masks = mrcnn_mask[np.arange(N), :, :, class_ids]
# Compute scale and shift to translate coordinates to image domain.
h_scale = image_shape[0] / (window[2] - window[0])
w_scale = image_shape[1] / (window[3] - window[1])
scale = min(h_scale, w_scale)
shift = window[:2] # y, x
scales = np.array([scale, scale, scale, scale])
shifts = np.array([shift[0], shift[1], shift[0], shift[1]])
# Translate bounding boxes to image domain
boxes = np.multiply(boxes - shifts, scales).astype(np.int32)
# Filter out detections with zero area. Often only happens in early
# stages of training when the network weights are still a bit random.
exclude_ix = np.where(
(boxes[:, 2] - boxes[:, 0]) * (boxes[:, 3] - boxes[:, 1]) <= 0)[0]
if exclude_ix.shape[0] > 0:
boxes = np.delete(boxes, exclude_ix, axis=0)
class_ids = np.delete(class_ids, exclude_ix, axis=0)
scores = np.delete(scores, exclude_ix, axis=0)
masks = np.delete(masks, exclude_ix, axis=0)
N = class_ids.shape[0]
# Resize masks to original image size and set boundary threshold.
full_masks = []
for i in range(N):
# Convert neural network mask to full size mask
full_mask = utils.unmold_mask(masks[i], boxes[i], image_shape)
full_masks.append(full_mask)
full_masks = np.stack(full_masks, axis=-1)\
if full_masks else np.empty((0,) + masks.shape[1:3])
return boxes, class_ids, scores, full_masks
示例2: unmold_detections
# 需要導入模塊: import utils [as 別名]
# 或者: from utils import unmold_mask [as 別名]
def unmold_detections(self, detections, mrcnn_mask, image_shape, window):
"""Reformat the detections of one image from the format of the neural
network output to a format suitable for use in the rest of the application.
detections: [N, (z1, y1, x1, z2, y2, x2, class_id, score)]
mrcnn_mask: [N, depth, height, width, num_classes]
image_shape: [channels, depth, height, width] Original size of the image before resizing
window: [z1, y1, x1, z2, y2, x2] Box in the image where the real image is excluding the padding.
Returns:
boxes: [N, (y1, x1, z1, y2, x2, z2)] Bounding boxes in pixels
class_ids: [N] Integer class IDs for each bounding box
scores: [N] Float probability scores of the class_id
masks: [height, width, depth] normal shape full mask
"""
start_time = time.time()
# How many detections do we have?
# Detections array is padded with zeros. Find the first class_id == 0.
zero_ix = np.where(detections[:, 6] == 0)[0]
N = zero_ix[0] if zero_ix.shape[0] > 0 else detections.shape[0]
# Extract boxes, class_ids, scores, and class-specific masks
boxes = detections[:N, :6].astype(np.int32)
class_ids = detections[:N, 6].astype(np.int32)
scores = detections[:N, 7]
masks = mrcnn_mask[np.arange(N), :, :, :, :]
# Compute scale and shift to translate the bounding boxes to image domain.
d_scale = image_shape[1] / (window[3] - window[0])
h_scale = image_shape[2] / (window[4] - window[1])
w_scale = image_shape[3] / (window[5] - window[2])
shift = window[:3] # z, y, x
scales = np.array([d_scale, h_scale, w_scale, d_scale, h_scale, w_scale])
shifts = np.array([shift[0], shift[1], shift[2], shift[0], shift[1], shift[2]])
boxes = np.multiply(boxes - shifts, scales).astype(np.int32)
# Filter out detections with zero area. Often only happens in early
# stages of training when the network weights are still a bit random.
exclude_ix = np.where(
(boxes[:, 3] - boxes[:, 0]) * (boxes[:, 4] - boxes[:, 1]) * (boxes[:, 5] - boxes[:, 2]) <= 0)[0]
if exclude_ix.shape[0] > 0:
boxes = np.delete(boxes, exclude_ix, axis=0)
class_ids = np.delete(class_ids, exclude_ix, axis=0)
scores = np.delete(scores, exclude_ix, axis=0)
masks = np.delete(masks, exclude_ix, axis=0)
# Resize masks to original image size.
full_masks = utils.unmold_mask(masks[0], boxes[0], image_shape)
full_mask = np.argmax(full_masks, axis=3)
# Transform the shapes of boxes to normal shape.
boxes[:, [0, 1, 2, 3, 4, 5]] = boxes[:, [1, 2, 0, 4, 5, 3]]
print("unmold done, using time", time.time() - start_time)
return boxes, np.arange(1, 8), scores, full_mask.transpose((1, 2, 0))
############################################################
# Data Formatting
############################################################