def autoencoder(summary=False): """ Return the Keras model of the network Autoencoder reduces the dimensions of data from (56, 64, 24) to 487 """ input_shape = (56, 64, 24, 1) input_img = Input(shape=input_shape) # x = ZeroPadding3D(padding=((2, 3),(2, 1),(1, 0)))(input_img) x = Conv3D(16, (3, 3, 3), activation='relu', padding='same')(input_img) x = MaxPooling3D((2, 2, 2), padding='same')(x) x = Conv3D(8, (3, 3, 3), activation='relu', padding='same')(x) x = MaxPooling3D((2, 2, 2), padding='same')(x) x = Conv3D(8, (3, 3, 3), activation='relu', padding='same')(x) encoded = MaxPooling3D((2, 2, 2), padding='same')(x) x = Conv3D(8, (3, 3, 3), activation='relu', padding='same')(encoded) x = UpSampling3D((2, 2, 2))(x) x = Conv3D(8, (3, 3, 3), activation='relu', padding='same')(x) x = UpSampling3D((2, 2, 2))(x) x = Conv3D(16, (3, 3, 3), activation='relu', padding='same')(x) x = UpSampling3D((2, 2, 2))(x) decoded = Conv3D(1, (3, 3, 3), activation='relu', padding='same')(x) autoencoder = Model(input_img, decoded) autoencoder.compile(optimizer='adadelta', loss='binary_crossentropy') if summary: print(autoencoder.summary()) return autoencoder
def conv_3d(self): """ Build a 3D convolutional network, based loosely on C3D. https://arxiv.org/pdf/1412.0767.pdf """ model = Sequential() model.add( Conv3D(32, (3, 3, 3), activation='relu', input_shape=self.input_shape)) model.add(MaxPooling3D(pool_size=(1, 2, 2), strides=(1, 2, 2))) model.add(Conv3D(64, (3, 3, 3), activation='relu')) model.add(MaxPooling3D(pool_size=(1, 2, 2), strides=(1, 2, 2))) model.add(Conv3D(128, (3, 3, 3), activation='relu')) model.add(Conv3D(128, (3, 3, 3), activation='relu')) model.add(MaxPooling3D(pool_size=(1, 2, 2), strides=(1, 2, 2))) model.add(Conv3D(256, (2, 2, 2), activation='relu')) model.add(Conv3D(256, (2, 2, 2), activation='relu')) model.add(MaxPooling3D(pool_size=(1, 2, 2), strides=(1, 2, 2))) model.add(Flatten()) model.add(Dense(1024)) model.add(Dropout(0.5)) # model.add(Dense(1024)) # model.add(Dropout(0.5)) model.add(Dense(self.nb_classes, activation='softmax')) return model
def build_conv_3d(): model = Sequential() model.add( Conv3D(8, kernel_size=(3, 3, 3), input_shape=(train_data.shape[1:]), border_mode='same')) model.add(MaxPooling3D(pool_size=(2, 2, 2), border_mode='same')) model.add( Conv3D(8, kernel_size=(3, 3, 3), input_shape=(train_data.shape[1:]), border_mode='same')) model.add(MaxPooling3D(pool_size=(2, 2, 2), border_mode='same')) model.add( Conv3D(8, kernel_size=(3, 3, 3), input_shape=(train_data.shape[1:]), border_mode='same')) model.add(MaxPooling3D(pool_size=(2, 2, 2), border_mode='same')) return model
def cnn(self): model = Sequential() samples, frames, x, y, channels = self.input_shape model.add( Conv3D(32, (2, 3, 3), activation='relu', input_shape=(frames, x, y, channels), data_format='channels_last')) model.add(MaxPooling3D(pool_size=(1, 2, 2), strides=(2, 2, 2))) model.add(Conv3D(64, (2, 2, 2), activation='relu')) model.add(MaxPooling3D(pool_size=(1, 2, 2), strides=(2, 3, 3))) model.add(Conv3D(128, (3, 3, 3), activation='relu')) model.add(Conv3D(128, (3, 3, 3), activation='relu')) model.add(MaxPooling3D(pool_size=(1, 2, 2), strides=(2, 3, 3))) model.add(Dropout(0.25)) model.add(Conv3D(256, (2, 2, 2), activation='relu')) model.add(Conv3D(256, (2, 2, 2), activation='relu')) model.add(MaxPooling3D(pool_size=(1, 2, 2), strides=(2, 3, 3))) model.add(Flatten()) model.add(Dense(1024)) model.add(Dropout(0.25)) model.add(Dense(1024)) model.add(Dropout(0.25)) model.add(Dense(self.num_classes, activation='softmax')) return model
def network(input_shape=(49, 49, 49, 1), class_num=2): """Example CNN Keyword Arguments: input_shape {tuple} -- shape of input images. Should be (28,28,1) for MNIST and (32,32,3) for CIFAR (default: {(28,28,1)}) class_num {int} -- number of classes. Shoule be 10 for both MNIST and CIFAR10 (default: {10}) Returns: model -- keras.models.Model() object """ im_input = Input(shape=input_shape) t = Convolution3D(32, (24, 24, 24), padding='same')(im_input) # (24,24,24) t = MaxPooling3D(pool_size=(2, 2, 2))(t) t = Convolution3D(64, (12, 12, 12), padding='same')(t) t = MaxPooling3D(pool_size=(2, 2, 2))(t) t = Convolution3D(128, (6, 6, 6), padding='same')(t) t = Flatten()(t) t = Dense(256)(t) t = Activation('relu')(t) t = Dense(class_num)(t) output = Activation('softmax')(t) model = Model(input=im_input, output=output) return model
def make_model(): model = Sequential() #LAYER 1 (convolution 5x5x5) model.add( Conv3D(batch_input_shape=[None, 128, 128, 128, 1], filters=30, kernel_size=5, strides=3, padding='valid', kernel_regularizer=regularizers.l2(0.01))) model.add(Activation('relu')) model.add(MaxPooling3D(pool_size=(2, 2, 2))) model.add(Dropout(rate=0.1)) model.add(Conv3D(filters=32, kernel_size=5, strides=3, padding='valid')) model.add(Activation('relu')) model.add(MaxPooling3D(pool_size=(2, 2, 2))) model.add(Dropout(rate=0.11)) model.add(Flatten()) model.add(Dense(300, activation='relu')) model.add(Dropout(rate=0.17)) model.add(Dense(100, activation='relu')) model.add(Dense(1, kernel_initializer='uniform', activation='sigmoid')) return model
def create_model(self, verbose=False): model = Sequential() model.add( Conv3D(8, (2, 3, 10), input_shape=(1, 4, 5, 100), padding="same", activation='relu')) model.add(Conv3D(8, (2, 3, 10), padding="same", activation='relu')) model.add(MaxPooling3D(pool_size=(1, 1, 5))) model.add(Conv3D(8, (2, 3, 10), padding="same", activation='relu')) model.add(MaxPooling3D(pool_size=(1, 1, 2))) model.add(Dropout(0.3)) model.add(Flatten()) model.add(Dense(32, activation='relu')) model.add(Dense(16, activation='relu')) model.add(Dense(4, activation='softmax')) # Compile model optimizer = Adam(lr=0.001, decay=0.001) # lr <- lr * (1.0/(1.0+decay*iter)) model.compile(loss='categorical_crossentropy', optimizer=optimizer, metrics=['accuracy']) if verbose: model.summary() return model
def get_model(input_shape=(49, 49, 49, 1), class_num=2): """Example CNN Keyword Arguments: input_shape {tuple} -- shape of input images. Should be (28,28,1) for MNIST and (32,32,3) for CIFAR (default: {(28,28,1)}) class_num {int} -- number of classes. Shoule be 10 for both MNIST and CIFAR10 (default: {10}) Returns: model -- keras.models.Model() object """ im_input = Input(shape=input_shape) t = Convolution3D(32, (24, 24, 24), padding='same')(im_input) # (24,24,24) t = MaxPooling3D(pool_size=(2, 2, 2))(t) t = Convolution3D(64, (12, 12, 12), padding='same')(t) t = MaxPooling3D(pool_size=(2, 2, 2))(t) t = Convolution3D(128, (6, 6, 6), padding='same')(t) t = Flatten()(t) t = Dense(256)(t) t = Activation('relu')(t) t = Dense(class_num)(t) output = Activation('softmax')(t) model = Model(input=im_input, output=output) sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True) model.compile(sgd, 'categorical_crossentropy', metrics=['accuracy']) return model
def get_model(self): model = Sequential() # 1st layer group model.add(Conv3D(64, 3, 3, 3, activation='relu', border_mode='same', name='conv1', subsample=(1, 1, 1), input_shape=self.input_shape)) model.add(MaxPooling3D(pool_size=(1, 2, 2), strides=(1, 2, 2), border_mode='valid', name='pool1')) # 2nd layer group model.add(Conv3D(128, 3, 3, 3, activation='relu', border_mode='same', name='conv2', subsample=(1, 1, 1))) model.add(MaxPooling3D(pool_size=(2, 2, 2), strides=(2, 2, 2), border_mode='valid', name='pool2')) # 3rd layer group #model.add(Conv3D(256, 3, 3, 3, activation='relu', # border_mode='same', name='conv3a', # subsample=(1, 1, 1))) model.add(Conv3D(256, 3, 3, 3, activation='relu', border_mode='same', name='conv3b', subsample=(1, 1, 1))) model.add(MaxPooling3D(pool_size=(2, 2, 2), strides=(2, 2, 2), border_mode='valid', name='pool3')) model.add(Flatten()) # FC layers group model.add(Dense(512, activation='relu', name='fc7')) model.add(Dropout(0.5)) model.add(Dense(self.output_shape, activation='linear')) return model
def build(input_shape, num_classes=2): """Create a 3D Convolutional Autoencoder model. Parameters: - input_shape: Tuple of input shape in the format (conv_dim1, conv_dim2, conv_dim3, channels) - initial_filter: Initial filter size. This will be doubled for each hidden layer as it goes deeper. - num_encoding_layers: Number of encoding convolutional + pooling layers. The number of decoding layers will be the same. Returns: - A 3D CAD model that takes a 5D tensor (volumetric images in batch) as input and returns a 5D vector (prediction) as output. """ if len(input_shape) != 4: raise ValueError("Input shape should be a tuple " "(conv_dim1, conv_dim2, conv_dim3, channels)") input_img = Input(shape=input_shape, name="cad_input") # Conv1 (Output 120 x 120 x 64 x 128) x = Conv3D(128, (7, 7, 7), activation='relu', padding='same')(input_img) x = BatchNormalization()(x) x = MaxPooling3D(pool_size=(2, 2, 2), strides=(2, 2, 2))(x) # Conv2 (Output 30 x 30 x 16 x 256) x = Conv3D(256, (5, 5, 5), activation='relu', padding='same')(x) x = BatchNormalization()(x) x = MaxPooling3D(pool_size=(2, 2, 2), strides=(2, 2, 2))(x) # Conv3 (Output 7 x 7 x 8 x 256) x = Conv3D(256, (3, 3, 3), activation='relu', padding='same')(x) # Conv4 (Output 4 x 4 x 4 x 512) x = Conv3D(512, (3, 3, 3), activation='relu', strides=(2, 2, 2), padding='same')(x) # Conv5 (Output 2 x 2 x 2 x 1024) x = Conv3D(1024, (3, 3, 3), activation='relu', strides=(2, 2, 2), padding='same')(x) # Pooling and flatten x = MaxPooling3D(pool_size=(2, 2, 2), strides=(2, 2, 2))(x) x = Flatten()(x) # Fully connected layers x = Dense(1024, activation='relu', use_bias=True)(x) x = Dense(1024, activation='relu', use_bias=True)(x) x = Dense(num_classes, activation='sigmoid', use_bias=True)(x) model = Model(inputs=input_img, outputs=x) return model
def conv_3d(self): model = Sequential() model.add( Conv3D(32, (3, 3, 3), activation='relu', input_shape=self.input_shape)) model.add(MaxPooling3D(pool_size=(1, 2, 2), strides=(1, 2, 2))) model.add(Conv3D(64, (3, 3, 3), activation='relu')) model.add(MaxPooling3D(pool_size=(1, 2, 2), strides=(1, 2, 2))) model.add(Conv3D(128, (3, 3, 3), activation='relu')) model.add(Conv3D(128, (3, 3, 3), activation='relu')) model.add(MaxPooling3D(pool_size=(1, 2, 2), strides=(1, 2, 2))) model.add(Conv3D(256, (2, 2, 2), activation='relu')) model.add(Conv3D(256, (2, 2, 2), activation='relu')) model.add(MaxPooling3D(pool_size=(1, 2, 2), strides=(1, 2, 2))) model.add(Flatten()) model.add(Dense(1024)) model.add(Dropout(0.5)) model.add(Dense(1024)) model.add(Dropout(0.5)) model.add(Dense(self.nb_classes, activation='softmax')) return model
def train_model(): input_img = Input(shape=(128, 128, 128, 1)) x = Convolution3D(16, (5, 5, 5), activation='relu', padding='same')(input_img) x = MaxPooling3D((2, 2, 2), padding='same')(x) x = Convolution3D(16, (5, 5, 5), activation='relu', padding='same')(x) x = MaxPooling3D((2, 2, 2), padding='same')(x) x = Convolution3D(16, (5, 5, 5), activation='relu', padding='same')(x) encoded = MaxPooling3D((2, 2, 2), padding='same', name='encoder')(x) print("shape of encoded: ") print(K.int_shape(encoded)) x = Convolution3D(16, (5, 5, 5), activation='relu', padding='same')(encoded) x = UpSampling3D((2, 2, 2))(x) x = Convolution3D(16, (5, 5, 5), activation='relu', padding='same')(x) x = UpSampling3D((2, 2, 2))(x) x = Convolution3D(16, (5, 5, 5), activation='relu', padding='same')(x) x = UpSampling3D((2, 2, 2))(x) decoded = Convolution3D(1, (5, 5, 5), activation='sigmoid', padding='same')(x) print("shape of decoded: ") print(K.int_shape(decoded)) autoencoder = Model(input_img, decoded) autoencoder.compile(optimizer='adadelta', loss='binary_crossentropy') autoencoder.fit(train_data, train_data, epochs=10, batch_size=14, validation_data=(val_data, val_data), callbacks=[TensorBoard(log_dir='/tmp/autoencoder')]) autoencoder.save('autoencoder.h5')
def createModel(nb_filters=[8, 16, 32, 64, 128, 256], nb_pool=[2, 3], nb_conv=[3, 5], nb_channels=1): img_depth = len(listOfData[0]) img_cols = len(listOfData[0][0]) img_rows = len(listOfData[0][0][0]) numberOfLabels = len(set(labels)) # CNN Model v3 model = Sequential() model.add( Conv3D(nb_filters[1], (nb_conv[0], nb_conv[1], nb_conv[1]), data_format='channels_last', input_shape=(img_depth, img_rows, img_cols, nb_channels), activation='relu')) model.add(MaxPooling3D(pool_size=(nb_pool[0], nb_pool[1], nb_pool[1]))) model.add( Conv3D(nb_filters[2], (nb_conv[0], nb_conv[1], nb_conv[1]), activation='relu')) model.add(MaxPooling3D(pool_size=(nb_pool[0], nb_pool[1], nb_pool[1]))) model.add( Conv3D(nb_filters[3], (nb_conv[0], nb_conv[1], nb_conv[1]), activation='relu')) model.add(MaxPooling3D(pool_size=(nb_pool[0], nb_pool[1], nb_pool[1]))) model.add(Flatten()) model.add(Dense(128)) model.add(Dropout(0.5)) model.add(Dense(numberOfLabels)) model.add(Activation('softmax')) model.compile(loss='categorical_crossentropy', optimizer='adadelta', metrics=['accuracy']) model.summary() return model
def cnn_3D(self, input_shape, modual=''): #建立Sequential模型 model = Sequential() model.add(Convolution3D( filters = 8, kernel_size = (3, 3, 3), input_shape = input_shape, #40x40x5x1 padding = (0,0,1), activation='relu', kernel_initializer='he_normal', name = modual+'conv1' ))# now 38x38x5x8 model.add(MaxPooling3D(pool_size=(2,2,1)))# now 19x19x5x8 model.add(Convolution3D( filters = 16, kernel_size = (4, 4, 3), activation='relu', kernel_initializer='he_normal', name = modual+'conv2' ))# now 16x16x3x16 model.add(MaxPooling3D(pool_size=(2,2,1)))# now 8x8x1x16 model.add(Convolution3D( filters = 32, kernel_size = (3, 3, 3), activation='relu', kernel_initializer='he_normal', name = modual+'conv2' ))# now 6x6x1x32 model.add(AveragePooling3D(pool_size=(6,6,1)))# now 1x1x1x32 model.add(Flatten()) # model.add(Dropout(0.5)) model.add(Dense(32, activation='relu', name = modual+'fc1')) return model
def c3d(self): # Tunable parameters strides = (1, 1, 1) model = Sequential() model.add(Conv3D(32, kernel_size=(3, 3, 3), strides=strides,input_shape=( self.input_shape), border_mode='same', activation='relu')) #model.add(Activation('relu')) model.add(Conv3D(32, kernel_size=(3, 3, 3), strides=strides,padding='same', activation='softmax')) #model.add(Activation('softmax')) model.add(MaxPooling3D(pool_size=(2, 2, 2), strides=(2, 2, 2), padding='same')) model.add(Dropout(0.25)) model.add(Conv3D(64, kernel_size=(3, 3, 3),strides=strides, padding='same', activation='relu')) #model.add(Activation('relu')) model.add(Conv3D(64, kernel_size=(3, 3, 3),strides=strides, padding='same', activation='softmax')) #model.add(Activation('softmax')) model.add(MaxPooling3D(pool_size=(2, 2, 2), strides=(2, 2, 2), padding='same')) model.add(Dropout(0.25)) model.add(Flatten()) model.add(Dense(512, activation='sigmoid')) model.add(Dropout(0.5)) model.add(Dense(self.n_labels, activation='softmax')) return model
def get_model(self): model = Sequential() model.add( Conv3D(64, kernel_size=(3, 3, 3), input_shape=self.input_shape, activation='relu')) model.add(MaxPooling3D(pool_size=2, strides=(1, 2, 2))) model.add( Conv3D(64, kernel_size=(3, 2, 2), input_shape=self.input_shape, activation='relu')) model.add(Conv3D(128, kernel_size=(3, 2, 2), activation='relu')) model.add(MaxPooling3D(pool_size=2, strides=(1, 2, 2))) model.add(Conv3D(128, kernel_size=(3, 2, 2), activation='relu')) model.add(MaxPooling3D(pool_size=2, strides=2)) model.add(Dropout(0.15)) model.add(Conv3D(256, kernel_size=(3, 2, 2), activation='relu')) model.add(BatchNormalization()) model.add(Flatten()) model.add(Dense(512, activation='relu')) model.add(Dropout(0.15)) model.add(Dense(512, activation='relu')) model.add(Dropout(0.15)) model.add(Dense(self.output_shape, activation='linear')) return model
def construct_model(self): # th input (channels, height, width) # tf input (height, width, channels) keras.backend.set_image_dim_ordering('tf') model = Sequential() #Encode: model.add(Convolution3D(16,(2,3,3), activation='relu', input_shape=(config.frames_per_input, 501, 501, 3),border_mode='same')) model.add(MaxPooling3D(pool_size=(2,2,2))) model.add(Convolution3D(16,(2,3,3), activation='relu', border_mode='same')) model.add(Convolution3D(16,(2,3,3), activation='relu', border_mode='same')) model.add(MaxPooling3D(pool_size=(2,2,2))) model.add(Convolution3D(8,(1,3,3), activation='relu', border_mode='same')) #model.add(Convolution3D(8,(1,3,3), activation='relu', border_mode='same')) #model.add(MaxPooling3D(pool_size=(1,2,2))) #model.add(Convolution3D(8,(1,3,3), activation='relu', border_mode='same')) #model.add(Convolution3D(8,(1,3,3), activation='relu', border_mode='same')) #Decode: model.add(Convolution3D(16,(2,3,3), activation='relu', border_mode='same')) model.add(UpSampling3D((1,2,2))) model.add(Convolution3D(16,(2,3,3), activation='relu', border_mode='same')) model.add(UpSampling3D((1,2,2))) model.add(Convolution3D(3,(2,3,3), activation='relu', border_mode='same')) # model.add(Convolution3D(16,(2,3,3), activation='relu', border_mode='same')) # model.add(UpSampling3D((1,1,1))) # model.add(Convolution3D(3,(2,3,3), activation='relu', border_mode='same')) # model.add(UpSampling3D((1,1,1))) # model.add(Flatten()) model.compile(loss='mean_squared_error', optimizer='adam') model.compile(loss=y_std, optimizer='adam') model.compile(loss='binary_crossentropy', optimizer='adam') # doesn't reset weights model.summary() self.model = model
def make_model(l2_penalty): model = Sequential() #LAYER 1 (convolution 5x5x5) model.add( Conv3D(batch_input_shape=[None, 128, 128, 128, 1], filters=16, kernel_size=5, strides=3, padding='valid', kernel_regularizer=l2(l2_penalty), activation='relu')) model.add(MaxPooling3D(pool_size=(2, 2, 2))) model.add( Conv3D(filters=32, kernel_size=5, strides=3, padding='valid', activation='relu')) model.add(MaxPooling3D(pool_size=(2, 2, 2))) model.add(Flatten()) model.add(Dense(100, activation='relu')) model.add(Dropout(rate=0.15)) model.add(Dense(100, activation='relu')) model.add(Dense(1, kernel_initializer='uniform', activation='sigmoid')) print(model.output_shape) return model
def c3d_model(summary=False): """ Return the Keras model of the network """ model = Sequential() # 1st layer group model.add(Convolution3D(64, 3, 3, 3, activation='relu', border_mode='same', name='conv1', subsample=(1, 1, 1), input_shape=(16,120,120,3))) # model.add(BatchNormalization()) model.add(MaxPooling3D(pool_size=(1, 2, 2), strides=(1, 2, 2), border_mode='same', name='pool1')) # 2nd layer group model.add(Convolution3D(128, 3, 3, 3, activation='relu', border_mode='same', name='conv2', subsample=(1, 1, 1))) model.add(MaxPooling3D(pool_size=(2, 2, 2), strides=(2, 2, 2), border_mode='same', name='pool2')) # 3rd layer group model.add(Convolution3D(256, 3, 3, 3, activation='relu', border_mode='same', name='conv3a', subsample=(1, 1, 1))) model.add(Convolution3D(256, 3, 3, 3, activation='relu', border_mode='same', name='conv3b', subsample=(1, 1, 1))) model.add(MaxPooling3D(pool_size=(2, 2, 2), strides=(2, 2, 2), border_mode='same', name='pool3')) # 4th layer group model.add(Convolution3D(512, 3, 3, 3, activation='relu', border_mode='same', name='conv4a', subsample=(1, 1, 1))) model.add(Convolution3D(512, 3, 3, 3, activation='relu', border_mode='same', name='conv4b', subsample=(1, 1, 1))) model.add(MaxPooling3D(pool_size=(2, 2, 2), strides=(2, 2, 2), border_mode='same', name='pool4')) # 5th layer group model.add(Convolution3D(512, 3, 3, 3, activation='relu', border_mode='same', name='conv5a', subsample=(1, 1, 1))) model.add(Convolution3D(512, 3, 3, 3, activation='relu', border_mode='same', name='conv5b', subsample=(1, 1, 1))) model.add(ZeroPadding3D(padding=(0, 1, 1))) model.add(MaxPooling3D(pool_size=(2, 2, 2), strides=(2, 2, 2), border_mode='valid', name='pool5')) model.add(BatchNormalization()) model.add(Flatten()) # FC layers group model.add(Dense(4096,activation='relu', name='fc6')) model.add(Dropout(.5)) model.add(BatchNormalization()) model.add(Dense(4096, activation='relu', name='fc7')) model.add(Dropout(.5)) model.add(Dense(14, activation='softmax', name='fc9')) if summary: print(model.summary()) return model
def Conv3dBLSTM(self) : model = Sequential() # 1st layer group model = Sequential() # 1st layer group # (samples, conv_dim1, conv_dim2, conv_dim3, channels) model.add(Conv3D(64, 3, 3, 3, activation='relu', border_mode='same', name='conv1', subsample=(1, 1, 1), input_shape=self.shapeOfInputConv3d)) # 40 80 80 3 model.add(MaxPooling3D(pool_size=(1, 2, 2), strides=(1, 2, 2), border_mode='valid', name='pool1')) # 2nd layer group model.add(Conv3D(128, 3, 3, 3, activation='relu', border_mode='same', name='conv2', subsample=(1, 1, 1))) model.add(MaxPooling3D(pool_size=(2, 2, 2), strides=(2, 2, 2), border_mode='valid', name='pool2')) # 3rd layer group model.add(Conv3D(256, 3, 3, 3, activation='relu', border_mode='same', name='conv3a', subsample=(1, 1, 1))) model.add(Conv3D(256, 3, 3, 3, activation='relu', border_mode='same', name='conv3b', subsample=(1, 1, 1))) model.add(MaxPooling3D(pool_size=(2, 2, 2), strides=(2, 2, 2), border_mode='valid', name='pool3')) # 4th layer group model.add(Conv3D(512, 3, 3, 3, activation='relu', border_mode='same', name='conv4a', subsample=(1, 1, 1))) model.add(Conv3D(512, 3, 3, 3, activation='relu', border_mode='same', name='conv4b', subsample=(1, 1, 1))) model.add(MaxPooling3D(pool_size=(2, 2, 2), strides=(2, 2, 2), border_mode='valid', name='pool4')) # 5th layer group model.add(Conv3D(512, 3, 3, 3, activation='relu', border_mode='same', name='conv5a', subsample=(1, 1, 1))) model.add(Conv3D(512, 3, 3, 3, activation='relu', border_mode='same', name='conv5b', subsample=(1, 1, 1))) model.add(ZeroPadding3D(padding=(0, 1, 1))) model.add(MaxPooling3D(pool_size=(2, 2, 2), strides=(2, 2, 2), border_mode='valid', name='pool5')) model.add(Reshape(target_shape=(2, 512* 3* 3))) # (batch_size, timesteps, input_dim) model.add(Bidirectional(LSTM(512* 3* 3, input_shape=self.shapeOfInputLSTM, return_sequences=False, activation="softmax", dropout=0.5))) model.add(Dense(512, activation='relu')) model.add(Dropout(0.5)) model.add(Dense(self.classesNumber, activation='softmax')) return model
def build(input_shape, num_outputs): print('original input shape:', input_shape) _handle_dim_ordering() if len(input_shape) != 4: raise Exception( "Input shape should be a tuple (nb_channels, kernel_dim1, kernel_dim2, kernel_dim3)" ) print('original input shape:', input_shape) # orignal input shape: 1,7,7,200 if K.image_dim_ordering() == 'tf': input_shape = (input_shape[1], input_shape[2], input_shape[3], input_shape[0]) print('change input shape:', input_shape) # 用keras中函数式模型API,不用序贯模型API # 张量流输入 input = Input(shape=input_shape) conv1 = Conv3D(filters=32, kernel_size=(3, 3, 20), strides=(1, 1, 5), kernel_regularizer=regularizers.l2(0.01))(input) act1 = Activation('relu')(conv1) pool1 = MaxPooling3D(pool_size=(2, 2, 2), strides=(1, 1, 1), padding='same')(act1) conv2 = Conv3D(filters=64, kernel_size=(2, 2, 3), strides=(1, 1, 2), kernel_regularizer=regularizers.l2(0.01))(pool1) act2 = Activation('relu')(conv2) drop1 = Dropout(0.5)(act2) pool2 = MaxPooling3D(pool_size=(2, 2, 2), strides=(1, 1, 1), padding='same')(drop1) conv3 = Conv3D(filters=128, kernel_size=(3, 3, 3), strides=(1, 1, 2), kernel_regularizer=regularizers.l2(0.01))(pool2) act3 = Activation('relu')(conv3) drop2 = Dropout(0.5)(act3) flatten1 = Flatten()(drop2) fc1 = Dense(200, kernel_regularizer=regularizers.l2(0.01))(flatten1) act3 = Activation('relu')(fc1) # 输入分类器 # Classifier block dense = Dense(units=num_outputs, activation="softmax", kernel_initializer="he_normal")(act3) model = Model(inputs=input, outputs=dense) return model
def C3DP_4_DE_3_V1(n_labels, input_shape): #image size (26,39) and seq length 32 # Tunable parameters model_name = 'C3DP_4_DE_3_V1' kernel_size = (3, 3, 3) strides = (1, 1, 1) extra_conv_blocks = 1 model = Sequential() # 3D Conv Block 1 + Max Pooling model.add( Conv3D(32, (7, 7, 5), strides=strides, activation='relu', padding='same', input_shape=input_shape)) model.add(MaxPooling3D(pool_size=(1, 2, 2), strides=(1, 2, 2))) # 3D Conv Block 2 + Max Pooling model.add(Conv3D(64, (5, 5, 3), strides=strides, activation='relu', padding='same'), input_shape=(32, 13, 19, 3)) model.add(MaxPooling3D(pool_size=(2, 2, 2), strides=(2, 2, 2))) # 3D Conv Block 3 + Max Pooling model.add( Conv3D(128, (5, 5, 3), strides=strides, activation='relu', padding='same')) model.add(MaxPooling3D(pool_size=(2, 2, 2), strides=(2, 2, 2))) # 3D Conv Block 4 + Max Pooling + Dropout model.add( Conv3D(128, (3, 5, 3), strides=strides, activation='relu', padding='same')) model.add(MaxPooling3D(pool_size=(2, 2, 2), strides=(2, 2, 2))) model.add(Dropout(0.25)) model.add(Flatten()) # Dense Block 1 model.add(Dense(256, activation='relu')) # Dense Block 2 + Dropout model.add(Dense(256, activation='relu')) model.add(Dropout(0.2)) # Dense Block 3 model.add(Dense(n_labels, activation='softmax')) return (model, model_name)
def C3D_2_C3DP_2_DE_2(n_labels, input_shape): #image size (26,39) and seq length 32 # Tunable parameters model_name = 'C3D_2_C3DP_2_DE_2' strides = (1, 1, 1) model = Sequential() # 3D Conv Block 1 model.add( Conv3D(32, kernel_size=(3, 3, 3), strides=strides, input_shape=input_shape, border_mode='same', activation='relu')) # 3D Conv Block 2 + Max Pooling + Dropout model.add( Conv3D(32, kernel_size=(3, 3, 3), strides=strides, padding='same', activation='softmax')) model.add( MaxPooling3D(pool_size=(2, 2, 2), strides=(2, 2, 2), padding='same')) model.add(Dropout(0.25)) # 3D Conv Block 3 model.add( Conv3D(64, kernel_size=(3, 3, 3), strides=strides, padding='same', activation='relu')) # 3D Conv Block 4 + Max Pooling + Dropout model.add( Conv3D(64, kernel_size=(3, 3, 3), strides=strides, padding='same', activation='softmax')) model.add( MaxPooling3D(pool_size=(2, 2, 2), strides=(2, 2, 2), padding='same')) model.add(Dropout(0.25)) model.add(Flatten()) #Dense Block 1 + Dropout model.add(Dense(512, activation='sigmoid')) model.add(Dropout(0.5)) #Dense Block 2 model.add(Dense(n_labels, activation='softmax')) return (model, model_name)
def C3D(weights='sports1M'): """Instantiates a C3D Kerasl model Keyword arguments: weights -- weights to load into model. (default is sports1M) Returns: A Keras model. """ if weights not in {'sports1M', None}: raise ValueError('weights should be either be sports1M or None') if K.image_data_format() == 'channels_last': shape = (16,112,112,3) else: shape = (3,16,112,112) model = Sequential() model.add(Conv3D(64, 3, activation='relu', padding='same', name='conv1', input_shape=shape)) model.add(MaxPooling3D(pool_size=(1,2,2), strides=(1,2,2), padding='same', name='pool1')) model.add(Conv3D(128, 3, activation='relu', padding='same', name='conv2')) model.add(MaxPooling3D(pool_size=(2,2,2), strides=(2,2,2), padding='valid', name='pool2')) model.add(Conv3D(256, 3, activation='relu', padding='same', name='conv3a')) model.add(Conv3D(256, 3, activation='relu', padding='same', name='conv3b')) model.add(MaxPooling3D(pool_size=(2,2,2), strides=(2,2,2), padding='valid', name='pool3')) model.add(Conv3D(512, 3, activation='relu', padding='same', name='conv4a')) model.add(Conv3D(512, 3, activation='relu', padding='same', name='conv4b')) model.add(MaxPooling3D(pool_size=(2,2,2), strides=(2,2,2), padding='valid', name='pool4')) model.add(Conv3D(512, 3, activation='relu', padding='same', name='conv5a')) model.add(Conv3D(512, 3, activation='relu', padding='same', name='conv5b')) model.add(ZeroPadding3D(padding=(0,1,1))) model.add(MaxPooling3D(pool_size=(2,2,2), strides=(2,2,2), padding='valid', name='pool5')) model.add(Flatten()) model.add(Dense(4096, activation='relu', name='fc6')) model.add(Dropout(0.5)) model.add(Dense(4096, activation='relu', name='fc7')) model.add(Dropout(0.5)) model.add(Dense(487, activation='softmax', name='fc8')) if weights == 'sports1M': weights_path = get_file('sports1M_weights_tf.h5', WEIGHTS_PATH, cache_subdir='models', md5_hash='b7a93b2f9156ccbebe3ca24b41fc5402') model.load_weights(weights_path) return model
def c3d_model(): classes = 2 """ Return the Keras model of the network """ model = Sequential() input_shape=(16, 100, 100, 3) # l, h, w, c model.add(Convolution3D(64, 3, 3, 3, activation='relu', border_mode='same', name='conv1', input_shape=input_shape)) model.add(MaxPooling3D(pool_size=(1, 2, 2), strides=(1, 2, 2), border_mode='valid', name='pool1')) # 2nd layer group model.add(Convolution3D(128, 3, 3, 3, activation='relu', border_mode='same', name='conv2')) model.add(MaxPooling3D(pool_size=(2, 2, 2), strides=(2, 2, 2), border_mode='valid', name='pool2')) # 3rd layer group model.add(Convolution3D(256, 3, 3, 3, activation='relu', border_mode='same', name='conv3a')) model.add(Convolution3D(256, 3, 3, 3, activation='relu', border_mode='same', name='conv3b')) model.add(MaxPooling3D(pool_size=(2, 2, 2), strides=(2, 2, 2), border_mode='valid', name='pool3')) # 4th layer group model.add(Convolution3D(256, 3, 3, 3, activation='relu', border_mode='same', name='conv4a')) model.add(Convolution3D(256, 3, 3, 3, activation='relu', border_mode='same', name='conv4b')) model.add(MaxPooling3D(pool_size=(2, 2, 2), strides=(2, 2, 2), border_mode='valid', name='pool4')) # 5th layer group model.add(Convolution3D(512, 3, 3, 3, activation='relu', border_mode='same', name='conv5a')) model.add(Convolution3D(512, 3, 3, 3, activation='relu', border_mode='same', name='conv5b')) model.add(MaxPooling3D(pool_size=(2, 2, 2), strides=(2, 2, 2), border_mode='valid', name='pool5')) model.add(Flatten()) # FC layers group #model.add(Dense(2048, activation='relu', name='fc6')) #model.add(Dropout(.5)) #model.add(Dense(2048, activation='relu', name='fc7')) #model.add(Dropout(.5)) #model.add(Dense(2, activation='sigmoid', name='fc8')) #WS FC Layer with custom parameters model.add(Dense(512,input_dim=4608,W_regularizer=l2(0.001),activation='relu', name='fc6')) model.add(Dropout(.6)) model.add(Dense(32,activation='relu',W_regularizer=l2(0.001), name='fc7')) model.add(Dropout(.6)) model.add(Dense(2, activation='sigmoid',W_regularizer=l2(0.001), name='fc8')) return model
def small_c3d(self): """See: 'https://arxiv.org/pdf/1412.0767.pdf' """ # Tunable parameters kernel_size = (3, 3, 3) strides = (1, 1, 1) extra_conv_blocks = 1 model = Sequential() # Conv Block 1 model.add( Conv3D(32, kernel_size, strides=strides, activation='relu', padding='same', input_shape=self.input_shape)) model.add(MaxPooling3D(pool_size=(1, 2, 2), strides=(1, 2, 2))) # Conv Block 2 model.add( Conv3D(64, kernel_size, strides=strides, activation='relu', padding='same')) model.add(MaxPooling3D(pool_size=(2, 2, 2), strides=(2, 2, 2))) # Conv Block 3 model.add( Conv3D(128, kernel_size, strides=strides, activation='relu', padding='same')) model.add(MaxPooling3D(pool_size=(2, 2, 2), strides=(2, 2, 2))) # Conv Block 4 model.add( Conv3D(128, kernel_size, strides=strides, activation='relu', padding='same')) model.add(MaxPooling3D(pool_size=(2, 2, 2), strides=(2, 2, 2))) # Dense Block model.add(Flatten()) model.add(Dense(256, activation='relu')) model.add(Dropout(0.25)) model.add(Dense(256, activation='relu')) model.add(Dropout(0.25)) model.add(Dense(self.n_labels, activation='softmax')) return model
def Conv3DModelCreate(self): # According to https://gist.github.com/albertomontesg/d8b21a179c1e6cca0480ebdf292c34d2 model = Sequential() # 1st layer group model.add(Conv3D(64, 3, 3, 3, activation='relu', border_mode='same', name='conv1', subsample=(1, 1, 1), input_shape=self.shapeOfInput)) # 40 80 80 3 model.add(MaxPooling3D(pool_size=(1, 2, 2), strides=(1, 2, 2), border_mode='valid', name='pool1')) # 2nd layer group model.add(Conv3D(128, 3, 3, 3, activation='relu', border_mode='same', name='conv2', subsample=(1, 1, 1))) model.add(MaxPooling3D(pool_size=(2, 2, 2), strides=(2, 2, 2), border_mode='valid', name='pool2')) # 3rd layer group model.add(Conv3D(256, 3, 3, 3, activation='relu', border_mode='same', name='conv3a', subsample=(1, 1, 1))) model.add(Conv3D(256, 3, 3, 3, activation='relu', border_mode='same', name='conv3b', subsample=(1, 1, 1))) model.add(MaxPooling3D(pool_size=(2, 2, 2), strides=(2, 2, 2), border_mode='valid', name='pool3')) # 4th layer group model.add(Conv3D(512, 3, 3, 3, activation='relu', border_mode='same', name='conv4a', subsample=(1, 1, 1))) model.add(Conv3D(512, 3, 3, 3, activation='relu', border_mode='same', name='conv4b', subsample=(1, 1, 1))) model.add(MaxPooling3D(pool_size=(2, 2, 2), strides=(2, 2, 2), border_mode='valid', name='pool4')) # 5th layer group model.add(Conv3D(512, 3, 3, 3, activation='relu', border_mode='same', name='conv5a', subsample=(1, 1, 1))) model.add(Conv3D(512, 3, 3, 3, activation='relu', border_mode='same', name='conv5b', subsample=(1, 1, 1))) model.add(ZeroPadding3D(padding=(0, 1, 1))) model.add(MaxPooling3D(pool_size=(2, 2, 2), strides=(2, 2, 2), border_mode='valid', name='pool5')) model.add(Flatten()) # FC layers group model.add(Dense(4096, activation='relu', name='fc6')) model.add(Dropout(.5)) model.add(Dense(4096, activation='relu', name='fc7')) model.add(Dropout(.5)) model.add(Dense(self.classesNumber, activation='softmax', name='fc8')) return model
def build_3d_model(nb_classes): #kernal_size = (depth,row,col) kernal_size = (4,3,3) pool_size = (1,2,2) timesteps =10 #input_shape = (timesteps,nb_sensors,rows,cols) input_shape = (timesteps,4,9,5) model = Sequential() #1st layer group model.add(Conv3D(64,kernal_size, name = 'conv1', activation = 'relu', input_shape = input_shape, strides = (1,1,1), data_format = 'channels_first', padding = 'same')) model.add(MaxPooling3D(padding = 'valid',pool_size=pool_size, strides = (1,2,2),data_format = 'channels_first',name='pool1')) model.add(Dropout(0.25)) #2nd layer group model.add(Conv3D(128,kernal_size,strides = (1,1,1), data_format = 'channels_first',input_shape=input_shape, activation='relu', padding = 'same', name = 'conv2')) model.add(MaxPooling3D(pool_size=pool_size,strides = (1,2,2), padding = 'valid',data_format = 'channels_first',name='pool2')) model.add(Dropout(0.25)) #3rd layer group model.add(Conv3D(256,kernal_size,strides = (1,1,1), data_format = 'channels_first',input_shape=input_shape, activation='relu', padding = 'same', name = 'conv3')) #model.add(MaxPooling3D(pool_size=pool_size,strides = (1,2,2), # padding = 'same',name='pool3')) model.add(Dropout(0.25)) #FC layers model.add(Flatten()) model.add(Dense(256,activation='relu',name='fc1')) model.add(Dropout(0.5)) model.add(Dense(nb_classes,activation='relu',name='fc2')) model.add(Dropout(0.5)) print(model.summary()) start = time.time() model.compile(loss='categorical_crossentropy', optimizer='adadelta', metrics=['accuracy']) print("> Compile time :",time.time()-start) return model
def c3d(self): """ Return the Keras model of the network """ model = Sequential() # 1st layer group model.add( Conv3D(64, (3, 3, 3), activation='relu', padding='same', name='3d1', strides=(1, 1, 1), input_shape=self.input_shape)) model.add( MaxPooling3D(pool_size=(1, 2, 2), strides=(1, 2, 2), padding='valid', name='pool1')) # 2nd layer group model.add( Conv3D(128, (3, 3, 3), activation='relu', padding='same', name='3d2', strides=(1, 1, 1))) model.add( MaxPooling3D(pool_size=(2, 2, 2), strides=(2, 2, 2), padding='valid', name='pool2')) # 3rd layer group model.add( Conv3D(256, (3, 3, 3), activation='relu', padding='same', name='3d3', strides=(2, 2, 2))) model.add( MaxPooling3D(pool_size=(4, 4, 4), strides=(2, 2, 2), padding='valid', name='pool3')) model.add(Flatten()) # FC layers group model.add(Dense((2048), activation='relu', name='fc1')) model.add(Dropout(0.2)) model.add(Dense((1024), activation='relu', name='fc2')) model.add(Dropout(0.2)) model.add(Dense((512), activation='relu', name='fc3')) model.add(Dropout(0.2)) model.add(Dense(self.classes, activation='softmax')) return model
def get_model(self): invariants = {'kernel_initializer': 'he_normal'} #model = Sequential() seq = Input(shape=self.input_shape) grey = TimeDistributed( Lambda(lambda x: tf.image.rgb_to_grayscale(x)))(seq) red = Lambda(lambda x: x[:, :, :, :, 0])(seq) red = Lambda(lambda x: x[:, :, :, :, None])(red) x1 = Conv3D(64, kernel_size=(15, 5, 5), padding='valid', **invariants)(grey) x1 = Activation('relu')(x1) x1 = MaxPooling3D(pool_size=(1, 2, 2), strides=(1, 2, 2), padding='valid')(x1) x1 = BatchNormalization()(x1) x1 = Conv3D(128, kernel_size=5, padding='valid', **invariants)(x1) x1 = Activation('relu')(x1) x1 = MaxPooling3D(pool_size=(1, 2, 2), strides=(1, 2, 2), padding='valid')(x1) x1 = BatchNormalization()(x1) x2 = Conv3D(64, kernel_size=(15, 5, 5), padding='valid', **invariants)(red) x2 = Activation('relu')(x2) x2 = MaxPooling3D(pool_size=(1, 2, 2), strides=(1, 2, 2), padding='valid')(x2) x2 = BatchNormalization()(x2) x2 = Conv3D(128, kernel_size=5, padding='valid', **invariants)(x2) x2 = Activation('relu')(x2) x2 = MaxPooling3D(pool_size=(1, 2, 2), strides=(1, 2, 2), padding='valid')(x2) x2 = BatchNormalization()(x2) x = concatenate([x1, x2]) x = Conv3D(256, kernel_size=3, padding='valid', **invariants)(x) x = Activation('relu')(x) x = MaxPooling3D(pool_size=2, strides=(1, 2, 2), padding='valid')(x) x = BatchNormalization()(x) x = Flatten()(x) x = Dense(512, activation='relu', **invariants)(x) x = Dropout(0.15)(x) x = Dense(512, activation='relu', **invariants)(x) x = Dropout(0.15)(x) pred = Dense(self.output_shape, activation='linear')(x) model = Model(inputs=seq, outputs=pred) return model