예제 #1
0
def main():
    args = get_args()
    processed_img = process_image(args.input)
    model, optimizer = network.load_model(args.checkpoint)

    probs, classes = predict(processed_img, model, args.top_k, args.category_names, args.gpu)
    print(f"Top {args.top_k} predictions: {list(zip(classes, probs))}")
예제 #2
0
def train(args):
    ## tensorboardX
    tflog_path = osp.join(args.output_path, "tflog")
    if os.path.exists(tflog_path):
        shutil.rmtree(tflog_path)
    writer = SummaryWriter(logdir=tflog_path)

    ## prepare data
    train_transform = prep.image_train(resize_size=256, crop_size=224)
    train_set = ImageDataset(args.train_path, transform=train_transform)
    train_loader = util_data.DataLoader(train_set, batch_size=args.batch_size, shuffle=True, num_workers=4)
    
    device = "cuda" if torch.cuda.is_available() else "cpu"
    ## set base network
    model = load_model(args.net, args.bit)
    writer.add_graph(model, input_to_model=(torch.rand(2, 3, 224, 224),))
    model.to(device)
    if device == 'cuda':
        cudnn.benchmark = True
    model.train()
        
    ## set optimizer and scheduler
    parameter_list = [{"params":model.feature_layers.parameters(), "lr":args.lr}, \
                      {"params":model.hash_layer.parameters(), "lr":args.lr*10}]
    optimizer = optim.SGD(parameter_list, lr=args.lr, momentum=0.9, weight_decay=0.005, nesterov=True)
    scheduler = optim.lr_scheduler.StepLR(optimizer, step_size=3000, gamma=0.5)

    ## train
    for i in range(args.num_iter):
        scheduler.step()
        optimizer.zero_grad()

        if i % (len(train_loader)-1) == 0:
            train_iter = iter(train_loader)
        inputs, labels = train_iter.next()
        inputs, labels = inputs.to(device), labels.to(device)

        outputs = model(inputs)
        s_loss = loss.pairwise_loss(outputs, labels, alpha=args.alpha, class_num=args.class_num)
        q_loss = loss.quantization_loss(outputs)
        total_loss = s_loss + 0.01 * q_loss
        total_loss.backward()
        optimizer.step()

        writer.add_scalar('similarity loss', s_loss, i)
        writer.add_scalar('quantization loss', q_loss, i)
        writer.add_scalar('lr', optimizer.param_groups[0]['lr'], i)
        if i % 10 == 0:
            print("{} #train# Iter: {:05d}, loss: {:.3f} quantizaion loss: {:.3f}".format(
                datetime.now(), i, s_loss.item(), q_loss.item()))
            
    writer.close()
    torch.save(model,  osp.join(args.output_path, "model.pth"))
예제 #3
0
def init_axes(ax, title):
    ax.cla()
    ax.set_xlim(0, 28)
    ax.set_ylim(28, 0)
    ax.set_title(title)
    return ax


fig = plt.figure()
ax = plt.subplot(221)
init_axes(ax, "write a digit")

ax2 = plt.subplot(222)
init_axes(ax2, "preprocessed image")

net = network.load_model()

x, y = [], []
a = np.zeros((28, 28))
prepared = a.copy()
# create empty plot
points, = ax.plot([], [], 'o')
# ax.grid(True)

# cache the background
background = fig.canvas.copy_from_bbox(ax.bbox)

is_released = True


class btaction:
예제 #4
0
        default=100)
    args = parser.parse_args()

    cuda = torch.cuda.is_available()
    set_seed(seed=1, cuda=cuda)

    # Data
    train_loader, train_dataset, test_loader, test_dataset = get_data_loaders(
        batch_size=args.batch_size)

    # Model
    model, loss_fn, optimizer = get_model(
        num_classes=args.num_classes,
        learning_rate=args.learning_rate,
        cuda=cuda)
    start_epoch, best_accuracy = load_model(model, cuda)

    for epoch in range(start_epoch, args.epochs):
        train_model(model=model,
                    optimizer=optimizer,
                    train_loader=train_loader,
                    train_dataset=train_dataset,
                    loss_fn=loss_fn,
                    num_epochs=args.epochs,
                    epoch=epoch,
                    batch_size=args.batch_size,
                    notify=args.notify,
                    cuda=cuda)
        accuracy = eval_model(model=model, test_loader=test_loader, cuda=cuda)
        accuracy = 100. * accuracy / len(test_loader.dataset)