HRNet详解:翻译、
人的姿态问题(human pose estimation problem),提出的网络能在整个过程中都保持高分辨率的表征,本文着力于研究single-person pose estimation.(分辨率越大看起来越清晰)
高分辨率网络(HRNet):能够在整个过程中维护高分辨率的表示。我们从高分辨率子网作为第一阶段始,逐步增加高分辨率到低分辨率的子网(gradually add high-to-low resolution subnetworks),形成更多的阶段,并将多分辨率子网并行连接(而不是像大多数现有解决方案那样串行连接)。在整个过程中,我们通过在并行的多分辨率子网络上反复交换信息来进行多尺度的重复融合。我们通过网络输出的高分辨率表示来估计关键点。
Related Work:
1、单人体姿态估计: 目前,深度卷积神经网络提供了主流的解决方案有两种方法:
①回归关键点位置regressing the position of keypoints
②估算关键点热图estimating keypoint heatmaps,然后选择热值最高的位置作为关键点。
2、High-to-low and low-to-high
3、Multi-scale fusion:最直接的方法是将多分辨率图像分别送入多个网络,并聚合输出响应映射[64]。Hourglass[40]及其扩展[77,31]通过跳过连接,将high-to-low process中的低级别特征逐步组合为low-to-high process中的相同分辨率的高级别特性。在cascaded pyramid network[11]中,globalnet将high-to-low process中的低到高级别特征low-to-high level feature逐步组合到low-to-high process中,refinenet将通过卷积处理的低到高特征进行组合。我们的方法重复多尺度融合,部分灵感来自深度融合及其扩展[67,73,59,80,82]。
4、Intermediate supervision
COCO和MPII数据集:
网络结构图、参考文献、相关工作资源整理、
机器学习pipline:
仿射变换:Affine Transformation是一种二维坐标到二维坐标之间的线性变换,保持二维图形的“平直性”(译注:straightness,即变换后直线还是直线不会打弯,圆弧还是圆弧)和“平行性”(译注:parallelness,其实是指保二维图形间的相对位置关系不变,平行线还是平行线,相交直线的交角不变。简单来说就是允许图片任意倾斜,并且允许图形在两个方向上任意伸缩的变换。
仿射变换可以保持原来的线共点、点共线的关系不变,保持原来相互平行的线仍然平行,保持原来的中点仍然是中点,保持原来在一直线上几段线段之间的比例关系不变。但是,仿射变换不能保持原来的线段长度不变,也不能保持原来的夹角角度不变。
mpii.py
np.zero(数组维度、类型)、python数组是几维的√、查看:类型、尺寸、形状、维度、
数组切片冒号与逗号☆:从左到右索引默认 0 开始,从右到左索引默认 -1 开始。
一维数组~冒号:通过冒号分隔切片参数 start:stop:step 来进行切片操作
一维数组~逗号:arrange和reshape/原、
arange()用于生成一维数组:numpy.arange(start, stop, step, dtype = None)
reshape()将一维数组转换为多维数组;reshape常用三种方法;四个参数;
np.reshape(n,m)重新生成n*m维的数组、.reshape(2,3,3)二维数组,2个3x3;
print('默认一维为数组:', np.arange(5)) 默认一维数组: [0 1 2 3 4] print('自定义起点一维数组:',np.arange(1, 5)) 自定义起点一维数组: [1 2 3 4] print('自定义起点步长一维数组:',np.arange(2, 10, 2)) 自定义起点步长一维数组: [2 4 6 8] print('二维数组:', np.arange(8).reshape((2, 4))) 二维数组: [[0 1 2 3] [4 5 6 7]] print('三维数组:', np.arange(60).reshape((3, 4, 5))) 三维数组: [[[ 0 1 2 3 4] [ 5 6 7 8 9] [10 11 12 13 14] [15 16 17 18 19]] [[20 21 22 23 24] [25 26 27 28 29] [30 31 32 33 34] [35 36 37 38 39]] [[40 41 42 43 44] [45 46 47 48 49] [50 51 52 53 54] [55 56 57 58 59]]] ??? print('指定范围三维数组:',np.random.randint(1, 8, size=(3, 4, 5))) 指定范围三维数组: [[[2 3 2 1 5] [6 5 5 6 7] [4 4 6 5 3] [2 2 3 5 6]] [[2 1 2 4 4] [1 4 2 1 4] [4 4 3 4 2] [4 1 4 4 1]] [[6 2 2 7 6] [2 6 1 5 5] [2 6 7 2 1] [3 3 1 4 2]]] [[[3 3 5 6] [2 1 6 6] [1 1 3 5]] [[7 6 5 3] [5 6 5 4] [6 5 7 1]]]
二维数组~逗号:
np.reanspose:对于一维来说没有变化,对二维来说就是转置,对三维涉及轴变化
点乘、标量乘、矩阵乘:使用哪种方法都有其具体应用场景,根据需要计算的数组是标量还是向量来决定使用哪种方法。另外,根据numpy中源码的注释,官方更推荐下面的方式:
当进行向量的内积运算时,可以通过np.dot()
当进行矩阵的乘法运算时,可以通过np.matmul()或者@
当进行标量的乘法运算时,可以通过np.multiply()或者*
range函数:range(start,stop.step)参数说明:
assert断言:用于判断一个表达式,在表达式条件为 false 的时候触发异常。eg:
因为一个注释导致意外缩进和return在函数外部:\是在编写程序中句子太长,人为换行后加上\但print出来是一整行。python各种符号含义
编程中NotImplementedError的使用方法:raise可以实现报出错误的功能,而报错的条件可以由程序员自己去定制。在面向对象编程中,可以先预留一个方法接口不实现,在其子类中实现。如果要求其子类一定要实现,不实现的时候会导致问题,那么采用raise的方式就很好。而此时产生的问题分类是NotImplementedError。
关于pixel_std调整为200、更换不同的数据集需要修改pixel_mean和pixel_std吗