发明内容
为了改善上述问题,本发明提供了一种热图关键点预测方法、装置、电子设备及存储介质。
本发明实施例的第一方面,提供了一种热图关键点预测方法,所述方法包括:
将待估计的图像序列输入图像姿态估计模型,得到每帧图像的初始预测热图;
依次在每张所述初始预测热图上分别提取多个点作为初始预测点,编码得到初始预测点对应的特征序列;
将所述特征序列输入时序神经网络得到编码了时空上下文的特征向量;
根据所述特征向量对每个所述初始预测点进行重新打分;
选出分数最高的初始预测点作为最终关键点,并进行局部范围内的位置微调。
可选地,所述在每张所述初始预测热图上分别提取多个点作为初始预测点的步骤,具体包括:
采用三种方式进行初始预测点的采样:
在真实值周围随机采样;或者
从背景上随机采样;或者
从初始预测热图的极值点上采样。
可选地,按照一定概率采样三类初始预测点,根据它们与真实值之间的距离将采样得到的初始预测点分成正负两类,做为构造的训练数据,用于训练后续的分类网络和回归分支。
可选地,所述将所述特征序列输入时序神经网络得到编码了时空上下文的特征向量的步骤,具体包括:
将所述特征序列输入到L层的Transformer编码器当中;
通过注意力机制,每个时间步的输入特征序列融合来自其他时间步的特征序列的信息,将时序上下文编码进当前的特征序列表示里;
结合特征序列的图像特征和几何特征,并参考其他初始预测点特征,将空间上下文编码进当前的特征序列表示里;
得到编码了时空上下文的特征向量。
可选地,所述根据所述特征向量对每个所述初始预测点进行重新打分的步骤,具体包括:
应用分类网络对每个初始预测点做重新打分;
其中,重新打分是通过二分类分支来实现;
通过全连接层和Sigmoid激活函数来输出二分类的得分;
使用初始预测点的正负类进行监督该分支;
将初始的置信度乘上分类分支预测的概率值得到重新加权后的置信度分数。
可选地,所述选出分数最高的初始预测点作为最终关键点,并进行局部范围内的位置微调的步骤,具体包括:
选择置信度分数最大的点作为最终关键点,通过回归分支分别对每个候选的初始预测点做位置微调。
可选地,所述分类网络损失函数为重加权后的二元交叉熵损失,根据正样本与真实值的距离对损失函数进行加权,与真实值离得越近的点权重越大,该权重可以促进分类网络给更优的初始预测点更高的分数。
本发明实施例的第二方面,提供了一种热图关键点预测装置,所述装置包括:
初始预测单元,用于将待估计的图像序列输入图像姿态估计模型,得到每帧图像的初始预测热图;
初始预测点提取单元,用于依次在每张所述初始预测热图上分别提取多个点作为初始预测点,编码得到初始预测点对应的特征序列;
时空编码单元,用于将所述特征序列输入时序神经网络得到编码了时空上下文的特征向量;
重打分单元,用于根据所述特征向量对每个所述初始预测点进行重新打分;
关键点预测单元,用于选出分数最高的初始预测点作为最终关键点,并进行局部范围内的位置微调。
本发明实施例的第三方面,提供了一种电子设备,其特征在于,包括:
一个或多个处理器;存储器;一个或多个应用程序,其中所述一个或多个应用程序被存储在所述存储器中并被配置为由所述一个或多个处理器执行,所述一个或多个程序配置用于执行如第一方面所述的方法。
本发明实施例的第四方面,提供了一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有程序代码,所述程序代码可被处理器调用执行如第一方面所述的方法。
综上所述,本发明提供了一种热图关键点预测方法、装置、电子设备及存储介质,考虑了模型发生混淆的情况,从初始预测的热图上提取多个点作为初始预测点,根据时序上下文信息对初始预测点进行重打分,从中选出最优的初始预测点作为关键点。一方面,通过融合时序信息,该方法提升了关键点定位的准确度,使预测结果在相邻帧之间更具有一致性;另一方面,通过对初始预测点的重打分,改进了对关键点的置信度的预测,使得预测更准确的关键点的置信度提高,预测错误的关键点的置信度降低。
具体实施方式
近年来,随着深度学习的迅速发展,越来越多的工作将深度神经网络应用到该任务上,尤其是在基于图像的姿态估计任务上取得了显著的进展。传统的自顶向下方法中,首先检测出图像上的人体框,将每个框中心的人体区域裁剪出来,分别进行编解码得到一系列关键点热图,再取热图上响应最高的位置作为关键点的预测结果。因此,如何较为准确地检测出关键点部位,对于姿态估计的结果有着重要的影响。在现有的关键点预测方法中,一类方法直接从预测的热图中直接取最大值点的位置作为最终预测的关键点,该方法的缺点在于关键点热图预测不符合单峰分布假设,这种解码方式在模型发生混淆的情况下是次优的;另一类方法在初始预测热图阶段之后增加了一个优化阶段,该方法的缺点在于一方面对于输入是原始图片的方法,只考虑了单帧图像上的信息,在模糊、遮挡情况下单帧图像的信息不足以消除歧义(多峰值),需要结合时间序列信息才能消除歧义,另一方面对原始的整张热图做优化,并没有显式地考虑峰值点。
因此,如何提供一种准确度更高的热图关键点预测方法,是目前亟待解决的问题。
鉴于此,本发明设计者设计了一种热图关键点预测方法、装置、电子设备及存储介质,考虑了模型发生混淆的情况,从初始预测的热图上提取多个点作为初始预测点,根据时序上下文信息对初始预测点进行重打分,从中选出最优的初始预测点作为关键点。一方面,通过融合时序信息,该方法提升了关键点定位的准确度,使预测结果在相邻帧之间更具有一致性;另一方面,通过对初始预测点的重打分,改进了对关键点的置信度的预测,使得预测更准确的关键点的置信度提高,预测错误的关键点的置信度降低。
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。
因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
在本发明的描述中,需要说明的是,术语“顶”、“底”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,或者是该发明产品使用时惯常摆放的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
在本发明的描述中,还需要说明的是,除非另有明确的规定和限定,术语“设置”、“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。
需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。
实施例
如图1所示,为本发明一实施例提供的热图关键点预测方法,该方法包括:
步骤S101,将待估计的图像序列输入图像姿态估计模型,得到每帧图像的初始预测热图。
在本实施中,待估计的图像序列是基于视频图像经过裁剪得到的,对于从视频图像获得图像序列的方式,不做具体的限定,可以采用任何目前已经公开的算法模型实现,作为优选的,可以采用Faster R-CNN的网络结构。同样的,图像姿态估计模型可以采用任何任何目前已经公开的自顶向下的图像姿态估计算法,作为优选的,可以使用Simple Baseline作为图像姿态估计骨干网络。
步骤S102,依次在每张所述初始预测热图上分别提取多个点作为初始预测点,编码得到初始预测点对应的特征序列。
本实施例中,从初始预测热图上采样N个点,作为初始预测点,其定义为
其中,x、y分别为初始预测点在热图上的横纵坐标,c为热图上该点的响应值,即初始预测的置信度。作为优选的,将(x,y)归一化到[-1,1]之间,即热图左上角的点为(-1,-1)。
初始预测点的作用有以下几个方面:(1)作为最终预测结果的候选点,之后的优化网络将对其做一个重打分,选出最优的候选点;(2)作为待优化的初始预测结果,优化网络将对初始预测点的坐标做一个局部的微调,以减少热图降升采样过程中导致的量化误差;(3)在时序上下文中提供更丰富的信息,如果上下文只采样最大值点,容易将之前帧的预测错误累积到当前帧;(4)作为一种数据增强手段,通过采样不同的位置,可以模拟初始预测网络的错误分布,训练后面的优化网络从这些错误中恢复。
作为本发明实施例的优选实施方式,在每张所述初始预测热图上分别提取多个点作为初始预测点的具体方法为:
采用三种方式进行初始预测点的采样:
在真实值周围随机采样;或者
从背景上随机采样;或者
从初始预测热图的极值点上采样。
发明实施例采用三种方式采样三种初始预测点。具体地,(a)Ggt表示在真实值周围随机采样的点,(b)Gbg表示从背景上随机采样的点,(c)Gkm表示从热图极值点上采样的点。在训练阶段,本实施例中均匀采样三种初始预测点,训练优化网络对不同的初始预测点做打分;在测试阶段,只采样热图上的极值点。
具体地,采样G
gt时,本实施例中从以真实值为中心的高斯分布N
中随机采样,其中/>
为关键点k的2D坐标真实值,σ为生成热图标签时的高斯分布的标准差。采样G
bg时,在整张图片上从二维均匀分布中随机采样。
为了避免在同一个峰附近采样多个点,而忽略了其他的峰,在采样Gkm时使用了非极大抑制算法,Gkm表示从热图极值点上采样的初始预测点。首先,取出当前热图上的最大值点Gargmax,加入到初始预测点集合里;接着,将Gargmax周围P×P的区域都掩盖掉,使其响应值变为0;重复该过程,直到采样完Nsample个初始预测点或是热图上已经不存在有响应的点。需要注意的是,当采样的点的个数不足Nsample个时,用G=(-1,-1,-1)来填充,同时在后面的优化网络中不监督这些用于填充的点。
作为本发明实施例的优选实施方式,按照一定概率采样三类初始预测点,根据它们与真实值之间的距离将采样得到的初始预测点分成正负两类,做为构造的训练数据,用于训练后续的分类网络和回归分支。
本实施例中将初始预测点分成两类,在图中分别用蓝色背景和红色背景来表示。红色背景表示接近真实值的正样本,蓝色背景则表示对应的初始预测点为远离真实值的负样本。本实施例中以3σ作为二分类的界线,数学定义如下式所示。
根据定义,Ggt中的点一定是正样本,Gkm和Gbg中的点则有正有负。当初始预测网络的准确率比较高时,Gkm中大部分将是正样本。
作为本发明实施例的优选实施方式,在训练阶段,均匀采样三种初始预测点,训练优化网络对不同的初始预测点做打分;在测试阶段,只采样热图上的极值点作为初始预测点。
对每帧图像的每个关键点热图采样的Nsample个初始预测点后,本发明实施例得到T×K×Nsample×3维的初始预测点向量。对于每个初始预测点,本发明实施例都相应地提取出对应位置的特征序列,
Fguide={Fguidet,n|t∈[1,T],n∈[1,Nsample]}
步骤S103,将所述特征序列输入时序神经网络得到编码了时空上下文的特征向量。
给定初始预测点特征序列,本发明实施例通过时序优化网络融合时序上下文以及包含了图像和几何特征的空间信息,得到编码了时空上下文的特征向量使用该特征表示对所有初始预测点做一个重打分,以及更精细的定位。
作为本发明实施例的优选实施方式,具体的实现方式为:
将所述特征序列输入到L层的Transformer编码器当中;
通过注意力机制,每个时间步的输入特征序列融合来自其他时间步的特征序列的信息,将时序上下文编码进当前的特征序列表示里;
结合特征序列的图像特征和几何特征,并参考其他初始预测点特征,将空间上下文编码进当前的特征序列表示里;
得到编码了时空上下文的特征向量。
在融合时空特征上,本发明实施例使用的是基于自注意力机制的Transformer编码器。本发明实施例将每一个初始预测点作为序列中的一个标志(token),初始预测点的图像特征和几何特征,本发明实施例还将每个token对应的关键点的类别做了编码,得到输入特征。通过L层的Transformer编码层,序列中每个token都会接收并融合来自其他时间步的token的信息,最终得到编码了时空上下文的特征向量
Transformer更加适用于编码这种复杂的长序列,与RNN相比,Transformer可以并行处理输入的序列,而不是在每个时间步上循环迭代,因此推理速度更快;同时,Transformer使用的注意力机制,使得序列中任意时间步i可以通过一跳的连接来获取序列中任意时间步j的信息,RNN需要的跳跃数则是与i、j之间的距离成线性增长的。Transformer的注意力机制使一层内任意的位置i都可以处理来自任意的位置j的信息,而CNN的卷积核大小有限,由此导致一层的感受野是有限的,如果想获得较大的感受野就需要堆叠多层卷积层,从而导致训练的困难。
在时间序列的构建上,本发明实施例尝试了4种不同的方式,对应的序列长度S也不同。(a)Keypoint Single:S=T,关键点互相独立,在优化时序列里只包含每帧的一个初始预测点;(b)Pose Single:S=T×K,序列中同时包含所有关键点,互相之间可以交换信息,根据其他关键点的初始预测点来优化对某个关键点的预测,但序列里仍然只包含一个初始预测点;(c)Keypoint Multi:S=T×N,关键点互相独立,但序列里包含每一帧的所有的初始预测点;(d)Pose Multi:S=T×K×N,序列里包含所有的关键点即每个关键点采样的初始预测点。
关键点互相独立vs序列中包含所有关键点:在之前的姿态优化工作中,有一种方法使用的是前者,而另一种方法使用的是后者。前者只利用当前关键点的时空上下文来优化对当前点的预测,而后者则是对整个姿态做优化,在可利用的信息增加的同时,也对模型的表示能力提出了更高的要求。为了区分不同的关键点,本发明实施例在使用Multi的设置时会额外增加一个关键点类型嵌入层L
embed。该嵌入层的权重为一个K×d
temp的矩阵W,对于第k个关键点,通过查表的方式可以将其类别坐标k映射到连续的向量
关键点类型向量与图像、几何向量拼接到一起,构成Multi设置下的输入特征。当序列中只包含一个初始预测点时,为了避免每次都将响应值最大的初始预测点分到一组,导致模型学习到偏置,本发明实施例在输入时序优化网络之前,会将初始预测点随机打散。相比于只包含一个初始预测点的序列构建方式,包含多个初始预测点的设置下,优化网络不仅可以利用一个关键点的时序上下文,还可以利用同一帧上不同初始预测点的信息,为最终选出最优候选点提供支撑。
在确定了序列长度以及使用的特征后,本发明实施例将初始预测点序列输入到L层的Transformer编码器当中,输出同样长度的编码后的特征序列Ftemp={Ftemp,t|t=1,2,...,T}。通过注意力机制,每个时间步的输入特征都充分融合了来自其他时间步的信息,将时序上下文编码进当前的表示里;通过结合图像和几何特征,并参考其他初始预测点的特征,将空间上下文编码进当前的特征表示里。最终,本发明实施例得到编码了时空上下文的初始预测点特征Ftemp,并使用它来对初始预测点进行重打分和更精细的定位。
步骤S104,根据所述特征向量对每个所述初始预测点进行重新打分。
重打分分支会根据上下文信息,降低初始预测的多个峰上响应值不合理的点的置信度分数,从而选出最优的初始预测点。定位分支则是在局部范围内,对初始预测点的坐标做调整,来得到优化后的坐标。
作为本发明实施例的优选实施方式,具体的实现方式为:
应用分类网络对每个初始预测点做重新打分;
其中,重新打分是通过二分类分支来实现;
通过全连接层和Sigmoid激活函数来输出二分类的得分;
使用初始预测点的正负类进行监督该分支;
将初始的置信度乘上分类分支预测的概率值得到重新加权后的置信度分数。
具体地,重打分是通过二分类分支来实现的,如下式所示:
gn,c=Sigmoid(WTFtemp,n+b)
本实施例中使用全连接层和Sigmoid激活函数来输出二分类的得分。在训练时使用初始预测点的正负类别来监督该分支,在测试时会将初始的置信度g
conf乘上分类分支预测的概率值g
c,得到重新加权后置信度分数(如下式所示),选择
最大的点作为最终的初始预测点。
初始预测点特征序列{Fguide,n}通过时序上下文融合模块得到编码了时空信息的特征{Ftemp,n},之后通过回归分支分别对每个候选的初始预测点做位置微调。
需要注意的是,所述分类网络损失函数为重加权后的二元交叉熵损失:
αk根据正样本与真实值的距离对损失函数进行加权,与真实值离得越近的点权重越大,该权重可以促进分类网络给更优的初始预测点更高的分数。
所述回归网络的损失函数为L1 Loss。其中,在训练时只对初始预测点中的正样本的残差进行监督。这是因为负样本与真实值的距离太远,回归负样本与真实坐标的残差是一个病态的问题,反而会对模型的训练造成负面影响。
总的损失函数如下式所示,其中α为权重因子,本实施例中在实验中取α=5来保证分类和回归的损失函数的数量级相同,从而使训练更加稳定。
L=Lc+αLr
在训练时,本实施例中对序列中所有有标注的帧都做监督,而不是只对待优化的点做监督。本实施例中,这种训练方式可以帮助优化网络更好地融合时序上下文的信息。
步骤S105,选出分数最高的初始预测点作为最终关键点,并进行局部范围内的位置微调。
作为本发明实施例的优选实施方式,选择置信度分数最大的点作为最终关键点,通过回归分支分别对每个候选的初始预测点做位置微调。
如下式所示,根据重新加权过的置信度分数
选出最佳的初始预测点/>
再加上对应的回归分支预测的偏移向量/>
得到J
final,即服从多峰高斯分布的关键点,也就是热图上解码得到的最终的关键点。
本实施例提供的热图关键点预测方法,考虑了模型发生混淆的情况,从初始预测的热图上提取多个点作为初始预测点,根据时序上下文信息对初始预测点进行重打分,从中选出最优的初始预测点作为关键点。一方面,通过融合时序信息,该方法提升了关键点定位的准确度,使预测结果在相邻帧之间更具有一致性;另一方面,通过对初始预测点的重打分,改进了对关键点的置信度的预测,使得预测更准确的关键点的置信度提高,预测错误的关键点的置信度降低。
如图2所示,本发明实施提供的热图关键点预测装置,所述装置包括:
初始预测单元110,用于将待估计的图像序列输入图像姿态估计模型,得到每帧图像的初始预测热图;
初始预测点提取单元120,用于依次在每张所述初始预测热图上分别提取多个点作为初始预测点,编码得到初始预测点对应的特征序列;
时空编码单元130,用于将所述特征序列输入时序神经网络得到编码了时空上下文的特征向量;
重打分单元140,用于根据所述特征向量对每个所述初始预测点进行重新打分;
关键点预测单元150,用于选出分数最高的初始预测点作为最终关键点,并进行局部范围内的位置微调。本发明实施例提供的热图关键点预测装置,用于实现上述热图关键点预测方法,因此具体实施方式与上述方法相同,在此不再赘述。
如图3所示,本发明实施例提供的一种电子设备300的结构框图。该电子设备300可以是智能手机、平板电脑、电子书等能够运行应用程序的电子设备300。本申请中的电子设备300可以包括一个或多个如下部件:处理器310、存储器320、以及一个或多个应用程序,其中一个或多个应用程序可以被存储在存储器320中并被配置为由一个或多个处理器310执行,一个或多个程序配置用于执行如前述方法实施例所描述的方法。
处理器310可以包括一个或者多个处理核。处理器310利用各种接口和线路连接整个电子设备300内的各个部分,通过运行或执行存储在存储器320内的指令、程序、代码集或指令集,以及调用存储在存储器320内的数据,执行电子设备300的各种功能和处理数据。可选地,处理器310可以采用数字信号处理(Digital Signal Processing,DSP)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)、可编程逻辑阵列(Programmable LogicArray,PLA)中的至少一种硬件形式来实现。处理器310可集成中央处理器(CentralProcessing Unit,CPU)、图像处理器(Graphics Processing Unit,GPU)和调制解调器等中的一种或几种的组合。其中,CPU主要处理操作系统、用户界面和应用程序等;GPU用于负责显示内容的渲染和绘制;调制解调器用于处理无线通信。可以理解的是,上述调制解调器也可以不集成到处理器310中,单独通过一块通信芯片进行实现。
存储器320可以包括随机存储器(Random Access Memory,RAM),也可以包括只读存储器(Read-Only Memory)。存储器320可用于存储指令、程序、代码、代码集或指令集。存储器320可包括存储程序区和存储数据区,其中,存储程序区可存储用于实现操作系统的指令、用于实现至少一个功能的指令(比如触控功能、声音播放功能、图像播放功能等)、用于实现下述各个方法实施例的指令等。存储数据区还可以存储终端在使用中所创建的数据(比如电话本、音视频数据、聊天记录数据)等。
如图4所示,本发明实施例提供的一种计算机可读存储介质400的结构框图。该计算机可读介质中存储有程序代码410,所述程序代码410可被处理器调用执行上述方法实施例中所描述的方法。
计算机可读存储介质400可以是诸如闪存、EEPROM(电可擦除可编程只读存储器)、EPROM、硬盘或者ROM之类的电子存储器。可选地,计算机可读存储介质400包括非易失性计算机可读介质(non-transitory computer-readable storage medium)。计算机可读存储介质400具有执行上述方法中的任何方法步骤的程序代码410的存储空间。这些程序代码410可以从一个或者多个计算机程序产品中读出或者写入到这一个或者多个计算机程序产品中。程序代码410可以例如以适当形式进行压缩。
综上所述,本发明提供了一种热图关键点预测方法、装置、电子设备及存储介质,考虑了模型发生混淆的情况,从初始预测的热图上提取多个点作为初始预测点,根据时序上下文信息对初始预测点进行重打分,从中选出最优的初始预测点作为关键点。一方面,通过融合时序信息,该方法提升了关键点定位的准确度,使预测结果在相邻帧之间更具有一致性;另一方面,通过对初始预测点的重打分,改进了对关键点的置信度的预测,使得预测更准确的关键点的置信度提高,预测错误的关键点的置信度降低。
在本申请所公开的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本申请的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
另外,在本申请各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。