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