qazwsxal / diffusion-extensions Goto Github PK
View Code? Open in Web Editor NEWReference implmentation of Diffusion models on SO(3)
Reference implmentation of Diffusion models on SO(3)
Thanks for sharing your marvelous project!
I have some questions about the use of so3_lerp and so3_scale.
According to the paper, it seems that in the following code, so3_scale should be used instead of so3_lerp towards identity rotation.
diffusion-extensions/diffusion.py
Line 286 in f100885
Is there anything I missed or misunderstood? Or does that mean so3_lerp could approximate so3_scale? Your response would help a lot.
Hi, I have a question about the conversion from the axis-angle representation vector to a skew-symmetric matrix, as implemented here:
Line 87 in f100885
In the above implementation, the skew-symmetric matrix
which is different from the definition in your ICLR paper (Denoising Diffusion Probabilistic Models on SO(3) for Rotational Alignment, https://openreview.net/forum?id=BY88eBbkpe5, page 3, six lines above Eq. 6).
Did I misunderstand something? Which definition should be used here for such conversion?
Hello, thanks for providing such a wonderful method and code that helped me improve our project.
However, while testing the code you open sourced, I discovered that there may be a problem with the code that samples rotations in the form of axis angles from an isotropic Gaussian distribution:
diffusion-extensions/distributions.py
Lines 42 to 43 in f100885
In the above code, trap_start
and trap_end
are the indexes before and after the CDF is equal to unif
, but they all obtain the index in the CDF corresponding to the first variance, rather than the corresponding variance.
I trained and tested the network's performance on the task of generating
The predicted rotation distribution differs greatly from the true value.
I optimized this part of the code so that trap_start
and trap_end
are the indexes before and after the CDF corresponding to their respective variances is equal to unif
. The optimized core code is as follows:
B = self.eps.shape[0]
bs = torch.arange(0, B)
trap_start = self.trap[idx_0, bs]
trap_end = self.trap[idx_1, bs]
In addition to this, I made several other changes to make the code runnable:
(1)
Original code:
diffusion-extensions/so3_test.py
Line 31 in f100885
modified code:
R = process.p_sample(R, torch.full((BATCH,), i, device=device, dtype=torch.long))
(2)
Original code:
diffusion-extensions/diffusion.py
Line 325 in f100885
modified code:
sample = IsotropicGaussianSO3(model_stdev).sample()
The result after modifying the code is shown below:
The predicted rotation distribution is almost the same as the true value.
If I understand it wrong, please point out my problem so that I can better understand your method, thank you~
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.