class fast_rcnn: ''' Crop and resize areas from the feature-extracting CNN's feature maps according to the ROIs generated from the ROI proposal layer ''' def __init__(self, featureMaps, roi_proposal_net, eval_mode): self.featureMaps = featureMaps self.roi_proposal_net = roi_proposal_net self.rois = roi_proposal_net.get_rois() self.im_dims = roi_proposal_net.im_dims self.num_classes = cfg.NUM_CLASSES self.eval_mode = eval_mode self._network() def _network(self): with tf.variable_scope('fast_rcnn'): # No dropout in evaluation mode keep_prob = cfg.FRCNN_DROPOUT_KEEP_RATE if self.eval_mode is False else 1.0 # ROI pooling pooledFeatures = roi_pool(self.featureMaps, self.rois, self.im_dims) # Fully Connect layers (with dropout) with tf.variable_scope('fc'): self.rcnn_fc_layers = Layers(pooledFeatures) self.rcnn_fc_layers.flatten() for i in range(len(cfg.FRCNN_FC_HIDDEN)): self.rcnn_fc_layers.fc(output_nodes=cfg.FRCNN_FC_HIDDEN[i], keep_prob=keep_prob) hidden = self.rcnn_fc_layers.get_output() # Classifier score with tf.variable_scope('cls'): self.rcnn_cls_layers = Layers(hidden) self.rcnn_cls_layers.fc(output_nodes=self.num_classes, activation_fn=None) # Bounding Box refinement with tf.variable_scope('bbox'): self.rcnn_bbox_layers = Layers(hidden) self.rcnn_bbox_layers.fc(output_nodes=self.num_classes * 4, activation_fn=None) # Get functions def get_cls_score(self): return self.rcnn_cls_layers.get_output() def get_cls_prob(self): logits = self.get_cls_score() return tf.nn.softmax(logits) def get_bbox_refinement(self): return self.rcnn_bbox_layers.get_output() # Loss functions def get_fast_rcnn_cls_loss(self): assert self.eval_mode is False, 'No Fast RCNN cls loss without ground truth boxes' fast_rcnn_cls_score = self.get_cls_score() labels = self.roi_proposal_net.get_labels() return fast_rcnn_cls_loss(fast_rcnn_cls_score, labels) def get_fast_rcnn_bbox_loss(self): assert self.eval_mode is False, 'No Fast RCNN bbox loss without ground truth boxes' fast_rcnn_bbox_pred = self.get_bbox_refinement() bbox_targets = self.roi_proposal_net.get_bbox_targets() roi_inside_weights = self.roi_proposal_net.get_bbox_inside_weights() roi_outside_weights = self.roi_proposal_net.get_bbox_outside_weights() return fast_rcnn_bbox_loss(fast_rcnn_bbox_pred, bbox_targets, roi_inside_weights, roi_outside_weights)
class fast_rcnn: ''' Crop and resize areas from the feature-extracting CNN's feature maps according to the ROIs generated from the ROI proposal layer ''' def __init__(self,featureMaps, roi_proposal_net): self.featureMaps = featureMaps self.roi_proposal_net = roi_proposal_net self.rois = roi_proposal_net.get_rois() self.im_dims = roi_proposal_net.im_dims self.flags = roi_proposal_net.flags self._network() def _network(self): with tf.variable_scope('fast_rcnn'): # ROI pooling pooledFeatures = roi_pool(self.featureMaps,self.rois,self.im_dims) # Fully Connect layers (with dropout) with tf.variable_scope('fc'): self.rcnn_fc_layers = Layers(pooledFeatures) self.rcnn_fc_layers.flatten() self.rcnn_fc_layers.fc(output_nodes=4096, keep_prob=0.5) self.rcnn_fc_layers.fc(output_nodes=4096, keep_prob=0.5) hidden = self.rcnn_fc_layers.get_output() # Classifier score with tf.variable_scope('cls'): self.rcnn_cls_layers = Layers(hidden) self.rcnn_cls_layers.fc(output_nodes=self.flags['num_classes'],activation_fn=None) # Bounding Box refinement with tf.variable_scope('bbox'): self.rcnn_bbox_layers = Layers(hidden) self.rcnn_bbox_layers.fc(output_nodes=4*self.flags['num_classes'],activation_fn=None) # Get functions def get_cls_score(self): return self.rcnn_cls_layers.get_output() def get_cls_prob(self): logits = self.get_cls_score() return tf.nn.softmax(logits) def get_bbox_refinement(self): return self.rcnn_bbox_layers.get_output() # Loss functions def get_fast_rcnn_cls_loss(self): fast_rcnn_cls_score = self.get_cls_score() labels = self.roi_proposal_net.get_labels() return fast_rcnn_cls_loss(fast_rcnn_cls_score, labels) def get_fast_rcnn_bbox_loss(self): fast_rcnn_bbox_pred = self.get_bbox_refinement() bbox_targets = self.roi_proposal_net.get_bbox_targets() roi_inside_weights = self.roi_proposal_net.get_bbox_inside_weights() roi_outside_weights = self.roi_proposal_net.get_bbox_outside_weights() return fast_rcnn_bbox_loss(fast_rcnn_bbox_pred, bbox_targets, roi_inside_weights, roi_outside_weights)
class fast_rcnn: ''' Crop and resize areas from the feature-extracting CNN's feature maps according to the ROIs generated from the ROI proposal layer ''' def __init__(self, featureMaps, roi_proposal_net, eval_mode): self.featureMaps = featureMaps self.roi_proposal_net = roi_proposal_net self.rois = roi_proposal_net.get_rois() self.im_dims = roi_proposal_net.im_dims self.num_classes = cfg.NUM_CLASSES self.eval_mode = eval_mode self._network() def _network(self): with tf.variable_scope('fast_rcnn'): # No dropout in evaluation mode keep_prob = cfg.FRCNN_DROPOUT_KEEP_RATE if self.eval_mode is False else 1.0 # ROI pooling pooledFeatures = roi_pool(self.featureMaps, self.rois, self.im_dims) # Fully Connect layers (with dropout) with tf.variable_scope('fc'): self.rcnn_fc_layers = Layers(pooledFeatures) self.rcnn_fc_layers.flatten() for i in range(len(cfg.FRCNN_FC_HIDDEN)): self.rcnn_fc_layers.fc(output_nodes=cfg.FRCNN_FC_HIDDEN[i], keep_prob=keep_prob) hidden = self.rcnn_fc_layers.get_output() # Classifier score with tf.variable_scope('cls'): self.rcnn_cls_layers = Layers(hidden) self.rcnn_cls_layers.fc(output_nodes=self.num_classes, activation_fn=None) # Bounding Box refinement with tf.variable_scope('bbox'): self.rcnn_bbox_layers = Layers(hidden) self.rcnn_bbox_layers.fc(output_nodes=self.num_classes*4, activation_fn=None) # Get functions def get_cls_score(self): return self.rcnn_cls_layers.get_output() def get_cls_prob(self): logits = self.get_cls_score() return tf.nn.softmax(logits) def get_bbox_refinement(self): return self.rcnn_bbox_layers.get_output() # Loss functions def get_fast_rcnn_cls_loss(self): assert self.eval_mode is False, 'No Fast RCNN cls loss without ground truth boxes' fast_rcnn_cls_score = self.get_cls_score() labels = self.roi_proposal_net.get_labels() return fast_rcnn_cls_loss(fast_rcnn_cls_score, labels) def get_fast_rcnn_bbox_loss(self): assert self.eval_mode is False, 'No Fast RCNN bbox loss without ground truth boxes' fast_rcnn_bbox_pred = self.get_bbox_refinement() bbox_targets = self.roi_proposal_net.get_bbox_targets() roi_inside_weights = self.roi_proposal_net.get_bbox_inside_weights() roi_outside_weights = self.roi_proposal_net.get_bbox_outside_weights() return fast_rcnn_bbox_loss(fast_rcnn_bbox_pred, bbox_targets, roi_inside_weights, roi_outside_weights)