Beispiel #1
0
def testdata_preprocess2(imagedir, model, color=True, skip=True):
    vid = videoto3d.Videoto3D(256, 256, 10)
    test_images = os.listdir(imagedir)
    test_data = []
    labels = []
    sum = 0.0
    for file in test_images:
        label = vid.get_test_classname(file)
        #通过测试图片所在的文件夹的名称得到图片序列的标签
        #labels.append(label)
        image_folder_name = os.path.join(imagedir, file)
        print(image_folder_name)
        arr = read_image(image_folder_name)
        arr = np.expand_dims(arr, axis=0)
        #prediction=model.predict_classes(np.transpose(arr,axes=(0,2,3,4,1)))#prediction数值为0/1
        prediction = model.predict_classes(
            np.array(arr).transpose((0, 2, 3, 4, 1)))
        print(prediction)
        print(label)
        if prediction == 1:
            if label == 'norain':
                sum += 1
        else:
            print('aaaa')
            if label == 'rain':
                sum += 1
        test_data.append(list(arr))
        print('sum={}'.format(sum))
    acc = sum / len(test_images)
    print('test_acc={}'.format(acc))
    print('len(test_dataset)', len(test_images))
    #return np.array(test_data).transpose((0,2,3,4,1)),labels

    return acc, sum, len(test_images)
Beispiel #2
0
def process():
    nclass = 8
    depth = 15
    skip = False
    color = True
    img_rows, img_cols, frames = 32, 32, depth

    channel = 3 if color else 1

    # 获取本机计算机名称
    hostname = socket.gethostname()
    # 获取本机ip
    ip = socket.gethostbyname(hostname)
    print(ip)

    fname_npz = 'dataset_{}_{}_{}_{}.npz'.format(ip, nclass, depth, skip)
    output = '/opt/ml/processing/processed_data/'
    videos = '/opt/ml/processing/input_data/'
    output_fname = output + fname_npz

    vid3d = videoto3d.Videoto3D(img_rows, img_cols, frames)
    nb_classes = nclass
    if os.path.exists(fname_npz):
        loadeddata = np.load(fname_npz)
        X, Y = loadeddata["X"], loadeddata["Y"]
    else:
        x, y = loaddata(videos, vid3d, nclass, output, color, skip)
        X = x.reshape((x.shape[0], img_rows, img_cols, frames, channel))
        Y = np_utils.to_categorical(y, nb_classes)

        X = X.astype('float32')
        np.savez(output_fname, X=X, Y=Y)
    print('Saved dataset to ', output_fname)
    print('X_shape:{}\nY_shape:{}'.format(X.shape, Y.shape))
Beispiel #3
0
    def process():
        nclass = 8
        depth = 15
        skip = False
        color = True
        img_rows, img_cols, frames = 32, 32, depth

        channel = 3 if color else 1
        fname_npz = 'dataset_{}_{}_{}.npz'.format(nclass, depth, skip)
        output = 'default-output/'
        videos = 'dataset/'

        vid3d = videoto3d.Videoto3D(img_rows, img_cols, frames)
        nb_classes = nclass
        if os.path.exists(fname_npz):
            loadeddata = np.load(fname_npz)
            X, Y = loadeddata["X"], loadeddata["Y"]
        else:
            x, y = loaddata(videos, vid3d, nclass, output, color, skip)
            X = x.reshape((x.shape[0], img_rows, img_cols, frames, channel))
            Y = np_utils.to_categorical(y, nb_classes)

            X = X.astype('float32')
            np.savez(fname_npz, X=X, Y=Y)
        print('Saved dataset to dataset.npz.')
        print('X_shape:{}\nY_shape:{}'.format(X.shape, Y.shape))


# def main():
#     process()
#     nclass = 8
#     depth = 15
#     skip = False
#     color = True
#     img_rows, img_cols, frames = 32, 32, depth

#     channel = 3 if color else 1
#     fname_npz = 'dataset_{}_{}_{}.npz'.format(
#             nclass, depth, skip)
#     output = 'default-output/'
#     videos = 'dataset/'

#     vid3d = videoto3d.Videoto3D(img_rows, img_cols, frames)
#     nb_classes = nclass
#     if os.path.exists(fname_npz):
#             loadeddata = np.load(fname_npz)
#             X, Y = videoto3d.loadeddata["X"], loadeddata["Y"]
#     else:
#             x, y = videoto3d.loaddata(videos, vid3d, nclass,
#                             output, color, skip)
#             X = x.reshape((x.shape[0], img_rows, img_cols, frames, channel))
#             Y = np_utils.to_categorical(y, nb_classes)

#             X = X.astype('float32')
#             np.savez(fname_npz, X=X, Y=Y)
#     print('Saved dataset to dataset.npz.')
#     print('X_shape:{}\nY_shape:{}'.format(X.shape, Y.shape))
def testdata_preprocess2(imagedir, model, color=True, skip=True):
    vid = videoto3d.Videoto3D(256, 256, 10)
    test_images = os.listdir(imagedir)
    test_data = []
    labels = []
    sum = 0.0
    for file in test_images:
        # 通过测试图片所在的文件夹的名称得到图片序列的标签
        # labels.append(label)
        image_folder_name = os.path.join(imagedir, file)
        print(image_folder_name)
        arr = read_image(image_folder_name)
        arr = np.expand_dims(arr, axis=0)
        # prediction=model.predict_classes(np.transpose(arr,axes=(0,2,3,4,1)))#prediction数值为0/1
        prediction = model.predict(np.array(arr).transpose((0, 2, 3, 4, 1)))
        print(prediction)
def main():
    parser = argparse.ArgumentParser(
        description='simple 3D convolution for action recognition')
    parser.add_argument('--batch', type=int, default=128)
    parser.add_argument('--epoch', type=int, default=100)
    parser.add_argument('--videos', type=str, default='UCF101',
                        help='directory where videos are stored')
    parser.add_argument('--nclass', type=int, default=101)
    parser.add_argument('--output', type=str, required=True)
    parser.add_argument('--color', type=bool, default=False)
    parser.add_argument('--skip', type=bool, default=True)
    parser.add_argument('--depth', type=int, default=10)
    args = parser.parse_args()

    img_rows, img_cols, frames = 32, 32, args.depth
    channel = 3 if args.color else 1
    fname_npz = 'dataset_{}_{}_{}.npz'.format(
        args.nclass, args.depth, args.skip)

    vid3d = videoto3d.Videoto3D(img_rows, img_cols, frames)
    nb_classes = args.nclass
    if os.path.exists(fname_npz):
        loadeddata = np.load(fname_npz)
        X, Y = loadeddata["X"], loadeddata["Y"]
    else:
        x, y = loaddata(args.videos, vid3d, args.nclass,
                        args.output, args.color, args.skip)
        X = x.reshape((x.shape[0], img_rows, img_cols, frames, channel))
        Y = np_utils.to_categorical(y, nb_classes)

        X = X.astype('float32')
        np.savez(fname_npz, X=X, Y=Y)
        print('Saved dataset to dataset.npz.')
    print('X_shape:{}\nY_shape:{}'.format(X.shape, Y.shape))

 

    X_train, X_test, Y_train, Y_test = train_test_split(
        X, Y, test_size=0.2, random_state=43)
 
    
    print('Test loss:', loss)
    print('Test accuracy:', acc)

    plot_history(history, args.output)
    save_history(history, args.output)
def data_preprocess(args):
    assert type(args) == argparse.Namespace, 'args type error'
    vid3d = videoto3d.Videoto3D(args.size[0],args.size[1],args.depth)
    nb_classes = args.nclass
    channel = 3 if args.color else 1

    fname_npz = 'dataset_{}_{}_{}.npz'.format(#npz类型为numpy数组保存的文件名,
        args.nclass, args.depth, args.skip)
    if os.path.exists(fname_npz):
        loadeddata = np.load(fname_npz)
        train_data, train_label = loadeddata["train_data"], loadeddata["train_label"]
    else:
        train_data,labels = loaddata_image(args.videos, vid3d, args.nclass,
                        args.output, args.color, args.skip)
        train_label = np_utils.to_categorical(labels, nb_classes)
        train_data = train_data.astype('float32')
        np.savez(fname_npz, train_data=train_data, train_label=train_label)
        print('Saved dataset to dataset.npz.')
        print('data_shape:{}\nlabel_shape:{}'.format(train_data.shape, train_label.shape))
    return train_data,train_label,nb_classes
def testdata_preprocess2(imagedir, model, color=True, skip=True):
    i = 0
    vid = videoto3d.Videoto3D(32, 32, 10)
    test_images = os.listdir(imagedir)
    test_data = []
    labels = []
    sum = 0.0
    for file in test_images:
        i = i + 1
        if i == 2:
            break
        label = vid.get_test_classname(file)
        #通过测试图片所在的文件夹的名称得到图片序列的标签
        #labels.append(label)
        image_folder_name = os.path.join(imagedir, file)
        print(image_folder_name)
        arr = read_image(image_folder_name)
        arr = np.expand_dims(arr, axis=0)
        prediction = model.predict_classes(
            np.transpose(arr, axes=(0, 2, 3, 4, 1)))  #prediction数值为0/1
Beispiel #8
0
def main():
    parser = argparse.ArgumentParser(
        description='simple 3D convolution for action recognition')
    parser.add_argument('--data_dir', type=str, default="./data/")
    parser.add_argument('--batch', type=int, default=16)
    parser.add_argument('--epoch', type=int, default=10000)
    parser.add_argument('--color', type=bool, default=True)
    parser.add_argument('--skip', type=bool, default=True)
    parser.add_argument('--depth', type=int, default=32)
    parser.add_argument('--calculateEvaluationCCC',
                        type=str,
                        default="./data/calculateEvaluationCCC.py")
    parser.add_argument('--validationCSV',
                        type=str,
                        default="./data/omg_ValidationVideos.csv")
    parser.add_argument('--testCSV',
                        type=str,
                        default="./data/omg_TestVideos.csv")
    parser.add_argument('--trainCSV',
                        type=str,
                        default="./data/omg_TrainVideos.csv")

    args = parser.parse_args()
    timestamp = str(int(time.time()))
    args.out_dir = os.path.abspath(os.path.join("runs", timestamp))

    all_x = []
    all_y = []
    nb_classes = 2

    for mode in ["Train", "Validation", "Test"]:
        img_rows, img_cols, frames = 32, 32, args.depth
        channel = 3 if args.color else 1
        fname_npz = os.path.join(args.data_dir,
                                 'dataset_{}_{}_{}_{}.npz').format(
                                     mode, nb_classes, args.depth, args.skip)
        vid3d = videoto3d.Videoto3D(img_rows, img_cols, frames)
        print(fname_npz)
        if os.path.exists(fname_npz):
            loadeddata = np.load(fname_npz)
            X, Y = loadeddata["X"], loadeddata["Y"]
            print("Dataset found already for mode ", mode)
        else:
            x, y = utils.loaddata("{}_videos".format(mode), vid3d, args, mode,
                                  args.color, args.skip)
            X = x.reshape((x.shape[0], img_rows, img_cols, frames, channel))
            X = X.astype('float32')
            Y = np.array(y)
            np.savez(fname_npz, X=X, Y=Y)
            print('Saved dataset to dataset.npz.')
        all_x.append(X)
        all_y.append(Y)

    X_train, X_test, _ = all_x
    Y_train, Y_test, _ = all_y

    print('Train : X_shape:{}\nY_shape:{}'.format(X_train.shape,
                                                  Y_train.shape))
    print('Validation : X_shape:{}\nY_shape:{}'.format(X_test.shape,
                                                       Y_test.shape))

    # Define model
    model = Sequential()
    model.add(
        Conv3D(32,
               kernel_size=(5, 5, 5),
               input_shape=(X.shape[1:]),
               padding='same'))
    # model.add(Activation('relu'))
    # model.add(Conv3D(32, kernel_size=(3, 3, 3), padding='same'))
    model.add(Activation('softmax'))
    model.add(MaxPooling3D(pool_size=(4, 4, 4), padding='same'))
    model.add(Dropout(0.2))
    #
    model.add(Conv3D(32, kernel_size=(5, 5, 5), padding='same'))
    # model.add(Activation('relu'))
    # model.add(Conv3D(32, kernel_size=(3, 3, 3), padding='same'))
    model.add(Activation('softmax'))
    model.add(MaxPooling3D(pool_size=(3, 3, 3), padding='same'))

    model.add(Dropout(0.2))

    model.add(Flatten())

    model.add(Dense(128, activation='sigmoid'))

    model.add(Dropout(0.2))

    model.add(Dense(2, activation='linear'))

    model.compile(loss='mse', optimizer=Adam(lr=0.001), metrics=['mse'])
    model.summary()

    # for i, j in enumerate(model.layers):
    #     print(i,j)
    # sys.exit()

    if not os.path.isdir(args.out_dir):
        os.makedirs(args.out_dir)

    model_json = model.to_json()
    with open(os.path.join(args.out_dir, 'model.json'), 'w') as json_file:
        json_file.write(model_json)

    filepath = os.path.join(
        args.out_dir, "weights-improvement-{epoch:02d}-{val_loss:.2f}.hdf5")
    checkpoint = ModelCheckpoint(filepath)
    predictions = utils.prediction_history(X_test, model, args)
    callbacks_list = [checkpoint, predictions]

    history = model.fit(X_train,
                        Y_train,
                        validation_data=(X_test, Y_test),
                        batch_size=args.batch,
                        epochs=args.epoch,
                        verbose=1,
                        shuffle=True,
                        callbacks=callbacks_list)
Beispiel #9
0
def main():
    parser = argparse.ArgumentParser(
        description='simple 3D convolution for action recognition')
    parser.add_argument('--batch', type=int, default=128)
    parser.add_argument('--epoch', type=int, default=50)
    parser.add_argument('--videos', type=str, default='UCF101',
                        help='directory where videos are stored')
    parser.add_argument('--nclass', type=int, default=101)
    parser.add_argument('--output', type=str, required=True)
    parser.add_argument('--color', type=bool, default=True)
    parser.add_argument('--skip', type=bool, default=False)
    parser.add_argument('--depth', type=int, default=60)
    args = parser.parse_args()

    img_rows, img_cols, frames = 32, 32, args.depth
    channel = 3 if args.color else 1
    fname_npz = 'dataset_{}_{}_{}.npz'.format(
        args.nclass, args.depth, args.skip)

    vid3d = videoto3d.Videoto3D(img_rows, img_cols, frames)
    nb_classes = args.nclass
    if os.path.exists(fname_npz):
        loadeddata = np.load(fname_npz)
        print("OS Path exists.\n")
        X, Y = loadeddata["X"], loadeddata["Y"]
    else:
        x, y = loaddata(args.videos, vid3d, args.nclass,
                        args.output, args.color, args.skip)
        print("Inside Else")
        X = x.reshape((x.shape[0], img_rows, img_cols, frames, channel))
        Y = np_utils.to_categorical(y, nb_classes)
	
        X = X.astype('float32')
        np.savez(fname_npz, X=X, Y=Y)
        print('Saved dataset to dataset.npz.')
    print('X_shape:{}\nY_shape:{}'.format(X.shape, Y.shape))

    # Define model
    model = Sequential()
   
    model.add(Conv3D(32, kernel_size=(3, 3, 3), input_shape=(
        X.shape[1:]), border_mode='same'))

    # model.add(Activation('relu'))
    # model.add(Conv3D(32, kernel_size=(3, 3, 3), border_mode='same'))
    # model.add(Activation('softmax'))
    # model.add(MaxPooling3D(pool_size=(3, 3, 3), border_mode='same'))
    # model.add(Dropout(0.25))



    model.add(Activation('relu'))
    model.add(Conv3D(32, kernel_size=(3, 3, 3), border_mode='same'))
    model.add(Activation('softmax'))
    model.add(MaxPooling3D(pool_size=(3, 3, 3), border_mode='same'))
    model.add(Dropout(0.25))
    model.add(Conv3D(64, kernel_size=(3, 3, 3), border_mode='same'))
    model.add(Activation('relu'))
    model.add(Conv3D(64, kernel_size=(3, 3, 3), border_mode='same'))
    model.add(Activation('softmax'))
    model.add(MaxPooling3D(pool_size=(3, 3, 3), border_mode='same'))
    model.add(Dropout(0.25))
    model.add(Flatten())
    model.add(Dense(512, activation='sigmoid'))
    model.add(Dropout(0.5))
    model.add(Dense(nb_classes, activation='softmax'))

    model.compile(loss=categorical_crossentropy,
                  optimizer=Adam(), metrics=['accuracy'])
    model.summary()

    # plot_model(model, show_shapes=True,
    #            to_file=os.path.join(args.output, 'model.png'))

    X_train, X_test, Y_train, Y_test = train_test_split(
        X, Y, test_size=0.2, random_state=43)

    ####################

    # 1
    filepath="d_3dcnnmodel-{epoch:02d}-{val_acc:.2f}.hd5"
    
    checkpoint = ModelCheckpoint(filepath, monitor='val_acc', verbose=1, save_best_only=True, mode='max')
    
    callbacks_list = [checkpoint]

    # 2 

    config = tf.ConfigProto()
    config.gpu_options.per_process_gpu_memory_fraction = 0.3
    set_session(tf.Session(config=config))

    ###############


    # Train model
    history = model.fit(X_train, Y_train, validation_data=(X_test, Y_test), batch_size=args.batch,
                        epochs=args.epoch, verbose=1, shuffle=True, callbacks=callbacks_list)
    
    model.evaluate(X_test, Y_test, verbose=0)
    
    model_json = model.to_json()
    
    if not os.path.isdir(args.output):
        os.makedirs(args.output)
    with open(os.path.join(args.output, 'sign-15-images.json'), 'w') as json_file:
        json_file.write(model_json)
    
    model.save_weights(os.path.join(args.output, 'sign-15-images.hd5'))

    loss, acc = model.evaluate(X_test, Y_test, verbose=0)
    
    print('Test loss:', loss)
    print('Test accuracy:', acc)

    plot_history(history, args.output)
    save_history(history, args.output)
Beispiel #10
0
def main():
    parser = argparse.ArgumentParser(
        description='simple 3D convolution for action recognition')
    parser.add_argument('--batch', type=int, default=128)
    parser.add_argument('--epoch', type=int, default=100)
    parser.add_argument('--videos', type=str, default='UCF101',
                        help='directory where videos are stored')
    parser.add_argument('--nclass', type=int, default=101)
    parser.add_argument('--output', type=str, required=True)
    parser.add_argument('--color', type=bool, default=False)
    parser.add_argument('--skip', type=bool, default=True)
    parser.add_argument('--depth', type=int, default=10)
    
    parser.add_argument('--model_dir', type=str)
    parser.add_argument('--sm-model-dir', type=str, default=os.environ.get('SM_MODEL_DIR'))
    parser.add_argument('--train', type=str, default=os.environ.get('SM_CHANNEL_TRAINING'))
    parser.add_argument('--hosts', type=list, default=json.loads(os.environ.get('SM_HOSTS')))
    parser.add_argument('--current-host', type=str, default=os.environ.get('SM_CURRENT_HOST'))
    
    args = parser.parse_args()

    img_rows, img_cols, frames = 32, 32, args.depth
    channel = 3 if args.color else 1
    fname_npz = 'dataset_{}_{}_{}.npz'.format(
        args.nclass, args.depth, args.skip)

    vid3d = videoto3d.Videoto3D(img_rows, img_cols, frames)
    nb_classes = args.nclass
    if os.path.exists(fname_npz):
        loadeddata = np.load(fname_npz)
        X, Y = loadeddata["X"], loadeddata["Y"]
    else:
        x, y = loaddata(args.videos, vid3d, args.nclass,
                        args.output, args.color, args.skip)
        X = x.reshape((x.shape[0], img_rows, img_cols, frames, channel))
        Y = np_utils.to_categorical(y, nb_classes)

        X = X.astype('float32')
        np.savez(fname_npz, X=X, Y=Y)
        print('Saved dataset to dataset.npz.')
    print('X_shape:{}\nY_shape:{}'.format(X.shape, Y.shape))

    # Define model
    model = Sequential()
    model.add(Conv3D(32, kernel_size=(3, 3, 3), input_shape=(
        X.shape[1:]), padding='same'))
    model.add(Activation('relu'))
    model.add(Conv3D(32, kernel_size=(3, 3, 3), padding='same'))
    model.add(Activation('softmax'))
    model.add(MaxPooling3D(pool_size=(3, 3, 3), padding='same'))
    model.add(Dropout(0.25))

    model.add(Conv3D(64, kernel_size=(3, 3, 3), padding='same'))
    model.add(Activation('relu'))
    model.add(Conv3D(64, kernel_size=(3, 3, 3), padding='same'))
    model.add(Activation('softmax'))
    model.add(MaxPooling3D(pool_size=(3, 3, 3), padding='same'))
    model.add(Dropout(0.25))

    model.add(Flatten())
    model.add(Dense(512, activation='sigmoid'))
    model.add(Dropout(0.5))
    model.add(Dense(nb_classes, activation='softmax'))

    model.compile(loss=categorical_crossentropy,
                  optimizer=Adam(), metrics=['accuracy'])
    model.summary()
#     plot_model(model, show_shapes=True,
#                to_file=os.path.join(args.output, 'model.png'))

    X_train, X_test, Y_train, Y_test = train_test_split(
        X, Y, test_size=0.2, random_state=43)

    history = model.fit(X_train, Y_train, validation_data=(X_test, Y_test), batch_size=args.batch,
                        epochs=args.epoch, verbose=1, shuffle=True)
    model.evaluate(X_test, Y_test, verbose=0)
    model_json = model.to_json()
    if not os.path.isdir(args.output):
        os.makedirs(args.output)
    with open(os.path.join(args.output, 'ucf101_3dcnnmodel.json'), 'w') as json_file:
        json_file.write(model_json)
    model.save_weights(os.path.join(args.output, 'ucf101_3dcnnmodel.hd5'))

    loss, acc = model.evaluate(X_test, Y_test, verbose=0)
    print('Test loss:', loss)
    print('Test accuracy:', acc)
    plot_history(history, args.output)
    save_history(history, args.output)
def main():
    parser = argparse.ArgumentParser(
        description='simple 3D convolution for action recognition')
    parser.add_argument('--batch', type=int, default=128)
    parser.add_argument('--epoch', type=int, default=50)
    parser.add_argument('--videos',
                        type=str,
                        default='3dCNN/UCF101/',
                        help='directory where videos are stored')
    parser.add_argument('--nclass', type=int, default=101)
    #parser.add_argument('--nsplit', type=int, default=1)    # Add
    parser.add_argument('--output', type=str, default='finalmy3dcnnresult/')
    parser.add_argument('--color', type=bool, default=True)
    parser.add_argument('--skip', type=bool, default=False)
    parser.add_argument('--depth', type=int, default=15)
    args = parser.parse_args()

    #img_rows, img_cols, frames = 32, 32, args.depth - Defaultvalue
    # The origin size of UCF101 is 320x240
    img_rows, img_cols, frames = 24, 32, args.depth
    channel = 3 if args.color else 1

    # Train
    fname_train_npz = 'train_dataset_{}_{}_{}.npz'.format(
        args.nclass, args.depth, args.skip)

    vid3d = videoto3d.Videoto3D(img_rows, img_cols, frames)
    nb_classes = args.nclass
    if os.path.exists(fname_train_npz):
        train_loadeddata = np.load(fname_train_npz)
        trainX, trainY = train_loadeddata["X"], train_loadeddata["Y"]
    else:
        x, y = loadTraindata(args.videos, vid3d, args.nclass, args.output,
                             args.color,
                             args.skip)  # Add args.nsplit as argument
        trainX = x.reshape((x.shape[0], img_rows, img_cols, frames, channel))
        trainY = np_utils.to_categorical(y, nb_classes)

        trainX = trainX.astype('float32')
        np.savez(fname_train_npz, X=trainX, Y=trainY)
        print('Saved train dataset to train_dataset.npz.')
    print('trainX_shape:{}\ntrainY_shape:{}'.format(trainX.shape,
                                                    trainY.shape))

    # Test
    fname_test_npz = 'test_dataset_{}_{}_{}.npz'.format(
        args.nclass, args.depth, args.skip)

    #vid3d = videoto3d.Videoto3D(img_rows, img_cols, frames)
    #nb_classes = args.nclass
    if os.path.exists(fname_test_npz):
        test_loadeddata = np.load(fname_test_npz)
        testX, testY = test_loadeddata["X"], test_loadeddata["Y"]
    else:
        x, y = loadTestdata(args.videos, vid3d, args.nclass, args.output,
                            args.color,
                            args.skip)  # Add args.nsplit as argument
        testX = x.reshape((x.shape[0], img_rows, img_cols, frames, channel))
        testY = np_utils.to_categorical(y, nb_classes)

        testX = testX.astype('float32')
        np.savez(fname_test_npz, X=testX, Y=testY)
        print('Saved test dataset to test_dataset.npz.')
    print('testX_shape:{}\ntestY_shape:{}'.format(testX.shape, testY.shape))

    # Define model
    model = Sequential()
    # Default initialization in Keras is glorot_uniform (same as Xavier)
    model.add(
        Conv3D(32,
               kernel_size=(3, 3, 3),
               input_shape=(trainX.shape[1:]),
               border_mode='same'))
    model.add(Activation('relu'))
    model.add(BatchNormalization())

    model.add(Conv3D(32, kernel_size=(3, 3, 3), border_mode='same'))
    #model.add(Activation('softmax'))
    model.add(Activation('relu'))
    model.add(BatchNormalization())

    model.add(MaxPooling3D(pool_size=(3, 3, 3), border_mode='same'))
    model.add(Dropout(0.25))

    model.add(Conv3D(64, kernel_size=(3, 3, 3), border_mode='same'))
    model.add(Activation('relu'))
    model.add(BatchNormalization())

    model.add(Conv3D(64, kernel_size=(3, 3, 3), border_mode='same'))
    #model.add(Activation('softmax'))
    model.add(Activation('relu'))
    model.add(BatchNormalization())

    model.add(MaxPooling3D(pool_size=(3, 3, 3), border_mode='same'))
    model.add(Dropout(0.25))

    model.add(Flatten())
    model.add(Dense(512, activation='sigmoid'))
    model.add(Dropout(0.5))
    model.add(Dense(nb_classes, activation='softmax'))

    model.compile(loss=categorical_crossentropy,
                  optimizer='adam',
                  metrics=['accuracy'])
    model.summary()

    earlystop = EarlyStopping(monitor='val_acc',
                              min_delta=0.001,
                              patience=5,
                              verbose=1,
                              mode='auto')
    callbacks_list = [earlystop]

    #plot_model(model, show_shapes=True,
    #           to_file=os.path.join(args.output, 'model.png'))

    #Xtrain, Xvalid, Ytrain, Yvalid = train_test_split(trainX, trainY, test_size=0.1, random_state=43)

    # Just for testing
    #Xtrain, Xvalid, Ytrain, Yvalid = Xtrain[:2560], Xvalid[:256], Ytrain[:2560], Yvalid[:256]

    #history = model.fit(Xtrain, Ytrain, validation_data=(Xvalid, Yvalid), batch_size=args.batch,
    #                    epochs=args.epoch, callbacks=callbacks_list, verbose=1, shuffle=True)
    history = model.fit(trainX,
                        trainY,
                        batch_size=args.batch,
                        epochs=args.epoch,
                        callbacks=callbacks_list,
                        verbose=1,
                        shuffle=True)
    #model.evaluate(testX, testY, verbose=0)
    model_json = model.to_json()
    if not os.path.isdir(args.output):
        os.makedirs(args.output)
    with open(os.path.join(args.output, 'ucf101_3dcnnmodel.json'),
              'w') as json_file:
        json_file.write(model_json)
    model.save_weights(os.path.join(args.output, 'ucf101_3dcnnmodel.hd5'))

    loss, acc = model.evaluate(testX, testY, verbose=0)
    print('Test loss:', loss)
    print('Test accuracy:', acc)
    plot_history(history, args.output)
    save_history(history, args.output)

    predY = model.predict(testX)
    # To get the confusion matrix
    testYle = np.argmax(testY, axis=1)
    predYle = np.argmax(predY, axis=1)
    print 'testY: {0}'.format(np.argmax(testY, axis=1))
    print 'predY: {0}'.format(np.argmax(predY, axis=1))

    cm = confusion_matrix(testYle, predYle)
    cm = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis]
    plot_confusion_matrix(cm=cm)
Beispiel #12
0
def main():
    parser = argparse.ArgumentParser(
        description='simple 3D convolution for action recognition')
    parser.add_argument('--batch', type=int, default=128)
    parser.add_argument('--epoch', type=int, default=100)
    parser.add_argument('--videos',
                        type=str,
                        default='UCF101',
                        help='directory where videos are stored')
    parser.add_argument('--nclass', type=int, default=101)
    parser.add_argument('--output', type=str, required=True)
    parser.add_argument('--color', type=bool, default=False)
    parser.add_argument('--skip', type=bool, default=True)
    parser.add_argument('--depth', type=int, default=10)
    parser.add_argument('--nmodel', type=int, default=3)
    args = parser.parse_args()

    if not os.path.isdir(args.output):
        os.makedirs(args.output)

    img_rows, img_cols, frames = 32, 32, args.depth
    channel = 3 if args.color else 1

    vid3d = videoto3d.Videoto3D(img_rows, img_cols, frames)
    nb_classes = args.nclass
    fname_npz = 'dataset_{}_{}_{}.npz'.format(args.nclass, args.depth,
                                              args.skip)

    if os.path.exists(fname_npz):
        loadeddata = np.load(fname_npz)
        X, Y = loadeddata["X"], loadeddata["Y"]
    else:
        x, y = loaddata(args.videos, vid3d, args.nclass, args.output,
                        args.color, args.skip)
        X = x.reshape((x.shape[0], img_rows, img_cols, frames, channel))
        Y = np_utils.to_categorical(y, nb_classes)

        X = X.astype('float32')
        np.savez(fname_npz, X=X, Y=Y)
        print('Saved dataset to dataset.npz.')
    print('X_shape:{}\nY_shape:{}'.format(X.shape, Y.shape))

    X_train, X_test, Y_train, Y_test = train_test_split(X,
                                                        Y,
                                                        test_size=0.2,
                                                        random_state=4)

    # Define model
    models = []
    for i in range(args.nmodel):
        print('model{}:'.format(i))
        models.append(create_3dcnn(X.shape[1:], nb_classes))
        models[-1].compile(loss='categorical_crossentropy',
                           optimizer='adam',
                           metrics=['accuracy'])
        history = models[-1].fit(X_train,
                                 Y_train,
                                 validation_data=(X_test, Y_test),
                                 batch_size=args.batch,
                                 nb_epoch=args.epoch,
                                 verbose=1,
                                 shuffle=True)
        plot_history(history, args.output, i)
        save_history(history, args.output, i)

    model_inputs = [Input(shape=X.shape[1:]) for _ in range(args.nmodel)]
    model_outputs = [models[i](model_inputs[i]) for i in range(args.nmodel)]
    model_outputs = average(inputs=model_outputs)
    model = Model(inputs=model_inputs, outputs=model_outputs)
    model.compile(loss='categorical_crossentropy',
                  optimizer='adam',
                  metrics=['accuracy'])

    #model.summary()
    plot_model(model,
               show_shapes=True,
               to_file=os.path.join(args.output, 'model.png'))

    model_json = model.to_json()
    with open(os.path.join(args.output, 'ucf101_3dcnnmodel.json'),
              'w') as json_file:
        json_file.write(model_json)
    model.save_weights(os.path.join(args.output, 'ucf101_3dcnnmodel.hd5'))

    loss, acc = model.evaluate([X_test] * args.nmodel, Y_test, verbose=0)
    with open(os.path.join(args.output, 'result.txt'), 'w') as f:
        f.write('Test loss: {}\nTest accuracy:{}'.format(loss, acc))

    print('merged model:')
    print('Test loss:', loss)
    print('Test accuracy:', acc)
def main():
    parser = argparse.ArgumentParser(
        description='simple 3D convolution for action recognition')
    parser.add_argument('--batch', type=int, default=128)
    parser.add_argument('--epoch', type=int, default=100)
    parser.add_argument('--videos',
                        type=str,
                        default='UCF101',
                        help='directory where videos are stored')
    parser.add_argument('--nclass', type=int, default=101)
    parser.add_argument('--output', type=str, required=True)
    parser.add_argument('--color', type=bool, default=False)
    parser.add_argument('--skip', type=bool, default=True)
    parser.add_argument('--depth', type=int, default=10)
    args = parser.parse_args()

    img_rows, img_cols = 224, 224

    frames = args.depth
    nb_classes = args.nclass
    nb_batch = args.batch

    channel = 3 if args.color else 1

    fname_npz = 'dataset_{}_{}_{}.npz'.format(args.nclass, args.depth,
                                              args.skip)

    vid3d = videoto3d.Videoto3D(img_rows, img_cols, frames)

    if os.path.exists(fname_npz):
        loadeddata = np.load(fname_npz)
        X, Y = loadeddata["X"], loadeddata["Y"]
    else:
        x, y = loaddata(args.videos, vid3d, nb_classes, args.output,
                        args.color, args.skip)

        print(x.shape)
        print(x.size)

        X = x.reshape((x.shape[0], img_rows, img_cols, frames, channel))

        Y = np_utils.to_categorical(y, nb_classes)

        X = X.astype('float32')

        np.savez(fname_npz, X=X, Y=Y)

        print('Saved dataset to dataset.npz.')

    print('X_shape:{}\nY_shape:{}'.format(X.shape, Y.shape))

    # Define model
    input_x = Input(shape=(img_rows, img_cols, frames, channel))

    initial_conv = Conv3D(16, kernel_size=(3, 3, 3), padding='same')(input_x)
    initial_conv = LeakyReLU(alpha=.001)(initial_conv)

    initial_conv = Conv3D(32, kernel_size=(3, 3, 3),
                          padding='same')(initial_conv)
    initial_conv = LeakyReLU(alpha=.001)(initial_conv)

    ###########################
    # PARALLEL 1

    conv1 = Conv3D(16, kernel_size=(1, 1, 1), padding='same')(initial_conv)
    conv1 = LeakyReLU(alpha=.001)(conv1)
    conv1 = MaxPooling3D(pool_size=(2, 2, 2), padding='same')(conv1)

    conv1 = Conv3D(16, kernel_size=(3, 3, 3), padding='same')(conv1)
    conv1 = LeakyReLU(alpha=.001)(conv1)

    conv1 = MaxPooling3D(pool_size=(2, 2, 2), padding='same')(conv1)
    conv1 = Conv3D(1, kernel_size=(1, 1, 1), padding='same')(conv1)
    conv1 = LeakyReLU(alpha=.001)(conv1)
    ##############################

    #Parallel 2

    conv2 = Conv3D(8, kernel_size=(1, 1, 1), padding='same')(initial_conv)
    conv2 = LeakyReLU(alpha=.001)(conv2)

    conv2 = MaxPooling3D(pool_size=(2, 2, 2), padding='same')(conv2)
    conv2 = Conv3D(8, kernel_size=(3, 3, 3), padding='same')(conv2)
    conv2 = LeakyReLU(alpha=.001)(conv2)

    conv2 = MaxPooling3D(pool_size=(2, 2, 2), padding='same')(conv2)
    conv2 = Conv3D(1, kernel_size=(1, 1, 1), padding='same')(conv2)
    conv2 = LeakyReLU(alpha=.001)(conv2)
    ##############################

    #Parallel 3

    conv3 = Conv3D(4, kernel_size=(1, 1, 1), padding='same')(initial_conv)
    conv3 = LeakyReLU(alpha=.001)(conv3)
    conv3 = MaxPooling3D(pool_size=(2, 2, 2), padding='same')(conv3)

    conv3 = Conv3D(4, kernel_size=(3, 3, 3), padding='same')(conv3)
    conv3 = LeakyReLU(alpha=.001)(conv3)

    conv3 = MaxPooling3D(pool_size=(2, 2, 2), padding='same')(conv3)
    conv3 = Conv3D(1, kernel_size=(1, 1, 1), padding='same')(conv3)
    conv3 = LeakyReLU(alpha=.001)(conv3)
    ###################################

    added = keras.layers.Add()([conv1, conv2, conv3])
    added = MaxPooling3D(pool_size=(2, 2, 2), padding='same')(added)

    added = Flatten()(added)

    dense_1 = Dense(784)(added)
    dense_2 = Dense(nb_classes)(dense_1)

    print(dense_2.shape)

    model = Model(input_x, dense_2)

    model.compile(loss=categorical_crossentropy,
                  optimizer=Adam(),
                  metrics=['accuracy'])

    model.summary()

    # plot_model(model, show_shapes=True,
    #            to_file=os.path.join(args.output, 'model.png'))

    X_train, X_test, Y_train, Y_test = train_test_split(X,
                                                        Y,
                                                        test_size=0.2,
                                                        random_state=43)

    print(X_train.shape)
    print(X_test.shape)

    ####################

    # MODEL CHECK POINTS

    filepath = "saved_models/dk_3dcnnmodel-{epoch:02d}-{val_acc:.2f}.hd5"
    checkpoint = ModelCheckpoint(filepath,
                                 monitor='val_acc',
                                 verbose=1,
                                 save_best_only=True,
                                 mode='max')
    callbacks_list = [checkpoint]

    # GPU CONFIGURATION
    config = tf.ConfigProto()
    config.gpu_options.per_process_gpu_memory_fraction = 0.3
    set_session(tf.Session(config=config))

    print(X_train.shape)
    print(Y_train.shape)

    # history = model.fit(X_train, Y_train, validation_data=(X_test, Y_test), batch_size=args.batch,
    #                     epochs=args.epoch, verbose=1, shuffle=True, callbacks=callbacks_list)

    history = model.fit_generator(myGenerator(X_train, X_test, Y_train, Y_test,
                                              nb_classes, nb_batch),
                                  samples_per_epoch=X_train.shape[0],
                                  epochs=args.epoch,
                                  verbose=1,
                                  callbacks=callbacks_list,
                                  shuffle=True)

    model.evaluate(X_test, Y_test, verbose=0)

    model_json = model.to_json()

    if not os.path.isdir(args.output):
        os.makedirs(args.output)
    with open(os.path.join(args.output, 'ucf101_3dcnnmodel.json'),
              'w') as json_file:
        json_file.write(model_json)

    model.save_weights(os.path.join(args.output, 'ucf101_3dcnnmodel-gpu.hd5'))

    loss, acc = model.evaluate(X_test, Y_test, verbose=0)

    print('Test loss:', loss)
    print('Test accuracy:', acc)

    plot_history(history, args.output)
    save_history(history, args.output)
Beispiel #14
0
def main():
    '''define the argument when execute'''
    parser = argparse.ArgumentParser(
        description='simple 3D convolution for action recognition')
    #batch: use how many samples to train at a time
    parser.add_argument('--batch', type=int, default=128)
    #epoch: how many times tarin forward and backward
    parser.add_argument('--epoch', type=int, default=20)
    parser.add_argument('--videos',
                        type=str,
                        default='VIDEO_RGB',
                        help='directory where videos are stored')
    parser.add_argument('--nclass', type=int, default=12)
    parser.add_argument('--output', type=str, default='3dcnn-result')
    parser.add_argument('--color', type=bool, default=False)
    parser.add_argument('--skip', type=bool, default=True)
    parser.add_argument('--depth', type=int, default=20)
    args = parser.parse_args()
    '''initilize training sample and transform dataset'''
    img_rows, img_cols, frames = 32, 32, args.depth
    #rgb channel or else
    channel = 3 if args.color else 1
    fname_npz = 'dataset_{}_{}_{}.npz'.format(args.nclass, args.depth,
                                              args.skip)
    '''load data
    X:?
    Y:
    '''
    vid3d = videoto3d.Videoto3D(img_rows, img_cols, frames)
    nb_classes = args.nclass
    if os.path.exists(fname_npz):
        #data alr exist
        loadeddata = np.load(fname_npz)
        X, Y = loadeddata["X"], loadeddata["Y"]
    else:
        #use method loaddata(): x, y?
        x, y = loaddata(args.videos, vid3d, args.nclass, args.output,
                        args.color, args.skip)
        #?
        X = x.reshape((x.shape[0], img_rows, img_cols, frames, channel))
        #?
        Y = np_utils.to_categorical(y, nb_classes)
        X = X.astype('float32')
        np.savez(fname_npz, X=X, Y=Y)
        print('Saved dataset to dataset.npz.')
    print('X_shape:{}\nY_shape:{}'.format(X.shape, Y.shape))
    '''Define model'''
    model = Sequential()

    model.add(
        Conv3D(32,
               kernel_size=(3, 3, 3),
               input_shape=(X.shape[1:]),
               border_mode='same'))
    model.add(Activation('relu'))
    model.add(Conv3D(32, kernel_size=(3, 3, 3), border_mode='same'))
    model.add(Activation('softmax'))
    model.add(MaxPooling3D(pool_size=(3, 3, 3), border_mode='same'))
    model.add(Dropout(0.25))
    model.add(Conv3D(64, kernel_size=(3, 3, 3), border_mode='same'))
    model.add(Activation('relu'))
    model.add(Conv3D(64, kernel_size=(3, 3, 3), border_mode='same'))
    model.add(Activation('softmax'))
    model.add(MaxPooling3D(pool_size=(3, 3, 3), border_mode='same'))
    model.add(Dropout(0.25))
    model.add(Flatten())
    model.add(Dense(512, activation='sigmoid'))
    model.add(Dropout(0.5))
    model.add(Dense(nb_classes, activation='softmax'))

    model.compile(loss=categorical_crossentropy,
                  optimizer=Adam(),
                  metrics=['accuracy'])
    model.summary()

    plot_model(model,
               show_shapes=True,
               to_file=os.path.join(args.output, 'model.png'))
    '''split dataset into train and test'''
    #random_state: random seed, make sure each time the splitted result is the same
    X_train, X_test, Y_train, Y_test = train_test_split(X,
                                                        Y,
                                                        test_size=0.2,
                                                        random_state=43)

    ####################

    # # 1
    # filepath="d_3dcnnmodel-{epoch:02d}-{val_acc:.2f}.hd5"

    # checkpoint = ModelCheckpoint(filepath, monitor='val_acc', verbose=1, save_best_only=True, mode='max')

    # callbacks_list = [checkpoint]

    # # 2

    # config = tf.ConfigProto()
    # config.gpu_options.per_process_gpu_memory_fraction = 0.3
    # set_session(tf.Session(config=config))

    ###############
    '''train the model for defined iterations'''
    history = model.fit(X_train,
                        Y_train,
                        validation_data=(X_test, Y_test),
                        batch_size=args.batch,
                        epochs=args.epoch,
                        verbose=1,
                        shuffle=True,
                        callbacks=callbacks_list)
    '''save history file .hd5'''
    model.evaluate(X_test, Y_test, verbose=0)
    model_json = model.to_json()
    if not os.path.isdir(args.output):
        os.makedirs(args.output)
    with open(os.path.join(args.output, 'ucf101_3dcnnmodel.json'),
              'w') as json_file:
        json_file.write(model_json)
    model.save_weights(os.path.join(args.output, 'ucf101_3dcnnmodel-gpu.hd5'))
    '''deal with the evaluation stuff'''
    loss, acc = model.evaluate(X_test, Y_test, verbose=0)
    print('Test loss:', loss)
    print('Test accuracy:', acc)

    plot_history(history, args.output)
    save_history(history, args.output)
Beispiel #15
0
def main():
    parser = argparse.ArgumentParser(
        description='simple 3D convolution for action recognition')
    parser.add_argument('--batch', type=int, default=128)
    parser.add_argument('--epoch', type=int, default=25)
    parser.add_argument('--videos',
                        type=str,
                        default='3dCNN/UCF101/',
                        help='directory where videos are stored')
    parser.add_argument('--nclass', type=int, default=101)
    #parser.add_argument('--nsplit', type=int, default=1)    # Add
    parser.add_argument('--output', type=str, default='ens_my3dcnnresult/')
    parser.add_argument('--color', type=bool, default=True)
    parser.add_argument('--skip', type=bool, default=False)
    parser.add_argument('--depth', type=int, default=15)
    parser.add_argument('--nmodel', type=int, default=5)
    args = parser.parse_args()

    if not os.path.isdir(args.output):
        os.makedirs(args.output)

    img_rows, img_cols, frames = 24, 32, args.depth
    channel = 3 if args.color else 1

    # Train
    fname_train_npz = 'train_dataset_{}_{}_{}.npz'.format(
        args.nclass, args.depth, args.skip)

    vid3d = videoto3d.Videoto3D(img_rows, img_cols, frames)
    nb_classes = args.nclass
    if os.path.exists(fname_train_npz):
        train_loadeddata = np.load(fname_train_npz)
        trainX, trainY = train_loadeddata["X"], train_loadeddata["Y"]
    else:
        x, y = loadTraindata(args.videos, vid3d, args.nclass, args.output,
                             args.color,
                             args.skip)  # Add args.nsplit as argument
        trainX = x.reshape((x.shape[0], img_rows, img_cols, frames, channel))
        trainY = np_utils.to_categorical(y, nb_classes)

        trainX = trainX.astype('float32')
        np.savez(fname_train_npz, X=trainX, Y=trainY)
        print('Saved train dataset to train_dataset.npz.')
    print('trainX_shape:{}\ntrainY_shape:{}'.format(trainX.shape,
                                                    trainY.shape))

    # Test
    fname_test_npz = 'test_dataset_{}_{}_{}.npz'.format(
        args.nclass, args.depth, args.skip)

    #vid3d = videoto3d.Videoto3D(img_rows, img_cols, frames)
    #nb_classes = args.nclass
    if os.path.exists(fname_test_npz):
        test_loadeddata = np.load(fname_test_npz)
        testX, testY = test_loadeddata["X"], test_loadeddata["Y"]
    else:
        x, y = loadTestdata(args.videos, vid3d, args.nclass, args.output,
                            args.color,
                            args.skip)  # Add args.nsplit as argument
        testX = x.reshape((x.shape[0], img_rows, img_cols, frames, channel))
        testY = np_utils.to_categorical(y, nb_classes)

        testX = testX.astype('float32')
        np.savez(fname_test_npz, X=testX, Y=testY)
        print('Saved test dataset to test_dataset.npz.')
    print('testX_shape:{}\ntestY_shape:{}'.format(testX.shape, testY.shape))

    Xtrain, Xvalid, Ytrain, Yvalid = train_test_split(trainX,
                                                      trainY,
                                                      test_size=0.1,
                                                      random_state=43)

    # Define model
    models = []
    for i in range(args.nmodel):
        print('model{}:'.format(i))
        models.append(create_3dcnn(Xtrain.shape[1:], nb_classes))
        models[-1].compile(loss='categorical_crossentropy',
                           optimizer='adam',
                           metrics=['accuracy'])
        history = models[-1].fit(Xtrain,
                                 Ytrain,
                                 validation_data=(Xvalid, Yvalid),
                                 batch_size=args.batch,
                                 nb_epoch=args.epoch,
                                 verbose=1,
                                 shuffle=True)
        plot_history(history, args.output, i)
        save_history(history, args.output, i)

    model_inputs = [Input(shape=Xtrain.shape[1:]) for _ in range(args.nmodel)]
    model_outputs = [models[i](model_inputs[i]) for i in range(args.nmodel)]
    model_outputs = average(inputs=model_outputs)
    model = Model(inputs=model_inputs, outputs=model_outputs)
    model.compile(loss='categorical_crossentropy',
                  optimizer='adam',
                  metrics=['accuracy'])

    #model.summary()
    #plot_model(model, show_shapes=True,
    #     to_file=os.path.join(args.output, 'model.png'))

    model_json = model.to_json()
    with open(os.path.join(args.output, 'ucf101_3dcnnmodel_ensemble.json'),
              'w') as json_file:
        json_file.write(model_json)
    model.save_weights(
        os.path.join(args.output, 'ucf101_3dcnnmodel_ensemble.hd5'))

    loss, acc = model.evaluate([testX] * args.nmodel, testY, verbose=0)
    with open(os.path.join(args.output, 'result.txt'), 'w') as f:
        f.write('Test loss: {}\nTest accuracy:{}'.format(loss, acc))

    print('merged model:')
    print('Test loss:', loss)
    print('Test accuracy:', acc)
Beispiel #16
0
def main():
    # model = load_model('ucf101-dq/2019-09-08 16:24:35_74_10_0.8191161358466741_ucf101_3dcnnmodel.hd5')
    with open('ucf101-dq/2019-09-12 13:52:44_101_10_ucf101_3dcnnmodel.json',
              'r') as model_json:
        model = model_from_json(model_json.read(), custom_objects={'tf': tf})
    model.load_weights(
        'ucf101-dq/2019-09-12 13:52:44_101_10_ucf101_3dcnnmodel.hd5')
    model.summary()
    vid3d = videoto3d.Videoto3D(64, 64, 10, 'files_in_one_dir')
    layer_dict = dict([(layer.name, layer) for layer in model.layers])
    # images=cv2.imread("../Project/1.jpg")
    images = []
    images.append(
        vid3d.video3d('/data/nfs/UCF-101/v_JugglingBalls_g09_c01.avi',
                      color=True,
                      skip=True))
    images = np.array(images).transpose((0, 2, 3, 1, 4))
    # cv2.imshow("Image", images)
    # cv2.waitKey(0)

    # Turn the image into an array.
    # 根据载入的训练好的模型的配置,将图像统一尺寸
    # image_arr = cv2.resize(images, (70, 70))

    # image_arr = np.expand_dims(image_arr, axis=0)

    # 第一个 model.layers[0],不修改,表示输入数据;
    # 第二个model.layers[ ],修改为需要输出的层数的编号[]
    # layer_1 = K.function([model.layers[0].input], [model.layers[1].output])
    layer_mask = K.function([layer_dict['input_1'].input],
                            [layer_dict['multiply_1'].output])
    # 只修改inpu_image

    f1 = layer_mask([images])[0]

    # 第一层卷积后的特征图展示,输出是(1,66,66,32),(样本个数,特征图尺寸长,特征图尺寸宽,特征图个数)
    f1 = f1.squeeze(axis=0)
    for _ in range(5):
        show_img = f1[:, :, _, :]
        # show_img = show_img.squeeze(axis=2)
        plt.subplot(2, 5, _ + 1)
        # plt.imshow(show_img, cmap='black')
        # plt.imshow(show_img, cmap='gray')
        plt.imshow(show_img.astype(np.int))
        plt.subplot(2, 5, 5 + _ + 1)
        plt.imshow(np.array(images[:, :, :, _, :]).squeeze(axis=0))
        plt.axis('off')
    # plt.subplot(2,6,12)
    # plt.imshow(np.array(images[:,:,:,5,:]).squeeze(axis=0))
    plt.show()
    plt.figure(2)
    for _ in range(5):
        show_img = f1[:, :, 5 + _, :]
        # show_img = show_img.squeeze(axis=2)
        plt.subplot(2, 5, _ + 1)
        # plt.imshow(show_img, cmap='black')
        # plt.imshow(show_img, cmap='gray')
        plt.imshow(show_img.astype(np.int))
        plt.subplot(2, 5, 5 + _ + 1)
        plt.imshow(np.array(images[:, :, :, 5 + _, :]).squeeze(axis=0))
        plt.axis('off')
    plt.show()
Beispiel #17
0
                labellist.append(label)

            labels.append(label)

            X.append(vid3d.video3d(v_file_path, color=color, skip=skip))

    if color:
        return np.array(X).transpose((0, 2, 3, 4, 1)), labels
    else:
        return np.array(X).transpose((0, 2, 3, 1)), labels


img_rows, img_cols, frames = 32, 32, 10
channel = 3

vid3d = videoto3d.Videoto3D(img_rows, img_cols, frames)

x, y = loaddata('Test', vid3d, 10, 'Output', 3, True)
print("Inside Else")
X = x.reshape((x.shape[0], img_rows, img_cols, frames, channel))

X = X.astype('float32')

model = load_model('d_3dcnnmodel-36-0.97.hd5')
print(model.summary())

y_pred = model.predict(X)

print(y_pred)

print(np.argmax(y_pred))
def main():
    import pynvml
    pynvml.nvmlInit()
    # 这里的0是GPU id
    handle2 = pynvml.nvmlDeviceGetHandleByIndex(2)
    handle3 = pynvml.nvmlDeviceGetHandleByIndex(3)
    # meminfo = pynvml.nvmlDeviceGetMemoryInfo(handle)

    # print(meminfo.used)

    parser = argparse.ArgumentParser(
        description='simple 3D convolution for action recognition')
    parser.add_argument('--batch', type=int, default=128)
    parser.add_argument('--epoch', type=int, default=100)
    parser.add_argument('--videos',
                        type=str,
                        default='UCF101',
                        help='directory where videos are stored')
    parser.add_argument('--nclass', type=int, default=101)
    parser.add_argument('--output', type=str, required=True)
    parser.add_argument('--color', type=bool, default=False)
    parser.add_argument('--skip', type=bool, default=True)
    parser.add_argument('--depth', type=int, default=10)
    parser.add_argument('--dataset', type=str, default='ucf101')
    args = parser.parse_args()

    img_rows, img_cols, frames = 64, 64, args.depth
    channel = 3 if args.color else 1
    fname_npz = 'dataset_{}_{}_{}_{}.npz'.format(args.dataset, args.nclass,
                                                 args.depth, args.skip)

    vid3d = videoto3d.Videoto3D(img_rows, img_cols, frames, args.dataset)
    nb_classes = args.nclass

    if os.path.exists(fname_npz):
        loadeddata = np.load(fname_npz)
        X, Y = loadeddata["X"], loadeddata["Y"]
    else:
        x, y = loaddata(args.videos, vid3d, args.nclass, args.output,
                        args.dataset, frames, args.color, args.skip)
        X = x.reshape((x.shape[0], img_rows, img_cols, frames, channel))
        Y = np_utils.to_categorical(y, nb_classes)

        X = X.astype('float32')
        np.savez(fname_npz, X=X, Y=Y)
        print('Saved dataset to dataset.npz.')
    print('X_shape:{}\nY_shape:{}'.format(X.shape, Y.shape))

    # Define model

    # conv3D + Relu + Conv3D + Softmax + Pooling3D + DropOut
    input_x = Input(shape=(img_rows, img_cols, frames, channel))

    #
    # # C3D-conv1
    # convLayer = Conv3D(32, kernel_size= (3, 3, 3),padding='same')(input_x)
    # convLayer = ReLU()(convLayer)
    #
    # convLayer = Conv3D(32, kernel_size= (3, 3, 3), padding='same')(convLayer)
    # convLayer = Softmax()(convLayer)
    # convLayer = MaxPooling3D(pool_size=(3,3,3), padding='same')(convLayer)
    # convLayer = Dropout(0.25)(convLayer)
    #
    # # C3D-conv2
    # convLayer = Conv3D(64, kernel_size= (3, 3, 3),padding='same')(convLayer)
    # convLayer = ReLU()(convLayer)
    #
    # convLayer = Conv3D(64, kernel_size= (3, 3, 3), padding='same')(convLayer)
    # convLayer = Softmax()(convLayer)
    # convLayer = MaxPooling3D(pool_size=(3,3,3), padding='same')(convLayer)
    # convLayer = Dropout(0.25)(convLayer)
    #
    #
    # maskLayer = Conv3D(64*frames, kernel_size=(3,3,2), padding='same')(convLayer)
    # maskLayer = Lambda(mean_filter)(maskLayer)      # [None,1, 64], each point represent a mask of input region of 8x8 points
    # # maskLayer = BatchNormalization()(maskLayer)
    # maskLayer = Lambda(K.sigmoid)(maskLayer)
    # # maskLayer = ReLU()(maskLayer)
    # # maskLayer = Lambda(bi_trans, arguments={'th':0.5})(maskLayer)
    # maskLayer = Reshape(( 8, 8, frames, 1))(maskLayer)  #reshape_filter(maskLayer, shape=[None,8,8,1,1])
    # # maskLayer = Lambda(normalize)(maskLayer)
    # maskLayerForLoss = maskLayer
    # maskLayer = Lambda(repeat_filter,arguments={'rep':8, 'axis':1})(maskLayer)
    # maskLayer = Lambda(repeat_filter,arguments={'rep':8, 'axis':2})(maskLayer)
    # # maskLayer = Lambda(repeat_filter,arguments={'rep':frames, 'axis':3})(maskLayer)
    # maskLayer = Lambda(repeat_filter,arguments={'rep':channel, 'axis':4})(maskLayer)
    #
    # # maskLayer = Lambda(repeat_filter,arguments={'rep':2, 'axis':3})(maskLayer)
    # # maskLayer = Lambda(repeat_filter,arguments={'rep':64, 'axis':4})(maskLayer)
    #
    #
    # convLayer = Multiply()([maskLayer,input_x])
    #
    #

    # C3D-conv1
    convLayer = Conv3D(32, kernel_size=(3, 3, 3), padding='same')(input_x)
    convLayer = ReLU()(convLayer)

    convLayer = Conv3D(32, kernel_size=(3, 3, 3), padding='same')(convLayer)
    convLayer = Softmax()(convLayer)
    convLayer = MaxPooling3D(pool_size=(3, 3, 3), padding='same')(convLayer)
    convLayer = Dropout(0.25)(convLayer)

    # C3D-conv2
    convLayer = Conv3D(64, kernel_size=(3, 3, 3), padding='same')(convLayer)
    convLayer = ReLU()(convLayer)

    convLayer = Conv3D(64, kernel_size=(3, 3, 3), padding='same')(convLayer)
    convLayer = Softmax()(convLayer)
    convLayer = MaxPooling3D(pool_size=(3, 3, 3), padding='same')(convLayer)
    convLayer = Dropout(0.25)(convLayer)

    fc1 = Flatten()(convLayer)

    fc = Dense(512, activation='sigmoid')(fc1)
    fc = Dropout(0.5)(fc)
    dense_out = Dense(nb_classes, activation='softmax')(fc)
    dense_out_converse = Dense(nb_classes)(fc)

    # model = Model(input_x, [dense_out, dense_out_converse])
    model = Model(input_x, [dense_out, dense_out_converse])

    # loss of 2 parts
    losses = {'dense_2': K.categorical_crossentropy, 'dense_3': unlikely_loss}
    lossWeights = {'dense_2': 1, 'dense_3': 1}
    model.compile(loss=losses,
                  loss_weights=lossWeights,
                  optimizer=Adam(lr=0.001),
                  metrics=['accuracy'])
    # model.compile(loss=categorical_crossentropy, optimizer=Adam(lr=0.001),metrics=['accuracy'])
    model.summary()
    plot_model(model,
               show_shapes=True,
               to_file=os.path.join(args.output, 'model.png'))

    X_train, X_test, Y_train, Y_test = train_test_split(X,
                                                        Y,
                                                        test_size=0.1,
                                                        random_state=43)
    X_train, X_val, Y_train, Y_val = train_test_split(X_train,
                                                      Y_train,
                                                      test_size=0.1,
                                                      random_state=43)

    # history = model.fit_generator(myGenerator(X_train, X_test, Y_train, Y_test, nb_classes, args.batch),
    #                               samples_per_epoch=X_train.shape[0], epochs=args.epoch, verbose=1,
    #                               callbacks=callbacks_list,
    # shuffle=True)
    # check GPUs status , once a GPU is available, change os environment parameters and break
    # is none of the GPUs are ready ,sleep for 2 secs and retry.
    cnt = 0
    while True:
        cnt += 1
        processinfo = pynvml.nvmlDeviceGetComputeRunningProcesses(handle2)
        if len(processinfo) == 0:
            os.environ['CUDA_VISIBLE_DEVICES'] = '2'
            print('GPU 2 is available, use GPU 2\n')
            break
        processinfo = pynvml.nvmlDeviceGetComputeRunningProcesses(handle3)
        if len(processinfo) == 0:
            os.environ['CUDA_VISIBLE_DEVICES'] = '3'
            print('GPU 3 is available, use GPU 3\n')
            break
        sleep(2)
        print('\rretry time: {}'.format(cnt), end='')

    history = model.fit(X_train, [Y_train, Y_train],
                        validation_data=(X_val, [Y_val, Y_val]),
                        batch_size=args.batch,
                        epochs=args.epoch,
                        verbose=1,
                        shuffle=True)
    # history = model.fit(X_train, Y_train,
    #                     validation_data=(X_val, Y_val),
    #                     batch_size=args.batch,
    #                     epochs=args.epoch, verbose=1, shuffle=True)
    # loss, acc = model.evaluate(X_test, Y_test, verbose=0)
    model_json = model.to_json()
    if not os.path.isdir(args.output):
        os.makedirs(args.output)
    with open(
            os.path.join(
                args.output, '{}_{}_{}_ucf101_3dcnnmodel.json'.format(
                    current_time, nb_classes, args.depth)), 'w') as json_file:
        json_file.write(model_json)
    model.save_weights(
        os.path.join(
            args.output,
            '{}_{}_{}_ucf101_3dcnnmodel.hd5'.format(current_time, nb_classes,
                                                    args.depth)))
    loss = model.evaluate(X_test, [Y_test, Y_test], verbose=0)
    # loss, acc = model.evaluate(X_test, Y_test, verbose=0)
    print('Test loss:', loss)
    plot_history(history, args.output)
    save_history(history, args.output)

    print('Test loss:', loss)
Beispiel #19
0
def main():
    parser = argparse.ArgumentParser(description='2D convolution')
    parser.add_argument('--batch', type=int, default=128)
    parser.add_argument('--epoch', type=int, default=100)
    parser.add_argument('--videos',
                        type=str,
                        default='videos',
                        help='directory where videos are stored')
    parser.add_argument('--nclass', type=int, default=101)
    parser.add_argument('--output', type=str, required=True)
    args = parser.parse_args()

    img_rows, img_cols = 32, 32

    vid3d = videoto3d.Videoto3D(img_rows, img_cols, 1)
    x, y = loaddata(args.videos, vid3d, args.nclass, args.output)
    X = x.reshape(x.shape[0], img_cols, img_rows, 1)
    nb_classes = max(y) + 1
    Y = np_utils.to_categorical(y, nb_classes)
    X = X.astype('float32')
    print('X shape:{}\nYshape:{}'.format(X.shape, Y.shape))

    # define model
    model = Sequential()

    model.add(
        Convolution2D(32, 3, 3, border_mode='same', input_shape=X.shape[1:]))
    model.add(Activation('relu'))
    model.add(Convolution2D(32, 3, 3))
    model.add(Activation('relu'))
    model.add(MaxPooling2D(pool_size=(2, 2)))
    model.add(Dropout(0.25))

    model.add(Convolution2D(64, 3, 3, border_mode='same'))
    model.add(Activation('relu'))
    model.add(Convolution2D(64, 3, 3))
    model.add(Activation('relu'))
    model.add(MaxPooling2D(pool_size=(2, 2)))
    model.add(Dropout(0.25))

    model.add(Flatten())
    model.add(Dense(512))
    model.add(Activation('relu'))
    model.add(Dropout(0.5))
    model.add(Dense(nb_classes))
    model.add(Activation('softmax'))

    model.compile(loss='categorical_crossentropy',
                  optimizer='adam',
                  metrics=['accuracy'])
    model.summary()
    plot_model(model,
               show_shapes=True,
               to_file=os.path.join(args.output, 'model.png'))

    X_train, X_test, Y_train, Y_test = train_test_split(X,
                                                        Y,
                                                        test_size=0.2,
                                                        random_state=4)

    history = model.fit(X_train,
                        Y_train,
                        batch_size=args.batch,
                        nb_epoch=args.epoch,
                        validation_data=(X_test, Y_test),
                        shuffle=True)
    model_json = model.to_json()
    with open(os.path.join(args.output, 'ucf101cnnmodel.json'),
              'w') as json_file:
        json_file.write(model_json)
    model.save_weights(os.path.join(args.output, 'ucf101cnnmodel.hd5'))

    loss, acc = model.evaluate(X_test, Y_test, verbose=0)
    print('Test loss:', loss)
    print('Test accuracy:', acc)
    plot_history(history, args.output)
    save_history(history, args.output)
Beispiel #20
0
def main():
    parser = argparse.ArgumentParser(
        description='simple 3D convolution for action recognition')
    parser.add_argument('--batch', type=int, default=128)
    parser.add_argument('--epoch', type=int, default=100)
    parser.add_argument('--videos',
                        type=str,
                        default='UCF101',
                        help='directory where videos are stored')
    parser.add_argument('--nclass', type=int, default=101)
    parser.add_argument('--output', type=str, required=True)
    parser.add_argument('--color', type=bool, default=False)
    parser.add_argument('--skip', type=bool, default=True)
    parser.add_argument('--depth', type=int, default=10)
    args = parser.parse_args()

    img_rows, img_cols, frames = 32, 32, args.depth
    channel = 3 if args.color else 1

    vid3d = videoto3d.Videoto3D(img_rows, img_cols, frames)
    x, y = loaddata(args.videos, vid3d, args.nclass, args.output, args.color,
                    args.skip)
    X = x.reshape((x.shape[0], img_rows, img_cols, frames, channel))
    nb_classes = max(y) + 1
    Y = np_utils.to_categorical(y, nb_classes)

    X = X.astype('float32')
    print('X_shape:{}\nY_shape:{}'.format(X.shape, Y.shape))

    # Define model
    model = Sequential()
    model.add(
        Convolution3D(32,
                      kernel_dim1=3,
                      kernel_dim2=3,
                      kernel_dim3=3,
                      input_shape=(X.shape[1:]),
                      border_mode='same',
                      activation='relu'))
    model.add(
        Convolution3D(32,
                      kernel_dim1=3,
                      kernel_dim2=3,
                      kernel_dim3=3,
                      border_mode='same',
                      activation='relu'))
    model.add(MaxPooling3D(pool_size=(3, 3, 3), border_mode='same'))
    model.add(Dropout(0.25))

    model.add(
        Convolution3D(64,
                      kernel_dim1=3,
                      kernel_dim2=3,
                      kernel_dim3=3,
                      border_mode='same',
                      activation='relu'))
    model.add(
        Convolution3D(64,
                      kernel_dim1=3,
                      kernel_dim2=3,
                      kernel_dim3=3,
                      border_mode='same',
                      activation='relu'))
    model.add(MaxPooling3D(pool_size=(3, 3, 3), border_mode='same'))
    model.add(Dropout(0.25))

    model.add(Flatten())
    model.add(Dense(512, init='normal', activation='relu'))
    model.add(Dropout(0.5))
    model.add(Dense(nb_classes, init='normal'))
    model.add(Activation('softmax'))

    model.compile(loss='categorical_crossentropy',
                  optimizer='adam',
                  metrics=['accuracy'])
    model.summary()
    plot(model,
         show_shapes=True,
         to_file=os.path.join(args.output, 'model.png'))

    X_train, X_test, Y_train, Y_test = train_test_split(X,
                                                        Y,
                                                        test_size=0.2,
                                                        random_state=4)

    histoinry = model.fit(X_train,
                          Y_train,
                          validation_data=(X_test, Y_test),
                          batch_size=args.batch,
                          nb_epoch=args.epoch,
                          verbose=1,
                          shuffle=True)
    model.evaluate(X_test, Y_test, verbose=0)
    model_json = model.to_json()
    with open(os.path.join(args.output, 'ucf101_3dcnnmodel.json'),
              'w') as json_file:
        json_file.write(model_json)
    model.save_weights(os.path.join(args.output, 'ucf101_3dcnnmodel.hd5'))

    loss, acc = model.evaluate(X_test, Y_test, verbose=0)
    print('Test loss:', loss)
    print('Test accuracy:', acc)
    plot_history(history, args.output)
    save_history(history, args.output)