Пример #1
0
datasets = ['./data/data_batch_1', './data/data_batch_2', './data/data_batch_3', './data/data_batch_4','./data/data_batch_5']
epoch = input('\nPlease input epoch:')
batch_size = input('Please input batch size:')
temp = 50000/batch_size

t1 = time.time()
start_index = 0
images = np.zeros([50000, 32, 32, 3])
labels = np.zeros([50000, 10])
for j in xrange(5):
	images[j*10000:(j+1)*10000] = load_data.load_images(datasets[j])
	labels[j*10000:(j+1)*10000] = load_data.load_labels(datasets[j])


for i in xrange(epoch * temp):
	batch_x, batch_y, start_index = load_data.next_batch(images, labels, batch_size, start_index)
	_, loss_val = sess.run([train_step, cross_entropy], feed_dict={x:batch_x, y_:batch_y, keep_prob: 0.8})
	if i%temp == 0:
		print 'epoch %d , loss = %s' % (i/temp, loss_val)

del images, labels

print '\nEnd training.\n'
t2 = time.time()

test_x, test_y = load_data.load_data('./data/test_batch')

print 'test accuracy %g' %accuracy.eval(feed_dict={x: test_x, y_: test_y, keep_prob: 1.0})
print 'Spends %f seconds.' % (t2 - t1)

Пример #2
0
def main():
    batch_size = 3
    model = MyModel((432, 768), training=True)
    opt = tf.keras.optimizers.Adam(lr=0.0002)
    # model1 = tf.python.keras.Model()

    checkpoint_dir = 'path/to/model_dir'
    if not os.path.exists(checkpoint_dir):
        os.makedirs(checkpoint_dir)

    ckpt = tf.train.Checkpoint(step=tf.Variable(1), optimizer=opt, net=model)
    manager = tf.train.CheckpointManager(ckpt, './tf_ckpts', max_to_keep=3)
    ckpt.restore(manager.latest_checkpoint)
    if manager.latest_checkpoint:
        print("Restored from {}".format(manager.latest_checkpoint))
    else:
        print("Initializing from scratch.")
        img_, gtbox_, gtmask_ = next_batch(1, 0)
        img0_ = img_['1']
        gtbox0_ = gtbox_['1']
        gtmask0_ = gtmask_['1']
        img1_, gtbox1_, gtmask1_ = preprocess1(img0_, gtbox0_, gtmask0_)
        images = image_mean_subtraction(img1_)
        pre_ini = model(images)
        model.model1.resnet50.load_weights(
            "./path/resnet50_weights/resnet50_weights_tf.h5", by_name=True)

    pr_file = open("./pr.txt", mode='a', encoding='UTF-8-sig')

    epochs = 200
    ite = 10

    for epoch in range(epochs):
        TP = 0.
        FP = 0.
        FN = 0.

        for i in range(ite):

            ckpt.step.assign_add(1)
            img, gtbox, gtmask = next_batch1(batch_size, i % 400)
            img_dims = img.shape[1:3]
            img_mask = generate_mask(img_dims, gtmask, batch_size)
            img_mask = tf.cast(img_mask, tf.int32)
            images = image_mean_subtraction(img)
            with tf.GradientTape() as t:
                result, rpn_cls_score, rpn_bbox_pred = model(images)
                roi_pred = result[4]
                mask_pred = result[3]
                cls_score = result[2]
                cls_pred = result[0]
                offset_pred = result[5]

                # compute rpn loss
                rpn_cls_loss1, rpn_bbox_loss1 = loss_rpn(
                    rpn_cls_score, rpn_bbox_pred, gtbox, img_dims)
                rpn_loss = rpn_cls_loss1 + rpn_bbox_loss1
                total_loss = rpn_loss

                # the first image
                batch_ind = np.reshape(
                    np.where(np.reshape(roi_pred[:, 0], (-1)) == 0), (-1, ))
                roi_pred1 = tf.gather(roi_pred, batch_ind)
                mask_pred1 = tf.gather(mask_pred, batch_ind)
                cls_score1 = tf.gather(cls_score, batch_ind)
                cls_pred1 = tf.gather(cls_pred, batch_ind)
                offset_pred1 = tf.gather(offset_pred, batch_ind)
                keep = model_part3_1(roi_pred1[:, 1:], cls_score1)

                roi_pred_keep = tf.gather(roi_pred1, keep, axis=0)
                cls_score_keep = tf.gather(cls_score1, keep, axis=0)
                cls_pred_keep = tf.gather(cls_pred1, keep, axis=0)
                offset_pred_keep = tf.gather(offset_pred1, keep, axis=0)

                rois1, labels1, bbox_targets1, bbox_inside_weights1, \
                bbox_outside_weights1, keep_inds, fg_num = proposal_target_layer(
                    roi_pred_keep, gtbox, 1
                )
                print("positive_nums:" + str(fg_num))
                cls_scores2 = tf.gather(cls_pred_keep, keep_inds, axis=0)
                preds2 = tf.gather(offset_pred_keep, keep_inds, axis=0)
                for j in range(fg_num):
                    mask1 = model_part3_2(roi_pred1, keep, keep_inds[j],
                                          mask_pred1, cls_score1)
                    rfcn_mask_loss = loss_mask(mask1,
                                               roi_pred_keep[keep_inds[j]],
                                               img_mask[0])
                    total_loss = total_loss + 2 * rfcn_mask_loss

                # record the TP FP FN to compute precision and recall
                gtbox_ind = np.where(gtbox[:, 0] == 0)
                TP1, FP1, FN1 = compute_tp_fp_fn(cls_pred_keep[:, 1],
                                                 roi_pred_keep[:, 1:],
                                                 gtbox[gtbox_ind], 0.5)
                TP += TP1
                FP += FP1
                FN += FN1

                for i1 in range(1, batch_size):
                    batch_ind = np.reshape(
                        np.where(np.reshape(roi_pred[:, 0], (-1)) == i1),
                        (-1, ))
                    roi_pred1 = tf.gather(roi_pred, batch_ind)
                    mask_pred1 = tf.gather(mask_pred, batch_ind)
                    cls_score1 = tf.gather(cls_score, batch_ind)
                    cls_pred1 = tf.gather(cls_pred, batch_ind)
                    offset_pred1 = tf.gather(offset_pred, batch_ind)
                    keep = model_part3_1(roi_pred1[:, 1:], cls_score1)

                    roi_pred_keep = tf.gather(roi_pred1, keep, axis=0)
                    cls_score_keep = tf.gather(cls_score1, keep, axis=0)
                    cls_pred_keep = tf.gather(cls_pred1, keep, axis=0)
                    offset_pred_keep = tf.gather(offset_pred1, keep, axis=0)

                    # the keep rois in rois and gt_boxes
                    rois1_1, labels1_1, bbox_targets1_1, bbox_inside_weights1_1, \
                    bbox_outside_weights1_1, keep_inds, fg_num = proposal_target_layer(
                        roi_pred_keep, gtbox, 1
                    )
                    print("positive_nums:" + str(fg_num))
                    cls_scores1_1 = tf.gather(cls_pred_keep, keep_inds, axis=0)
                    preds1_1 = tf.gather(offset_pred_keep, keep_inds, axis=0)
                    cls_scores2 = tf.concat((cls_scores2, cls_scores1_1),
                                            axis=0)
                    preds2 = tf.concat((preds2, preds1_1), axis=0)
                    labels1 = tf.concat((labels1, labels1_1), 0)
                    bbox_targets1 = tf.concat((bbox_targets1, bbox_targets1_1),
                                              axis=0)
                    bbox_inside_weights1 = tf.concat(
                        (bbox_inside_weights1, bbox_inside_weights1_1), 0)
                    bbox_outside_weights1 = tf.concat(
                        (bbox_outside_weights1, bbox_outside_weights1_1), 0)

                    for j in range(fg_num):
                        mask1 = model_part3_2(roi_pred1, keep, keep_inds[j],
                                              mask_pred1, cls_score1)
                        rfcn_mask_loss = loss_mask(mask1,
                                                   roi_pred_keep[keep_inds[j]],
                                                   img_mask[i1])
                        total_loss = total_loss + 2 * rfcn_mask_loss

                    gtbox_ind = np.where(gtbox[:, 0] == i1)
                    TP1, FP1, FN1 = compute_tp_fp_fn(cls_pred_keep[:, 1],
                                                     roi_pred_keep[:, 1:],
                                                     gtbox[gtbox_ind], 0.5)
                    TP += TP1
                    FP += FP1
                    FN += FN1

                rfcn_cls_loss1, rfcn_bbox_loss1 = loss_cls_bbox(
                    cls=cls_scores2,
                    offset=preds2,
                    labels=labels1,
                    bbox_targets=bbox_targets1,
                    bbox_inside_weights=bbox_inside_weights1,
                    bbox_outside_weights=bbox_outside_weights1)

                total_loss = total_loss + rfcn_cls_loss1 + rfcn_bbox_loss1

            if np.isnan(total_loss):
                exit()

            grads = t.gradient(total_loss, model.trainable_variables)
            opt.apply_gradients(zip(grads, model.trainable_variables))

            print('Training loss (for one batch) at epoch %s step %s: %s' %
                  (epoch, i, float(total_loss)))
            print(
                'rpn_cls_loss:{:.5f}---rpn_bbox_loss:{:.5f}---rfcn_cls_loss:{:.5f}---'
                'rfcn_bbox_loss:{}'.format(rpn_cls_loss1, rpn_bbox_loss1,
                                           rfcn_cls_loss1, rfcn_bbox_loss1))
            print(' ' * 20)

            if int(ckpt.step) % 5 == 4:
                save_path = manager.save()
                print("save model")

        precision = TP / np.maximum((TP + FP), np.finfo(np.float64).eps)
        recall = TP / float(TP + FN)
        print('Precision: %s ------Recall: %s' % (precision, recall))
        print(' ' * 20)
        pr_file.write("P:" + str(precision) + '    ' + "R" + str(recall))
        pr_file.write('\n')
Пример #3
0
def main():
    model = MyModel((720, 1280), training=True)
    opt = tf.keras.optimizers.Adam(lr=0.002)
    # model1 = tf.python.keras.Model()

    batch_size = 5

    checkpoint_dir = 'path/to/model_dir'
    if not os.path.exists(checkpoint_dir):
        os.makedirs(checkpoint_dir)

    ckpt = tf.train.Checkpoint(step=tf.Variable(1), optimizer=opt, net=model)
    manager = tf.train.CheckpointManager(ckpt, './tf_ckpts', max_to_keep=3)
    ckpt.restore(manager.latest_checkpoint)
    if manager.latest_checkpoint:
        print("Restored from {}".format(manager.latest_checkpoint))
        # img_, gtbox_, gtmask_ = next_batch(1, 0)
        # img0_ = img_['1']
        # gtbox0_ = gtbox_['1']
        # gtmask0_ = gtmask_['1']
        # img1_, gtbox1_, gtmask1_ = preprocess1(img0_, gtbox0_, gtmask0_)
        # images = image_mean_subtraction(img1_)
        # pre_ini = model(images)
        # model.model1.resnet50.load_weights("./path/resnet50_weights/resnet50_weights_tf.h5", by_name=True)

    else:
        print("Initializing from scratch.")
        img_, gtbox_, gtmask_ = next_batch(1, 0)
        img0_ = img_['1']
        gtbox0_ = gtbox_['1']
        gtmask0_ = gtmask_['1']
        img1_, gtbox1_, gtmask1_ = preprocess1(img0_, gtbox0_, gtmask0_)
        images = image_mean_subtraction(img1_)
        pre_ini = model(images)
        model.model1.resnet50.load_weights("./path/resnet50_weights/resnet50_weights_tf.h5", by_name=True)

    pr_file = open("./pr.txt", mode='a', encoding='UTF-8-sig')

    epochs = 300
    img_num = 4

    for epoch in range(epochs):
        TP = 0.
        FP = 0.
        FN = 0.

        for i in range(img_num):

            ckpt.step.assign_add(1)

            img, gtbox, gtmask = next_batch(1, i % 400)
            img0 = img[str(i+1)]
            gtbox0 = gtbox[str(i+1)]
            gtmask0 = gtmask[str(i+1)]
            img1, gtbox1, gtmask1 = preprocess1(img0, gtbox0, gtmask0)
            img_dims = img1.shape[0:2]
            img_mask = generate_mask(img_dims, gtmask1)
            img_mask = tf.cast(img_mask, tf.int32)
            images = image_mean_subtraction(img1)
            with tf.GradientTape() as t:
                result, rpn_cls_score, rpn_bbox_pred, keep = model(images)
                roi_pred = result[4]
                mask_pred = result[3]
                cls_score = result[2]
                cls_pred = result[0]
                offset_pred = result[5]
                roi_pred_keep = tf.gather(roi_pred, keep, axis=0)
                cls_score_keep = tf.gather(cls_score, keep, axis=0)
                cls_pred_keep = tf.gather(cls_pred, keep, axis=0)
                offset_pred_keep = tf.gather(offset_pred, keep, axis=0)

                rpn_cls_loss1, rpn_bbox_loss1 = loss_rpn(rpn_cls_score, rpn_bbox_pred, gtbox1, img_dims)
                rpn_loss = rpn_cls_loss1 + rpn_bbox_loss1
                # the keep rois in rois and gt_boxes
                rois1, labels1, bbox_targets1, bbox_inside_weights1, \
                bbox_outside_weights1, keep_inds, fg_num = proposal_target_layer(
                    roi_pred_keep, gtbox1, 1
                )
                print("positive_nums:"+str(fg_num))

                for j in range(fg_num):
                    pass

                rfcn_cls_loss1, rfcn_bbox_loss1 = loss_cls_bbox(cls=cls_pred_keep, offset=offset_pred_keep, keep_inds=keep_inds,
                                                   labels=labels1, bbox_targets=bbox_targets1,
                                                   bbox_inside_weights=bbox_inside_weights1,
                                                   bbox_outside_weights=bbox_outside_weights1)
                loss1 = rpn_loss + rfcn_cls_loss1
                total_loss = rpn_cls_loss1 + rpn_bbox_loss1 + rfcn_cls_loss1 + 2*rfcn_bbox_loss1

                for j in range(fg_num):
                    mask1 = model_part3_2(roi_pred, keep, keep_inds[j], mask_pred, cls_score)
                    rfcn_mask_loss = loss_mask(mask1, roi_pred_keep[keep_inds[j]], img_mask)
                    total_loss = total_loss + rfcn_mask_loss

            if np.isnan(total_loss):
                exit()

            grads = t.gradient(total_loss, model.trainable_variables)
            opt.apply_gradients(zip(grads, model.trainable_variables))

            # record the TP FP FN to compute precision and recall
            TP1, FP1, FN1 = compute_tp_fp_fn(cls_pred_keep[:, 1], roi_pred_keep[:, 1:], gtbox1, 0.5)
            TP += TP1
            FP += FP1
            FN += FN1

            print('Training loss (for one batch) at epoch %s step %s: %s' % (epoch, i, float(total_loss)))
            print('rpn_cls_loss:{:.5f}---rpn_bbox_loss:{:.5f}---rfcn_cls_loss:{:.5f}---'
                  'rfcn_bbox_loss:{}'.format(rpn_cls_loss1, rpn_bbox_loss1,
                                             rfcn_cls_loss1, rfcn_bbox_loss1))
            print(' ' * 20)

            if int(ckpt.step) % 10 == 9:
                save_path = manager.save()
                print("save model")

        precision = TP / np.maximum((TP + FP), np.finfo(np.float64).eps)
        recall = TP / float(TP + FN)
        print('Precision: %s ------Recall: %s' % (precision, recall))
        print(' '*20)
        pr_file.write("P:"+str(precision) + '    '+"R"+str(recall))
        pr_file.write('\n')
Пример #4
0
def main():
    input_images = tf.placeholder(tf.float32, shape=[1,224,224,3], name='input_image')
    img_mask = tf.placeholder(tf.int32, shape=[None,8], name='mask')
    gt_boxes = tf.placeholder(tf.int32, shape=[None,5], name='groundtruth_boxes')

    global_step = tf.get_variable('global_step', [], initializer=tf.constant_initializer(0), trainable=False)
    learning_rate = tf.train.exponential_decay(learning_rate=0.0001, global_step=global_step, decay_steps=10000,
                                               decay_rate=0.94, staircase=True)
    tf.summary.scalar('learning_rate',learning_rate)
    opt = tf.train.AdamOptimizer(learning_rate)

    init_op = tf.global_variables_initializer()


    with tf.variable_scope('model'):
        x1 = np.zeros((1,224,224,3))
        x2 = [[100,100,160,160,1]]
        roi, ps_score, bbox_shift, cls_loss_rpn, bbox_loss_rpn = model_part1(images=input_images,is_training=True,gt_boxes=gt_boxes)
        result = model_part2(imdims=(224,225), rois=roi, ps_score_map=ps_score, bbox_shift=bbox_shift)

    with tf.Session() as sess:
        sess.run(init_op)
        roi, ps_score, bbox_shift, cls_loss_rpn, \
        bbox_loss_rpn = sess.run((roi,ps_score,bbox_shift,cls_loss_rpn,bbox_loss_rpn),
                                 feed_dict={input_images:x1,gt_boxes:x2})
        result = sess.run(result)

    result_keep = model_part3(results=result)

    # compute the postive boxes and positive boxes
    # compute the boxes' inside_weights and out_side weights
    roi_item = result[str(result_keep[0])]['roi']   #(4,)
    offset_item = result[str(result_keep[0])]['shift']  #(4,)
    cls_item = result[str(result_keep[0])]['cls']
    rois = tf.reshape(roi_item, (1,-1))
    offset = tf.reshape(offset_item,(1,-1))
    cls = tf.reshape(cls_item,(1,-1))
    roi_mask = {}
    roi_mask['0'] = result[str(result_keep[0])]['mask']
    for i in range(1, len(result_keep)):
        roi_item = result[str(result_keep[i])]['roi']
        roi_item = tf.reshape(roi_item, (1,-1))
        rois = tf.concat((rois,roi_item), axis=0)   #(n,4)
        offset_item = result[str(result_keep[i])]['shift']
        offset = tf.reshape(offset_item, (1, -1))
        offset = tf.concat((offset, offset_item), axis=0)   #(n,4)
        cls_item = result[str(result_keep[i])]['cls']
        cls = tf.reshape(cls_item, (1, -1))
        cls = tf.concat((cls, cls_item), axis=0)    #(n,k+1)
        roi_mask[str(i)] = result[str(result_keep[i])]['mask']

    # get the rois which need to compute gradient
    rois1, labels1, bbox_targets1, bbox_inside_weights1, bbox_outside_weights1, keep_inds, fg_num = proposal_target_layer(
        rois, gt_boxes, cfg.dataset.NUM_CLASSES
    )
    cls_scores1 = cls[keep_inds]
    preds1 = offset[keep_inds]

    # get image's mask
    im_shape = tf.shape(input_images)
    im_dims = im_shape[1:3]
    mask = tf.py_func(generate_mask,[im_dims,img_mask],tf.int32)

    # compute every box's loss
    # compute rpn_cls_loss and rpn_bbox_loss
    loss1 = cls_loss_rpn
    loss2 = bbox_loss_rpn

    # compute all boxes' cls_loss
    loss3 = rfcn_cls_loss(rfcn_cls_score=cls_scores1,labels=labels1)
    # compute positive boxes' bbox_loss
    loss4 = rfcn_bbox_loss(rfcn_bbox_pred=preds1, bbox_targets=bbox_targets1,
                           roi_inside_weights=bbox_inside_weights1, roi_outside_weights=bbox_outside_weights1)
    # compute positive boxes' mask_loss
    mask_j = roi_mask[str(keep_inds[0])]  # (h,w,2)
    mask_j = upsample_image(mask_j, rois[keep_inds[0]][2] - rois[keep_inds[0]][0], rois[keep_inds[0]][3] - rois[keep_inds[0]][1])
    mask_label = box_mask(rois[keep_inds[0]], mask)
    loss5 = mask_loss(rfcn_mask_score=mask_j, labels=mask_label)
    for j in keep_inds[1:fg_num]:
        mask_j = roi_mask[str(j)]   #(h,w,2)
        mask_j = upsample_image(mask_j,rois[j][2]-rois[j][0],rois[j][3]-rois[j][1])
        mask_label = box_mask(rois[j],mask)
        loss5 += mask_loss(rfcn_mask_score=mask_j,labels=mask_label)

    total_loss = loss1 + loss2 + loss3 + loss4 + loss5
    training_step = opt.minimize(total_loss,global_step=global_step)


    with sess.as_default():
        start = time.time()
        for step in range(1000):
            x,y_gtbox,y_mask = next_batch(batch_size=1,pos=step)
            sess.run(training_step,feed_dict={input_images:x[str(step + 1)],
                                              img_mask:y_mask[str(step + 1)],
                                              gt_boxes:y_gtbox[str(step + 1)]
                                              })
            if step % 50 == 0:
                print('step {},rpn_cls_loss{},rpn_bbox_loss{},cls_loss{},'
                      'bbox_loss{},mask_loss{},total_loss{}'.format(step,loss1,loss2,
                                                                    loss3,loss4,loss5,total_loss))


        pass
Пример #5
0
        cv.polylines(img, [pts], True, (0, 255, 255))
    cv.imshow("Image", image)
    cv.waitKey(0)
    cv.destroyAllWindows()
    pass


def draw1(image, gtboxes):
    for i in range(len(gtboxes)):
        print(gtboxes[i][0], gtboxes[i][1])
        cv.rectangle(image, (gtboxes[i][0], gtboxes[i][1]),
                     (gtboxes[i][2], gtboxes[i][3]), (0, 255, 0), 1)
    cv.imshow("Image", image)
    cv.waitKey(0)
    cv.destroyAllWindows()
    pass


#draw(img,mask1)
# draw1(img,gtbox)

for i in range(1000):

    img, gtbox, gtmask = next_batch(1, i % 1000)
    img0 = img[str(i + 1)]
    gtbox0 = gtbox[str(i + 1)]
    gtmask0 = gtmask[str(i + 1)]
    gtbox1 = np.array(gtbox0)
    gtmask1 = np.array(gtmask0)
    draw1(img0, gtbox1)