def load_model(self): self.sess = tf.Session() self.saver = tf.train.import_meta_graph( meta_graph_or_file=self.model_path + '.meta', ) # example model path ./models/fundus_300/5/model_1.ckpt self.saver.restore( self.sess, save_path=self.model_path ) # example model path ./models/fundus_300/5/model_1.ckpt self.top_conv = tf.get_default_graph().get_tensor_by_name('top_conv:0') self.cls_conv = tf.get_default_graph().get_tensor_by_name( 'cls/cls_output:0') self.bbox_conv = tf.get_default_graph().get_tensor_by_name( 'bbox/cls_output:0') self.rpn_labels_op = tf.get_default_graph().get_tensor_by_name( 'rpn_labels:0') self.rpn_bbox_targets_op = tf.get_default_graph().get_tensor_by_name( 'rpn_bbox_targets:0') self.rpn_bbox_inside_weights_op = tf.get_default_graph( ).get_tensor_by_name('rpn_bbox_inside_weights:0') self.rpn_bbox_outside_weights_op = tf.get_default_graph( ).get_tensor_by_name('rpn_bbox_outside_weights:0') self.indice_op = tf.get_default_graph().get_tensor_by_name('indice:0') self.bbox_targets_op = tf.get_default_graph().get_tensor_by_name( 'bbox_targets:0') self.bbox_inside_weights_op = tf.get_default_graph( ).get_tensor_by_name('bbox_inside_weights:0') self.bbox_outside_weights_op = tf.get_default_graph( ).get_tensor_by_name('bbox_outside_weights:0') self.x_ = tf.get_default_graph().get_tensor_by_name('x_:0') self.im_dims = tf.get_default_graph().get_tensor_by_name('im_dims:0') self.gt_boxes = tf.get_default_graph().get_tensor_by_name('gt_boxes:0') self.phase_train = tf.get_default_graph().get_tensor_by_name( 'phase_train:0') self.roi_blobs_op, self.roi_scores_op, self.roi_blobs_ori_op, self.roi_scores_ori_op, self.roi_softmax_op = \ roi.roi_proposal(self.cls_conv, self.bbox_conv, self.im_dims, self.feat_stride, self.anchor_scales, is_training=True)
# D_op : indiced rpn target op # E_op : rpn_inside_weights # F_op : rpn_outside_weights rpn_bbox_loss_op , diff_op , C_op , D_op ,E_op ,F_op= \ bbox_loss(rpn_bbox_pred ,bbox_targets_op , bbox_inside_weights_op , bbox_outside_weights_op , rpn_labels_op) anchor_scales = [3, 4, 5] # BBOX OP # INV inv_blobs_op OP = return to the original Coordinate # INV target_inv_blobs_op OP = return to the original Coordinate (indices ) inv_blobs_op , target_inv_blobs_op = inv_transform_layer(rpn_bbox_pred , cfg_key = phase_train , \ _feat_stride = _feat_stride , anchor_scales =anchor_scales , indices = indice_op) blobs_op, scores_op = roi.roi_proposal(rpn_cls, rpn_bbox_pred, im_dims, _feat_stride, anchor_scales, is_training=True) cost_op = rpn_cls_loss_op + rpn_bbox_loss_op train_cls_op = optimizer(rpn_cls_loss_op, lr=0.01) train_bbox_op = optimizer(rpn_bbox_loss_op, lr=0.001) train_op = optimizer(cost_op, lr=0.001) sess = sess_start() max_iter = 55000 * 100 for i in range(2, max_iter): src_img, src_gt_boxes = next_img_gtboxes(i) h, w = np.shape(src_img) src_im_dims = [(h, w)] rpn_cls_score = np.zeros(
rpn_bbox_loss_op , diff_op , C_op , D_op ,E_op ,F_op= \ bbox_loss(rpn_bbox_pred ,bbox_targets_op , bbox_inside_weights_op , bbox_outside_weights_op , rpn_labels_op) rpn_bbox_loss_op = tf.identity(rpn_bbox_loss_op, name='rpn_bbox_loss_op') anchor_scales = [24, 36, 50] # BBOX OP # INV inv_blobs_op OP = return to the original Coordinate # INV target_inv_blobs_op OP = return to the original Coordinate (indices ) #inv_blobs_op , target_inv_blobs_op = inv_transform_layer(rpn_bbox_pred , cfg_key = phase_train , \ # _feat_stride = _feat_stride , anchor_scales =anchor_scales , indices = indice_op) #inv_blobs_op=tf.identity(inv_blobs_op,name='inv_blobs_op') # Region of Interested roi_blobs_op, roi_scores_op , roi_blobs_ori_op ,roi_scores_ori_op , roi_softmax_op = \ roi.roi_proposal(rpn_cls , rpn_bbox_pred , im_dims , feat_stride_ , anchor_scales_ ,is_training=phase_train) # NMS 후 >0.5 인것 fast rcnn 으로 넘기기 # Fast rcnn 을 학습시킬 roi을 추출합니다 ptl_rois_op, ptl_labels_op, ptl_bbox_targets_op, ptl_bbox_inside_weights_op, ptl_bbox_outside_weights_op = \ proposal_target_layer(roi_blobs_op , gt_boxes , _num_classes= n_classes ) # ptl = Proposal Target Layer # Fast RCNN LOGITS # foreground 만 보내면 된다. rois_op = tf.cond(phase_train, lambda: ptl_rois_op, lambda: roi_blobs_op) fast_rcnn_cls_logits , fast_rcnn_bbox_logits = \ fast_rcnn(top_conv , ptl_rois_op ,roi_blobs_op ,im_dims , num_classes=n_classes , phase_train = phase_train) fast_rcnn_cls_logits = tf.identity(fast_rcnn_cls_logits, 'fr_cls_logits_op') fast_rcnn_bbox_logits = tf.identity(fast_rcnn_bbox_logits, 'fr_bboxes_logits_op') # 만약 training 이면 ptl rois op 을 , eval 이면 roi_blobs_op 을 선택한다 # fast_rcnn_cls_logits 은 행이 4 * n_classes 만큼 나온다 . 그래서 cls 에 해당하는 좌표만 가져온다 # itr ==> interest
shape=[1, conv_h, conv_w, conv_out], name='top_conv_op') roi_cls_op = tf.placeholder(dtype=tf.float32, shape=[1, conv_h, conv_w, n_anchor * 2], name='rpn_cls_op') roi_bbox_op = tf.placeholder(dtype=tf.float32, shape=[1, conv_h, conv_w, n_anchor * 4], name='rpn_bbox_op') # im_dims = tf.placeholder(tf.int32, [None, 2], name='im_dims') gt_boxes = tf.placeholder(tf.int32, [None, 5], name='gt_boxes') phase_train = tf.placeholder(tf.bool, name='phase_train') # Region of Interested roi_blobs_op, roi_scores_op , roi_blobs_ori_op ,roi_scores_ori_op , roi_softmax_op = \ roi.roi_proposal(roi_cls_op , roi_bbox_op , im_dims , _feat_stride , anchor_scales ,is_training=True) # Proposoal Target Layer ptl_rois_op, ptl_labels_op, ptl_bbox_targets_op, ptl_bbox_inside_weights_op, ptl_bbox_outside_weights_op = \ proposal_target_layer(roi_blobs_op , gt_boxes , _num_classes= n_classes ) # ptl = Proposal Target Layer # Fast RCNN Model fast_rcnn_cls_logits , fast_rcnn_bbox_logits = \ fast_rcnn(top_conv_op , ptl_rois_op , im_dims , eval_mode=False , num_classes=n_classes , phase_train = phase_train) fr_cls_loss_op = fast_rcnn_cls_loss(fast_rcnn_cls_logits, ptl_labels_op) fr_bbox_loss_op = fast_rcnn_bbox_loss(fast_rcnn_bbox_logits, ptl_bbox_targets_op, ptl_bbox_inside_weights_op, ptl_bbox_outside_weights_op) fr_cost_op = fr_cls_loss_op + fr_bbox_loss_op lr = 0.0001