def get_model(): if model_index == 0: return mobilenet_v1.MobileNetV1() elif model_index == 1: return mobilenet_v2.MobileNetV2() elif model_index == 2: return mobilenet_v3_large.MobileNetV3Large() elif model_index == 3: return mobilenet_v3_small.MobileNetV3Small() elif model_index == 4: return efficientnet.efficient_net_b0() elif model_index == 5: return efficientnet.efficient_net_b1() elif model_index == 6: return efficientnet.efficient_net_b2() elif model_index == 7: return efficientnet.efficient_net_b3() elif model_index == 8: return efficientnet.efficient_net_b4() elif model_index == 9: return efficientnet.efficient_net_b5() elif model_index == 10: return efficientnet.efficient_net_b6() elif model_index == 11: return efficientnet.efficient_net_b7() elif model_index == 12: return resnext.ResNeXt50() elif model_index == 13: return resnext.ResNeXt101() elif model_index == 14: return inception_v4.InceptionV4() elif model_index == 15: return inception_resnet_v1.InceptionResNetV1() elif model_index == 16: return inception_resnet_v2.InceptionResNetV2() elif model_index == 17: return se_resnet.se_resnet_50() elif model_index == 18: return se_resnet.se_resnet_101() elif model_index == 19: return se_resnet.se_resnet_152() elif model_index == 20: return squeezenet.SqueezeNet() elif model_index == 21: return densenet.densenet_121() elif model_index == 22: return densenet.densenet_169() elif model_index == 23: return densenet.densenet_201() elif model_index == 24: return densenet.densenet_264() elif model_index == 25: return shufflenet_v2.shufflenet_0_5x() elif model_index == 26: return shufflenet_v2.shufflenet_1_0x() elif model_index == 27: return shufflenet_v2.shufflenet_1_5x() elif model_index == 28: return shufflenet_v2.shufflenet_2_0x()
Y = tf.placeholder(tf.float32, [None, 1000]) dg = DataGenerator('./data/val224_compressed.pkl', model=args.model, dtype='float32') with tf.device('/cpu:0'): if args.model == 'resnet': logits = resnet50.ResNet50(X, weights) elif args.model == 'inception': logits = inception_v3.InceptionV3(X, weights) elif args.model == 'vgg': logits = vgg16.VGG16(X, weights) elif args.model == 'mobilenet': logits = mobilenet.MobileNet(X, weights, args.alpha) elif args.model == 'xception': logits = xception.Xception(X, weights) else: logits = squeezenet.SqueezeNet(X, weights) prediction = tf.nn.softmax(logits) pred = tf.argmax(prediction, 1) acc = 0. acc_top5 = 0. print('Start evaluating {}'.format(args.model)) with tf.Session() as sess: for im, label in dg.generator(): t1, t5 = sess.run([pred, prediction], feed_dict={X: im}) if t1[0] == label: acc += 1 if label in top5_acc(t5[0].tolist()): acc_top5 += 1 print('Top1 accuracy: {}'.format(acc / 50000)) print('Top5 accuracy: {}'.format(acc_top5 / 50000))
def get_model(name="squeezenet"): if name == "squeezenet": from models import squeezenet return squeezenet.SqueezeNet()
def main(args): BATCH_SIZE = args.batch_size LR = args.learning_rate EPOCH = args.epoch device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') use_gpu = torch.cuda.is_available() data_transforms = { transforms.Compose([ transforms.Resize(320), transforms.CenterCrop(299), transforms.ToTensor(), transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)) ]) } transform = transforms.Compose([ transforms.Resize(size=(227, 227)), transforms.RandomRotation(20), transforms.RandomHorizontalFlip(), transforms.ToTensor(), # 将图片转换为Tensor,归一化至[0,1] transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)) ]) train_dataset = torchvision.datasets.ImageFolder(root=args.train_images, transform=transform) train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=BATCH_SIZE, shuffle=True) # 从文件夹中读取validation数据 validation_dataset = torchvision.datasets.ImageFolder( root=args.test_images, transform=transform) print(validation_dataset.class_to_idx) test_loader = torch.utils.data.DataLoader(validation_dataset, batch_size=BATCH_SIZE, shuffle=True) if args.model_name == "densenet": Net = densenet.DenseNet().to(device) if args.model_name == "alexnet": Net = alexnet.AlexNet().to(device) if args.model_name == "googlenet": Net = googlenet.GoogLeNet().to(device) if args.model_name == "mobilenet": Net = mobilenet.MobileNetV2().to(device) if args.model_name == "mnasnet": Net = mnasnet.mnasnet1_0().to(device) if args.model_name == "squeezenet": Net = squeezenet.SqueezeNet().to(device) if args.model_name == "resnet": Net = resnet.resnet50().to(device) if args.model_name == "vgg": Net = vgg.vgg19().to(device) if args.model_name == "shufflenetv2": Net = shufflenetv2.shufflenet_v2_x1_0().to(device) criterion = nn.CrossEntropyLoss() opti = torch.optim.Adam(Net.parameters(), lr=LR) if __name__ == '__main__': Accuracy_list = [] Loss_list = [] for epoch in range(EPOCH): sum_loss = 0.0 correct1 = 0 total1 = 0 for i, (images, labels) in enumerate(train_loader): num_images = images.size(0) images = Variable(images.to(device)) labels = Variable(labels.to(device)) if args.model_name == 'googlenet': out = Net(images) out = out[0] else: out = Net(images) _, predicted = torch.max(out.data, 1) total1 += labels.size(0) correct1 += (predicted == labels).sum().item() loss = criterion(out, labels) print(loss) opti.zero_grad() loss.backward() opti.step() # 每训练100个batch打印一次平均loss sum_loss += loss.item() if i % 10 == 9: print('train loss [%d, %d] loss: %.03f' % (epoch + 1, i + 1, sum_loss / 2000)) print("train acc %.03f" % (100.0 * correct1 / total1)) sum_loss = 0.0 Accuracy_list.append(100.0 * correct1 / total1) print('accurary={}'.format(100.0 * correct1 / total1)) Loss_list.append(loss.item()) x1 = range(0, EPOCH) x2 = range(0, EPOCH) y1 = Accuracy_list y2 = Loss_list total_test = 0 correct_test = 0 for i, (images, labels) in enumerate(test_loader): start_time = time.time() print('time_start', start_time) num_images = images.size(0) print('num_images', num_images) images = Variable(images.to(device)) labels = Variable(labels.to(device)) print("GroundTruth", labels) if args.model_name == 'googlenet': out = Net(images)[0] out = out[0] else: out = Net(images) _, predicted = torch.max(out.data, 1) print("predicted", predicted) correct_test += (predicted == labels).sum().item() total_test += labels.size(0) print('time_usage', (time.time() - start_time) / args.batch_size) print('total_test', total_test) print('correct_test', correct_test) print('accurary={}'.format(100.0 * correct_test / total_test)) plt.subplot(2, 1, 1) plt.plot(x1, y1, 'o-') plt.title('Train accuracy vs. epoches') plt.ylabel('Train accuracy') plt.subplot(2, 1, 2) plt.plot(x2, y2, '.-') plt.xlabel('Train loss vs. epoches') plt.ylabel('Train loss') # plt.savefig("accuracy_epoch" + str(EPOCH) + ".png") plt.savefig(args.output_dir + '/' + 'accuracy_epoch' + str(EPOCH) + '.png') plt.show() torch.save(args.output_dir, args.model_name + '.pth')
# create model if args.model == 'vgg': model = vgg16.VGG16(input_shape=(224, 224, 3)) elif args.model == 'inception': model = inception_v3.InceptionV3(input_shape=(299, 299, 3)) elif args.model == 'inception_resnet': model = inception_resnet_v2.InceptionResNetV2(input_shape=(299, 299, 3)) elif args.model == 'xception': model = xception.Xception(input_shape=(299, 299, 3)) elif args.model == 'resnet': model = resnet_50.ResNet50(input_shape=(224, 224, 3)) elif args.model == 'densenet': model = densenet_121.DenseNet(reduction=0.5, classes=1000) elif args.model == 'squeezenet': model = squeezenet.SqueezeNet(input_shape=(227, 227, 3), classes=1000) elif args.model == 'mobilenet': model = mobilenet.MobileNet(input_shape=(224, 224, 3), alpha=args.alpha) else: raise ValueError("Do not support {}".format(args.model)) model.summary() model_name = args.model if args.model != 'mobilenet' else args.model + '_' + str(args.alpha) model.load_weights('./weights/{}'.format(weights[model_name]), by_name=True) print('Evaluating {0} with {1} data type'.format(args.model, args.dtype)) dg = DataGenerator('./data/val224_compressed.pkl', model=args.model, dtype=args.dtype) acc = 0 acc_top5 = 0 for im, label in dg.generator(): out = model.predict(im) pred = np.argmax(out[0])
from keras.utils import get_file from keras.utils import layer_utils from keras.preprocessing.image import ImageDataGenerator from keras.optimizers import SGD, Adam from models import resnet, squeezenet, inceptionv3, alexnet output_directory = '/home/student/Desktop/NurtientDeficiencyDetection/' h5f = h5py.File("{}data_training.h5".format(output_directory), 'r') train_X = h5f['X_train'] train_Y = h5f['Y_train'] h5f1 = h5py.File("{}data_testing.h5".format(output_directory), 'r') test_X = h5f1['X_test'] print(test_X.shape) test_Y = h5f1['Y_test'] input_shape = [224, 224, 3] model = squeezenet.SqueezeNet(2) optimizer1 = keras.optimizers.Adam(learning_rate=0.003, beta_1=0.9, beta_2=0.999, amsgrad=False) model.compile(optimizer=optimizer1, loss='categorical_crossentropy', metrics=['accuracy']) # add this line before model.fit checkpointer = ModelCheckpoint( filepath='/home/student/Desktop/ganesh/weights_squeezenet_3.h5', verbose=1, save_best_only=True) #change model.fit in this way
def get_model(): if model_index == 0: return mobilenet_v1.MobileNetV1() elif model_index == 1: return mobilenet_v2.MobileNetV2() elif model_index == 2: return mobilenet_v3_large.MobileNetV3Large() elif model_index == 3: return mobilenet_v3_small.MobileNetV3Small() elif model_index == 4: return efficientnet.efficient_net_b0() elif model_index == 5: return efficientnet.efficient_net_b1() elif model_index == 6: return efficientnet.efficient_net_b2() elif model_index == 7: return efficientnet.efficient_net_b3() elif model_index == 8: return efficientnet.efficient_net_b4() elif model_index == 9: return efficientnet.efficient_net_b5() elif model_index == 10: return efficientnet.efficient_net_b6() elif model_index == 11: return efficientnet.efficient_net_b7() elif model_index == 12: return resnext.ResNeXt50() elif model_index == 13: return resnext.ResNeXt101() elif model_index == 14: return inception_v4.InceptionV4() elif model_index == 15: return inception_resnet_v1.InceptionResNetV1() elif model_index == 16: return inception_resnet_v2.InceptionResNetV2() elif model_index == 17: return se_resnet.se_resnet_50() elif model_index == 18: return se_resnet.se_resnet_101() elif model_index == 19: return se_resnet.se_resnet_152() elif model_index == 20: return squeezenet.SqueezeNet() elif model_index == 21: return densenet.densenet_121() elif model_index == 22: return densenet.densenet_169() elif model_index == 23: return densenet.densenet_201() elif model_index == 24: return densenet.densenet_264() elif model_index == 25: return shufflenet_v2.shufflenet_0_5x() elif model_index == 26: return shufflenet_v2.shufflenet_1_0x() elif model_index == 27: return shufflenet_v2.shufflenet_1_5x() elif model_index == 28: return shufflenet_v2.shufflenet_2_0x() elif model_index == 29: return resnet.resnet_18() elif model_index == 30: return resnet.resnet_34() elif model_index == 31: return resnet.resnet_50() elif model_index == 32: return resnet.resnet_101() elif model_index == 33: return resnet.resnet_152() elif model_index == 34: return vgg16.VGG16() elif model_index == 35: return vgg16_mini.VGG16() elif model_index == 36: return VGG16_self.VGG16() elif model_index == 10086: return diy_resnet.resnet_50() else: raise ValueError("The model_index does not exist.")