Have you encountered differences in quality when processing footage using the CPU and GPU?
Below are the screenshots—original at the top, GPU at the bottom, and CPU at the bottom. As you can see, the CPU offers MUCH better quality. Interestingly, this doesn’t happen with every frame; some are identical.
Disclaimer: I am not a Topaz Labs employee, so most of what I say here is speculation.
There are a bunch of contributing factors that could lead to differences between CPU and GPU, but I believe tiling is the main culprit here.
Neural networks typically consume a lot of RAM when processing higher resolution images/video. To work around this, Topaz Labs appears to use tiling, which splits up the image/video into smaller “tiles” then processes each of them seperately, then combines them all together to create the final image again.
The size of the tile they use seems to be dictacted by how much RAM your processing device has.
Typically most people have more RAM avalible to their CPU then their GPU, so I suspect when you process with the CPU, a larger tile size will be used, while your GPU will probably use smaller tile sizes.
Typically tiling only has a minor input on the final output, but in some cases it can cause larger differences because the neural network has less information to use as input when it uses a small tile.
What you’re saying makes sense, but Topaz takes up less than 4GB of memory when processed by the CPU (actually, it’s about 2GB). It takes up more when processing by the GPU, but it’s still only 3GB. So there’s no shortage of memory.
Ther are other factors that can contribute, including bugs in the system that processes the models.
BUt since I don’t work at Topaz Labs, I don’t have access to debugging tools to investigate this issue. So I can’t tell you exactly which factor contributes to this difference.
I did see a big difference in quality too when i switched from a Radeon Pro W6800 to a Nvidia RTX 4090.
Thats because the Nvidia GPU is able to use Tensor Cores and the tensor cores are able to process different file formats like int8 or BF16.
Because of this the need for memory is smaller (lower precision means lower memory an higher speed) but at the same time you can make bigger models compared to the higher precision ones, an that pays off.