def get_densenet(): model = DenseNet(nb_dense_block=2, classes=1) model.summary() # compile model print('compile model...') optimizer = optimizers.Adam() model.compile(loss='mean_squared_error', optimizer=optimizer) return model
def model_generator(): weights_path = '/home/fiiser/Documents/ML/DenseNet-Keras/imagenet_models/densenet121_weights_tf.h5' base_model = DenseNet(reduction=0.5, weights_path=weights_path) # for layer in base_model.layers: # layer.trainable = False predictions = Dense(num_classes, activation='sigmoid')(base_model.layers[-2].output) model = Model(inputs=base_model.input, outputs=predictions) opt = keras.optimizers.Adam(lr=3e-05) model.compile(optimizer=opt, loss=losses.binary_crossentropy, metrics=['binary_accuracy', precision, recall]) print(model.metrics_names) return model
if K.image_dim_ordering() == 'th': # Transpose image dimensions (Theano uses the channels as the 1st dimension) im = im.transpose((2,0,1)) # Use pre-trained weights for Theano backend weights_path = 'imagenet_models/densenet121_weights_th.h5' else: # Use pre-trained weights for Tensorflow backend weights_path = 'imagenet_models/densenet121_weights_tf.h5' # Insert a new dimension for the batch_size im = np.expand_dims(im, axis=0) # Test pretrained model model = DenseNet(reduction=0.5, classes=1000, weights_path=weights_path) sgd = SGD(lr=1e-2, decay=1e-6, momentum=0.9, nesterov=True) model.compile(optimizer=sgd, loss='categorical_crossentropy', metrics=['accuracy']) out = model.predict(im) warnings.filterwarnings('ignore', '.*do not.*',) # Load ImageNet classes file classes = [] with open('resources/classes.txt', 'r') as list_: for line in list_: classes.append(line.rstrip('\n')) print('Prediction: '+str(classes[np.argmax(out)]))
def main(): # create directory to save the preprocessed images if not os.path.exists('preprocessed_images'): os.mkdir('preprocessed_images') print("Reading Arguments: ") args = get_arguments() try: images = open(args.img_list).readlines() except Exception as e: print("Unable to read the image list") print(e) exit() print("Processing {} images.".format(len(images))) header = ['image_name'] header.extend(list(range(1,13))) rows = [] # Initialize the pretrained model print("Intializing the pretrained model") model = DenseNet(reduction=0.5, classes=cfg.num_classes, weights_path=cfg.weights_path) sgd = SGD(lr=1e-2, decay=1e-4, momentum=0.9, nesterov=True) model.compile(optimizer=sgd, loss='categorical_crossentropy', metrics=['accuracy']) print("Model loaded sucessfully!") for img_name in images: img_name = img_name.strip() image_row = dict() image_row['image_name'] = img_name.split('/')[-1] image = cv2.imread(img_name) (h, w) = image.shape[:2] center = (w/2, h/2) M = cv2.getRotationMatrix2D(center, 180, 1.0) image = cv2.warpAffine(image, M, (w, h)) im_name = osp.join('preprocessed_images', img_name.split('/')[-1]) cv2.imwrite(im_name, image) if args.grid_type == 12: gridw, gridh = cfg.GRIDW, cfg.GRIDH else: raise ValueError(INVALID_GRID_TYPE) # Pre-process the image. crop_dims = args.crop_dims if type(crop_dims) == str: crop_dims = eval(crop_dims) rgb = RGBPreprocess(crop_dims) data = rgb.process_img(cv2.cvtColor(image, cv2.COLOR_BGR2RGB), image_row['image_name'], args.debug, gridh, gridw) # run for each grid location. for i, im in enumerate(data): # preprocess the image im = Image.fromarray(im) im = im.resize((224, 224), Image.LANCZOS) im = np.asarray(im, np.float64) im = np.expand_dims(im, axis=0) im = mean_subtraction(im) # Run prediction out = model.predict(im) predict = np.argmax(out) # write prediction to the row dictionary. image_row[i+1] = cfg.class_names[predict] rows.append(image_row) # write to csv with open(args.output_file, 'w') as csvf: writer = csv.DictWriter(csvf, fieldnames=header) writer.writeheader() for row in rows: writer.writerow(row)
"""Test ImageNet pretrained DenseNet""" import cv2 import numpy as np from keras.optimizers import SGD import keras.backend as K import keras import pylab as plt from keras.datasets import cifar10 from densenet121 import DenseNet nb_classes = 10 # Test pretrained model model = DenseNet(reduction=0.5, classes=nb_classes) sgd = SGD(lr=1e-2, decay=1e-6, momentum=0.9, nesterov=True) model.compile(optimizer=sgd, loss='categorical_crossentropy', metrics=['accuracy']) # 数据的导入和预处理 (x_train, y_train), (x_test, y_test) = cifar10.load_data() # X_train和X_test是形如(nb_samples, 3, 32, 32)的RGB三通道图像数据,数据类型是无符号8位整形(uint8) # Y_train和 Y_test是形如(nb_samples,)标签数据,标签的范围是0~9 y_train = keras.utils.to_categorical(y_train, nb_classes) # 训练模型 model.fit(x=x_train, y=y_train, epochs=30, batch_size=64) model.save_weights('imagenet_models/densenet121_weights_tf_cifar10.h5')
def train_factory(MODEL_NAME): config = tf.ConfigProto() config.gpu_options.allocator_type = 'BFC' config.gpu_options.allow_growth = True set_session(tf.Session(config=config)) # model = CCR(input_shape=(img_width,img_height,1),classes=charset_size) # model = LeNet.build(width=img_width, height=img_height, depth=1, classes=charset_size) # model = ResNet.build_model(SHAPE=(img_width,img_height,1), classes=charset_size) # vgg net 5 # MODEL_PATH='trained_model/vggnet5.hdf5' # model=VGGNet5.vgg(input_shape=(img_width,img_height,1),classes=charset_size) model=None if(MODEL_NAME=='inception_resnet_v2'): model=InceptionResNetV2.inception_resnet_v2(input_shape=(img_width,img_height,3),classes=charset_size,weights='./trained_model/inception_resnet_v2/inception_resnet_v2.12-0.8244.hdf5') elif(MODEL_NAME=='xception'): # xeception model=Xception.Xception((img_width,img_height,3),classes=charset_size) elif(MODEL_NAME=='mobilenet_v2'): #mobilenet v2 model=MobileNetv2.MobileNet_v2((img_width,img_height,3),classes=charset_size) elif(MODEL_NAME=='inception_v3'): #mobilenet v2 model=Inception_v3.inception((img_width,img_height,3),classes=charset_size) elif(MODEL_NAME=='vgg16'): model=VGGNet.vgg(input_shape=(img_width,img_height,3),classes=charset_size) elif(MODEL_NAME=='vgg19'): model=VGG19.VGG19(input_shape=(img_width,img_height,3),classes=charset_size,weights='weights/vgg19_weights_tf_dim_ordering_tf_kernels.h5') elif(MODEL_NAME=='resnet50'): model=ResNet50.resnet(input_shape=(img_width,img_height,3),classes=charset_size) elif(MODEL_NAME=='inception_v4'): model=inception_v4.inception_v4(input_shape=(img_width,img_height,3),classes=charset_size) elif(MODEL_NAME=='resnet34'): model=ResNet34.ResNet34(input_shape=(img_width,img_height,3),classes=charset_size) elif(MODEL_NAME=='densenet121'): model=DenseNet.DenseNet(input_shape=(img_width,img_height,3),classes=charset_size) elif(MODEL_NAME=='densenet161'): model=DenseNet.DenseNet(input_shape=(img_width,img_height,3),classes=charset_size) elif(MODEL_NAME=='shufflenet_v2'): model=ShuffleNetV2.ShuffleNetV2(input_shape=(img_width,img_height,3),classes=charset_size) elif(MODEL_NAME=='resnet_attention_56'): model=Resnet_Attention_56.Resnet_Attention_56(input_shape=(img_width,img_height,3),classes=charset_size) elif(MODEL_NAME=='squeezenet'): model=SqueezeNet.SqueezeNet(input_shape=(img_width,img_height,3),classes=charset_size) elif(MODEL_NAME=='seresnet50'): model=SEResNet50.SEResNet50(input_shape=(img_width,img_height,3),classes=charset_size) elif(MODEL_NAME=='se_resnext'): model=SEResNext.SEResNext(input_shape=(img_width,img_height,3),classes=charset_size) elif(MODEL_NAME=='nasnet'): model=NASNet.NASNetLarge(input_shape=(img_width,img_height,3),classes=charset_size) elif(MODEL_NAME=='custom'): model=Custom_Network.Custom_Network(input_shape=(img_width,img_height,3),classes=charset_size) elif(MODEL_NAME=='resnet18'): model=ResnetBuilder.build_resnet_18(input_shape=(img_width,img_height,3),num_outputs=charset_size) print(model.summary()) train(model,MODEL_NAME)
if K.image_dim_ordering() == 'th': # Transpose image dimensions (Theano uses the channels as the 1st dimension) # im = im.transpose((2,0,1)) # Use pre-trained weights for Theano backend weights_path = 'imagenet_models/densenet121_weights_th.h5' else: # Use pre-trained weights for Tensorflow backend weights_path = 'imagenet_models/densenet121_weights_tf.h5' # Insert a new dimension for the batch_size # im = np.expand_dims(im, axis=0) # Test pretrained model model = DenseNet(reduction=0.5, classes=1000, weights_path=weights_path, category_num=8) # x = model.output # x = Dense(6, name='fc61')(x) # x = Activation('softmax', name='prob1')(x) # model = Model(model.input, x, name='densenet1') sgd = SGD(lr=0.005, decay=1e-6, momentum=0.9, nesterov=True) model.compile(optimizer=sgd, loss='categorical_crossentropy', metrics=['accuracy']) nb_epoch = 20 nb_train_samples = 512 nb_validation_samples = 256 model.fit_generator(train_generator,
fold1test_generator = test_datagen.flow_from_directory( fold1test_data_dir, target_size=(img_height, img_width), batch_size=batch_size, class_mode='categorical', shuffle=False) class_names = [ 'AllofNegative', 'Aspergillus', 'Bacillus', 'Clostridium', 'Pseudomonas', 'Staphylococcus' ] # results for fold1 if (strategymode == 1): basemodel = DenseNet(reduction=0.5, classes=6, weights_path='my_model_densenet_6_good.h5') elif (strategymode == 2): basemodel = DenseNet(reduction=0.5, classes=1000, weights_path=weights_path) else: basemodel = DenseNet(reduction=0.5, classes=1000) #basemodel.summary() basemodel.layers.pop() basemodel.layers.pop() x4 = Dense(6, activation='relu')(basemodel.layers[-1].output) o = Activation('softmax')(x4) model = Model(inputs=basemodel.input, outputs=[o]) #model.summary()
y_train = np.asarray(y_train) y_test = np.asarray(y_test) ## Define model from keras.models import Sequential from keras.layers import Dense, Activation, Flatten, BatchNormalization, Dropout, Conv2D, MaxPooling2D from keras.optimizers import SGD, RMSprop from densenet121 import DenseNet x_train = np.asarray(X) / 255.0 x_test = np.asarray(test_X) / 255.0 # y_train = np.asarray(Y) # y_test = np.asarray(test_Y) model = DenseNet(reduction=0.5, classes=2) # model = Sequential() #model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(50, 50, 3))) #model.add(Conv2D(32, (3, 3), activation='relu')) #model.add(MaxPooling2D(pool_size=(2, 2))) #model.add(Dropout(0.25)) #model.add(Conv2D(64, (3, 3), activation='relu')) #model.add(Conv2D(64, (3, 3), activation='relu')) #model.add(MaxPooling2D(pool_size=(2, 2))) #model.add(Dropout(0.25)) #model.add(Flatten()) #model.add(Dense(256, activation='relu'))
y_train = np.asarray(y_train) y_test = np.asarray(y_test) ## Define model from keras.models import Sequential, load_model from keras.layers import Dense, Activation, Flatten, BatchNormalization, Dropout, Conv2D, MaxPooling2D from keras.optimizers import SGD, RMSprop from keras.callbacks import EarlyStopping from densenet121 import DenseNet x_train = np.asarray(X) / 255.0 x_test = np.asarray(test_X) / 255.0 # y_train = np.asarray(Y) # y_test = np.asarray(test_Y) model = DenseNet(reduction=0.5, classes=2) # weight_path="{}_weights.best.hdf5".format('model') # sgd = SGD(lr=0.001, decay=1e-6, momentum=0.9, nesterov=True) # earlystopping = EarlyStopping(monitor='val_loss', min_delta=0, patience=16, verbose=0, mode='auto') # checkpoint = ModelCheckpoint(weight_path, monitor='val_loss', verbose=1, save_best_only=True, mode='min', save_weights_only=True) # tensorboard = TensorBoard(log_dir="./logs/{}".format(time())) model.load_weights('densenet_weights.h5') pred = model.predict(x_test) y_test = test_Y tp = 0 fp = 0 tn = 0 fn = 0