diff --git a/tutorials/source_en/advanced_use/on_device_inference.md b/tutorials/source_en/advanced_use/on_device_inference.md index da9f2326572c389573fe534317591d7511605fd9..d7f4f7f8f6f7c8d07b332a96a99443c880f1c671 100644 --- a/tutorials/source_en/advanced_use/on_device_inference.md +++ b/tutorials/source_en/advanced_use/on_device_inference.md @@ -98,68 +98,76 @@ To perform on-device model inference using MindSpore, perform the following step param_dict = load_checkpoint(ckpt_file_name=ckpt_file_path) load_param_into_net(net, param_dict) ``` -2. Call the `export` API to export the `.ms` model file on the device. +2. Call the `export` API to export the `.pb` model file on the device. ```python - export(net, input_data, file_name="./lenet.ms", file_format='BINARY') + export(net, input_data, file_name="./lenet.pb", file_format='BINARY') ``` - -Take the LeNet network as an example. The generated on-device model file is `lenet.ms`. The complete sample code `lenet.py` is as follows: -```python -import os -import numpy as np -import mindspore.nn as nn -import mindspore.ops.operations as P -import mindspore.context as context -from mindspore.common.tensor import Tensor -from mindspore.train.serialization import export, load_checkpoint, load_param_into_net - -class LeNet(nn.Cell): - def __init__(self): - super(LeNet, self).__init__() - self.relu = P.ReLU() - self.batch_size = 32 - self.conv1 = nn.Conv2d(1, 6, kernel_size=5, stride=1, padding=0, has_bias=False, pad_mode='valid') - self.conv2 = nn.Conv2d(6, 16, kernel_size=5, stride=1, padding=0, has_bias=False, pad_mode='valid') - self.pool = nn.MaxPool2d(kernel_size=2, stride=2) - self.reshape = P.Reshape() - self.fc1 = nn.Dense(400, 120) - self.fc2 = nn.Dense(120, 84) - self.fc3 = nn.Dense(84, 10) - - def construct(self, input_x): - output = self.conv1(input_x) - output = self.relu(output) - output = self.pool(output) - output = self.conv2(output) - output = self.relu(output) - output = self.pool(output) - output = self.reshape(output, (self.batch_size, -1)) - output = self.fc1(output) - output = self.relu(output) - output = self.fc2(output) - output = self.relu(output) - output = self.fc3(output) - return output - -if __name__ == '__main__': - context.set_context(mode=context.GRAPH_MODE, device_target="Ascend") - seed = 0 - np.random.seed(seed) - origin_data = np.random.uniform(low=0, high=255, size=(32, 1, 32, 32)).astype(np.float32) - origin_data.tofile("lenet.bin") - input_data = Tensor(origin_data) - net = LeNet() - ckpt_file_path = "path_to/lenet.ckpt" - - is_ckpt_exist = os.path.exists(ckpt_file_path) - if is_ckpt_exist: - param_dict = load_checkpoint(ckpt_file_name=ckpt_file_path) - load_param_into_net(net, param_dict) - export(net, input_data, file_name="./lenet.ms", file_format='BINARY') - print("export model success.") - else: - print("checkpoint file does not exist.") -``` + Take the LeNet network as an example. The generated on-device model file is `lenet.pb`. The complete sample code `lenet.py` is as follows: + ```python + import os + import numpy as np + import mindspore.nn as nn + import mindspore.ops.operations as P + import mindspore.context as context + from mindspore.common.tensor import Tensor + from mindspore.train.serialization import export, load_checkpoint, load_param_into_net + + class LeNet(nn.Cell): + def __init__(self): + super(LeNet, self).__init__() + self.relu = P.ReLU() + self.batch_size = 32 + self.conv1 = nn.Conv2d(1, 6, kernel_size=5, stride=1, padding=0, has_bias=False, pad_mode='valid') + self.conv2 = nn.Conv2d(6, 16, kernel_size=5, stride=1, padding=0, has_bias=False, pad_mode='valid') + self.pool = nn.MaxPool2d(kernel_size=2, stride=2) + self.reshape = P.Reshape() + self.fc1 = nn.Dense(400, 120) + self.fc2 = nn.Dense(120, 84) + self.fc3 = nn.Dense(84, 10) + + def construct(self, input_x): + output = self.conv1(input_x) + output = self.relu(output) + output = self.pool(output) + output = self.conv2(output) + output = self.relu(output) + output = self.pool(output) + output = self.reshape(output, (self.batch_size, -1)) + output = self.fc1(output) + output = self.relu(output) + output = self.fc2(output) + output = self.relu(output) + output = self.fc3(output) + return output + + if __name__ == '__main__': + context.set_context(mode=context.GRAPH_MODE, device_target="Ascend") + seed = 0 + np.random.seed(seed) + origin_data = np.random.uniform(low=0, high=255, size=(32, 1, 32, 32)).astype(np.float32) + origin_data.tofile("lenet.bin") + input_data = Tensor(origin_data) + net = LeNet() + ckpt_file_path = "path_to/lenet.ckpt" + + is_ckpt_exist = os.path.exists(ckpt_file_path) + if is_ckpt_exist: + param_dict = load_checkpoint(ckpt_file_name=ckpt_file_path) + load_param_into_net(net, param_dict) + export(net, input_data, file_name="./lenet.pb", file_format='BINARY') + print("export model success.") + else: + print("checkpoint file does not exist.") + ``` +3. Calling MindSpore convert tool named `converter_lite`, convert model file (`.pb`) to on_device inference model file (`.ms`). + ``` + ./converter_lite --fmk=MS --modelFile=./lenet.pb --outputFile=lenet + ``` + Result: + ``` + INFO [converter/converter.cc:146] Runconverter] CONVERTER RESULT: SUCCESS! + ``` + This means that the model has been successfully converted to the mindspore on_device inference model. ### Implementing On-Device Inference diff --git a/tutorials/source_zh_cn/advanced_use/on_device_inference.md b/tutorials/source_zh_cn/advanced_use/on_device_inference.md index 6296dda610517c988460137d26bfad66c4683eff..26d12ce101ddc3e03db17809a3e029992e71b6eb 100644 --- a/tutorials/source_zh_cn/advanced_use/on_device_inference.md +++ b/tutorials/source_zh_cn/advanced_use/on_device_inference.md @@ -97,69 +97,78 @@ MindSpore进行端侧模型推理的步骤如下。 param_dict = load_checkpoint(ckpt_file_name=ckpt_file_path) load_param_into_net(net, param_dict) ``` -2. 调用`export`接口,导出端侧模型文件(`.ms`)。 +2. 调用`export`接口,导出模型文件(`.pb`)。 ```python - export(net, input_data, file_name="./lenet.ms", file_format='BINARY') + export(net, input_data, file_name="./lenet.pb", file_format='BINARY') ``` -以LeNet网络为例,生成的端侧模型文件为`lenet.ms`,完整示例代码`lenet.py`如下。 -```python -import os -import numpy as np -import mindspore.nn as nn -import mindspore.ops.operations as P -import mindspore.context as context -from mindspore.common.tensor import Tensor -from mindspore.train.serialization import export, load_checkpoint, load_param_into_net - -class LeNet(nn.Cell): - def __init__(self): - super(LeNet, self).__init__() - self.relu = P.ReLU() - self.batch_size = 32 - self.conv1 = nn.Conv2d(1, 6, kernel_size=5, stride=1, padding=0, has_bias=False, pad_mode='valid') - self.conv2 = nn.Conv2d(6, 16, kernel_size=5, stride=1, padding=0, has_bias=False, pad_mode='valid') - self.pool = nn.MaxPool2d(kernel_size=2, stride=2) - self.reshape = P.Reshape() - self.fc1 = nn.Dense(400, 120) - self.fc2 = nn.Dense(120, 84) - self.fc3 = nn.Dense(84, 10) - - def construct(self, input_x): - output = self.conv1(input_x) - output = self.relu(output) - output = self.pool(output) - output = self.conv2(output) - output = self.relu(output) - output = self.pool(output) - output = self.reshape(output, (self.batch_size, -1)) - output = self.fc1(output) - output = self.relu(output) - output = self.fc2(output) - output = self.relu(output) - output = self.fc3(output) - return output - -if __name__ == '__main__': - context.set_context(mode=context.GRAPH_MODE, device_target="Ascend") - seed = 0 - np.random.seed(seed) - origin_data = np.random.uniform(low=0, high=255, size=(32, 1, 32, 32)).astype(np.float32) - origin_data.tofile("lenet.bin") - input_data = Tensor(origin_data) - net = LeNet() - ckpt_file_path = "path_to/lenet.ckpt" - - is_ckpt_exist = os.path.exists(ckpt_file_path) - if is_ckpt_exist: - param_dict = load_checkpoint(ckpt_file_name=ckpt_file_path) - load_param_into_net(net, param_dict) - export(net, input_data, file_name="./lenet.ms", file_format='BINARY') - print("export model success.") - else: - print("checkpoint file does not exist.") -``` - + 以LeNet网络为例,生成的端侧模型文件为`lenet.pb`,完整示例代码`lenet.py`如下。 + ```python + import os + import numpy as np + import mindspore.nn as nn + import mindspore.ops.operations as P + import mindspore.context as context + from mindspore.common.tensor import Tensor + from mindspore.train.serialization import export, load_checkpoint, load_param_into_net + + class LeNet(nn.Cell): + def __init__(self): + super(LeNet, self).__init__() + self.relu = P.ReLU() + self.batch_size = 32 + self.conv1 = nn.Conv2d(1, 6, kernel_size=5, stride=1, padding=0, has_bias=False, pad_mode='valid') + self.conv2 = nn.Conv2d(6, 16, kernel_size=5, stride=1, padding=0, has_bias=False, pad_mode='valid') + self.pool = nn.MaxPool2d(kernel_size=2, stride=2) + self.reshape = P.Reshape() + self.fc1 = nn.Dense(400, 120) + self.fc2 = nn.Dense(120, 84) + self.fc3 = nn.Dense(84, 10) + + def construct(self, input_x): + output = self.conv1(input_x) + output = self.relu(output) + output = self.pool(output) + output = self.conv2(output) + output = self.relu(output) + output = self.pool(output) + output = self.reshape(output, (self.batch_size, -1)) + output = self.fc1(output) + output = self.relu(output) + output = self.fc2(output) + output = self.relu(output) + output = self.fc3(output) + return output + + if __name__ == '__main__': + context.set_context(mode=context.GRAPH_MODE, device_target="Ascend") + seed = 0 + np.random.seed(seed) + origin_data = np.random.uniform(low=0, high=255, size=(32, 1, 32, 32)).astype(np.float32) + origin_data.tofile("lenet.bin") + input_data = Tensor(origin_data) + net = LeNet() + ckpt_file_path = "path_to/lenet.ckpt" + + is_ckpt_exist = os.path.exists(ckpt_file_path) + if is_ckpt_exist: + param_dict = load_checkpoint(ckpt_file_name=ckpt_file_path) + load_param_into_net(net, param_dict) + export(net, input_data, file_name="./lenet.pb", file_format='BINARY') + print("export model success.") + else: + print("checkpoint file does not exist.") + ``` +3. 调用MindSpore端侧转化工具`converter_lite`工具,将模型文件(`.pb`)转换为端侧模型文件(`.ms`)。 + ``` + ./converter_lite --fmk=MS --modelFile=./lenet.pb --outputFile=lenet + ``` + 结果显示为: + ``` + INFO [converter/converter.cc:146] Runconverter] CONVERTER RESULT: SUCCESS! + ``` + 这表示已经成功将模型转化为MindSpore端侧模型。 + ### 在端侧实现推理 将`.ms`模型文件和图片数据作为输入,创建`session`在端侧实现推理。