ICP Gradient descent

less than 1 minute read

solver

def fun(x):
    return x**2 - 16

def double_fun(x):
    return 3*np.exp(x[0]) + x[1]**2 - 16

sample_point = rotated_point[sorted(np.random.choice(rotated_point.shape[0], 20, replace=False)), :]
def icp_fun(x):
    R = icp(originate_point, sample_point, x, 2)
    rotated_fit_point = cv2.transform(originate_point[None, :], R)[0]
    return cost(rotated_fit_point, rotated_point)

def derivative(f, x):
    delta = 1E-6 * np.eye(len(x))
    de = []
    for i in range(len(x)):
        de.append((f(x + delta[i]) - f(x - delta[i])) / (2 * 1E-6))
    return np.array(de)

def solve(f, param_size):
    history = []
    cost = 1E6
    param = np.ones(param_size)
    print(cost)
    bar = tqdm(range(1000))
    postfix = {"cost": cost}
    for i in bar:
        cost = f(param)
        postfix = {"cost": cost}
        bar.set_postfix(postfix)
        f_p = derivative(f, param)
        param = param - 0.005 * cost / f_p
        history.append([*param, cost])
        if np.abs(cost) < 1E-6:
            break
    return history

Code

jupyter

Traning

20210828004409

Animation

Categories:

Updated: