一种模型加密方法、模型解密方法、计算机及集成芯片转让专利

申请号 : CN202310031329.3

文献号 : CN115828287B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 刘军

申请人 : 湖州丽天智能科技有限公司

摘要 :

本发明公开了一种模型加密方法、模型解密方法、计算机及集成芯片,其模型加密方法包括:利用动态链接加密库随机生成光伏系统检测模型用的密钥,并对密钥进行变换;利用加密接口函数获取光伏系统检测模型,并利用变换后的密钥对光伏系统检测模型加密处理成加密模型数据;将加密模型数据暂存在内存段中,并在内存段中存储部分密钥及模型相关信息;在光伏系统检测模型完成加密后,将内存段中的加密模型数据、部分密钥及模型相关信息写入硬盘内的模型文件中。现利用动态链接加密库生成的密钥对光伏系统检测模型加密,当光伏系统检测模型在完成加密后写入硬盘中,从而防止其他人员获取到光伏系统检测模型的模型结构和参数,避免出现重大损失。

权利要求 :

1.一种模型加密方法,其特征在于,包括:

利用动态链接加密库随机生成光伏系统检测模型用的密钥,并对所述密钥进行变换;

所述密钥包括公钥、私钥;

利用加密接口函数获取所述光伏系统检测模型,并利用所述变换后的密钥对所述光伏系统检测模型加密处理成加密模型数据;

将所述加密模型数据暂存在内存段中,并在所述内存段中存储部分所述密钥及模型相关信息;所述模型相关信息包括模型长度、模型版本号、模型生成日期、模型有效日期;

在所述光伏系统检测模型完成加密后,将所述内存段中的加密模型数据、部分所述密钥及模型相关信息写入硬盘内的模型文件中;

将变换后的部分所述公钥和所述光伏系统检测模型的超参数写入开放性文件中,所述开放性文件存储在所述硬盘中;

变换后的所述公钥中除存储在所述开放性文件之外的剩余部分所述公钥直接存储在所述模型文件中,所述模型文件中还存储有所述私钥。

2.根据权利要求1所述的一种模型加密方法,其特征在于,在所述的利用动态链接加密库随机生成光伏系统检测模型用的密钥,并对所述密钥进行变换之前,还包括:将加密算法封装成动态链接加密库,并设置加密接口函数、解密接口函数及参数类型。

3.根据权利要求1所述的一种模型加密方法,其特征在于,在所述的利用加密接口函数获取所述光伏系统检测模型之前,还包括:分析所述光伏系统检测模型自带的模型接口函数是否能接入所述动态链接加密库;

当所述模型接口函数不能接入所述动态链接加密库时,模拟适用于所述动态链接加密库的加密接口函数、解密接口函数及参数类型;

当所述模型接口函数能接入所述动态链接加密库时,将所述模型接口函数作为所述加密接口函数。

4.根据权利要求1 3中任意一项所述的一种模型加密方法,其特征在于,在所述的利用~加密接口函数获取所述光伏系统检测模型之前,包括:当所述光伏系统检测模型已经存储在硬盘上,或所述光伏系统检测模型为第一类模型格式时,将所述光伏系统检测模型的内存地址和模型长度发送给所述加密接口函数;

当所述光伏系统检测模型为第二类模型格式时,将所述光伏系统检测模型的模型数据序列的内存地址和模型长度发送给所述加密接口函数。

5.根据权利要求4所述的一种模型加密方法,其特征在于,在所述的将所述光伏系统检测模型的模型数据序列的内存地址和模型长度发送给所述加密接口函数之前,还包括:当所述光伏系统检测模型为第二类模型格式时,将所述光伏系统检测模型序列化处理成模型数据序列。

6.根据权利要求1 3中任意一项所述的一种模型加密方法,其特征在于:~

所述光伏系统检测模型包括已完成训练的光伏系统检测模型、未训练的光伏系统检测模型;

所述光伏系统检测模型用于识别检测光伏系统上的组件情况,所述组件情况包括组件污渍、组件异物、组件斑纹、组件断裂、组件桥架。

7.一种模型解密方法,其特征在于,包括:

打开硬盘中光伏系统检测模型加密后的模型文件,利用解密接口函数调用动态链接加密库,读取所述模型文件中存储的模型相关信息及加密模型数据;

读取所述模型文件中存储的部分密钥,以及开放性文件中存储的部分公钥;所述部分密钥包括私钥和剩余部分公钥;

对所述公钥和私钥进行反变换,利用反变换后的公钥和私钥对所述加密模型数据解密成解密模型数据;

所述硬盘中存储开放性文件,所述开放性文件中存储变换后的部分所述公钥和所述光伏系统检测模型的超参数;

变换后的所述公钥中除存储在所述开放性文件之外的剩余部分所述公钥直接存储在所述模型文件中,所述模型文件中还存储有所述私钥。

8.根据权利要求7所述的一种模型解密方法,其特征在于,还包括:通过在所述开放性文件中修改光伏系统检测模型的超参数,来调整所述光伏系统检测模型的识别检测精度;所述超参数包括图像检测数量参数,图像检测速度参数,图像检测效果参数。

9.根据权利要求7所述的一种模型解密方法,其特征在于,在所述的利用反变换后的密钥对所述加密模型数据解密成解密模型数据之后,包括:将所述解密模型数据的内存地址和模型长度发送给所述光伏系统检测模型的模型接口;

当所述光伏系统检测模型为第二类模型格式时,通过所述模型接口读取所述解密模型数据,并对所述解密模型数据进行反序列化后,加载成可用光伏系统检测模型;

当所述光伏系统检测模型为第一类模型格式,或所述光伏系统检测模型在加密前直接存储在硬盘上时,通过所述模型接口读取所述解密模型数据,并加载成可用光伏系统检测模型。

10.根据权利要求9所述的一种模型解密方法,其特征在于,还包括:在打开所述可用光伏系统检测模型时,检测所述可用光伏系统检测模型是否处于可用有效期内;

当所述可用光伏系统检测模型处于非可用有效期内时,通过加密接口函数、动态链接加密库修改所述可用光伏系统检测模型的密钥,使得所述可用光伏系统检测模型处于非可用状态。

11.一种计算机,其特征在于,使用如权利要求1 6中任意一项所述的一种模型加密方~法,或使用如权利要求7 10中任意一项所述的一种模型解密方法。

~

12.一种集成芯片,其特征在于,使用如权利要求1 6中任意一项所述的一种模型加密~方法,或使用如权利要求7 10中任意一项所述的一种模型解密方法。

~

说明书 :

一种模型加密方法、模型解密方法、计算机及集成芯片

技术领域

[0001] 本发明涉及光伏系统检测领域,尤其是一种模型加密方法、模型解密方法、计算机及集成芯片。

背景技术

[0002] 太阳能光伏系统是将太阳能转化为电能,并将电能送往蓄电池中存储起来,或推动负载工作。光伏系统一般都是露天放置,常常处于沙尘、大风、鸟粪污染,掉落有异物等复杂环境中;这些复杂的自然环境会使得光伏系统上形成覆盖物、裂纹等,从而会影响光伏系统的发电率;除此之外,还有可能造成光伏系统断裂。
[0003] 为了解决光伏系统在上述复杂环境中出现的问题,往往会借助光伏清洗机来清除光伏系统上的覆盖物。光伏清洗机在对覆盖物进行清除的时候,需要利用目标检测算法模型来识别覆盖物、裂纹、断裂等情况;从而可以高效地去除光伏系统上的覆盖物,以及识别到光伏系统上的异常情况,便于通知维护系统。
[0004] 然而,一个好的目标检测算法模型在训练时,需要非常多的训练数据、多个高性能显卡、数天甚至数月的训练时间开销,所以其训练成本非常高昂。若不对目标检测算法模型进行加密,则目标检测算法模型的模型结构和参数容易被他人获取并使用,尤其竞争对手;从而会出现重大损失。

发明内容

[0005] 为了解决上述技术问题,本发明提供一种模型加密方法、模型解密方法、计算机及集成芯片。
[0006] 具体的,本发明的技术方案如下:
[0007] 一方面,本发明提供一种模型加密方法,包括:
[0008] 利用动态链接加密库随机生成光伏系统检测模型用的密钥,并对所述密钥进行变换;所述密钥包括公钥、私钥;
[0009] 利用加密接口函数获取所述光伏系统检测模型,并利用所述变换后的密钥将对所述光伏系统检测模型加密处理成加密模型数据;
[0010] 将所述加密模型数据暂存在内存段中,并在所述内存段中存储部分所述密钥及模型相关信息;所述模型相关信息包括模型长度、模型版本号、模型生成日期、模型有效日期;
[0011] 在所述光伏系统检测模型完成加密后,将所述内存段中的加密模型数据、部分所述密钥及模型相关信息写入硬盘内的模型文件中。
[0012] 在一个实施例中,一种模型加密方法,还包括:
[0013] 将变换后的部分所述公钥和所述光伏系统检测模型的超参数写入开放性文件中,所述开放性文件存储在所述硬盘中;
[0014] 变换后的所述公钥中除存储在所述开放性文件之外的剩余部分公钥直接存储在所述模型文件中,所述模型文件中还存储有所述私钥。
[0015] 在一个实施例中,在所述的利用动态链接加密库随机生成光伏系统检测模型用的密钥,并对所述密钥进行变换之前,还包括:
[0016] 将加密算法封装成动态链接加密库,并设置加密接口函数、解密接口函数及参数类型。
[0017] 在一个实施例中,在所述的利用加密接口函数获取所述光伏系统检测模型之前,还包括:
[0018] 分析所述光伏系统检测模型自带的模型接口函数是否能接入所述动态链接加密库;
[0019] 当所述模型接口函数不能接入所述动态链接加密库时,模拟适用于所述动态链接加密库的加密接口函数、解密接口函数及参数类型;
[0020] 当所述模型接口函数能接入所述动态链接加密库时,将所述模型接口函数作为所述加密接口函数。
[0021] 在一个实施例中,在所述的利用加密接口函数获取所述光伏系统检测模型之前,包括:
[0022] 当所述光伏系统检测模型已经存储在硬盘上,或所述光伏系统检测模型为第一类模型格式时,将所述光伏系统检测模型的内存地址和模型长度发送给所述加密接口函数;
[0023] 当所述光伏系统检测模型为第二类模型格式时,将所述光伏系统检测模型的模型数据序列的内存地址和模型长度发送给所述加密接口函数。
[0024] 在一个实施例中,在所述的将所述光伏系统检测模型的模型数据序列的内存地址和模型长度发送给所述加密接口函数之前,还包括:
[0025] 当所述光伏系统检测模型为第二类模型格式时,将所述光伏系统检测模型序列化处理成模型数据序列。
[0026] 在一个实施例中,所述光伏系统检测模型包括已完成训练的光伏系统检测模型、未训练的光伏系统检测模型;
[0027] 所述光伏系统检测模型用于识别检测光伏系统上的组件情况,所述组件情况包括组件污渍、组件异物、组件斑纹、组件断裂、组件桥架。
[0028] 另一方面,本发明还提供一种模型解密方法,包括:
[0029] 打开硬盘中光伏系统检测模型加密后的模型文件,利用解密接口函数调用动态链接加密库,读取所述模型文件中存储的模型相关信息及加密模型数据;
[0030] 读取所述模型文件中存储的部分密钥,以及开放性文件中存储的部分公钥;所述部分密钥包括私钥和剩余部分公钥;
[0031] 对所述公钥和私钥进行反变换,利用反变换后的公钥和私钥对所述加密模型数据解密成解密模型数据。
[0032] 在一个实施例中,一种模型解密方法,还包括:
[0033] 通过在所述开放性文件中修改光伏系统检测模型的超参数,来调整所述光伏系统检测模型的识别检测精度;所述超参数包括图像检测数量参数,图像检测速度参数,图像检测效果参数。
[0034] 在一个实施例中,在所述的利用反变换后的密钥对所述加密模型数据解密成解密模型数据之后,包括:
[0035] 将所述解密模型数据的内存地址和模型长度发送给所述光伏系统检测模型的模型接口;
[0036] 当所述光伏系统检测模型为第二类模型格式时,通过所述模型接口读取所述解密模型数据,并对所述解密模型数据进行反序列化后,加载成可用光伏系统检测模型;
[0037] 当所述光伏系统检测模型为第一类模型格式,或所述光伏系统检测模型在加密前直接存储在硬盘上时,通过所述模型接口读取所述解密模型数据,并加载成可用光伏系统检测模型。
[0038] 在一个实施例中,一种模型解密方法,还包括:
[0039] 在打开所述可用光伏系统检测模型时,检测所述可用光伏系统检测模型是否处于可用有效期内;
[0040] 当所述可用光伏系统检测模型处于非可用有效期内时,通过加密接口函数、动态链接加密库修改所述可用光伏系统检测模型的密钥,使得所述可用光伏系统检测模型处于非可用状态。
[0041] 另一方面,本发明还提供一种计算机,使用上述一种模型加密方法,或使用上述一种模型解密方法。
[0042] 另一方面,一种集成芯片,使用上述一种模型加密方法,或使用上述一种模型解密方法。
[0043] 与现有技术相比,本发明至少具有以下一项有益效果:
[0044] 现利用动态链接加密库生成的密钥对光伏系统检测模型加密,当光伏系统检测模型在完成加密后写入硬盘中,由于模型在内存中完成了加密,在将模型写到硬盘上时,其模型都是已完成加密的,所以会使得非加密文件永远不会出现在硬盘上;从而防止其他人员,尤其是竞争对手,获取到光伏系统检测模型的模型结构和参数,避免出现重大损失。
[0045] 根据框架语言类型模拟加密接口函数、解密接口函数及参数类型,使得模型加密接口统一,进而可以使得多种语言的模型都能完成加密和解密。
[0046] 对每一个需交付的模型,都会设置有效试用期;并在每次调用模型时,都会进行有效期自检测。若模型超过使用期限,则自动修改秘钥,使模型文件永远无法打开。

附图说明

[0047] 下面将以明确易懂的方式,结合附图说明优选实施方式,对本发明的上述特性、技术特征、优点及其实现方式予以进一步说明。
[0048] 图1是本申请提供的一个模型加密方法的一个实施例流程图;
[0049] 图2是本申请提供的一个模型加密方法的另一个实施例流程图;
[0050] 图3是本申请提供的一个模型加密方法的又一个实施例流程图;
[0051] 图4是本申请提供的一个模型解密方法的一个实施例流程图;
[0052] 图5是本申请提供的一个模型解密方法的另一个实施例流程图;
[0053] 图6是本申请提供的一个pth模型加解密方法的一个实施例流程图;
[0054] 图7是本申请提供的一个onnx模型加解密方法的一个实施例流程图;
[0055] 图8是本申请提供的一个trt或其他模型加解密方法的一个实施例流程图。

具体实施方式

[0056] 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对照附图说明本发明的具体实施方式。显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图,并获得其他的实施方式。
[0057] 为使图面简洁,各图中只示意性地表示出了与发明相关的部分,它们并不代表其作为产品的实际结构。另外,以使图面简洁便于理解,在有些图中具有相同结构或功能的部件,仅示意性地绘示了其中的一个,或仅标出了其中的一个。在本文中,“一个”不仅表示“仅此一个”,也可以表示“多于一个”的情形。
[0058] 还应当进一步理解,在本申请说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
[0059] 在本文中,需要说明的是,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。
[0060] 另外,在本申请的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
[0061] 在一个实施例中,参考说明书附图1,本发明提供的一种模型加密方法,包括:
[0062] 优选的,将加密算法封装成动态链接加密库,并设置加密接口函数、解密接口函数及参数类型。
[0063] 具体的,加密算法可以是C++版本的,还可以是python版本的,还可以是java版本的。可以将不同版本的加密算法各自封装成动态链接库,优选C++版本加密算法。加密时可以利用加密接口函数去调用动态链接库,解密时可以利用解密接口函数去调用动态链接库;其中,加密接口需要设置其函数与参数类型,解密接口也需要设置其函数与参数类型。
[0064] S100利用动态链接加密库随机生成光伏系统检测模型用的密钥,并对密钥进行变换;密钥包括公钥、私钥。
[0065] 具体的,在对光伏系统检测模型加密时,可利用加密接口函数调用动态链接加密库来随机生成私钥和公钥;生成后的私钥和公钥可以再通过向量化后进行奇异值分解变换。还可以将变换后的私钥和公钥分成几部分后,可以分别进行存储;以增加解密难度。
[0066] S120利用加密接口函数获取光伏系统检测模型,并利用变换后的密钥对光伏系统检测模型加密处理成加密模型数据。
[0067] 具体的,光伏系统检测模型可以是深度学习算法模型,还可以是语义分割算法模型,其模型或模型数据包括模型参数和神经网络图。加密时,可直接将模型或模型数据发送到加密接口;也可以将模型数据进行序列化处理成二进制流形式的模型数据序列后,将模型数据序列发送到加密接口;还可以是将模型数据或模型数据序列的内存地址发送到加密接口;利用动态链接加密库中变换后的私钥和公钥对模型或模型数据或模型数据序列加密成加密模型数据。
[0068] S130将加密模型数据暂存在内存段中,并在内存段中存储部分密钥及模型相关信息;模型相关信息包括模型长度、模型版本号、模型生成日期、模型有效日期等。
[0069] 具体的,在内存中创建一块大于光伏系统检测模型本身长度的内存段,该内存段是16的倍数,用于临时存储模型文件中的数据。其内存段(模型文件)分成两部分,一部分存储模型数据加密序列,另一部分存储部分密钥和模型相关信息。部分密钥和模型相关信息的存储顺序和长度都可以自定义。部分密钥包括变换后的私钥和公钥。模型相关信息包括模型长度,额外增加的字节长度、模型版本号、模型生成日期、模型有效使用最终日期和有效使用天数等信息。
[0070] S140在光伏系统检测模型完成加密后,将内存段中的加密模型数据、部分密钥及模型相关信息写入硬盘内的模型文件中。
[0071] 本实施例中,训练好的深度学习模型是个固化后的文件,其存放在硬盘上,模型文件可以使用netron等工具直接打开,可以清楚的看出模型的结构等信息。为了防止已完成训练的模型结构和参数被用户、尤其竞争对手看到;以及防止其他人员或公司将我们的模型拿来即用或作为预训练模型。可使用AES(高级加密标准)加密算法在模型将要序列化到硬盘上之前,直接在内存中就对其加密,保证了非加密模型永远不会出现在硬盘上;从而使得交付出去的深度学习模型都是使用加密算法完成加密后的模型。
[0072] 在一个实施例中,一种模型加密方法,还包括:
[0073] 将变换后的部分公钥和光伏系统检测模型的超参数写入开放性文件中,开放性文件存储在硬盘中;
[0074] 变换后的公钥中除存储在开放性文件之外的剩余部分公钥直接存储在模型文件中,其模型文件中还存储有私钥。
[0075] 本实施例中,其开放性文件为json文件,是开放给客户使用的,该文件中存储了变换后的一部分公钥,还存储了超参数。机器学习模型中一般有两类参数:一类需要从数据中学习和估计得到,称为模型参数‑‑‑即模型本身的参数; 比如,线性回归直线的加权系数(斜率)及其偏差项(截距)都是模型参数。 还有一类则是机器学习算法中的调优参数,需要人为设定,称为超参数;其超参数包括图像检测数量、置信度阈值、单位时间内图像检测数量(一秒检测三十次以上)。用户可以通过修改超参数来不断调整光伏系统检测模型的图像检测数量,图像检测速度,图像检测效果;从而来调整光伏系统检测模型的识别精度。将一部分密钥及模型参数一并写到模型文件中,由于模型文件不仅有模型参数还混淆了其他数据,从而增加模型破解难度。即使有人破解了公钥和私钥,并且知道了加密变换方式,由于模型文件不仅有模型参数还混淆了其他数据,解密后的模型依然无法使用。
[0076] 在另一个实施例中,参考说明书附图2,一种模型加密方法中,在利用加密接口函数获取光伏系统检测模型之前,还包括:
[0077] S111分析光伏系统检测模型自带的模型接口函数是否能接入动态链接加密库;
[0078] S112当模型接口函数不能接入动态链接加密库时,模拟适用于动态链接加密库的加密接口函数、解密接口函数及参数类型;
[0079] S113当模型接口函数能接入动态链接加密库时,将模型接口函数作为加密接口函数。
[0080] 本实施例中,当光伏系统检测模型的语言类型是python时,加密算法是C++版本;为了跨语言交互只能传指针(即地址),但由于python本身不支持指针(地址)功能,在python端使用ctype第三方库仿C++的指针功能,即相当于使用ctype给python代码加一层壳子,模拟出python版本的加密接口函数、解密接口函数及其参数类型,模拟出来的接口类型需要保持与C++接口完全一致。若光伏系统检测模型的语言类型是C++、C#时,无需模拟加密接口函数、解密接口函数及其参数类型;可用直接使用其模型接口函数作为加密接口函数。由于模型的训练和上线往往是在多种语言(python、C++、C#)下进行的,模拟接口函数可以保证接口统一,进而可以统一多种语言模型的加解密方式,可使得加密和解密可在多语言模型间随意切换,并且能正常进行推理检测。
[0081] 在又一个实施例中,参考说明书附图3,一种模型加密方法中,在利用加密接口函数获取光伏系统检测模型之前,包括:
[0082] S121当光伏系统检测模型已经存储在硬盘上,或光伏系统检测模型为第一类模型格式时,将光伏系统检测模型的内存地址和模型长度发送给加密接口函数。
[0083] 具体的,第一类模型格式包括state_dict或state_dict.parameters格式,光伏系统检测模型可以是pth模型时,可以直接对该模型进行加密。已经存储在硬盘上的光伏系统检测模型是已经序列化处理的,可以直接对其进行加密。加密时是将模型的内存地址和模型长度发送给加密接口函数,以便于获取需加密的模型对象。
[0084] S122当光伏系统检测模型为第二类模型格式时,将光伏系统检测模型的模型数据序列的内存地址和模型长度发送给加密接口函数;
[0085] 优选的,在将光伏系统检测模型的模型数据序列的内存地址和模型长度发送给加密接口函数之前,还包括:
[0086] 当光伏系统检测模型为第二类模型格式时,将光伏系统检测模型序列化处理成模型数据序列。
[0087] 具体的,第二类模型格式包括state_dict或state_dict.parameters转为onnx格式,光伏系统检测模型可以是onnx模型时,或者是其他格式(trt/rknn等)模式,不能直接对该模型进行加密。需要先对模型进行序列化形成模型数据序列,再对模型数据序列进行加密。加密时是将模型数据序列的内存地址和模型长度发送给加密接口函数,以便于获取需加密的模型数据序列。
[0088] 其中,光伏系统检测模型包括已完成训练的光伏系统检测模型,还可以包括未训练的光伏系统检测模型;光伏系统检测模型用于识别检测光伏系统上的组件情况,组件情况包括组件污渍、组件异物、组件斑纹、组件断裂、组件桥架。
[0089] 本实施例中,光伏系统检测模型可以是pth模型,也可以是onnx模型,还可以是其他格式(trt/rknn等)模式;这些模型可以是完成训练的,也可以是未训练的。当pth模型不需要训练仅需要部署时,可以将pth模型的数据保存格式转换成onnx格式;onnx格式模型数据可以被纯C++或者C++与C#结合的模型使用。模型可以被部署在PC端,也可以部署在嵌入式芯片端。这时,模型以trt、rknn等第三方模型格式为主,模型形态可以是在内存中,也可以是已经保存在硬盘上。
[0090] 在再一个实施例中,参考说明书附图4,本发明提供的一种模型解密方法,包括:
[0091] S200打开硬盘中光伏系统检测模型加密后的模型文件,利用解密接口函数调用动态链接加密库,读取所述模型文件中存储的模型相关信息及加密模型数据;
[0092] 具体的,由于光伏系统检测模型在完成训练时,会利用动态链接加密库对完成训练的模型进行加密后才存储到硬盘中,因此,在将模型交付给用户时,该模型已经是加密后的模型。用户在拿到装载有完成训练的加密光伏系统检测模型硬盘时,利用计算机打开光伏系统检测模型加密的模型文件,获取存储的模型长度、模型版本号、模型生成日期、模型有效使用最终日期和有效使用天数等信息;以及模型数据加密序列。
[0093] S210读取所述模型文件中存储的部分密钥,以及开放性文件中存储的部分公钥;所述部分密钥包括私钥和剩余部分公钥。
[0094] 具体的,获取存储的私钥和公钥,该公钥包括开放性文件中存储的一部分公钥和模型文件中存储的剩余部分公钥。
[0095] S220对所述公钥和私钥进行反变换,利用反变换后的公钥和私钥对所述加密模型数据解密成解密模型数据。
[0096] 具体的,解密时通过解密接口调用动态链接加密库,先将公钥和私钥进行反变换,再利用反变换后的公钥和私钥对加密模型数据进行解密成解密模型数据。
[0097] 在一个实施例中,本发明提供的一种模型解密方法,包括:
[0098] 通过在开放性文件中修改光伏系统检测模型的超参数,来调整光伏系统检测模型的识别检测精度;超参数包括图像检测数量参数,图像检测速度参数,图像检测效果参数。
[0099] 本实施例中,用户在可以通过修改超参数来不断调整光伏系统检测模型的图像检测数量,图像检测速度,图像检测效果;从而来调整光伏系统检测模型的识别精度。
[0100] 在一个实施例中,参考说明书附图5,一种模型解密方法中,在利用反变换后的密钥对加密模型数据解密成解密模型数据之后,包括:
[0101] S230将解密模型数据的内存地址和模型长度发送给光伏系统检测模型的模型接口;
[0102] S231当光伏系统检测模型为第二类模型格式时,通过模型接口读取解密模型数据,并对解密模型数据进行反序列化后,加载成可用光伏系统检测模型;
[0103] S232当光伏系统检测模型为第一类模型格式,或光伏系统检测模型在加密前直接存储在硬盘上时,通过模型接口读取解密模型数据,并加载成可用光伏系统检测模型。
[0104] 本实施例中,在内存中将pth在state_dict(一种模型结构类型:包含网络图和参数)或parameters(一种模型结构类型:仅包含网络参数)状态时就进行加密,解密时直接解密成state_dict或parameters,模型不需要再进行反序列化即可被成功加载到网络中进行推理。有的模型已经被固化到硬盘上,当项目交付出去之前,为了保护这种离线的模型,可以使用我们的加密功能直接对硬盘上的模型进行加密。
[0105] 在一个实施例中,一种模型解密方法,还包括:
[0106] 在打开可用光伏系统检测模型时,检测可用光伏系统检测模型是否处于可用有效期内;
[0107] 当可用光伏系统检测模型处于非可用有效期内时,通过加密接口函数、动态链接加密库修改可用光伏系统检测模型的密钥,使得可用光伏系统检测模型处于非可用状态。
[0108] 本实施例中,给模型增加licence功能,模型数据完成解密后,在每次调用模型之前,先判断用户的授权使用时间是否到期。如果到期,则随机修改密钥,这样用户永远也无法打开该模型文件。
[0109] 在一个实施例中,一种计算机,使用的模型加密方法和模型解密方法;参考说明书附图6,以训练时加解密pth模型为例:
[0110] 1.1加密:
[0111] 1.1.1将C++版本的加密算法封装为动态链接库,设置好加密、解密接口函数及其参数类型;
[0112] 1.1.2在python端使用ctype库仿C++的指针功能,模拟出python版本的加密、解密接口函数及其参数类型(该接口类型需要保持与C++接口完全一致);
[0113] 1.1.3加密时,首先随机生成私钥和公钥,将两个秘钥进行变换,创建一块大于模型本身长度且是16的倍数的内存段;
[0114] 1.1.4在内存中将state_dict或state_dict.parameters格式的模型数据进行序列化,调用加密接口进行加密;
[0115] 1.1.5在创建的大段内存的前段存放加密后的模型数据,后半段自定义顺序和长度,存放模型的长度、额外增加的字节长度、私钥、转换后的部分公钥、模型版本号、模型生成日期、模型有效使用最终日期和有效使用天数等信息,将另一部分公钥和超参数等信息写入到json文件,开放给用户。
[0116] 1.2解密:
[0117] 1.2.1读取硬盘上的加密模型,打开并读取成二进制流;
[0118] 1.2.2解析该二进制流中后半段数据,获取模型长度、变换后的私钥等信息,根据解析的数据信息获取加密的模型数据内存段;
[0119] 1.2.3变换公钥和私钥,对加密的模型数据段进行解密;
[0120] 1.2.4将解密后的二进制流地址发送给python接口;
[0121] 1.2.5 python端获取到地址和数据长度信息后,将模型反序列化成state_dict后进行推理。
[0122] 在一个实施例中,一种集成芯片,使用的模型加密方法和模型解密方法;参考说明书附图7,以训练时加解密onnx模型为例:
[0123] 2.1加密:
[0124] 2.1.1将C++版本的加密算法封装为动态链接库,设置好加密、解密接口函数及其参数类型;
[0125] 2.1.2在python端使用ctype库仿C++的指针功能,模拟出python版本的加密、解密接口函数及其参数类型(该接口类型需要保持与C++接口完全一致);
[0126] 2.1.3加密时,首先随机生成私钥和公钥,将两个秘钥进行变换,创建一块大于模型本身长度且是16的倍数的内存段;
[0127] 2.1.4在内存中将state_dict或state_dict.parameters转为onnx,并在内存中将其序列化为二进制流,将该二进制流的首地址和长度发送给C++接口;
[0128] 2.1.5在创建的大段内存的前段存放加密后的模型数据,后半段自定义顺序和长度存放模型的长度、额外增加的字节长度、转换后的部分公钥、模型版本号、模型生成日期、模型有效使用最终日期和有效使用天数等信息,将另一部分公钥和超参数等信息写入到json文件,开放给用户。
[0129] 2.2解密:
[0130] 2.2.1将硬盘上加密后的onnx模型读取成内存中的一段二进制流;
[0131] 2.2.2解析该二进制流中后半段数据,获取模型长度、变换后的私钥等信息,根据解析的信息获取加密的模型数据内存段;
[0132] 2.2.3变换公钥和私钥,对加密的模型数据段进行解密;
[0133] 2.2.4将解密后的模型的内存首地址和长度信息发送到python/或C++模型读取端;
[0134] 2.2.5在python端将解密后的模型内存段直接进行反序列化,然后送入网络进行推理。
[0135] 在一个实施例中,一种计算机,使用的模型加密方法和模型解密方法;参考说明书附图8,以其他格式(trt/rknn等)模型的加密为例:
[0136] 当不需要训练仅需要部署时,可以使用纯C++或者C++与C#结合使用。模型可以被部署在PC端,也可以部署在嵌入式芯片端。这时的模型以trt、rknn等第三方模型格式为主,模型形态可以是在内存中,也可以是已经保存在硬盘上。使用我们的解密功能,都可以顺利对模型进行加密或对加密模型解密后顺利进行推理。
[0137] 3.1加密:
[0138] 3.1.1当模型是在内存中时,它是一段连续的内存段,先直接对其进行序列化;如果模型在硬盘上,则先将模型打开并读取到内存中,然后对其进行序列化;
[0139] 3.1.2对序列化后的模型进行加密,然后写到硬盘上。
[0140] 3.2解密:
[0141] 3.2.1将硬盘上加密后的trt或其他第三方格式的模型读取成内存中的一段二进制流;
[0142] 3.2.2解析该二进制流中后半段数据,获取模型长度、变换后的私钥等信息,根据解析的信息获取加密的模型数据内存段;
[0143] 3.2.3变换公钥和私钥,对加密的模型数据段进行解密;
[0144] 3.2.4将解密后的模型内存段进行反序列化,然后进行推理。
[0145] 另外,在本申请各个实施例中的各功能单元可能集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
[0146] 应当说明的是,上述实施例均可根据需要自由组合。以上仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。