发明内容
为了解决上述问题,本发明提出了一种基于深度学习的心搏识别方法、终端设备及存储介质。
具体方案如下:
一种心电图心搏识别方法,包括以下步骤:
S1:采集心电图数据组成训练集;
S2:构建心搏识别模型并设定模型的损失函数,对模型进行训练使得损失函数最小后,得到训练后的最终模型;
构建的心搏识别模型由编码器和解码器组成;
所述编码器包括一个卷积层和多个改进残差网络,改进残差网络采用多个不同尺度的卷积核路径并行编码;
所述解码器包括一个带注意力机制的循环神经网络和两个全连接网络,两个全连接网络分别用于识别心搏类型和心搏位置;
所述心搏识别模型的损失函数由分类损失和位置损失两部分组成;
S3:将待识别心电图进行预处理后得到的多个子片段依次输入最终模型,得到最终模型输出的每个子片段对应的心搏类型和心搏位置的预测序列;将多个预测序列依次连接,组成该待识别心电图的识别结果。
进一步的,步骤S1具体包括:采集多个心电图数据并将每个心电图数据截取为多个额定时间长度的子片段,对每个子片段进行心搏类型和心搏位置标记后,将每个心电图数据对应的所有子片段叠加后的数据和所有子片段标记后的数据叠加后的数据共同组成该心电图数据的训练样本,将采集的所有心电图数据的训练样本组成训练集。
进一步的,采集的心电图数据需符合:对应的时间大于时间阈值且满足包含室性心搏、包含房性心搏、包含伪差心搏和诊断结论为异常这四种条件中的至少一种。
进一步的,子片段的截取方法为:根据心电图数据横坐标的时间设定采样点,设定额定时间长度为m,从第1个采样点开始,截取时间长度为m的区间组成第1个子片段,从第1+m-w个采样点开始,截取时间长度为m的区间组成第2个片段,依次类推,直到某个片段达到心电图数据的结尾,其中w表示重叠的范围,且满足w<=0.5*m。
进一步的,步骤S1还包括对心电图数据进行预处理,所述预处理为以额定频率进行重新采样后再进行滤波处理。
进一步的,标记包括以下步骤:
S11:读取心电图数据中的心搏标记信息,提取心搏标记信息中的标签序列和位置序列;
S12:构造心搏类型标记张量label_cls,将每个子片段对应时间范围内的心搏类型标记依次编码后写入心搏类型标记张量label_cls中;
S13:构造心搏位置标记张量label_pos,将每个子片段对应时间范围内的心搏位置标记依次进行位置编码后写入心搏位置标记张量label_pos中。
进一步的,心搏类型标记张量label_cls表示为[a,5],其中,a表示心搏个数,5表示心搏类型编码为5位;心搏位置标记张量label_pos表示为[a,1]。
进一步的,子片段中标记在t秒的QRS波对应的位置编码的计算公式为:(t-offset)/m,其中,offset表示该子片段的起始位置相对于该子片段对应的心电图数据的起始位置的偏移时间,m表示该子片段对应的时间范围。
进一步的,改进残差网络结构包括三路不同尺度的ResidualBlock,输入经过三路不同尺度的ResidualBlock后的输出合并作为改进残差网络的输出,每路ResidualBlock的卷积核大小依次增加2。
进一步的,解码器中带注意力机制的循环神经网络的结构表达公式为:
St=tanh(yt+1·U+St-1·V+b1)
ek=Code·Si T
其中,S表示循环神经网络的内部状态张量,S
t-1和S
t分别表示循环神经网络的t-1时刻和t时刻的状态;y表示循环神经网络的输出张量,y
t+1和y
t分别表示循环神经网络的t+1时刻和t时刻的输出张量;U和V为参数矩阵;tanh为双曲正切函数;b
1、b
2、W
c和W
s均为参数张量;C表示上下文向量;上标T表示转置,α
j表示t时刻对Code编码中j时间点的注意力系数;L表示Code的长度;j和k均为变量参数;e
j表示t时刻的状态和Code在j时间点的注意力得分;exp表示e为底的指数函数;
表示修正状态;[C,S
t]表示把Code和S
t在最后一个维度堆叠。
进一步的,解码器中对应于心搏类型的全连接网络为:循环神经网络的输出经过第一个两层全连接神经网络MLP1后,再经过Softmax函数进行归一化变换得到每种心搏类型的概率。
进一步的,解码器中对应于心搏位置的全连接网络为:循环神经网络的输出经过第二个两层全连接神经网络MLP2后,再经过Sigmoid函数变换得到心搏的位置。
进一步的,两层全连接神经网络MLP1和MLP2的数学表达式均为:
y=(x·W1+b1)·W2+b2
其中,x表示输入张量,y表示输出张量,W1、W2、b1和b2均为可学习的参数张量。
进一步的,分类损失采用多分类交叉熵损失函数,位置损失采用L2损失函数。
一种心电图心搏识别终端设备,包括处理器、存储器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现本发明实施例上述的方法的步骤。
一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现本发明实施例上述的方法的步骤。
本发明采用如上技术方案,并具有有益效果:
1.克服手工设计算法的局限性,充分利用大数据的威力。随着数据量增多,模型可以不断的自动进化趋于完善,而手工算法是不行的。
2.充分利用心电图前后上下文信息,相比之前的技术,识别准确率高,抗干扰能力也更强。
3.速度块,由于是端到端的技术,可以通过GPU硬件加速,识别一份动态心电的时间可以从数分钟缩短到数秒钟。
具体实施方式
为进一步说明各实施例,本发明提供有附图。这些附图为本发明揭露内容的一部分,其主要用以说明实施例,并可配合说明书的相关描述来解释实施例的运作原理。配合参考这些内容,本领域普通技术人员应能理解其他可能的实施方式以及本发明的优点。
现结合附图和具体实施方式对本发明进一步说明。
实施例一:
本发明实施例提供了一种心电图心搏识别方法,如图1所示,所述方法包括以下步骤:
S1:采集心电图数据组成训练集。
该实施例中训练集的组成方法具体为:采集多个心电图数据并将每个心电图数据截取为多个额定时间长度的子片段,对每个子片段进行心搏类型和心搏位置标记后,将每个心电图数据对应的所有子片段叠加后的数据和所有子片段标记后的数据叠加后的数据共同组成该心电图数据的训练样本,将采集的所有心电图数据的训练样本组成训练集。
在采集的过程中,可以对心电图数据库中各数据的平均心率进行直方图统计,该实施例中设定直方图栅格的宽度为5次/分钟,统计的范围为40次/分钟~300次/分钟。对于在每个直方图栅格范围内的心电图数据,根据其长度、心搏标记和诊断结论进行筛选。筛选条件是满足以下一条或者多条,并且对应的时间大于时间阈值,该实施例中设定时间阈值为10秒钟。
1)包含室性心搏
2)包含房性心搏
3)包含伪差心搏
4)诊断结论为异常
需要说明的是,该实施例中在采集训练集中的样本时没有选择正常心电图,是因为其占比巨大且没有多少学习的价值;也没有单独考虑窦性,因为偶发室性和房性早搏的心电图里面会大量包含窦性。
由于模型的输入应为额定长度,而采集的心电图数据往往长度不等,因此,该实施例中预处理还包括将心电图数据截取为多个额定长度的子片段。
子片段的截取方法为:根据心电图数据横坐标的时间设定采样点,设定额定时间长度为m,从第1个采样点开始,截取时间长度为m的区间组成第1个子片段,从第1+m-w个采样点开始,截取时间长度为m的区间组成第2个片段,依次类推,直到某个片段达到心电图数据的结尾,其中w表示重叠的范围,且满足w<=0.5*m。标签的截取和数据截取按相同规则进行。该实施例中设定额定时间长度为10秒,即每个子片段对应的时间范围均为10秒。
进一步的,还包括对采集的心电图数据进行预处理,即以额定频率进行重新采样后再进行滤波处理。
其中,重采样可以通过线性插值法进行,通过重采样将所有心电图数据的采样率进行统一。所述额定频率本领域技术人员可以根据经验和实验进行设定,通常大于200Hz,该实施例中以250HZ的额定频率进行重采样。
所述滤波处理用于去除噪声,该实施例中进行0.1HZ~15HZ的带通滤波。
进一步的,还包括对心电图数据进行归一化处理,即针对每个导联,通过标签提供的R波位置,求得每个R波前后60毫秒范围内电压的最小值和最大值,然后对最小值进行平均得到数值lo,对最大值求平均得到hi。针对该导联内的每一采样点电压v,根据以下公式进行变换:
v’=(v-lo)/(hi-lo)
其中,v’表示变换后的电压。这样,所有的电压均被映射到0.0~1.0的数值区间。
对心电图数据进行心搏类型和心搏位置标记的过程包括以下步骤:
S11:读取心电图数据中的心搏标记信息,提取心搏标记信息中的标签序列和位置序列。
S12:构造心搏类型标记张量label_cls,将每个子片段对应时间范围内的心搏类型标记依次编码后写入心搏类型标记张量label_cls中。
该实施例中设定心搏类型标记张量label_cls表示为[a,5],其中,a表示子片段中包含的心搏的个数,5表示心搏类型编码为5位。该实施例中心搏类型包括窦性、房性、室性、伪差和休止符,对应的编码映射分别为:窦性为[1,0,0,0,0],房性为[0,1,0,0,0],室性为[0,0,1,0,0],伪差为[0,0,0,1,0],休止符[0,0,0,0,1]。
该实施例中心搏类型标记采用one-hot编码。
进一步的,设定当子片段中包含的心搏的个数不超出a时,不足a的部分填入休止符编码,如果超出那么放弃该片段。
S13:构造心搏位置标记张量label_pos,将每个子片段对应时间范围内的心搏位置标记依次进行位置编码后写入心搏位置标记张量label_pos中。
该实施例中设定心搏位置标记张量label_pos表示为[a,1]。如果子片段中包含的心搏的个数不超出a时,不足a的部分填入-1,如果超出那么放弃该片段。
该实施例中设定子片段中标记在t秒的QRS波对应的位置编码的计算公式为:
(t-offset)/m
其中,offset表示该子片段的起始位置相对于该子片段对应的心电图数据的起始位置的偏移时间,l表示该子片段对应的时间范围。t应满足t>=offset且t<=offset+m。
标记完成后,将每个心电图数据的所有子片段按照[2500,lead_dim]的维度转换为张量数据,并叠加起来得到[train_set_size,2500,lead_dim]维度的张量,记为x_train。
将所有的label_cls叠加起来得到[train_set_size,50,5]维度的张量,记为y1_train。
将所有的label_pos叠加起来得到[train_set_size,50,1]维度的张量,记为y2_train。
S2:构建心搏识别模型并设定模型的损失函数,对模型进行训练使得损失函数最小后,得到训练后的最终模型。
S21:构建主干神经网络。
由于需要模型的输入为电压序列,输出为QRS波标记序列,因此,该实施例采用“编码器-解码器”框架,主干网络可以是任何具备编码-解码能力的架构。
1.编码器部分由一维卷积神经网络(CNN)进行序列变换,解码器由循环神经网络(RNN)进行解码输出。
常规的seq-to-seq的学习由一个RNN做编码器生成隐变量,再由另一个RNN做解码器输出目标序列。但由于心电图采样精度高,包含若干个心搏的序列一般很长,若直接用RNN做编码会导致剧梯度消失或者爆炸,而且RNN不能并行,训练会非常耗时。该实施例中采用CNN做编码器不仅效率高,而且在提取范围较大的语义特征(比如P和QRS)上具有先天优势。
2.编码器网络采用了多尺度融合的残差网络(Resnet)改进结构。
心电图上的特征信息会随着心率和采集电压变化发生尺度的变化,为了适应这些变化,在残差网络结构基础上引入了一种多路机制,用多尺度的卷积核路径进行并行编码,以达到多种分辨率特征图相融合的目的。
3.解码器部分引入了基于注意力模块的上下文推理机制。
人类专家判别心搏需要上下文信息,那么机器也应该如此。根据这个假设,在解码端引入了注意力模块来提供上下文信息。注意力模块学习根据当前解码码器状态和编码器输出的编码向量得到一个上下文向量,让后编码器参考这个向量预测下一个序列值。
下面介绍模型的构建过程:
1.搭建深度学习模型。
可以使用任意支持计算图自动微分的软件,比如Pytorch和Tensorflow。启动开发环境,建立一个空的计算图,记为G。
2.在G中创建模型的输入张量节点,如图2(图2中的Input)所示,记作Input1,其维度与步骤S1中训练样本中所有子片段叠加后的数据的维度相同,即为[batch_size,2500,dim_lead],其中,batch_size表示批处理样本量,大小加载数据时决定,后续所有维度描述中将省略该batch_size,即将维度记为[2500,dim_lead];2500表示数据时间维度,以250Hz的采样频率、采样时间为10秒;dim_lead表示心电图的导联数,一般为1~12之间的数值。
3.构建编码器。
编码器包括一个卷积层和多个改进残差网络的级联。每个残差(Resnet)网络又由多个感受野不同的ResidualBlock组合而成,下面自顶向下逐一描述每个功能模块的构建。
3.1、在G中创建一个Conv1D(32,5,1)操作节点,节点的输入为Input1,输出记为X1。Conv1D(K,f,s)函数由开发环境提供或者自己实现,其数学表达式如下:
其中,Zl+1和Zl分别表示输入和输出张量,Ll+1和Ll分别表示输入和输出张量的时间轴尺寸。Kl+1参数表示输出特征图通道数(等于上面定义中的参数K),Kl表示输入张量的通道数。参数f表示特征图尺寸,参数s表示卷积核的步进值,p表示填充值,该实施例中所有p值统一为‘same’型填充值,即p=(f-1)/2。σ、Wl+1、b1和b2为可以学习的参数矩阵,其维度分别为[Kl+1,K]、[f,K]、[f,1]、[Kl+1,K]。
3.2、Resnet结构。
如图3所示。Resnet网络需要三个参数K、f、s,分别表示网络的输出特征图数目,最小卷积核的大小和步进值,如果步进值为2则表示对输出的时间尺度下采样到1/2。在Resnet中,输入并行经过三个ResidualBlock简称RB,每个每个RB的卷积核大小依次增加2,最后把这些ResidualBlock的输出进行通道维度的合并(Concact)就完成了对多尺度感受野信息的融合。
ResidualBlock的结构如图4所示,它接收Resnet提供的三个参数K,f,s,其输入张量分两路进行变换,分别为:
(1)In->Relu->BN->Conv1D(K,f,1)->Conv1D(K,f,s)
(2)残差路径(Bypass)。
将以上两条路径输出进行元素相加即得到ResidualBlock的输出。
其中激活函数Relu的数学表达式如下:
f(x)=max(0,x)
其中,x表示输入张量,f(x)表示输出张量。
批量归一化(BN)函数数学表达式如下:
B={x1,x2,...,xm}
其中,B表示输入张量,Y表示输出张量,γ和β均为可以学习的参数。
残差路径的逻辑如图5所示,其中最大池化函数MaxPool1D的数学表达式如下:
Al+1(i)=max(Al(2i+x),Al(2i+x+1))
i∈{0,2,...,LL/2}
其中,Al+1和Al分别表示输出和输入张量,LL表示输入张量的时间维度的尺寸。
根据上面定义的功能模块,在G中建立编码器部分的完整计算图,输入为X1,输出记为Code,流程如下:
X1->Resnet(16,7,1)->Resnet(16,7,2)->Resnet(16,7,1)->Resnet(16,7,2)
->Resnet(32,5,1)->Resnet(32,5,2)->->Resnet(32,5,1)->Resnet(32,5,2)
->Resnet(64,3,1)->Resnet(64,3,2)->->Resnet(64,3,1)->Resnet(64,3,2)
->BN->Relu->Code
至此,输入的心电图信号已经经过编码器的特征提取,变化为Code张量,其维度为[79,192]。
4.构建解码器。
解码器的核心是一个带注意力机制的循环神经网络(ARNN)。它的单元(Cell)定义如下(其中变量都是张量,乘法运算为矩阵相乘):
St=tanh(yt+1·U+St-1·V+b1) (1)
ek=Score(Si,Code) (4)
Score(Si,Code)=Code·Si T (5)
其中,公式(1)定义了ARNN如何从上一个序列输出和内部状态,转移到下一个内部状态。其中S是ARNN的内部状态张量,维度为[1,192]。St-1和St分别表示ARNN的上一时刻状态和当前时刻状态,需要说明的是,t表示当前时刻,t-1表示上一时刻,t+1表示下一时刻。y表示RNN的输出张量维度为[1,64],U和V是可以学习的参数矩阵,维度分别为[64,192]和[192,192],b1是可以学习的偏置参数向量,维度为[192]。
公式(2)定义了上下文向量C,它是使用不同时间点的注意力系数对Code在时间轴上进行线性组合,从而达到使公式(6)重点关注Code的某些时间范围。其中αj是当前状态对Code编码中j时间点的注意力系数,维度为[1,tCode]。tCode是输入Code张量的时间维长度,若根据上文,tCode等于79。L表示Code的长度。
公式(3)定义了如何计算S对Code时间点j的注意力系数,其中ej是指当前状态和Code在j时间点的注意力得分。e的维度为[1,tCode]。这里将S与Code在某个时间点的得分与所有时间点的得分进行Softmax运算,得到归一化的比例系数。
公式(4)(5)定义了注意得分及算法,这里使用了点乘法,用Code乘S转置。
公式(6)定义了结合上下文的修正状态
tanh为双曲正切函数,W
c是可学习的参数矩阵,维度为[256,192],[C,S
t]表示把Code和S
t在最后一个维度堆叠,即组和一个[1,256]的张量。
公式(7)定义了ARNN如何生成当前时刻的输出,其中Ws和b2是可学习的参数张量,维度分别为[192,64]和[64]。
根据上述单元的定义,在G中建立解码器模块,其输入为Code,输出对记作X2,对应于公式(7)中的yt。需要注意的是,以上的公式仅定义了ARNN输出序列中一个元素的计算过程,而整个序列需要ARNN从Code和初始状态开始,依次按照以上步骤输出,直到输出的分类是休止符。如果无法预测输出序列的长度,那么在构建计算图时需要依赖动态循环神经网络的机制,或使用静态循环神经网络展开并手工限定允许输出的最长序列,该实施例中采用后一种方案,即限定ARNN的状态数为50,这意味着允许10秒内的心率上限为300次/分钟。
最终在G中构建的RNN模块的过程包括以下步骤:
步骤1:在G中创建U、V、b1、b2、Wc、Ws、St,设定变量t=1。
步骤2:判断t是否小于50,如果是,进入步骤3;否则,结束。
步骤3:根据公式(1)~公式(7),计算yt并保存在G中,令t=t+1,返回步骤2。
RNN的输出记作X2,其包含了当前心拍的信息,因此再使用两个全连接网络分别进行性质分类和位置回归,流程如下:
性质分类:X2->MLP1->Softmax->probs
位置回归:X2->MLP2->Sigmoid->offset
MLP1为两层全连接神经网络,其数学表达式为:
y=(x·W1+b1)·W2+b2
其中,x表示输入张量,根据上文可得其维度为[1,64],W1和W2是可学习的参数张量,维度分别为[64,64]和[64,5],b1和b2为可学习的参数张量,维度为[1,64]。y是输出张量,维度为[1,5]。MLP1的输出经过Softmax归一化变换到概率分布probs,对应4种心拍加一个休止符的分类概率,维度为[1,5]。
Softmax数学表达式如下,
其中,Vi表示输入张量,Si表示输出张量。
MLP2和MLP1形式类似,只不过其中的W1的维度是[164,1],b2的维度为[1],这样对应的输出就是[1,1]的张量,即为一个标量。MLP2输出经过Sigmoid函数变换成offset,表示当前QRS波相对2500个点的偏移百分比。Sigmoid函数的数学表达时如下:
这样G的全部计算节点都创建完毕,G的输入为心电图信号,输出为序列{(probs1,offset1),(probs2,offset2),...,(probs50,offset50)}。
5.确定损失函数
模型的损失函数包括两部分,分别为QRS位置损失loss_pos和QRS分类的损失loss_cls。
QRS位置损失loss_pos采用L2距离,即:
其中,N=50。
QRS分类的损失loss_cls采用多分类交叉熵,即:
其中,n=50,m=5。
则模型的损失函数loss=loss_cls+loss_pos。
在模型训练过程中,以减少损失函数为目标,对模型采用随即梯度下降方法进行训练。
S3:将待识别心电图进行预处理后得到的多个子片段依次输入最终模型,得到最终模型输出的每个子片段对应的心搏类型和心搏位置的预测序列;将多个预测序列依次连接,并将每个心搏位置从偏移百分比转换成绝对位置,组成该待识别心电图的识别结果。
假设第k个片段的某个心搏位置标记为0.2,那么其绝对位置为(k-1)*10+0.2*10秒。
本实施例具有以下有益效果:
1.克服手工设计算法的局限性,充分利用大数据的威力。随着数据量增多,模型可以不断的自动进化趋于完善,而手工算法是不行的。
2.充分利用心电图前后上下文信息,相比之前的技术,识别准确率高,抗干扰能力也更强。
3.速度块,由于是端到端的技术,可以通过GPU硬件加速,识别一份动态心电的时间可以从数分钟缩短到数秒钟。
实施例二:
本发明还提供一种心电图心搏识别终端设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现本发明实施例一的上述方法实施例中的步骤。
进一步地,作为一个可执行方案,所述心电图心搏识别终端设备可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。所述心电图心搏识别终端设备可包括,但不仅限于,处理器、存储器。本领域技术人员可以理解,上述心电图心搏识别终端设备的组成结构仅仅是心电图心搏识别终端设备的示例,并不构成对心电图心搏识别终端设备的限定,可以包括比上述更多或更少的部件,或者组合某些部件,或者不同的部件,例如所述心电图心搏识别终端设备还可以包括输入输出设备、网络接入设备、总线等,本发明实施例对此不做限定。
进一步地,作为一个可执行方案,所称处理器可以是中央处理单元(CentralProcessing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital SignalProcessor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等,所述处理器是所述心电图心搏识别终端设备的控制中心,利用各种接口和线路连接整个心电图心搏识别终端设备的各个部分。
所述存储器可用于存储所述计算机程序和/或模块,所述处理器通过运行或执行存储在所述存储器内的计算机程序和/或模块,以及调用存储在存储器内的数据,实现所述心电图心搏识别终端设备的各种功能。所述存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据手机的使用所创建的数据等。此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如硬盘、内存、插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)、至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
本发明还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现本发明实施例上述方法的步骤。
所述心电图心搏识别终端设备集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,ROM,Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)以及软件分发介质等。
尽管结合优选实施方案具体展示和介绍了本发明,但所属领域的技术人员应该明白,在不脱离所附权利要求书所限定的本发明的精神和范围内,在形式上和细节上可以对本发明做出各种变化,均为本发明的保护范围。