def METHOD_NAME(is_ref=True, device=None, reverse_indexing=False):
    batch_size = 32
    img_a = [create_test_image_2d(28, 28, 5, rad_max=6, noise_max=1)[0][None] for _ in range(batch_size)]
    img_b = [create_test_image_2d(28, 28, 5, rad_max=6, noise_max=1)[0][None] for _ in range(batch_size)]
    img_a = np.stack(img_a, axis=0)
    img_b = np.stack(img_b, axis=0)
    img_a = torch.as_tensor(img_a, device=device)
    img_b = torch.as_tensor(img_b, device=device)
    model = STNBenchmark(is_ref=is_ref, reverse_indexing=reverse_indexing).to(device)
    optimizer = optim.SGD(model.parameters(), lr=0.001)
    model.train()
    init_loss = None
    for _ in range(20):
        optimizer.zero_grad()
        output_a = model(img_a)
        loss = torch.mean((output_a - img_b) ** 2)
        if init_loss is None:
            init_loss = loss.item()
        loss.backward()
        optimizer.step()
    return model(img_a).detach().cpu().numpy(), loss.item(), init_loss