论文《Real-time 2D Multi-Person Pose Estimation on CPU: Lightweight OpenPose》阅读,基于openpose的轻量级cup实时运行实现

论文原地址:https://arxiv.org/pdf/1811.12004.pdf

原openpose分析

作者一开始就分析原openpose的网络算法,原openpose的backbone是VGG-19。原openpose的refinement stage有5个阶段。并且坐着把5个refinement stage的正确率测试了一下,发现从第一个refinement stage1之后,正确率没有提升多少,但是运算量就加大了。并且坐着还发现了refinement stage网络的关键点定位(heatmap)和关键点组合(pafs)两部分的两条分支运算,有不少操作是一样的,造成运算冗余。

所以,作者作了以下改进:

优化部分

①新的网络设计。作者通过分析,觉得第一个refinement stage1之后的其他refinement stage,正确率没有提升多少,运算量却加大了不少,所以只采用initial stage+refinement stage两个阶段网络。(此处,我觉得到refinement stage2阶段的性价比比较高,refinement stage1的正确率还是有点低,尽管运算量不大。但是refinement stage2再加了约19GFLOPs的同时正确率就提高了3%左右,性价比更好。)

②更换backbone。用MobileNet替换,并用dilated conv空洞卷积优化网络。并且进行了一系列对比实验,发现MoblieNet v1比MobileNet v2效果居然更好。

③refinement stage中的关键点定位(heatmap)和关键点组合(pafs)部分的网络权值共享,减少操作计算量。最后两个卷积层才分出两个分支分别用来预测关键点的定位(heatmap)和关键点组合(pafs)。

④原openpose的refinement stage中都是使用7x7的卷积核。作者却使用了三个连续的1x1, 3x3, 3x3的卷积核来代替7x7,并且最后的3x3是使用了空洞卷积, dilation=2。另外由于用3个卷积核代替原来的一个卷积核,网络层数变得很深,所以作者又加上了一个residual连接。

⑤作者分析了原openpose代码并删除了额外的内存分配,使用OpenCV的例程并行化了关键点提取,这大大加快了代码的速度。

优化对比

作者使用CPU Intel core i7-6850K实验,可以看出,在正确率下降不多的情况下速度却提高了很多,这对于人体姿态估计实时性的贡献还是很大的。

猜你喜欢

转载自blog.csdn.net/heweiting123/article/details/89704276