sfærisk interpolation

En interpolationsmetode mellem to punkter på en kugleoverflade, hvor bevægelsen sker langs en storcirkel.

Kort fortalt

En måde at glide jævnt mellem to punkter på en kugle, som at gå den korteste vej over kuglens overflade.

Kategori
teknik
Niveau
øvet

Betydninger

2
  1. 1

    Interpolation mellem to vektorer på en kugleoverflade, således at resultatet hele tiden ligger på samme kugle og følger den korteste vej.

    • Ved sfærisk interpolation mellem to enhedsvektorer bevares længden af vektorerne.
    • Sfærisk interpolation adskiller sig fra lineær interpolation ved at tage højde for krumningen af rummet.
  2. 2

    Anvendelse i maskinlæring til at interpolere mellem punkter i et latent rum, som ofte er normaliseret til at ligge på en hyperkugle.

    • I StyleGAN bruges sfærisk interpolation til at generere jævne overgange mellem ansigtsbilleder. — Karras et al., 2019
    • Ved sfærisk interpolation af ordembeddinger kan man finde ord der semantisk ligger mellem to andre ord.

Hvornår bruges det

Bruges især i maskinlæring til at interpolere mellem latentrepræsentationer, f.eks. i generative modeller som StyleGAN, for at skabe kontinuerlige overgange mellem billeder. I NLP kan den anvendes til at finde mellemliggende ordembeddinger.

Formel

slerp(p, q, t) = sin((1-t)θ)/sin(θ) * p + sin(tθ)/sin(θ) * q, where θ = arccos(p·q)

Kodeeksempel

def slerp(v0, v1, t):
    # Normalize inputs
    v0 = v0 / np.linalg.norm(v0)
    v1 = v1 / np.linalg.norm(v1)
    dot = np.dot(v0, v1)
    dot = np.clip(dot, -1.0, 1.0)
    theta = np.arccos(dot)
    sin_theta = np.sin(theta)
    if sin_theta == 0:
        return (1-t)*v0 + t*v1
    return (np.sin((1-t)*theta)/sin_theta)*v0 + (np.sin(t*theta)/sin_theta)*v1

Python-implementering af sfærisk lineær interpolation (slerp) mellem to vektorer.

Oprindelse

Fra latin 'sphaera' (kugle) og 'interpolatio' (indsættelse af noget nyt).

Afledte ord

2
slerpsfærisk lineær interpolation

Kilder

2
  • Animating Rotation with Quaternion Curves (Shoemake, 1985)
  • A Style-Based Generator Architecture for Generative Adversarial Networks (Karras et al., 2019)