def model_accuracy(models, image_paths, target_paths, results_dir): accList = [] for model in models: print('Path to model {}'.format(model)) base_model = os.path.basename(model) batch_size = get_batch(base_model) train_loader, valid_loader, test_loader = ConvNet.train_valid_test_split( image_paths, target_paths, batch_size) print('Model: {}'.format(base_model)) match = re.search('arch(\d+)', base_model) net_size = match.group(1) net_size = int(net_size) lr = re.search('lr(\d+\.\d+)', base_model) lr = float(lr.group(1)) batch = get_batch(base_model) net = ConvNet.Net(net_size) net = nn.DataParallel(net) net.load_state_dict( torch.load(model, map_location=lambda storage, loc: storage)) #net.cuda() accuracy = ConvNet.model_eval(test_loader, net, batch, lr, net_size, results_dir) accList.append(accuracy) maxInd = accList.index(max(accList)) print('Highest accuracy: {} for model: {}'.format(accList[maxInd], models[maxInd])) models[maxInd] return maxInd
def main(): startTime = time.time() device = torch.device("cuda" if torch.cuda.is_available() else "cpu") model = ConvNet.Net().to(device) criterion = nn.MSELoss() optimizer = optim.SGD(model.parameters(), lr=0.001, momentum=0.9) epochs = 90 for epoch in range(1, epochs + 1): ConvNet.train(model, device, train_data, criterion, optimizer, epoch) ConvNet.test(model, device, criterion, test_data) print(50 * "-") print('Finished Training') endTime = time.time() elapsedTime = int(endTime - startTime) showTime(elapsedTime)
final_prediction = b[:, :, 0] labels = (final_prediction > 0.5).astype(np.int) return labels if __name__ == '__main__': args = parser.parse_args() rasterfn = args.inpfile base = os.path.basename(rasterfn) fname = os.path.splitext(base)[0] newRasterfn = '/exports/csce/eddie/geos/groups/geos_cnn_imgclass/data/AerialImageDataset/predict_raster/predict_{}.tif'.format( fname) base_model = os.path.basename(args.model) match = re.search('arch(\d+)', base_model) net_size = match.group(1) net_size = int(net_size) net = ConvNet.Net(net_size) net = nn.DataParallel(net) device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu') net.to(device) if torch.cuda.is_available(): net.load_state_dict(torch.load(args.model)) else: net.load_state_dict( torch.load(args.model, map_location=lambda storage, loc: storage)) toTensor = transforms.ToTensor() array = image_loader(rasterfn) array2raster(rasterfn, newRasterfn, array)