从ssd-caffe转战到mobilenet-ssd,也就是为了实时性。jetson tx2运行caffe-ssd前向的时间大概就是210ms。但是经过实际测试,对前5层卷积层使用CUDNN加速时,mobilenet-ssd的前向时间大概是150ms.
jetson tx2运行直接从git上clone下来的代码是不能成功的,如果在命令行中执行python demo.py,当网络初始化到第7层卷积层时,就被kill掉了。在pycharm中运行,同样是被kill掉,给出的错误提示是:
Process finished with exit code 137 (interrupted by signal 9: SIGKILL)
当查看top时,显示CPU占用率直接飙升到100%。大概意识到是内存的问题,但是我已经设置好了swap=4G,可是swap丝毫没被使用。
以为是下载的这个版本的mobilenet-ssd只能使用CPU,就重新设置了一下makefile.config,然后重新make pycaffe -j8 make all -j8编译了C++及工具,然后在纯CPU的情况下运行,结果巨慢,前向时间是500ms以上。我还试过将j8改成j4,因为tx2是4核的,结果实验结果依然没有变化。
无奈又改为使用GPU,使用CUDNN。无意间看见一篇博客,说将deploy.prototxt中卷积层参数的egine前的#去掉,不报任何希望,我将所有的#去掉,居然成功运行了。。。虽然运行的时间稍微慢了点,大概是200ms左右吧。尝试结果发现,最多就前4层kernelsize=3 的卷积层使用cudnn才不会内存溢出。在不使用tensorRT的情况下,最佳的前向时间是150ms。同志仍需努力啊~
目前使用GPU参与mobilenet-ssd的推理,另外,使用专门的深度可分离卷积计算(例程中使用的是group-convolution代替的深度可分离卷积),处理一幅300*300*3的图像只需要50ms左右,相当可观的速度。