-
Notifications
You must be signed in to change notification settings - Fork 3
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Some kind of bug/problem with Killing regularizer #20
Comments
Dear, There are two main points:- b. When working on Killing Energy:- Possible Cause:- The way gradients is computed and its behaviour for voxels at periphery. The figure below shows an object in green, with the blue showing voxel space covering the object which should be processed. The grid of voxels drawn on the right shows voxels with 2 different colors: green and red. The green voxels lies inside the truncated space and are being processed, while voxels in red space are ignored. Here, I will focus on voxel V at periphery, i.e. one with green color and solid black border. When computing gradient for motion regularization, I am using central difference, which checks value both for voxel on the left and the right. This means that for voxel V, I am using displacement vector 0,0,0 from voxel on the right, which is not ideal as no data term energy is applied on that voxel. Next:- If this is a probable cause for difficulty in balancing energies, then it is not limited to only voxels at periphery. The affect of zero displacement of ignored voxels on periphery voxels would in further iterations affect voxels near the surface adjacent to voxel V and so on, causing a chain effect. I hope I presented the issue clearly and in case if anything is unclear, please let me know. I would be very obliged if you could provide your thoughts on this. |
@saurabheights Thanks for reaching out. b. Yes, sounds very much like what I encountered playing around with the algorithm in the past. Then I had some back-and-forth emailing with Mira about this and some other issues. She said they don't have any checks whatsoever about known/unknown, but then, in another email, contradicted herself, in a way, saying that certain voxels were "ignored" during computation. I reread all the emails many times, after which I decided "to hell with this" and that I'm going to do my own thing -- whatever I find works. a. The way they do it, really, is kind-of misleading, in my view. They don't tell you that you can't register two objects when they are far away with the dynamic alignment, a.k.a. the part of Killing- or SobolevFusion optimization that evolves the "live" SDF to the "canonical". What they do is they mask their objects, so that they can use a rigid alignment algorithm (they use their SDF-2-SDF fusion) to register them as closely as possible in an ICP-like fashion first, then they run the non-rigid alignment part. If you look at their papers and CVPR presentation and check every single example, you'll find that, with exception of some very simple surfaces, like a ball or a hat, all objects either don't move move much relative to each other (gesticulating human figures), or just happens to be the only object in the scene with the background completely subtracted (Snoopy, Duck, etc.). There are some shots with Snoopy standing on the table and flapping his ears in the KillingFusion paper -- notice that they use the frames where Snoopy doesn't move around for this. All this eliminates the need to match to geometry the previous frame -- which they don't do: they just evolve the live TSDF all the way to the original canonical TSDF. That's an easy way to present this as if it works for any dynamic scene, when, in reality, it can't really work even for the Snoopy walking around on the table -- the rigid fusion component would match the "future" table to the "original" table, leaving the "future" Snoopy too far away from the "original" Snoopy for the non-rigid alignment to work properly -- the data term would have simply no information to go on. This is why I'm currently devising a scheme where the "live" TSDF is aligned to the "previous"-frame state rather the canonical. |
@Algomorph : Thank you for your quick reply. a.
Regarding multiple motions(table and Snoopy), I mostly agree, but this is research(& IMO, a good one, albeit on paper).
b. More importantly, thank you. I had similar discussion with Mira but she didn't mention to me anything about ignoring these untouched voxels. So, I was in doubt if this is what I should implement. Your confirmation means a lot.
This is still fine. It will lead to lower convergence, but without this Killing energy will just explode. Furthermore, it might not be 1/2, since I can fallback to forward/backward difference instead of central). The only disadvantage is central difference would have been a bit less noisy compared to forward or backward difference. |
The Killing regularizer seems to grow out of proportion with every iteration, whether or not truncated voxels are included in the computation.
The text was updated successfully, but these errors were encountered: