Optimise Windows 10 for Kinect Colour / Depth Acquisition RRS feed

  • Question

  • There are several related threads to this one, but I haven't seen this discussion applied to Windows 10 OS optimisations.

    I have 7 Windows PC based kinect 'nodes' that have slightly different hardware configurations, but all run Windows 10. I'm only interested in collecting depth and colour data, ideally at 30fps. Some of these PC nodes will hit 30 fps reliabily. All run at >20fps almost all of the time. However, I'd like to push them up to 30fps if possible.

    I have 2 hardware options - increase RAM or add an SSD (all have at least 4GB and about 50% run on an SSD). NB these are all desktop machines with upgraded (Intel) video drivers.

    What tweaks can I make to Windows 10 to increase performance? Are there certain services I could disable?

    Monday, February 19, 2018 11:04 AM

All replies

  • RAM should be higher granted. SSD wouldn't matter as much I think unless you're dealing with recording and playback of streams in xef files(not 100% on this though, I've read Studio loads the whole thing on RAM for playback which explains the massive amounts of RAM KS reserves when playing back large files,but it might also stream in some places, I haven't verified this entirely).In that case yeah, do those. Kinect Studio is resource hungry,especially due to the large buffers needed. Also if you're recording stuff, make sure to not overstep some size boundaries. Playback can get very heavy if the whole file is gigabytes long and especially in the case where KS is trying to load it all in RAM(which means you need lots of it and with good speeds probably).

    Depth is produced in the GPU from the IR frame which is the raw input. So better GPU would be an optimization that might improve frame times and reliability, if you're looking at Configuration Verifier stats, let alone throw Kinect Studio over it which might also affect perf.

    Monday, February 19, 2018 11:55 AM
  • Thanks. So RAM might help. The machines are SFF PCs, so can't have their GPU upgraded. I have to rely on the integrated GPU. There may be some tweaks still available though. They are set to performance mode and I could look at allocating more RAM to the GPU. The weird thing is that I'm seeing poorer frame rates in the Configuration Verifier for some of the better spec'ed machines (CPU and integrated GPU) than I am for some much lower spec CPU/GPU combos. In fact, a Skylake i3 is performing much worse (for depth frame rates) than an older generation Pentium. It's running Windows 10 Enterprise though, so I'm wondering if there's some catch to that SKU in terms of performance.
    • Edited by Max Palmer Tuesday, February 20, 2018 5:31 PM
    Tuesday, February 20, 2018 5:30 PM
  • Unless it's a legal issue, there are upgrades you can do for GPUs. 1050 is great for this case. It needs less Watts than most older cards and probably doesn't heat up as much(even the 1050 OC version). There are some you can find on the market that can be plugged in a 9cm SFF PCI slot. Also the pricing for 1050 is not half bad. Quite affordable and I saw a great perf boost. Especially in cases where various people are in the frame. The SDK tracks whoever is visible by some criteria as potential users,in case one of the fully tracked bodies goes out of fov. I've noticed that if you want to make an application that is going to have lots of people in front of the setup, the SDK itself might hinder perf since it's eating resources aside from what your app might need. Might also show when using Kinect Studio to record stuff and you see choppy frames once in a while.

    The official recommendation for Kinect v2 says i7. It can probably run on lower end CPUs as well but there have been mixed results.

    Tuesday, February 20, 2018 5:52 PM
  • Personally, I find if you just want depth and color, no skeleton / people tracking, etc. I've been surprised with the performance you can get on low spec CPUs. As I said, I have some Pentium systems running the Kinect with integrated graphics and they are getting 25 fps + for depth in configuration verifier. They rarely hit 30fps, but they are pretty consistentbat around 25 fps. NB this is why I feel I may be able to tweak the system to push them up a couple more FPS.
    • Edited by Max Palmer Wednesday, February 21, 2018 12:03 PM
    Wednesday, February 21, 2018 12:03 PM
  • From what I've read so far, the SDK is not configurable so even if you listen on two streams, it only affects what data you're getting. Does not however affect what data get processed in the GPU, meaning body tracking etc will always get processed. One thing to back this notion up, is that Kinect v2 SDK installs a service ,to which the Kinect applications connect to get data,that can support multiple Kinect apps. Each app might use a different set of streams. So it makes sense to process everything. What streams you choose only matters for what data the service sends to your application.

    Anyway, the recommended setup is probably a recommendation for the worst case scenario. Also I don't think they did any extensive testing which is why there's no minimum recommendations.

    RAM might help but I'm not entirely sure. If it doesn't though, it's either a bandwidth issue for moving all that data around, or a GPU issue.

    Question, is the framerate constant when people are in the field of view? Or will you never have people in the fov? I guess this is a question about the task you're trying to do.

    Wednesday, February 21, 2018 1:13 PM
  • I didn't know that. Thanks. It's a shame you can't opt out of certain processing, but I guess my use case is not the core use case. - i.e. I want depth and colour information, but not skeleton tracking.

    Yes, there will be people in the FOV of the cameras, it's a shame I'm going to take a performance hit for something I don't need.

    Where is most of the processing done? (HW/FW/SW)

    • Edited by Max Palmer Monday, February 26, 2018 11:58 AM
    Monday, February 26, 2018 11:56 AM
  • HW probably and specifically the GPU. Not aware of anything done in CPU, other than distribution. Then again, this is just what I've gathered so far. Could be I'm missing info. But I have seen great improvement when using better GPU, especially the more people inside the fov(that means more than 6 which is the max number of bodies the SDK can fully track with joint info). I've also seen perf hits when the GPU cannot keep tracking 30 people as potential users.

    To be fair, that hit might not be noticeable. My app needed several data frames. Also used CoordinateMapper a lot which takes another good portion of the frame to convert data. On the other hand, I never got bad perf using Configuration Verifier. So if that one is underperforming then it will be noticeable, imho. Verifier needs pretty much the same data as your application.

    Monday, February 26, 2018 1:21 PM