对openpose的test_pose.py的代码解读

heat_avg=np.zero((height,widh,19)) 声明height个widh*19个二维矩阵


关于对np.newaxis的理解

作用:在指定位置增加一个一维,也就是说np.newaxis所在的位置就要新list增加的维度

举例:引用https://www.jianshu.com/p/78e1e281f698

x1 = np.array([1, 2, 3, 4, 5])
# the shape of x1 is (5,)
x1_new = x1[:, np.newaxis]
# now, the shape of x1_new is (5, 1)
# array([[1],
#        [2],
#        [3],
#        [4],
#        [5]])
x1_new = x1[np.newaxis,:]
# now, the shape of x1_new is (1, 5)
# array([[1, 2, 3, 4, 5]])

再来一个例子

In [124]: arr = np.arange(5*5).reshape(5,5)

In [125]: arr.shape
Out[125]: (5, 5)

# promoting 2D array to a 5D array
In [126]: arr_5D = arr[np.newaxis, ..., np.newaxis, np.newaxis]

In [127]: arr_5D.shape
Out[127]: (1, 5, 5, 1, 1)

关于对np.transpose的理解

input_img = np.transpose(imgToTest_padded[:,:,:,np.newaxis], (3, 2, 0, 1))在增加维度的同时做维度的空间变换

原来数组为(h,w,c)--变换维度后(h,w,c,1)-----空间变换后(1,c,h,w)


关于对heatmap = heat6.data.cpu().numpy()的理解

heat6是经过openpsoe模型卷积出的图像的热力图

1、首先heat6是一个放在GPU上的Variable,heat6.data是把Variable里的tensor取出来,可以看出与heat6的差别是:缺少了第一行(Variable containing)

2、heat6.data.cpu()是把heat6.data放在cpu上,其他的没区别,另外:heat6.data.cpu()和heat6.cpu().data一样

3、heat6.data.cpu().numpy()把tensor转换成numpy的格式


关于对numpy.squeeze()的用法

import numpy as np

x = np.array([[[0], [1], [2]]])
print(x)
"""
x=

[[[0]
  [1]
  [2]]]
"""
print(x.shape)  # (1, 3, 1)

x1 = np.squeeze(x)  # 从数组的形状中删除单维条目,即把shape中为1的维度去掉


print(x1)  # [0 1 2]
print(x1.shape)  # (3,)

关于对zip(np.nonzero(peaks_binary)[1], np.nonzero(peaks_binary)[0])#记录非零位置所在的行和列,zip后为非零位置的坐标

zip() 函数用于将可迭代对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象。

如果各个可迭代对象的元素个数不一致,则返回的对象长度与最短的可迭代对象相同。

利用 * 号操作符,与zip相反,进行解压。

>>>a = [1,2,3] #此处可迭代对象为列表
>>> b = [4,5,6]
>>> c = [4,5,6,7,8]
>>> zipped = zip(a,b)     # 打包为元组的列表
>>> zipped
[(1, 4), (2, 5), (3, 6)]
>>> zip(a,c)              # 元素个数与最短的列表一致
[(1, 4), (2, 5), (3, 6)]
>>> zip(*zipped)          # 与 zip 相反,可理解为解压
[(1, 2, 3), (4, 5, 6)]

关于对np.linspace的理解

startend = list(zip(np.linspace(candA[i][0], candB[j][0], num=mid_num), np.linspace(candA[i][1], candB[j][1], num=mid_num)))

#将A点到B点的向量进行num等分,代码中num=10,进行十等分坐标

https://blog.csdn.net/you_are_my_dream/article/details/53493752具体参考该博客对linspace的解释

对test-pose.py代码测试一张图片的时间测试

测试代码一张图片做一次前向传导,到整个图片出标记结果需要1-1.5s的时间:

该时间划分:图片的预处理时间,信息处理时间(关键点的匹配和关键对的配对问题),画关键点的时间

其中主要的时间主要是花在了图片的预处理时间上,图片的预处理工作主要是包括图片的多尺度预测,内存拷贝,由cpu写到GPU内存里,由于采用多尺度预测,因此内存拷贝的时间就乘以4,所以大部分的时间花在了这上面,下面是处理一张图片时候的时间输出:

1,在VGG模型下的

 COCO_val2014_000000531286.jpg
pre time is 897.17102
datacopy_time_avg is 212.22252
model_time_avg is 6.44290
info_process_time is 464.52713
draw_time is 3.21507
processing time is 1374.44401

2/。在darknet下的网络

COCO_val2014_000000067532.jpg
pre time is 695.26100
datacopy_time_avg is 159.83450
model_time_avg is 9.30941
info_process_time is 274.52302
draw_time is 2.21300
processing time is 977.76484

你可能感兴趣的:(学习,学习笔记,学习笔记,openpose,test_pose,pytorch)