forked from FT_DSP/FT_DSP.gitlink.net
add gray_cnn doc
This commit is contained in:
parent
4c47532524
commit
7e431f0c05
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -1,4 +1,4 @@
|
|||
# Sphinx build info version 1
|
||||
# This file records the configuration used when building these files. When it is not found, a full rebuild will be done.
|
||||
config: b811412b4dcb327d38006d71aa1bfbad
|
||||
# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
|
||||
config: 0d3025befe3dc6f9dfad874d86b2ff0a
|
||||
tags: 645f666f9bcd5a90fca523b33c5a78b7
|
||||
|
|
|
|||
Binary file not shown.
|
After Width: | Height: | Size: 17 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 274 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 23 KiB |
|
|
@ -0,0 +1,658 @@
|
|||
GRAY_CNN(图片灰度化处理+图片识别)
|
||||
==================================
|
||||
|
||||
应用概述
|
||||
-------------
|
||||
这里将以图片灰度化加图片识别来介绍AI+DSP应用开发的开发流程。
|
||||
其中图片灰度化可以使用DSP来完成,图片识别则使用AI来完成。
|
||||
灰度化处理使用灰度化公式来进行,图片识别使用CNN模型。
|
||||
|
||||
开发流程
|
||||
-------------
|
||||
|
||||
1. 定义模型
|
||||
~~~~~~~~~~~~~~
|
||||
|
||||
- **图片灰度化处理过程。**
|
||||
|
||||
这里实现图片灰度化,使用蓝、绿、红三个通道的值进行加权求和,计算出一个灰度值。
|
||||
这里使用的权重分别是0.114、0.587和0.299,这些数值是基于人眼对不同颜色的敏感度来选择的,
|
||||
用于将彩色图像转换为灰度图像。公式为:
|
||||
|
||||
.. math::
|
||||
Gray = B \times 0.114 + G \times 0.587 + R \times 0.299
|
||||
|
||||
以及定义一个Clip操作,确保灰度值在0到255之间。
|
||||
代码示例如下:
|
||||
|
||||
.. code-block:: python
|
||||
:linenos:
|
||||
|
||||
import mindspore as ms
|
||||
from mindspore.train.serialization import export
|
||||
import numpy as np
|
||||
from mindspore import nn, ops
|
||||
|
||||
class Gray(nn.Cell):
|
||||
def __init__(self):
|
||||
super(Gray, self).__init__()
|
||||
self.split = ops.Split(axis=2, output_num=3)
|
||||
def construct(self, x):
|
||||
x = self.split(x)
|
||||
b, g, r = x
|
||||
x = (
|
||||
b * 0.114 +
|
||||
g * 0.587 +
|
||||
r * 0.299
|
||||
).squeeze(-1)
|
||||
x = ops.clip_by_value(x, 0, 255)
|
||||
return x
|
||||
|
||||
- **定义AI模型,用于图片识别。**
|
||||
|
||||
这里的AI模型是卷积神经网络(CNN)。CNN主要由卷积,池化,激活等算子组成;
|
||||
CNN模型架构如下表所示:
|
||||
|
||||
.. list-table::
|
||||
:header-rows: 1
|
||||
:widths: 15 20 30 20
|
||||
:align: center
|
||||
|
||||
* - **层级**
|
||||
- **操作类型**
|
||||
- **参数细节**
|
||||
- **输出维度**
|
||||
* - **输入层**
|
||||
- 灰度图像输入
|
||||
- 1通道,尺寸 H×W
|
||||
- H×W×1
|
||||
* - **卷积块1**
|
||||
- Conv2d
|
||||
- 输入通道:1 → 输出通道:32, 卷积核:3×3
|
||||
- H×W×32
|
||||
* -
|
||||
- ReLU激活
|
||||
- 非线性变换
|
||||
- H×W×32
|
||||
* -
|
||||
- MaxPool2d
|
||||
- 窗口:2×2, 步长:2
|
||||
- H/2×W/2×32
|
||||
* - **卷积块2**
|
||||
- Conv2d
|
||||
- 输入通道:32 → 输出通道:64, 卷积核:3×3
|
||||
- H/2×W/2×64
|
||||
* -
|
||||
- ReLU激活
|
||||
- 非线性变换
|
||||
- H/2×W/2×64
|
||||
* -
|
||||
- MaxPool2d
|
||||
- 窗口:2×2, 步长:2
|
||||
- H/4×W/4×64
|
||||
* - **卷积块3**
|
||||
- Conv2d
|
||||
- 输入通道:64 → 输出通道:128, 卷积核:3×3
|
||||
- H/4×W/4×128
|
||||
* -
|
||||
- ReLU激活
|
||||
- 非线性变换
|
||||
- H/4×W/4×128
|
||||
* -
|
||||
- MaxPool2d
|
||||
- 窗口:2×2, 步长:2
|
||||
- H/8×W/8×128
|
||||
* - **全连接层**
|
||||
- Flatten
|
||||
- 展平多维特征图
|
||||
- 32768 (H/8×W/8×128)
|
||||
* -
|
||||
- Dense
|
||||
- 输入:32768 → 输出:64, 激活:ReLU
|
||||
- 64
|
||||
* -
|
||||
- Dense (输出层)
|
||||
- 输入:64 → 输出:5, 无激活
|
||||
- 5
|
||||
* - **输出层**
|
||||
- 分类结果
|
||||
- 5类概率分布
|
||||
- 5
|
||||
|
||||
CNN模型用于图片识别,不能直接导出模型,需要训练模型,该部分内容见: :ref:`model_training`
|
||||
|
||||
定义CNN模型的代码示例如下:
|
||||
|
||||
.. code-block:: python
|
||||
:linenos:
|
||||
|
||||
import mindspore as ms
|
||||
from mindspore import nn
|
||||
class CNN(nn.Cell):
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
self.conv1 = nn.Conv2d(1, 32, kernel_size=3, has_bias=True)
|
||||
self.pool1 = nn.MaxPool2d(kernel_size=2, stride=2)
|
||||
self.conv2 = nn.Conv2d(32, 64, kernel_size=3, has_bias=True)
|
||||
self.pool2 = nn.MaxPool2d(kernel_size=2, stride=2)
|
||||
self.conv3 = nn.Conv2d(64, 128, kernel_size=3, has_bias=True)
|
||||
self.pool3 = nn.MaxPool2d(kernel_size=2, stride=2)
|
||||
self.flatten = nn.Flatten()
|
||||
self.dense1 = nn.Dense(32768, 64)
|
||||
self.dense2 = nn.Dense(64, 5)
|
||||
self.relu = nn.ReLU()
|
||||
|
||||
def construct(self, x):
|
||||
x = self.relu(self.conv1(x))
|
||||
x = self.pool1(x)
|
||||
x = self.relu(self.conv2(x))
|
||||
x = self.pool2(x)
|
||||
x = self.relu(self.conv3(x))
|
||||
x = self.pool3(x)
|
||||
x = self.flatten(x)
|
||||
x = self.relu(self.dense1(x))
|
||||
x = self.dense2(x)
|
||||
return x
|
||||
|
||||
|
||||
.. _model_training:
|
||||
|
||||
2. 模型训练
|
||||
~~~~~~~~~~~~~~~
|
||||
|
||||
CNN模型需要进行训练才能正确识别,训练需要数据集,这里已经提前准备好数据集,放在Target文件夹下,
|
||||
使用MindSpore框架进行模型训练,需要导入相关库和模块,定义数据预处理、模型结构、损失函数和优化器等。
|
||||
重新组网时,直接使用 ``nn.GraphCell()`` 接口会导致权重丢失,
|
||||
可以在训练前时使用 ``ms.save_checkpoint()`` 接口保存成ckpt文件,
|
||||
重新组网时,使用 ``ms.load_checkpoint()`` 接口加载ckpt文件即可。
|
||||
以下代码展示了如何加载数据集,进行10次模型训练,以及导出模型。
|
||||
训练以及导出模型代码如下:
|
||||
|
||||
.. code-block:: python
|
||||
:linenos:
|
||||
|
||||
import mindspore as ms
|
||||
from mindspore.train.serialization import export
|
||||
from mindspore import nn, context
|
||||
import numpy as np
|
||||
from PIL import Image
|
||||
import mindspore.dataset as ds
|
||||
from mindspore.dataset import py_transforms
|
||||
import mindspore.dataset.vision as CV
|
||||
from mindspore.train.callback import LossMonitor
|
||||
|
||||
batch_size = 32
|
||||
img_size = (128, 128)
|
||||
data_path = './Target'
|
||||
|
||||
# 数据预处理
|
||||
def rescale_to_0_1(image):
|
||||
return image / 255.0
|
||||
|
||||
# 自定义函数,添加 color 通道维度
|
||||
def add_channels(image):
|
||||
if len(image.shape) == 2: # 单个图像,没有 cin_channel 维度
|
||||
image_four_channels = np.expand_dims(image, axis=0)
|
||||
else:
|
||||
pass
|
||||
return image
|
||||
return image_four_channels
|
||||
|
||||
def export_cnn():
|
||||
context.set_context(mode=context.PYNATIVE_MODE, device_target="CPU")
|
||||
resize_op = CV.Resize(img_size)
|
||||
rescale_transform = ms.dataset.transforms.Compose([rescale_to_0_1])
|
||||
f32_typecast = ms.dataset.transforms.TypeCast(ms.float32)
|
||||
# 将读取的 RGB 转为 GRAY 模式
|
||||
convert_gray = ms.dataset.vision.ConvertColor(ms.dataset.vision.ConvertMode.COLOR_RGB2GRAY)
|
||||
|
||||
transform = [convert_gray, resize_op, f32_typecast, rescale_transform, CV.HWC2CHW()]
|
||||
train_data = ds.ImageFolderDataset(dataset_dir=data_path, decode=True, extensions=[".JPEG", ".PNG", ".JPG"])
|
||||
train_data = train_data.map(input_columns="image", operations= transform)
|
||||
train_data = train_data.map(operations=lambda image: add_channels(image), \
|
||||
input_columns=["image"], \
|
||||
output_columns=["image"])
|
||||
train_data = train_data.batch(batch_size=batch_size)
|
||||
data_iter = train_data.create_dict_iterator()
|
||||
print("数据集加载完成")
|
||||
|
||||
my_model = CNN()
|
||||
loss = nn.CrossEntropyLoss(reduction='mean')
|
||||
optimizer = nn.Adam(my_model.trainable_params(), learning_rate=0.01)
|
||||
cnn_model = ms.Model(my_model, loss_fn=loss, optimizer=optimizer, metrics={'Accuracy': nn.Accuracy()})
|
||||
print("网络构建完成")
|
||||
num_epoch = 10
|
||||
cnn_model.train(num_epoch, train_data,callbacks=[LossMonitor()],dataset_sink_mode=False)
|
||||
inputs = ms.Tensor(np.random.randn(1, 1, 128, 128).astype(np.float32))
|
||||
ms.save_checkpoint(my_model, 'cnn.ckpt')
|
||||
export(my_model, inputs, file_name='cnn', file_format="MINDIR")
|
||||
|
||||
3. 重新组网
|
||||
~~~~~~~~~~~~~~~
|
||||
|
||||
在前面章节中,我们已经完成了AI的模型的训练和导出。
|
||||
需要重新构建成一个新的网络结构,可以使用MindSpore框架的 ``nn.GraphCell()`` 接口来实现。
|
||||
该部分内容包括加载训练好的cnn模型,灰度化处理,重新构建网络结构,并导出新的模型。
|
||||
重新组网、导出模型以及测试的代码如下:
|
||||
|
||||
.. code-block:: python
|
||||
:linenos:
|
||||
|
||||
import cv2
|
||||
import mindspore as ms
|
||||
from mindspore.train.serialization import export
|
||||
import numpy as np
|
||||
from mindspore import nn, ops, context
|
||||
from CNN import export_cnn
|
||||
from GRAY import export_gray
|
||||
from Connection import export_connection
|
||||
|
||||
class_names = ['BRDM_2', 'BTR_60', 'SLICY', 'T62', 'ZSU_23_4']
|
||||
class_labels = ["装甲侦察车", "装甲运输车", "不明", "坦克", "自行高炮"]
|
||||
class GrayCNN(nn.Cell):
|
||||
def __init__(self):
|
||||
super(GrayCNN, self).__init__()
|
||||
self.split = ops.Split(axis=2, output_num=3)
|
||||
self.conv1 = nn.Conv2d(1, 32, kernel_size=3, has_bias=True)
|
||||
self.pool1 = nn.MaxPool2d(kernel_size=2, stride=2)
|
||||
self.conv2 = nn.Conv2d(32, 64, kernel_size=3, has_bias=True)
|
||||
self.pool2 = nn.MaxPool2d(kernel_size=2, stride=2)
|
||||
self.conv3 = nn.Conv2d(64, 128, kernel_size=3, has_bias=True)
|
||||
self.pool3 = nn.MaxPool2d(kernel_size=2, stride=2)
|
||||
self.flatten = nn.Flatten()
|
||||
self.dense1 = nn.Dense(32768, 64)
|
||||
self.dense2 = nn.Dense(64, 5)
|
||||
self.relu = nn.ReLU()
|
||||
self.cnn = nn.GraphCell(ms.load(file_name="cnn.mindir"))
|
||||
def construct(self, x):
|
||||
x = self.split(x)
|
||||
b, g, r = x
|
||||
x = (
|
||||
b * 0.114 +
|
||||
g * 0.587 +
|
||||
r * 0.299
|
||||
).squeeze(-1)
|
||||
x = ops.clip_by_value(x, 0, 255)
|
||||
x = x / 255.0 # 数据归一化
|
||||
x = x.reshape(1, 1, 128, 128) # 灰度化处理后结果需要重塑成cnn输入形状
|
||||
x = self.cnn(x)
|
||||
return x
|
||||
|
||||
if __name__ == "__main__":
|
||||
export_cnn()
|
||||
context.set_context(mode=context.GRAPH_MODE)
|
||||
# 1. 读取图片(保持原始uint8类型)
|
||||
color_image = cv2.imread("image_origin.jpg") # 默认uint8
|
||||
resized_image = cv2.resize(
|
||||
color_image,
|
||||
(128, 128), # 目标尺寸(width, height)
|
||||
interpolation=cv2.INTER_LINEAR
|
||||
)
|
||||
resized_image = resized_image.astype(np.float32)
|
||||
resized_image_tensor = ms.Tensor(resized_image)
|
||||
|
||||
my_model = GrayCNN()
|
||||
param_dict = ms.load_checkpoint("cnn.ckpt")
|
||||
param_not_load, _ = ms.load_param_into_net(my_model, param_dict, strict_load=True)
|
||||
|
||||
input_tensor = ms.Tensor(np.ones((128, 128, 3), dtype=np.float32))
|
||||
export(my_model, input_tensor, file_name='gray_cnn', file_format='MINDIR')
|
||||
|
||||
reload_cnn = nn.GraphCell(ms.load(file_name='gray_cnn.mindir'))
|
||||
reload_cnn = ms.Model(reload_cnn)
|
||||
m = reload_cnn.predict(resized_image_tensor)
|
||||
print(m)
|
||||
output_np = m.asnumpy()
|
||||
if len(output_np.shape) == 2: # 对于分类任务,通常输出是[batch_size, num_classes]
|
||||
output_prob = np.exp(output_np) / np.exp(output_np).sum(axis=1, keepdims=True)
|
||||
predicted_class = np.argmax(output_prob, axis=1)
|
||||
print(f"预测结果: {class_labels[predicted_class[0]]}")
|
||||
|
||||
该代码首先定义了一个新的网络结构GrayCNN,
|
||||
在 ``construct`` 方法中,首先通过gray模型处理输入图像,然后通过归一化和重塑张量,最后cnn模型进行识别。
|
||||
在主函数中,首先导出cnn模型。
|
||||
然后加载cnn模型参数,并使用MindSpore的 ``export`` 方法导出新的网络结构。
|
||||
最后,使用重新组网后的模型进行预测,并输出结果。
|
||||
|
||||
4. 转换模型
|
||||
~~~~~~~~~~~~~~~~~
|
||||
|
||||
在前面的代码中,我们已经使用了 ``export`` 方法导出了gray_cnn.mindir模型。
|
||||
要将该模型部署到FT78NE平台,需要将MINDIR格式转换成mindspore lite的ms格式模型。
|
||||
要将该模型转换为ms格式,可以使用MindSpore的转换工具(converter_lite)。
|
||||
该工具已经集成在我们的 ``YHFT-IDE`` 中,可以直接在IDE中使用。或者也可以使用命令行工具进行转换。
|
||||
|
||||
转换命令如下:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
./converter_lite --fmk=MINDIR --modelFile=gray_cnn.mindir --outputFile=gray_cnn
|
||||
|
||||
转换完成后,会在当前目录下生成gray_cnn.ms模型文件。该模型可以使用可视化工具(netron)可以打开该文件,查看模型结构。
|
||||
该工具可以直接在 ``YHFT-IDE`` 中使用,可以从官网下载使用,也可以在线使用。在线地址为:https://netron.app/。
|
||||
|
||||
该模型文件可视化如图所示:
|
||||
|
||||
.. image:: ../../_static/gray_cnn.png
|
||||
:width: 80%
|
||||
:align: center
|
||||
:alt: gray_cnn模型结构图
|
||||
:scale: 50%
|
||||
|
||||
|
||||
|
||||
5. 部署和运行程序
|
||||
~~~~~~~~~~~~~~~~~~
|
||||
|
||||
- 在IDE中新建一个Python项目,将下面的 :ref:`python_code` 代码拷贝到项目中,并运行。
|
||||
运行成功后,会在当前目录下生成一个名为 ``gray_cnn.midir`` 的模型文件,以及输出图片的预测结果。
|
||||
结果如图所示:
|
||||
|
||||
.. image:: ../../_static/python_gray_cnn_res.png
|
||||
:width: 80%
|
||||
:align: center
|
||||
:alt: python运行结果
|
||||
:scale: 50%
|
||||
|
||||
将该文件转换为ms格式,并将ms格式模型和测试图片拷贝到FT78NE平台中。
|
||||
|
||||
- 打开 ``YHFT-IDE`` ,新建工程。输入工程名、路径,工程类型选择 ``Heterogeneous`` ,
|
||||
输入交叉编译工具路径,然后点确定。会生成一个异构模板工程。通过修改 ``data_handler.cc`` 文件中的函数来调整输入输出数据,
|
||||
输入改成读取的图片路径;输出改成相应的后处理。在 ``main`` 函数设置运行后端;修改 ``CMakeLists.txt`` 文件,
|
||||
添加openCV库的lib和include路径, 最后编译该工程,编译成功后将build文件夹下的 ``main`` 拷贝到FT78NE平台中,
|
||||
要和gray_cnn.ms模型同一个文件夹下。
|
||||
|
||||
输入的c++代码示例如下:
|
||||
|
||||
.. code-block:: c++
|
||||
:linenos:
|
||||
|
||||
#include <opencv2/opencv.hpp>
|
||||
int readImage(float *reslut, std::string imagePath) {
|
||||
cv::Mat color_image = cv::imread(imagePath.c_str(), cv::IMREAD_COLOR);
|
||||
if (color_image.empty()) {
|
||||
fprintf(stderr, "read image failed\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
int width = 128;
|
||||
int height = 128;
|
||||
cv::Mat resized_image;
|
||||
cv::resize(color_image, resized_image, cv::Size(width, height), 0, 0, cv::INTER_LINEAR);
|
||||
resized_image.convertTo(resized_image, CV_32F);
|
||||
const int channels = resized_image.channels();
|
||||
const int element_count = width * height * channels;
|
||||
|
||||
for (int i = 0; i < height; ++i) {
|
||||
const float *src_ptr = resized_image.ptr<float>(i);
|
||||
float *dst_ptr = reslut + i * width * channels;
|
||||
std::memcpy(dst_ptr, src_ptr, width * channels * sizeof(float));
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
设置后端代码如下:
|
||||
|
||||
.. code-block:: c++
|
||||
:linenos:
|
||||
|
||||
auto context = std::make_shared<mindspore::Context>();
|
||||
auto &device_list = context->MutableDeviceInfo();
|
||||
context->SetBuiltInDelegate(mindspore::DelegateMode::kPNNA);
|
||||
auto cpu_info = std::make_shared<mindspore::CPUDeviceInfo>();
|
||||
auto dsp_info = std::make_shared<mindspore::FT78NEDeviceInfo>();
|
||||
device_list.push_back(dsp_info);
|
||||
device_list.push_back(cpu_info);
|
||||
|
||||
输出结果后处理代码如下:
|
||||
|
||||
.. code-block:: c++
|
||||
:linenos:
|
||||
|
||||
std::vector<float> floatArrayToVector(const float *array, size_t size) {
|
||||
std::vector<float> vec(array, array + size);
|
||||
return vec;
|
||||
}
|
||||
|
||||
std::vector<float> numpy_exp(const std::vector<float> &x) {
|
||||
std::vector<float> result;
|
||||
result.reserve(x.size());
|
||||
for (float num : x) {
|
||||
result.push_back(exp(num));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
float sum_rows(const std::vector<float> &vec, int axis) {
|
||||
float sum = std::accumulate(vec.begin(), vec.end(), 0.0);
|
||||
return sum;
|
||||
}
|
||||
|
||||
std::vector<std::vector<float>> convertTo2D(const std::vector<float> &vec, int rows) {
|
||||
std::vector<std::vector<float>> result;
|
||||
if (vec.empty() || rows <= 0) {
|
||||
return result;
|
||||
}
|
||||
int cols = (vec.size() + rows - 1) / rows; // 计算列数
|
||||
for (int i = 0; i < rows; ++i) {
|
||||
std::vector<float> row;
|
||||
for (int j = 0; j < cols; ++j) {
|
||||
size_t index = i * cols + j; // 计算索引
|
||||
if (index < vec.size()) {
|
||||
row.push_back(vec[index]);
|
||||
} else {
|
||||
row.push_back(0); // 填充剩余空间,或者你可以选择不填充
|
||||
}
|
||||
}
|
||||
result.push_back(row);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
void GetOutputData(std::vector<MSTensor> &outputs) {
|
||||
for (auto tensor : outputs) {
|
||||
std::cout << "tensor name is:" << tensor.Name() << " tensor size is:" << tensor.DataSize()
|
||||
<< " tensor elements num is:" << tensor.ElementNum() << std::endl;
|
||||
auto out_data = reinterpret_cast<const float *>(tensor.Data().get());
|
||||
std::cout << "output data is:";
|
||||
for (int i = 0; i < tensor.ElementNum() && i <= 50; i++) {
|
||||
std::cout << out_data[i] << " ";
|
||||
}
|
||||
std::cout << std::endl;
|
||||
std::vector<float> out = floatArrayToVector(out_data, tensor.ElementNum());
|
||||
std::vector<float> exp_x = numpy_exp(out);
|
||||
float sums = sum_rows(exp_x, 1);
|
||||
std::vector<float> x1;
|
||||
for (float num : exp_x) {
|
||||
x1.push_back(num / sums);
|
||||
}
|
||||
std::vector<std::vector<float>> twoD = convertTo2D(x1, 1);
|
||||
std::vector<int> argmax_indices = argmax(twoD);
|
||||
std::vector<std::string> Predicted_class = {"装甲侦察车", "装甲运输车", "不明", "坦克", "自行高炮"};
|
||||
std::cout << "预测结果: " << Predicted_class[argmax_indices[0]] << std::endl;
|
||||
}
|
||||
}
|
||||
|
||||
- 在FT78NE上运行可执行文件 ``main`` ,观察输出结果。与预期结果对比,验证模型推理的正确性。
|
||||
执行命令如下:
|
||||
|
||||
.. code-block:: bash
|
||||
:linenos:
|
||||
|
||||
./main gray_cnn.ms image_origin.jpg
|
||||
|
||||
执行结果如下图:
|
||||
|
||||
.. image:: ../../_static/ft78ne_gray_cnn_output.png
|
||||
:width: 80%
|
||||
:align: center
|
||||
:alt: FT78NE运行结果
|
||||
:scale: 50%
|
||||
|
||||
.. _python_code:
|
||||
|
||||
python完整代码示例
|
||||
-------------------
|
||||
|
||||
.. code-block:: python
|
||||
:linenos:
|
||||
|
||||
# CNN.py
|
||||
import mindspore as ms
|
||||
from mindspore.train.serialization import export
|
||||
from mindspore import nn, context
|
||||
import numpy as np
|
||||
from PIL import Image
|
||||
import mindspore.dataset as ds
|
||||
from mindspore.dataset import py_transforms
|
||||
import mindspore.dataset.vision as CV
|
||||
from mindspore.train.callback import LossMonitor
|
||||
|
||||
# # Define directories and parameters
|
||||
batch_size = 32
|
||||
img_size = (128, 128)
|
||||
data_path = '../cnn-sar/Target'
|
||||
|
||||
# 数据预处理
|
||||
def rescale_to_0_1(image):
|
||||
return image / 255.0
|
||||
|
||||
# 自定义函数,添加 color 通道维度
|
||||
def add_channels(image):
|
||||
if len(image.shape) == 2: # 单个图像,没有 cin_channel 维度
|
||||
# print("before ===> ", image.shape)
|
||||
# 添加 color 通道维度,(128x128) => (1, 128, 128)
|
||||
image_four_channels = np.expand_dims(image, axis=0)
|
||||
# print("after ===> ", image_four_channels.shape)
|
||||
else:
|
||||
pass
|
||||
return image
|
||||
return image_four_channels
|
||||
|
||||
class CNN(ms.nn.Cell):
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
self.conv1 = nn.Conv2d(1, 32, kernel_size=3, has_bias=True)
|
||||
self.pool1 = nn.MaxPool2d(kernel_size=2, stride=2)
|
||||
self.conv2 = nn.Conv2d(32, 64, kernel_size=3, has_bias=True)
|
||||
self.pool2 = nn.MaxPool2d(kernel_size=2, stride=2)
|
||||
self.conv3 = nn.Conv2d(64, 128, kernel_size=3, has_bias=True)
|
||||
self.pool3 = nn.MaxPool2d(kernel_size=2, stride=2)
|
||||
self.flatten = nn.Flatten()
|
||||
self.dense1 = nn.Dense(32768, 64)
|
||||
self.dense2 = nn.Dense(64, 5)
|
||||
self.relu = nn.ReLU()
|
||||
|
||||
def construct(self, x):
|
||||
x = self.relu(self.conv1(x))
|
||||
x = self.pool1(x)
|
||||
x = self.relu(self.conv2(x))
|
||||
x = self.pool2(x)
|
||||
x = self.relu(self.conv3(x))
|
||||
x = self.pool3(x)
|
||||
x = self.flatten(x)
|
||||
x = self.relu(self.dense1(x))
|
||||
x = self.dense2(x)
|
||||
return x
|
||||
|
||||
def export_cnn():
|
||||
context.set_context(mode=context.PYNATIVE_MODE, device_target="CPU")
|
||||
resize_op = CV.Resize(img_size)
|
||||
rescale_transform = ms.dataset.transforms.Compose([rescale_to_0_1])
|
||||
f32_typecast = ms.dataset.transforms.TypeCast(ms.float32)
|
||||
# 将读取的 RGB 转为 GRAY 模式
|
||||
convert_gray = ms.dataset.vision.ConvertColor(ms.dataset.vision.ConvertMode.COLOR_RGB2GRAY)
|
||||
|
||||
transform = [convert_gray, resize_op, f32_typecast, rescale_transform, CV.HWC2CHW()]
|
||||
train_data = ds.ImageFolderDataset(dataset_dir=data_path, decode=True, extensions=[".JPEG", ".PNG", ".JPG"])
|
||||
train_data = train_data.map(input_columns="image", operations= transform)
|
||||
train_data = train_data.map(operations=lambda image: add_channels(image), \
|
||||
input_columns=["image"], \
|
||||
output_columns=["image"])
|
||||
train_data = train_data.batch(batch_size=batch_size)
|
||||
data_iter = train_data.create_dict_iterator()
|
||||
print("数据集加载完成")
|
||||
my_model = CNN()
|
||||
loss = nn.CrossEntropyLoss(reduction='mean')
|
||||
optimizer = nn.Adam(my_model.trainable_params(), learning_rate=0.01)
|
||||
cnn_model = ms.Model(my_model, loss_fn=loss, optimizer=optimizer, metrics={'Accuracy': nn.Accuracy()})
|
||||
print("网络构建完成")
|
||||
num_epoch = 10
|
||||
cnn_model.train(num_epoch, train_data,callbacks=[LossMonitor()],dataset_sink_mode=False)
|
||||
inputs = ms.Tensor(np.random.randn(1, 1, 128, 128).astype(np.float32))
|
||||
ms.save_checkpoint(my_model, 'cnn.ckpt')
|
||||
export(my_model, inputs, file_name='cnn', file_format="MINDIR")
|
||||
|
||||
.. code-block:: python
|
||||
:linenos:
|
||||
|
||||
# GRAY_CNN.py
|
||||
import cv2
|
||||
import mindspore as ms
|
||||
from mindspore.train.serialization import export
|
||||
import numpy as np
|
||||
from mindspore import nn, ops, context
|
||||
from CNN import export_cnn
|
||||
|
||||
class_names = ['BRDM_2', 'BTR_60', 'SLICY', 'T62', 'ZSU_23_4']
|
||||
class_labels = ["装甲侦察车", "装甲运输车", "不明", "坦克", "自行高炮"]
|
||||
|
||||
class GrayCNN(nn.Cell):
|
||||
def __init__(self):
|
||||
super(GrayCNN, self).__init__()
|
||||
self.split = ops.Split(axis=2, output_num=3)
|
||||
self.conv1 = nn.Conv2d(1, 32, kernel_size=3, has_bias=True)
|
||||
self.pool1 = nn.MaxPool2d(kernel_size=2, stride=2)
|
||||
self.conv2 = nn.Conv2d(32, 64, kernel_size=3, has_bias=True)
|
||||
self.pool2 = nn.MaxPool2d(kernel_size=2, stride=2)
|
||||
self.conv3 = nn.Conv2d(64, 128, kernel_size=3, has_bias=True)
|
||||
self.pool3 = nn.MaxPool2d(kernel_size=2, stride=2)
|
||||
self.flatten = nn.Flatten()
|
||||
self.dense1 = nn.Dense(32768, 64)
|
||||
self.dense2 = nn.Dense(64, 5)
|
||||
self.relu = nn.ReLU()
|
||||
self.cnn = nn.GraphCell(ms.load(file_name="cnn.mindir"))
|
||||
|
||||
def construct(self, x):
|
||||
x = self.split(x)
|
||||
b, g, r = x
|
||||
x = (
|
||||
b * 0.114 +
|
||||
g * 0.587 +
|
||||
r * 0.299
|
||||
).squeeze(-1)
|
||||
x = ops.clip_by_value(x, 0, 255)
|
||||
x = x / 255.0 # 数据归一化
|
||||
x = x.reshape(1, 1, 128, 128) # 灰度化处理后结果需要重塑成cnn输入形状
|
||||
x = self.cnn(x)
|
||||
return x
|
||||
|
||||
if __name__ == "__main__":
|
||||
export_gray()
|
||||
export_connection()
|
||||
export_cnn()
|
||||
context.set_context(mode=context.GRAPH_MODE)
|
||||
# 1. 读取图片(保持原始uint8类型)
|
||||
color_image = cv2.imread("image_origin.jpg") # 默认uint8
|
||||
resized_image = cv2.resize(
|
||||
color_image,
|
||||
(128, 128), # 目标尺寸(width, height)
|
||||
interpolation=cv2.INTER_LINEAR
|
||||
)
|
||||
resized_image = resized_image.astype(np.float32)
|
||||
resized_image_tensor = ms.Tensor(resized_image)
|
||||
my_model = GrayCNN()
|
||||
param_dict = ms.load_checkpoint("cnn.ckpt")
|
||||
param_not_load, _ = ms.load_param_into_net(my_model, param_dict, strict_load=True)
|
||||
input_tensor = ms.Tensor(np.ones((128, 128, 3), dtype=np.float32))
|
||||
export(my_model, input_tensor, file_name='gray_cnn', file_format='MINDIR')
|
||||
reload_cnn = nn.GraphCell(ms.load(file_name='gray_cnn.mindir'))
|
||||
reload_cnn = ms.Model(reload_cnn)
|
||||
m = reload_cnn.predict(resized_image_tensor)
|
||||
print(m)
|
||||
output_np = m.asnumpy()
|
||||
if len(output_np.shape) == 2: # 对于分类任务,通常输出是[batch_size, num_classes]
|
||||
output_prob = np.exp(output_np) / np.exp(output_np).sum(axis=1, keepdims=True)
|
||||
predicted_class = np.argmax(output_prob, axis=1)
|
||||
print(f"预测结果: {class_labels[predicted_class[0]]}")
|
||||
|
||||
|
|
@ -4,5 +4,7 @@ AI+DSP应用示例
|
|||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
gray_cnn
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ Log10
|
|||
|
||||
.. code-block:: c
|
||||
:linenos:
|
||||
:emphasize-lines: 8
|
||||
:emphasize-lines: 9
|
||||
|
||||
//MT7004示例
|
||||
#include <stdio.h>
|
||||
|
|
|
|||
|
|
@ -1,5 +1,12 @@
|
|||
/*
|
||||
* basic.css
|
||||
* ~~~~~~~~~
|
||||
*
|
||||
* Sphinx stylesheet -- basic theme.
|
||||
*
|
||||
* :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS.
|
||||
* :license: BSD, see LICENSE for details.
|
||||
*
|
||||
*/
|
||||
|
||||
/* -- main layout ----------------------------------------------------------- */
|
||||
|
|
@ -108,11 +115,15 @@ img {
|
|||
/* -- search page ----------------------------------------------------------- */
|
||||
|
||||
ul.search {
|
||||
margin-top: 10px;
|
||||
margin: 10px 0 0 20px;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
ul.search li {
|
||||
padding: 5px 0;
|
||||
padding: 5px 0 5px 20px;
|
||||
background-image: url(file.png);
|
||||
background-repeat: no-repeat;
|
||||
background-position: 0 7px;
|
||||
}
|
||||
|
||||
ul.search li a {
|
||||
|
|
@ -226,10 +237,6 @@ a.headerlink {
|
|||
visibility: hidden;
|
||||
}
|
||||
|
||||
a:visited {
|
||||
color: #551A8B;
|
||||
}
|
||||
|
||||
h1:hover > a.headerlink,
|
||||
h2:hover > a.headerlink,
|
||||
h3:hover > a.headerlink,
|
||||
|
|
|
|||
|
|
@ -1,5 +1,12 @@
|
|||
/*
|
||||
* doctools.js
|
||||
* ~~~~~~~~~~~
|
||||
*
|
||||
* Base JavaScript utilities for all Sphinx HTML documentation.
|
||||
*
|
||||
* :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS.
|
||||
* :license: BSD, see LICENSE for details.
|
||||
*
|
||||
*/
|
||||
"use strict";
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
const DOCUMENTATION_OPTIONS = {
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'),
|
||||
VERSION: 'alpha',
|
||||
LANGUAGE: 'zh-CN',
|
||||
COLLAPSE_INDEX: false,
|
||||
|
|
|
|||
Binary file not shown.
|
After Width: | Height: | Size: 17 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 274 KiB |
|
|
@ -1,12 +1,19 @@
|
|||
/*
|
||||
* language_data.js
|
||||
* ~~~~~~~~~~~~~~~~
|
||||
*
|
||||
* This script contains the language-specific data used by searchtools.js,
|
||||
* namely the list of stopwords, stemmer, scorer and splitter.
|
||||
*
|
||||
* :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS.
|
||||
* :license: BSD, see LICENSE for details.
|
||||
*
|
||||
*/
|
||||
|
||||
var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"];
|
||||
|
||||
|
||||
/* Non-minified version is copied as a separate JS file, if available */
|
||||
/* Non-minified version is copied as a separate JS file, is available */
|
||||
|
||||
/**
|
||||
* Porter Stemmer
|
||||
|
|
|
|||
Binary file not shown.
|
After Width: | Height: | Size: 23 KiB |
|
|
@ -1,5 +1,12 @@
|
|||
/*
|
||||
* searchtools.js
|
||||
* ~~~~~~~~~~~~~~~~
|
||||
*
|
||||
* Sphinx JavaScript utilities for the full-text search.
|
||||
*
|
||||
* :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS.
|
||||
* :license: BSD, see LICENSE for details.
|
||||
*
|
||||
*/
|
||||
"use strict";
|
||||
|
||||
|
|
@ -13,7 +20,7 @@ if (typeof Scorer === "undefined") {
|
|||
// and returns the new score.
|
||||
/*
|
||||
score: result => {
|
||||
const [docname, title, anchor, descr, score, filename, kind] = result
|
||||
const [docname, title, anchor, descr, score, filename] = result
|
||||
return score
|
||||
},
|
||||
*/
|
||||
|
|
@ -40,14 +47,6 @@ if (typeof Scorer === "undefined") {
|
|||
};
|
||||
}
|
||||
|
||||
// Global search result kind enum, used by themes to style search results.
|
||||
class SearchResultKind {
|
||||
static get index() { return "index"; }
|
||||
static get object() { return "object"; }
|
||||
static get text() { return "text"; }
|
||||
static get title() { return "title"; }
|
||||
}
|
||||
|
||||
const _removeChildren = (element) => {
|
||||
while (element && element.lastChild) element.removeChild(element.lastChild);
|
||||
};
|
||||
|
|
@ -58,20 +57,16 @@ const _removeChildren = (element) => {
|
|||
const _escapeRegExp = (string) =>
|
||||
string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string
|
||||
|
||||
const _displayItem = (item, searchTerms, highlightTerms) => {
|
||||
const _displayItem = (item, searchTerms) => {
|
||||
const docBuilder = DOCUMENTATION_OPTIONS.BUILDER;
|
||||
const docUrlRoot = DOCUMENTATION_OPTIONS.URL_ROOT;
|
||||
const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX;
|
||||
const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX;
|
||||
const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY;
|
||||
const contentRoot = document.documentElement.dataset.content_root;
|
||||
|
||||
const [docName, title, anchor, descr, score, _filename, kind] = item;
|
||||
const [docName, title, anchor, descr, score, _filename] = item;
|
||||
|
||||
let listItem = document.createElement("li");
|
||||
// Add a class representing the item's type:
|
||||
// can be used by a theme's CSS selector for styling
|
||||
// See SearchResultKind for the class names.
|
||||
listItem.classList.add(`kind-${kind}`);
|
||||
let requestUrl;
|
||||
let linkUrl;
|
||||
if (docBuilder === "dirhtml") {
|
||||
|
|
@ -80,35 +75,28 @@ const _displayItem = (item, searchTerms, highlightTerms) => {
|
|||
if (dirname.match(/\/index\/$/))
|
||||
dirname = dirname.substring(0, dirname.length - 6);
|
||||
else if (dirname === "index/") dirname = "";
|
||||
requestUrl = contentRoot + dirname;
|
||||
requestUrl = docUrlRoot + dirname;
|
||||
linkUrl = requestUrl;
|
||||
} else {
|
||||
// normal html builders
|
||||
requestUrl = contentRoot + docName + docFileSuffix;
|
||||
requestUrl = docUrlRoot + docName + docFileSuffix;
|
||||
linkUrl = docName + docLinkSuffix;
|
||||
}
|
||||
let linkEl = listItem.appendChild(document.createElement("a"));
|
||||
linkEl.href = linkUrl + anchor;
|
||||
linkEl.dataset.score = score;
|
||||
linkEl.innerHTML = title;
|
||||
if (descr) {
|
||||
if (descr)
|
||||
listItem.appendChild(document.createElement("span")).innerHTML =
|
||||
" (" + descr + ")";
|
||||
// highlight search terms in the description
|
||||
if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js
|
||||
highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted"));
|
||||
}
|
||||
else if (showSearchSummary)
|
||||
fetch(requestUrl)
|
||||
.then((responseData) => responseData.text())
|
||||
.then((data) => {
|
||||
if (data)
|
||||
listItem.appendChild(
|
||||
Search.makeSearchSummary(data, searchTerms, anchor)
|
||||
Search.makeSearchSummary(data, searchTerms)
|
||||
);
|
||||
// highlight search terms in the summary
|
||||
if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js
|
||||
highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted"));
|
||||
});
|
||||
Search.output.appendChild(listItem);
|
||||
};
|
||||
|
|
@ -120,46 +108,27 @@ const _finishSearch = (resultCount) => {
|
|||
"Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories."
|
||||
);
|
||||
else
|
||||
Search.status.innerText = Documentation.ngettext(
|
||||
"Search finished, found one page matching the search query.",
|
||||
"Search finished, found ${resultCount} pages matching the search query.",
|
||||
resultCount,
|
||||
).replace('${resultCount}', resultCount);
|
||||
Search.status.innerText = _(
|
||||
`Search finished, found ${resultCount} page(s) matching the search query.`
|
||||
);
|
||||
};
|
||||
const _displayNextItem = (
|
||||
results,
|
||||
resultCount,
|
||||
searchTerms,
|
||||
highlightTerms,
|
||||
searchTerms
|
||||
) => {
|
||||
// results left, load the summary and display it
|
||||
// this is intended to be dynamic (don't sub resultsCount)
|
||||
if (results.length) {
|
||||
_displayItem(results.pop(), searchTerms, highlightTerms);
|
||||
_displayItem(results.pop(), searchTerms);
|
||||
setTimeout(
|
||||
() => _displayNextItem(results, resultCount, searchTerms, highlightTerms),
|
||||
() => _displayNextItem(results, resultCount, searchTerms),
|
||||
5
|
||||
);
|
||||
}
|
||||
// search finished, update title and status message
|
||||
else _finishSearch(resultCount);
|
||||
};
|
||||
// Helper function used by query() to order search results.
|
||||
// Each input is an array of [docname, title, anchor, descr, score, filename, kind].
|
||||
// Order the results by score (in opposite order of appearance, since the
|
||||
// `_displayNextItem` function uses pop() to retrieve items) and then alphabetically.
|
||||
const _orderResultsByScoreThenName = (a, b) => {
|
||||
const leftScore = a[4];
|
||||
const rightScore = b[4];
|
||||
if (leftScore === rightScore) {
|
||||
// same score: sort alphabetically
|
||||
const leftTitle = a[1].toLowerCase();
|
||||
const rightTitle = b[1].toLowerCase();
|
||||
if (leftTitle === rightTitle) return 0;
|
||||
return leftTitle > rightTitle ? -1 : 1; // inverted is intentional
|
||||
}
|
||||
return leftScore > rightScore ? 1 : -1;
|
||||
};
|
||||
|
||||
/**
|
||||
* Default splitQuery function. Can be overridden in ``sphinx.search`` with a
|
||||
|
|
@ -183,26 +152,13 @@ const Search = {
|
|||
_queued_query: null,
|
||||
_pulse_status: -1,
|
||||
|
||||
htmlToText: (htmlString, anchor) => {
|
||||
htmlToText: (htmlString) => {
|
||||
const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html');
|
||||
for (const removalQuery of [".headerlink", "script", "style"]) {
|
||||
htmlElement.querySelectorAll(removalQuery).forEach((el) => { el.remove() });
|
||||
}
|
||||
if (anchor) {
|
||||
const anchorContent = htmlElement.querySelector(`[role="main"] ${anchor}`);
|
||||
if (anchorContent) return anchorContent.textContent;
|
||||
|
||||
console.warn(
|
||||
`Anchored content block not found. Sphinx search tries to obtain it via DOM query '[role=main] ${anchor}'. Check your theme or template.`
|
||||
);
|
||||
}
|
||||
|
||||
// if anchor not specified or not found, fall back to main content
|
||||
htmlElement.querySelectorAll(".headerlink").forEach((el) => { el.remove() });
|
||||
const docContent = htmlElement.querySelector('[role="main"]');
|
||||
if (docContent) return docContent.textContent;
|
||||
|
||||
if (docContent !== undefined) return docContent.textContent;
|
||||
console.warn(
|
||||
"Content block not found. Sphinx search tries to obtain it via DOM query '[role=main]'. Check your theme or template."
|
||||
"Content block not found. Sphinx search tries to obtain it via '[role=main]'. Could you check your theme or template."
|
||||
);
|
||||
return "";
|
||||
},
|
||||
|
|
@ -255,7 +211,6 @@ const Search = {
|
|||
searchSummary.classList.add("search-summary");
|
||||
searchSummary.innerText = "";
|
||||
const searchList = document.createElement("ul");
|
||||
searchList.setAttribute("role", "list");
|
||||
searchList.classList.add("search");
|
||||
|
||||
const out = document.getElementById("search-results");
|
||||
|
|
@ -276,7 +231,16 @@ const Search = {
|
|||
else Search.deferQuery(query);
|
||||
},
|
||||
|
||||
_parseQuery: (query) => {
|
||||
/**
|
||||
* execute search (requires search index to be loaded)
|
||||
*/
|
||||
query: (query) => {
|
||||
const filenames = Search._index.filenames;
|
||||
const docNames = Search._index.docnames;
|
||||
const titles = Search._index.titles;
|
||||
const allTitles = Search._index.alltitles;
|
||||
const indexEntries = Search._index.indexentries;
|
||||
|
||||
// stem the search terms and add them to the correct list
|
||||
const stemmer = new Stemmer();
|
||||
const searchTerms = new Set();
|
||||
|
|
@ -312,40 +276,22 @@ const Search = {
|
|||
// console.info("required: ", [...searchTerms]);
|
||||
// console.info("excluded: ", [...excludedTerms]);
|
||||
|
||||
return [query, searchTerms, excludedTerms, highlightTerms, objectTerms];
|
||||
},
|
||||
|
||||
/**
|
||||
* execute search (requires search index to be loaded)
|
||||
*/
|
||||
_performSearch: (query, searchTerms, excludedTerms, highlightTerms, objectTerms) => {
|
||||
const filenames = Search._index.filenames;
|
||||
const docNames = Search._index.docnames;
|
||||
const titles = Search._index.titles;
|
||||
const allTitles = Search._index.alltitles;
|
||||
const indexEntries = Search._index.indexentries;
|
||||
|
||||
// Collect multiple result groups to be sorted separately and then ordered.
|
||||
// Each is an array of [docname, title, anchor, descr, score, filename, kind].
|
||||
const normalResults = [];
|
||||
const nonMainIndexResults = [];
|
||||
|
||||
// array of [docname, title, anchor, descr, score, filename]
|
||||
let results = [];
|
||||
_removeChildren(document.getElementById("search-progress"));
|
||||
|
||||
const queryLower = query.toLowerCase().trim();
|
||||
const queryLower = query.toLowerCase();
|
||||
for (const [title, foundTitles] of Object.entries(allTitles)) {
|
||||
if (title.toLowerCase().trim().includes(queryLower) && (queryLower.length >= title.length/2)) {
|
||||
if (title.toLowerCase().includes(queryLower) && (queryLower.length >= title.length/2)) {
|
||||
for (const [file, id] of foundTitles) {
|
||||
const score = Math.round(Scorer.title * queryLower.length / title.length);
|
||||
const boost = titles[file] === title ? 1 : 0; // add a boost for document titles
|
||||
normalResults.push([
|
||||
let score = Math.round(100 * queryLower.length / title.length)
|
||||
results.push([
|
||||
docNames[file],
|
||||
titles[file] !== title ? `${titles[file]} > ${title}` : title,
|
||||
id !== null ? "#" + id : "",
|
||||
null,
|
||||
score + boost,
|
||||
score,
|
||||
filenames[file],
|
||||
SearchResultKind.title,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
|
@ -354,48 +300,46 @@ const Search = {
|
|||
// search for explicit entries in index directives
|
||||
for (const [entry, foundEntries] of Object.entries(indexEntries)) {
|
||||
if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) {
|
||||
for (const [file, id, isMain] of foundEntries) {
|
||||
const score = Math.round(100 * queryLower.length / entry.length);
|
||||
const result = [
|
||||
for (const [file, id] of foundEntries) {
|
||||
let score = Math.round(100 * queryLower.length / entry.length)
|
||||
results.push([
|
||||
docNames[file],
|
||||
titles[file],
|
||||
id ? "#" + id : "",
|
||||
null,
|
||||
score,
|
||||
filenames[file],
|
||||
SearchResultKind.index,
|
||||
];
|
||||
if (isMain) {
|
||||
normalResults.push(result);
|
||||
} else {
|
||||
nonMainIndexResults.push(result);
|
||||
}
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// lookup as object
|
||||
objectTerms.forEach((term) =>
|
||||
normalResults.push(...Search.performObjectSearch(term, objectTerms))
|
||||
results.push(...Search.performObjectSearch(term, objectTerms))
|
||||
);
|
||||
|
||||
// lookup as search terms in fulltext
|
||||
normalResults.push(...Search.performTermsSearch(searchTerms, excludedTerms));
|
||||
results.push(...Search.performTermsSearch(searchTerms, excludedTerms));
|
||||
|
||||
// let the scorer override scores with a custom scoring function
|
||||
if (Scorer.score) {
|
||||
normalResults.forEach((item) => (item[4] = Scorer.score(item)));
|
||||
nonMainIndexResults.forEach((item) => (item[4] = Scorer.score(item)));
|
||||
}
|
||||
if (Scorer.score) results.forEach((item) => (item[4] = Scorer.score(item)));
|
||||
|
||||
// Sort each group of results by score and then alphabetically by name.
|
||||
normalResults.sort(_orderResultsByScoreThenName);
|
||||
nonMainIndexResults.sort(_orderResultsByScoreThenName);
|
||||
|
||||
// Combine the result groups in (reverse) order.
|
||||
// Non-main index entries are typically arbitrary cross-references,
|
||||
// so display them after other results.
|
||||
let results = [...nonMainIndexResults, ...normalResults];
|
||||
// now sort the results by score (in opposite order of appearance, since the
|
||||
// display function below uses pop() to retrieve items) and then
|
||||
// alphabetically
|
||||
results.sort((a, b) => {
|
||||
const leftScore = a[4];
|
||||
const rightScore = b[4];
|
||||
if (leftScore === rightScore) {
|
||||
// same score: sort alphabetically
|
||||
const leftTitle = a[1].toLowerCase();
|
||||
const rightTitle = b[1].toLowerCase();
|
||||
if (leftTitle === rightTitle) return 0;
|
||||
return leftTitle > rightTitle ? -1 : 1; // inverted is intentional
|
||||
}
|
||||
return leftScore > rightScore ? 1 : -1;
|
||||
});
|
||||
|
||||
// remove duplicate search results
|
||||
// note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept
|
||||
|
|
@ -409,19 +353,14 @@ const Search = {
|
|||
return acc;
|
||||
}, []);
|
||||
|
||||
return results.reverse();
|
||||
},
|
||||
|
||||
query: (query) => {
|
||||
const [searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms] = Search._parseQuery(query);
|
||||
const results = Search._performSearch(searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms);
|
||||
results = results.reverse();
|
||||
|
||||
// for debugging
|
||||
//Search.lastresults = results.slice(); // a copy
|
||||
// console.info("search results:", Search.lastresults);
|
||||
|
||||
// print the results
|
||||
_displayNextItem(results, results.length, searchTerms, highlightTerms);
|
||||
_displayNextItem(results, results.length, searchTerms);
|
||||
},
|
||||
|
||||
/**
|
||||
|
|
@ -485,7 +424,6 @@ const Search = {
|
|||
descr,
|
||||
score,
|
||||
filenames[match[0]],
|
||||
SearchResultKind.object,
|
||||
]);
|
||||
};
|
||||
Object.keys(objects).forEach((prefix) =>
|
||||
|
|
@ -520,18 +458,14 @@ const Search = {
|
|||
// add support for partial matches
|
||||
if (word.length > 2) {
|
||||
const escapedWord = _escapeRegExp(word);
|
||||
if (!terms.hasOwnProperty(word)) {
|
||||
Object.keys(terms).forEach((term) => {
|
||||
if (term.match(escapedWord))
|
||||
arr.push({ files: terms[term], score: Scorer.partialTerm });
|
||||
});
|
||||
}
|
||||
if (!titleTerms.hasOwnProperty(word)) {
|
||||
Object.keys(titleTerms).forEach((term) => {
|
||||
if (term.match(escapedWord))
|
||||
arr.push({ files: titleTerms[term], score: Scorer.partialTitle });
|
||||
});
|
||||
}
|
||||
Object.keys(terms).forEach((term) => {
|
||||
if (term.match(escapedWord) && !terms[word])
|
||||
arr.push({ files: terms[term], score: Scorer.partialTerm });
|
||||
});
|
||||
Object.keys(titleTerms).forEach((term) => {
|
||||
if (term.match(escapedWord) && !titleTerms[word])
|
||||
arr.push({ files: titleTerms[word], score: Scorer.partialTitle });
|
||||
});
|
||||
}
|
||||
|
||||
// no match but word was a required one
|
||||
|
|
@ -554,8 +488,9 @@ const Search = {
|
|||
|
||||
// create the mapping
|
||||
files.forEach((file) => {
|
||||
if (!fileMap.has(file)) fileMap.set(file, [word]);
|
||||
else if (fileMap.get(file).indexOf(word) === -1) fileMap.get(file).push(word);
|
||||
if (fileMap.has(file) && fileMap.get(file).indexOf(word) === -1)
|
||||
fileMap.get(file).push(word);
|
||||
else fileMap.set(file, [word]);
|
||||
});
|
||||
});
|
||||
|
||||
|
|
@ -596,7 +531,6 @@ const Search = {
|
|||
null,
|
||||
score,
|
||||
filenames[file],
|
||||
SearchResultKind.text,
|
||||
]);
|
||||
}
|
||||
return results;
|
||||
|
|
@ -607,8 +541,8 @@ const Search = {
|
|||
* search summary for a given text. keywords is a list
|
||||
* of stemmed words.
|
||||
*/
|
||||
makeSearchSummary: (htmlText, keywords, anchor) => {
|
||||
const text = Search.htmlToText(htmlText, anchor);
|
||||
makeSearchSummary: (htmlText, keywords) => {
|
||||
const text = Search.htmlToText(htmlText);
|
||||
if (text === "") return null;
|
||||
|
||||
const textLower = text.toLowerCase();
|
||||
|
|
|
|||
|
|
@ -29,19 +29,14 @@ const _highlight = (node, addItems, text, className) => {
|
|||
}
|
||||
|
||||
span.appendChild(document.createTextNode(val.substr(pos, text.length)));
|
||||
const rest = document.createTextNode(val.substr(pos + text.length));
|
||||
parent.insertBefore(
|
||||
span,
|
||||
parent.insertBefore(
|
||||
rest,
|
||||
document.createTextNode(val.substr(pos + text.length)),
|
||||
node.nextSibling
|
||||
)
|
||||
);
|
||||
node.nodeValue = val.substr(0, pos);
|
||||
/* There may be more occurrences of search term in this node. So call this
|
||||
* function recursively on the remaining fragment.
|
||||
*/
|
||||
_highlight(rest, addItems, text, className);
|
||||
|
||||
if (isInSVG) {
|
||||
const rect = document.createElementNS(
|
||||
|
|
@ -145,10 +140,5 @@ const SphinxHighlight = {
|
|||
},
|
||||
};
|
||||
|
||||
_ready(() => {
|
||||
/* Do not call highlightSearchWords() when we are on the search page.
|
||||
* It will highlight words from the *previous* search query.
|
||||
*/
|
||||
if (typeof Search === "undefined") SphinxHighlight.highlightSearchWords();
|
||||
SphinxHighlight.initEscapeListener();
|
||||
});
|
||||
_ready(SphinxHighlight.highlightSearchWords);
|
||||
_ready(SphinxHighlight.initEscapeListener);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,765 @@
|
|||
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html class="writer-html5" lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>GRAY_CNN(图片灰度化处理+图片识别) — MindSpore Signal+ 使用手册 alpha 文档</title>
|
||||
<link rel="stylesheet" type="text/css" href="../../_static/pygments.css?v=03e43079" />
|
||||
<link rel="stylesheet" type="text/css" href="../../_static/css/theme.css?v=e59714d7" />
|
||||
<link rel="stylesheet" type="text/css" href="../../_static/table.css?v=72b86d3e" />
|
||||
|
||||
|
||||
<script src="../../_static/jquery.js?v=5d32c60e"></script>
|
||||
<script src="../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
|
||||
<script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js?v=595569a8"></script>
|
||||
<script src="../../_static/doctools.js?v=888ff710"></script>
|
||||
<script src="../../_static/sphinx_highlight.js?v=4825356b"></script>
|
||||
<script src="../../_static/translations.js?v=beaddf03"></script>
|
||||
<script async="async" src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
|
||||
<script src="../../_static/table.js?v=99ed15ba"></script>
|
||||
<script src="../../_static/js/theme.js"></script>
|
||||
<link rel="index" title="索引" href="../../genindex.html" />
|
||||
<link rel="search" title="搜索" href="../../search.html" />
|
||||
<link rel="next" title="DSP应用示例" href="../dsp/index.html" />
|
||||
<link rel="prev" title="AI+DSP应用示例" href="index.html" />
|
||||
</head>
|
||||
|
||||
<body class="wy-body-for-nav">
|
||||
<div class="wy-grid-for-nav">
|
||||
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||
<div class="wy-side-scroll">
|
||||
<div class="wy-side-nav-search" >
|
||||
|
||||
|
||||
|
||||
<a href="../../index.html" class="icon icon-home">
|
||||
MindSpore Signal+ 使用手册
|
||||
</a>
|
||||
<div role="search">
|
||||
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
|
||||
<input type="text" name="q" placeholder="搜索文档" aria-label="搜索文档" />
|
||||
<input type="hidden" name="check_keywords" value="yes" />
|
||||
<input type="hidden" name="area" value="default" />
|
||||
</form>
|
||||
</div>
|
||||
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="导航菜单">
|
||||
<ul class="current">
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../quickstart/index.html">快速入门</a></li>
|
||||
<li class="toctree-l1 current"><a class="reference internal" href="../index.html">应用开发示例</a><ul class="current">
|
||||
<li class="toctree-l2 current"><a class="reference internal" href="index.html">AI+DSP应用示例</a><ul class="current">
|
||||
<li class="toctree-l3 current"><a class="current reference internal" href="#">GRAY_CNN(图片灰度化处理+图片识别)</a><ul>
|
||||
<li class="toctree-l4"><a class="reference internal" href="#id1">应用概述</a></li>
|
||||
<li class="toctree-l4"><a class="reference internal" href="#id2">开发流程</a></li>
|
||||
<li class="toctree-l4"><a class="reference internal" href="#python">python完整代码示例</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../dsp/index.html">DSP应用示例</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../autocodegen/index.html">AI辅助开发示例</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../functionlib/index.html">算子库支持</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../refdoc/index.html">参考资料</a></li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="移动版导航菜单" >
|
||||
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||
<a href="../../index.html">MindSpore Signal+ 使用手册</a>
|
||||
</nav>
|
||||
|
||||
<div class="wy-nav-content">
|
||||
<div class="rst-content">
|
||||
<div role="navigation" aria-label="页面导航">
|
||||
<ul class="wy-breadcrumbs">
|
||||
<li><a href="../../index.html" class="icon icon-home" aria-label="Home"></a></li>
|
||||
<li class="breadcrumb-item"><a href="../index.html">应用开发示例</a></li>
|
||||
<li class="breadcrumb-item"><a href="index.html">AI+DSP应用示例</a></li>
|
||||
<li class="breadcrumb-item active">GRAY_CNN(图片灰度化处理+图片识别)</li>
|
||||
<li class="wy-breadcrumbs-aside">
|
||||
<a href="../../_sources/appdevelop/ai_dsp/gray_cnn.rst.txt" rel="nofollow"> 查看页面源码</a>
|
||||
</li>
|
||||
</ul>
|
||||
<hr/>
|
||||
</div>
|
||||
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||
<div itemprop="articleBody">
|
||||
|
||||
<section id="gray-cnn">
|
||||
<h1>GRAY_CNN(图片灰度化处理+图片识别)<a class="headerlink" href="#gray-cnn" title="此标题的永久链接"></a></h1>
|
||||
<section id="id1">
|
||||
<h2>应用概述<a class="headerlink" href="#id1" title="此标题的永久链接"></a></h2>
|
||||
<blockquote>
|
||||
<div><p>这里将以图片灰度化加图片识别来介绍AI+DSP应用开发的开发流程。
|
||||
其中图片灰度化可以使用DSP来完成,图片识别则使用AI来完成。
|
||||
灰度化处理使用灰度化公式来进行,图片识别使用CNN模型。</p>
|
||||
</div></blockquote>
|
||||
</section>
|
||||
<section id="id2">
|
||||
<h2>开发流程<a class="headerlink" href="#id2" title="此标题的永久链接"></a></h2>
|
||||
<section id="id3">
|
||||
<h3>1. 定义模型<a class="headerlink" href="#id3" title="此标题的永久链接"></a></h3>
|
||||
<blockquote>
|
||||
<div><ul class="simple">
|
||||
<li><p><strong>图片灰度化处理过程。</strong></p></li>
|
||||
</ul>
|
||||
<p>这里实现图片灰度化,使用蓝、绿、红三个通道的值进行加权求和,计算出一个灰度值。
|
||||
这里使用的权重分别是0.114、0.587和0.299,这些数值是基于人眼对不同颜色的敏感度来选择的,
|
||||
用于将彩色图像转换为灰度图像。公式为:</p>
|
||||
<div class="math notranslate nohighlight">
|
||||
\[Gray = B \times 0.114 + G \times 0.587 + R \times 0.299\]</div>
|
||||
<p>以及定义一个Clip操作,确保灰度值在0到255之间。
|
||||
代码示例如下:</p>
|
||||
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="linenos"> 1</span><span class="kn">import</span><span class="w"> </span><span class="nn">mindspore</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">ms</span>
|
||||
<span class="linenos"> 2</span><span class="kn">from</span><span class="w"> </span><span class="nn">mindspore.train.serialization</span><span class="w"> </span><span class="kn">import</span> <span class="n">export</span>
|
||||
<span class="linenos"> 3</span><span class="kn">import</span><span class="w"> </span><span class="nn">numpy</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">np</span>
|
||||
<span class="linenos"> 4</span><span class="kn">from</span><span class="w"> </span><span class="nn">mindspore</span><span class="w"> </span><span class="kn">import</span> <span class="n">nn</span><span class="p">,</span> <span class="n">ops</span>
|
||||
<span class="linenos"> 5</span>
|
||||
<span class="linenos"> 6</span><span class="k">class</span><span class="w"> </span><span class="nc">Gray</span><span class="p">(</span><span class="n">nn</span><span class="o">.</span><span class="n">Cell</span><span class="p">):</span>
|
||||
<span class="linenos"> 7</span> <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="linenos"> 8</span> <span class="nb">super</span><span class="p">(</span><span class="n">Gray</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span>
|
||||
<span class="linenos"> 9</span> <span class="bp">self</span><span class="o">.</span><span class="n">split</span> <span class="o">=</span> <span class="n">ops</span><span class="o">.</span><span class="n">Split</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">output_num</span><span class="o">=</span><span class="mi">3</span><span class="p">)</span>
|
||||
<span class="linenos">10</span> <span class="k">def</span><span class="w"> </span><span class="nf">construct</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">):</span>
|
||||
<span class="linenos">11</span> <span class="n">x</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
|
||||
<span class="linenos">12</span> <span class="n">b</span><span class="p">,</span> <span class="n">g</span><span class="p">,</span> <span class="n">r</span> <span class="o">=</span> <span class="n">x</span>
|
||||
<span class="linenos">13</span> <span class="n">x</span> <span class="o">=</span> <span class="p">(</span>
|
||||
<span class="linenos">14</span> <span class="n">b</span> <span class="o">*</span> <span class="mf">0.114</span> <span class="o">+</span>
|
||||
<span class="linenos">15</span> <span class="n">g</span> <span class="o">*</span> <span class="mf">0.587</span> <span class="o">+</span>
|
||||
<span class="linenos">16</span> <span class="n">r</span> <span class="o">*</span> <span class="mf">0.299</span>
|
||||
<span class="linenos">17</span> <span class="p">)</span><span class="o">.</span><span class="n">squeeze</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span>
|
||||
<span class="linenos">18</span> <span class="n">x</span> <span class="o">=</span> <span class="n">ops</span><span class="o">.</span><span class="n">clip_by_value</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">255</span><span class="p">)</span>
|
||||
<span class="linenos">19</span> <span class="k">return</span> <span class="n">x</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<ul class="simple">
|
||||
<li><p><strong>定义AI模型,用于图片识别。</strong></p></li>
|
||||
</ul>
|
||||
<p>这里的AI模型是卷积神经网络(CNN)。CNN主要由卷积,池化,激活等算子组成;
|
||||
CNN模型架构如下表所示:</p>
|
||||
<table class="docutils align-center">
|
||||
<colgroup>
|
||||
<col style="width: 17.6%" />
|
||||
<col style="width: 23.5%" />
|
||||
<col style="width: 35.3%" />
|
||||
<col style="width: 23.5%" />
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr class="row-odd"><th class="head"><p><strong>层级</strong></p></th>
|
||||
<th class="head"><p><strong>操作类型</strong></p></th>
|
||||
<th class="head"><p><strong>参数细节</strong></p></th>
|
||||
<th class="head"><p><strong>输出维度</strong></p></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr class="row-even"><td><p><strong>输入层</strong></p></td>
|
||||
<td><p>灰度图像输入</p></td>
|
||||
<td><p>1通道,尺寸 H×W</p></td>
|
||||
<td><p>H×W×1</p></td>
|
||||
</tr>
|
||||
<tr class="row-odd"><td><p><strong>卷积块1</strong></p></td>
|
||||
<td><p>Conv2d</p></td>
|
||||
<td><p>输入通道:1 → 输出通道:32, 卷积核:3×3</p></td>
|
||||
<td><p>H×W×32</p></td>
|
||||
</tr>
|
||||
<tr class="row-even"><td></td>
|
||||
<td><p>ReLU激活</p></td>
|
||||
<td><p>非线性变换</p></td>
|
||||
<td><p>H×W×32</p></td>
|
||||
</tr>
|
||||
<tr class="row-odd"><td></td>
|
||||
<td><p>MaxPool2d</p></td>
|
||||
<td><p>窗口:2×2, 步长:2</p></td>
|
||||
<td><p>H/2×W/2×32</p></td>
|
||||
</tr>
|
||||
<tr class="row-even"><td><p><strong>卷积块2</strong></p></td>
|
||||
<td><p>Conv2d</p></td>
|
||||
<td><p>输入通道:32 → 输出通道:64, 卷积核:3×3</p></td>
|
||||
<td><p>H/2×W/2×64</p></td>
|
||||
</tr>
|
||||
<tr class="row-odd"><td></td>
|
||||
<td><p>ReLU激活</p></td>
|
||||
<td><p>非线性变换</p></td>
|
||||
<td><p>H/2×W/2×64</p></td>
|
||||
</tr>
|
||||
<tr class="row-even"><td></td>
|
||||
<td><p>MaxPool2d</p></td>
|
||||
<td><p>窗口:2×2, 步长:2</p></td>
|
||||
<td><p>H/4×W/4×64</p></td>
|
||||
</tr>
|
||||
<tr class="row-odd"><td><p><strong>卷积块3</strong></p></td>
|
||||
<td><p>Conv2d</p></td>
|
||||
<td><p>输入通道:64 → 输出通道:128, 卷积核:3×3</p></td>
|
||||
<td><p>H/4×W/4×128</p></td>
|
||||
</tr>
|
||||
<tr class="row-even"><td></td>
|
||||
<td><p>ReLU激活</p></td>
|
||||
<td><p>非线性变换</p></td>
|
||||
<td><p>H/4×W/4×128</p></td>
|
||||
</tr>
|
||||
<tr class="row-odd"><td></td>
|
||||
<td><p>MaxPool2d</p></td>
|
||||
<td><p>窗口:2×2, 步长:2</p></td>
|
||||
<td><p>H/8×W/8×128</p></td>
|
||||
</tr>
|
||||
<tr class="row-even"><td><p><strong>全连接层</strong></p></td>
|
||||
<td><p>Flatten</p></td>
|
||||
<td><p>展平多维特征图</p></td>
|
||||
<td><p>32768 (H/8×W/8×128)</p></td>
|
||||
</tr>
|
||||
<tr class="row-odd"><td></td>
|
||||
<td><p>Dense</p></td>
|
||||
<td><p>输入:32768 → 输出:64, 激活:ReLU</p></td>
|
||||
<td><p>64</p></td>
|
||||
</tr>
|
||||
<tr class="row-even"><td></td>
|
||||
<td><p>Dense (输出层)</p></td>
|
||||
<td><p>输入:64 → 输出:5, 无激活</p></td>
|
||||
<td><p>5</p></td>
|
||||
</tr>
|
||||
<tr class="row-odd"><td><p><strong>输出层</strong></p></td>
|
||||
<td><p>分类结果</p></td>
|
||||
<td><p>5类概率分布</p></td>
|
||||
<td><p>5</p></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>CNN模型用于图片识别,不能直接导出模型,需要训练模型,该部分内容见: <a class="reference internal" href="#model-training"><span class="std std-ref">2. 模型训练</span></a></p>
|
||||
<p>定义CNN模型的代码示例如下:</p>
|
||||
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="linenos"> 1</span><span class="kn">import</span><span class="w"> </span><span class="nn">mindspore</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">ms</span>
|
||||
<span class="linenos"> 2</span><span class="kn">from</span><span class="w"> </span><span class="nn">mindspore</span><span class="w"> </span><span class="kn">import</span> <span class="n">nn</span>
|
||||
<span class="linenos"> 3</span><span class="k">class</span><span class="w"> </span><span class="nc">CNN</span><span class="p">(</span><span class="n">nn</span><span class="o">.</span><span class="n">Cell</span><span class="p">):</span>
|
||||
<span class="linenos"> 4</span><span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="linenos"> 5</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span>
|
||||
<span class="linenos"> 6</span> <span class="bp">self</span><span class="o">.</span><span class="n">conv1</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">Conv2d</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">32</span><span class="p">,</span> <span class="n">kernel_size</span><span class="o">=</span><span class="mi">3</span><span class="p">,</span> <span class="n">has_bias</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
<span class="linenos"> 7</span> <span class="bp">self</span><span class="o">.</span><span class="n">pool1</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">MaxPool2d</span><span class="p">(</span><span class="n">kernel_size</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">stride</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>
|
||||
<span class="linenos"> 8</span> <span class="bp">self</span><span class="o">.</span><span class="n">conv2</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">Conv2d</span><span class="p">(</span><span class="mi">32</span><span class="p">,</span> <span class="mi">64</span><span class="p">,</span> <span class="n">kernel_size</span><span class="o">=</span><span class="mi">3</span><span class="p">,</span> <span class="n">has_bias</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
<span class="linenos"> 9</span> <span class="bp">self</span><span class="o">.</span><span class="n">pool2</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">MaxPool2d</span><span class="p">(</span><span class="n">kernel_size</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">stride</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>
|
||||
<span class="linenos">10</span> <span class="bp">self</span><span class="o">.</span><span class="n">conv3</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">Conv2d</span><span class="p">(</span><span class="mi">64</span><span class="p">,</span> <span class="mi">128</span><span class="p">,</span> <span class="n">kernel_size</span><span class="o">=</span><span class="mi">3</span><span class="p">,</span> <span class="n">has_bias</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
<span class="linenos">11</span> <span class="bp">self</span><span class="o">.</span><span class="n">pool3</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">MaxPool2d</span><span class="p">(</span><span class="n">kernel_size</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">stride</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>
|
||||
<span class="linenos">12</span> <span class="bp">self</span><span class="o">.</span><span class="n">flatten</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">Flatten</span><span class="p">()</span>
|
||||
<span class="linenos">13</span> <span class="bp">self</span><span class="o">.</span><span class="n">dense1</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">Dense</span><span class="p">(</span><span class="mi">32768</span><span class="p">,</span> <span class="mi">64</span><span class="p">)</span>
|
||||
<span class="linenos">14</span> <span class="bp">self</span><span class="o">.</span><span class="n">dense2</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">Dense</span><span class="p">(</span><span class="mi">64</span><span class="p">,</span> <span class="mi">5</span><span class="p">)</span>
|
||||
<span class="linenos">15</span> <span class="bp">self</span><span class="o">.</span><span class="n">relu</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">ReLU</span><span class="p">()</span>
|
||||
<span class="linenos">16</span>
|
||||
<span class="linenos">17</span><span class="k">def</span><span class="w"> </span><span class="nf">construct</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">):</span>
|
||||
<span class="linenos">18</span> <span class="n">x</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">relu</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">conv1</span><span class="p">(</span><span class="n">x</span><span class="p">))</span>
|
||||
<span class="linenos">19</span> <span class="n">x</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">pool1</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
|
||||
<span class="linenos">20</span> <span class="n">x</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">relu</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">conv2</span><span class="p">(</span><span class="n">x</span><span class="p">))</span>
|
||||
<span class="linenos">21</span> <span class="n">x</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">pool2</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
|
||||
<span class="linenos">22</span> <span class="n">x</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">relu</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">conv3</span><span class="p">(</span><span class="n">x</span><span class="p">))</span>
|
||||
<span class="linenos">23</span> <span class="n">x</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">pool3</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
|
||||
<span class="linenos">24</span> <span class="n">x</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">flatten</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
|
||||
<span class="linenos">25</span> <span class="n">x</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">relu</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dense1</span><span class="p">(</span><span class="n">x</span><span class="p">))</span>
|
||||
<span class="linenos">26</span> <span class="n">x</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dense2</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
|
||||
<span class="linenos">27</span> <span class="k">return</span> <span class="n">x</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</div></blockquote>
|
||||
</section>
|
||||
<section id="model-training">
|
||||
<span id="id4"></span><h3>2. 模型训练<a class="headerlink" href="#model-training" title="此标题的永久链接"></a></h3>
|
||||
<blockquote>
|
||||
<div><p>CNN模型需要进行训练才能正确识别,训练需要数据集,这里已经提前准备好数据集,放在Target文件夹下,
|
||||
使用MindSpore框架进行模型训练,需要导入相关库和模块,定义数据预处理、模型结构、损失函数和优化器等。
|
||||
重新组网时,直接使用 <code class="docutils literal notranslate"><span class="pre">nn.GraphCell()</span></code> 接口会导致权重丢失,
|
||||
可以在训练前时使用 <code class="docutils literal notranslate"><span class="pre">ms.save_checkpoint()</span></code> 接口保存成ckpt文件,
|
||||
重新组网时,使用 <code class="docutils literal notranslate"><span class="pre">ms.load_checkpoint()</span></code> 接口加载ckpt文件即可。
|
||||
以下代码展示了如何加载数据集,进行10次模型训练,以及导出模型。
|
||||
训练以及导出模型代码如下:</p>
|
||||
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="linenos"> 1</span><span class="kn">import</span><span class="w"> </span><span class="nn">mindspore</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">ms</span>
|
||||
<span class="linenos"> 2</span><span class="kn">from</span><span class="w"> </span><span class="nn">mindspore.train.serialization</span><span class="w"> </span><span class="kn">import</span> <span class="n">export</span>
|
||||
<span class="linenos"> 3</span><span class="kn">from</span><span class="w"> </span><span class="nn">mindspore</span><span class="w"> </span><span class="kn">import</span> <span class="n">nn</span><span class="p">,</span> <span class="n">context</span>
|
||||
<span class="linenos"> 4</span><span class="kn">import</span><span class="w"> </span><span class="nn">numpy</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">np</span>
|
||||
<span class="linenos"> 5</span><span class="kn">from</span><span class="w"> </span><span class="nn">PIL</span><span class="w"> </span><span class="kn">import</span> <span class="n">Image</span>
|
||||
<span class="linenos"> 6</span><span class="kn">import</span><span class="w"> </span><span class="nn">mindspore.dataset</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">ds</span>
|
||||
<span class="linenos"> 7</span><span class="kn">from</span><span class="w"> </span><span class="nn">mindspore.dataset</span><span class="w"> </span><span class="kn">import</span> <span class="n">py_transforms</span>
|
||||
<span class="linenos"> 8</span><span class="kn">import</span><span class="w"> </span><span class="nn">mindspore.dataset.vision</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">CV</span>
|
||||
<span class="linenos"> 9</span><span class="kn">from</span><span class="w"> </span><span class="nn">mindspore.train.callback</span><span class="w"> </span><span class="kn">import</span> <span class="n">LossMonitor</span>
|
||||
<span class="linenos">10</span>
|
||||
<span class="linenos">11</span><span class="n">batch_size</span> <span class="o">=</span> <span class="mi">32</span>
|
||||
<span class="linenos">12</span><span class="n">img_size</span> <span class="o">=</span> <span class="p">(</span><span class="mi">128</span><span class="p">,</span> <span class="mi">128</span><span class="p">)</span>
|
||||
<span class="linenos">13</span><span class="n">data_path</span> <span class="o">=</span> <span class="s1">'./Target'</span>
|
||||
<span class="linenos">14</span>
|
||||
<span class="linenos">15</span><span class="c1"># 数据预处理</span>
|
||||
<span class="linenos">16</span><span class="k">def</span><span class="w"> </span><span class="nf">rescale_to_0_1</span><span class="p">(</span><span class="n">image</span><span class="p">):</span>
|
||||
<span class="linenos">17</span> <span class="k">return</span> <span class="n">image</span> <span class="o">/</span> <span class="mf">255.0</span>
|
||||
<span class="linenos">18</span>
|
||||
<span class="linenos">19</span><span class="c1"># 自定义函数,添加 color 通道维度</span>
|
||||
<span class="linenos">20</span><span class="k">def</span><span class="w"> </span><span class="nf">add_channels</span><span class="p">(</span><span class="n">image</span><span class="p">):</span>
|
||||
<span class="linenos">21</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">image</span><span class="o">.</span><span class="n">shape</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span> <span class="c1"># 单个图像,没有 cin_channel 维度</span>
|
||||
<span class="linenos">22</span> <span class="n">image_four_channels</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">expand_dims</span><span class="p">(</span><span class="n">image</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>
|
||||
<span class="linenos">23</span> <span class="k">else</span><span class="p">:</span>
|
||||
<span class="linenos">24</span> <span class="k">pass</span>
|
||||
<span class="linenos">25</span> <span class="k">return</span> <span class="n">image</span>
|
||||
<span class="linenos">26</span> <span class="k">return</span> <span class="n">image_four_channels</span>
|
||||
<span class="linenos">27</span>
|
||||
<span class="linenos">28</span><span class="k">def</span><span class="w"> </span><span class="nf">export_cnn</span><span class="p">():</span>
|
||||
<span class="linenos">29</span> <span class="n">context</span><span class="o">.</span><span class="n">set_context</span><span class="p">(</span><span class="n">mode</span><span class="o">=</span><span class="n">context</span><span class="o">.</span><span class="n">PYNATIVE_MODE</span><span class="p">,</span> <span class="n">device_target</span><span class="o">=</span><span class="s2">"CPU"</span><span class="p">)</span>
|
||||
<span class="linenos">30</span> <span class="n">resize_op</span> <span class="o">=</span> <span class="n">CV</span><span class="o">.</span><span class="n">Resize</span><span class="p">(</span><span class="n">img_size</span><span class="p">)</span>
|
||||
<span class="linenos">31</span> <span class="n">rescale_transform</span> <span class="o">=</span> <span class="n">ms</span><span class="o">.</span><span class="n">dataset</span><span class="o">.</span><span class="n">transforms</span><span class="o">.</span><span class="n">Compose</span><span class="p">([</span><span class="n">rescale_to_0_1</span><span class="p">])</span>
|
||||
<span class="linenos">32</span> <span class="n">f32_typecast</span> <span class="o">=</span> <span class="n">ms</span><span class="o">.</span><span class="n">dataset</span><span class="o">.</span><span class="n">transforms</span><span class="o">.</span><span class="n">TypeCast</span><span class="p">(</span><span class="n">ms</span><span class="o">.</span><span class="n">float32</span><span class="p">)</span>
|
||||
<span class="linenos">33</span> <span class="c1"># 将读取的 RGB 转为 GRAY 模式</span>
|
||||
<span class="linenos">34</span> <span class="n">convert_gray</span> <span class="o">=</span> <span class="n">ms</span><span class="o">.</span><span class="n">dataset</span><span class="o">.</span><span class="n">vision</span><span class="o">.</span><span class="n">ConvertColor</span><span class="p">(</span><span class="n">ms</span><span class="o">.</span><span class="n">dataset</span><span class="o">.</span><span class="n">vision</span><span class="o">.</span><span class="n">ConvertMode</span><span class="o">.</span><span class="n">COLOR_RGB2GRAY</span><span class="p">)</span>
|
||||
<span class="linenos">35</span>
|
||||
<span class="linenos">36</span> <span class="n">transform</span> <span class="o">=</span> <span class="p">[</span><span class="n">convert_gray</span><span class="p">,</span> <span class="n">resize_op</span><span class="p">,</span> <span class="n">f32_typecast</span><span class="p">,</span> <span class="n">rescale_transform</span><span class="p">,</span> <span class="n">CV</span><span class="o">.</span><span class="n">HWC2CHW</span><span class="p">()]</span>
|
||||
<span class="linenos">37</span> <span class="n">train_data</span> <span class="o">=</span> <span class="n">ds</span><span class="o">.</span><span class="n">ImageFolderDataset</span><span class="p">(</span><span class="n">dataset_dir</span><span class="o">=</span><span class="n">data_path</span><span class="p">,</span> <span class="n">decode</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">extensions</span><span class="o">=</span><span class="p">[</span><span class="s2">".JPEG"</span><span class="p">,</span> <span class="s2">".PNG"</span><span class="p">,</span> <span class="s2">".JPG"</span><span class="p">])</span>
|
||||
<span class="linenos">38</span> <span class="n">train_data</span> <span class="o">=</span> <span class="n">train_data</span><span class="o">.</span><span class="n">map</span><span class="p">(</span><span class="n">input_columns</span><span class="o">=</span><span class="s2">"image"</span><span class="p">,</span> <span class="n">operations</span><span class="o">=</span> <span class="n">transform</span><span class="p">)</span>
|
||||
<span class="linenos">39</span> <span class="n">train_data</span> <span class="o">=</span> <span class="n">train_data</span><span class="o">.</span><span class="n">map</span><span class="p">(</span><span class="n">operations</span><span class="o">=</span><span class="k">lambda</span> <span class="n">image</span><span class="p">:</span> <span class="n">add_channels</span><span class="p">(</span><span class="n">image</span><span class="p">),</span> \
|
||||
<span class="linenos">40</span> <span class="n">input_columns</span><span class="o">=</span><span class="p">[</span><span class="s2">"image"</span><span class="p">],</span> \
|
||||
<span class="linenos">41</span> <span class="n">output_columns</span><span class="o">=</span><span class="p">[</span><span class="s2">"image"</span><span class="p">])</span>
|
||||
<span class="linenos">42</span> <span class="n">train_data</span> <span class="o">=</span> <span class="n">train_data</span><span class="o">.</span><span class="n">batch</span><span class="p">(</span><span class="n">batch_size</span><span class="o">=</span><span class="n">batch_size</span><span class="p">)</span>
|
||||
<span class="linenos">43</span> <span class="n">data_iter</span> <span class="o">=</span> <span class="n">train_data</span><span class="o">.</span><span class="n">create_dict_iterator</span><span class="p">()</span>
|
||||
<span class="linenos">44</span> <span class="nb">print</span><span class="p">(</span><span class="s2">"数据集加载完成"</span><span class="p">)</span>
|
||||
<span class="linenos">45</span>
|
||||
<span class="linenos">46</span> <span class="n">my_model</span> <span class="o">=</span> <span class="n">CNN</span><span class="p">()</span>
|
||||
<span class="linenos">47</span> <span class="n">loss</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">CrossEntropyLoss</span><span class="p">(</span><span class="n">reduction</span><span class="o">=</span><span class="s1">'mean'</span><span class="p">)</span>
|
||||
<span class="linenos">48</span> <span class="n">optimizer</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">Adam</span><span class="p">(</span><span class="n">my_model</span><span class="o">.</span><span class="n">trainable_params</span><span class="p">(),</span> <span class="n">learning_rate</span><span class="o">=</span><span class="mf">0.01</span><span class="p">)</span>
|
||||
<span class="linenos">49</span> <span class="n">cnn_model</span> <span class="o">=</span> <span class="n">ms</span><span class="o">.</span><span class="n">Model</span><span class="p">(</span><span class="n">my_model</span><span class="p">,</span> <span class="n">loss_fn</span><span class="o">=</span><span class="n">loss</span><span class="p">,</span> <span class="n">optimizer</span><span class="o">=</span><span class="n">optimizer</span><span class="p">,</span> <span class="n">metrics</span><span class="o">=</span><span class="p">{</span><span class="s1">'Accuracy'</span><span class="p">:</span> <span class="n">nn</span><span class="o">.</span><span class="n">Accuracy</span><span class="p">()})</span>
|
||||
<span class="linenos">50</span> <span class="nb">print</span><span class="p">(</span><span class="s2">"网络构建完成"</span><span class="p">)</span>
|
||||
<span class="linenos">51</span> <span class="n">num_epoch</span> <span class="o">=</span> <span class="mi">10</span>
|
||||
<span class="linenos">52</span> <span class="n">cnn_model</span><span class="o">.</span><span class="n">train</span><span class="p">(</span><span class="n">num_epoch</span><span class="p">,</span> <span class="n">train_data</span><span class="p">,</span><span class="n">callbacks</span><span class="o">=</span><span class="p">[</span><span class="n">LossMonitor</span><span class="p">()],</span><span class="n">dataset_sink_mode</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
||||
<span class="linenos">53</span> <span class="n">inputs</span> <span class="o">=</span> <span class="n">ms</span><span class="o">.</span><span class="n">Tensor</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">randn</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">128</span><span class="p">,</span> <span class="mi">128</span><span class="p">)</span><span class="o">.</span><span class="n">astype</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">float32</span><span class="p">))</span>
|
||||
<span class="linenos">54</span> <span class="n">ms</span><span class="o">.</span><span class="n">save_checkpoint</span><span class="p">(</span><span class="n">my_model</span><span class="p">,</span> <span class="s1">'cnn.ckpt'</span><span class="p">)</span>
|
||||
<span class="linenos">55</span> <span class="n">export</span><span class="p">(</span><span class="n">my_model</span><span class="p">,</span> <span class="n">inputs</span><span class="p">,</span> <span class="n">file_name</span><span class="o">=</span><span class="s1">'cnn'</span><span class="p">,</span> <span class="n">file_format</span><span class="o">=</span><span class="s2">"MINDIR"</span><span class="p">)</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</div></blockquote>
|
||||
</section>
|
||||
<section id="id5">
|
||||
<h3>3. 重新组网<a class="headerlink" href="#id5" title="此标题的永久链接"></a></h3>
|
||||
<blockquote>
|
||||
<div><p>在前面章节中,我们已经完成了AI的模型的训练和导出。
|
||||
需要重新构建成一个新的网络结构,可以使用MindSpore框架的 <code class="docutils literal notranslate"><span class="pre">nn.GraphCell()</span></code> 接口来实现。
|
||||
该部分内容包括加载训练好的cnn模型,灰度化处理,重新构建网络结构,并导出新的模型。
|
||||
重新组网、导出模型以及测试的代码如下:</p>
|
||||
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="linenos"> 1</span><span class="kn">import</span><span class="w"> </span><span class="nn">cv2</span>
|
||||
<span class="linenos"> 2</span><span class="kn">import</span><span class="w"> </span><span class="nn">mindspore</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">ms</span>
|
||||
<span class="linenos"> 3</span><span class="kn">from</span><span class="w"> </span><span class="nn">mindspore.train.serialization</span><span class="w"> </span><span class="kn">import</span> <span class="n">export</span>
|
||||
<span class="linenos"> 4</span><span class="kn">import</span><span class="w"> </span><span class="nn">numpy</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">np</span>
|
||||
<span class="linenos"> 5</span><span class="kn">from</span><span class="w"> </span><span class="nn">mindspore</span><span class="w"> </span><span class="kn">import</span> <span class="n">nn</span><span class="p">,</span> <span class="n">ops</span><span class="p">,</span> <span class="n">context</span>
|
||||
<span class="linenos"> 6</span><span class="kn">from</span><span class="w"> </span><span class="nn">CNN</span><span class="w"> </span><span class="kn">import</span> <span class="n">export_cnn</span>
|
||||
<span class="linenos"> 7</span><span class="kn">from</span><span class="w"> </span><span class="nn">GRAY</span><span class="w"> </span><span class="kn">import</span> <span class="n">export_gray</span>
|
||||
<span class="linenos"> 8</span><span class="kn">from</span><span class="w"> </span><span class="nn">Connection</span><span class="w"> </span><span class="kn">import</span> <span class="n">export_connection</span>
|
||||
<span class="linenos"> 9</span>
|
||||
<span class="linenos">10</span><span class="n">class_names</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'BRDM_2'</span><span class="p">,</span> <span class="s1">'BTR_60'</span><span class="p">,</span> <span class="s1">'SLICY'</span><span class="p">,</span> <span class="s1">'T62'</span><span class="p">,</span> <span class="s1">'ZSU_23_4'</span><span class="p">]</span>
|
||||
<span class="linenos">11</span><span class="n">class_labels</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"装甲侦察车"</span><span class="p">,</span> <span class="s2">"装甲运输车"</span><span class="p">,</span> <span class="s2">"不明"</span><span class="p">,</span> <span class="s2">"坦克"</span><span class="p">,</span> <span class="s2">"自行高炮"</span><span class="p">]</span>
|
||||
<span class="linenos">12</span><span class="k">class</span><span class="w"> </span><span class="nc">GrayCNN</span><span class="p">(</span><span class="n">nn</span><span class="o">.</span><span class="n">Cell</span><span class="p">):</span>
|
||||
<span class="linenos">13</span> <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="linenos">14</span> <span class="nb">super</span><span class="p">(</span><span class="n">GrayCNN</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span>
|
||||
<span class="linenos">15</span> <span class="bp">self</span><span class="o">.</span><span class="n">split</span> <span class="o">=</span> <span class="n">ops</span><span class="o">.</span><span class="n">Split</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">output_num</span><span class="o">=</span><span class="mi">3</span><span class="p">)</span>
|
||||
<span class="linenos">16</span> <span class="bp">self</span><span class="o">.</span><span class="n">conv1</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">Conv2d</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">32</span><span class="p">,</span> <span class="n">kernel_size</span><span class="o">=</span><span class="mi">3</span><span class="p">,</span> <span class="n">has_bias</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
<span class="linenos">17</span> <span class="bp">self</span><span class="o">.</span><span class="n">pool1</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">MaxPool2d</span><span class="p">(</span><span class="n">kernel_size</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">stride</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>
|
||||
<span class="linenos">18</span> <span class="bp">self</span><span class="o">.</span><span class="n">conv2</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">Conv2d</span><span class="p">(</span><span class="mi">32</span><span class="p">,</span> <span class="mi">64</span><span class="p">,</span> <span class="n">kernel_size</span><span class="o">=</span><span class="mi">3</span><span class="p">,</span> <span class="n">has_bias</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
<span class="linenos">19</span> <span class="bp">self</span><span class="o">.</span><span class="n">pool2</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">MaxPool2d</span><span class="p">(</span><span class="n">kernel_size</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">stride</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>
|
||||
<span class="linenos">20</span> <span class="bp">self</span><span class="o">.</span><span class="n">conv3</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">Conv2d</span><span class="p">(</span><span class="mi">64</span><span class="p">,</span> <span class="mi">128</span><span class="p">,</span> <span class="n">kernel_size</span><span class="o">=</span><span class="mi">3</span><span class="p">,</span> <span class="n">has_bias</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
<span class="linenos">21</span> <span class="bp">self</span><span class="o">.</span><span class="n">pool3</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">MaxPool2d</span><span class="p">(</span><span class="n">kernel_size</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">stride</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>
|
||||
<span class="linenos">22</span> <span class="bp">self</span><span class="o">.</span><span class="n">flatten</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">Flatten</span><span class="p">()</span>
|
||||
<span class="linenos">23</span> <span class="bp">self</span><span class="o">.</span><span class="n">dense1</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">Dense</span><span class="p">(</span><span class="mi">32768</span><span class="p">,</span> <span class="mi">64</span><span class="p">)</span>
|
||||
<span class="linenos">24</span> <span class="bp">self</span><span class="o">.</span><span class="n">dense2</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">Dense</span><span class="p">(</span><span class="mi">64</span><span class="p">,</span> <span class="mi">5</span><span class="p">)</span>
|
||||
<span class="linenos">25</span> <span class="bp">self</span><span class="o">.</span><span class="n">relu</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">ReLU</span><span class="p">()</span>
|
||||
<span class="linenos">26</span> <span class="bp">self</span><span class="o">.</span><span class="n">cnn</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">GraphCell</span><span class="p">(</span><span class="n">ms</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">file_name</span><span class="o">=</span><span class="s2">"cnn.mindir"</span><span class="p">))</span>
|
||||
<span class="linenos">27</span> <span class="k">def</span><span class="w"> </span><span class="nf">construct</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">):</span>
|
||||
<span class="linenos">28</span> <span class="n">x</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
|
||||
<span class="linenos">29</span> <span class="n">b</span><span class="p">,</span> <span class="n">g</span><span class="p">,</span> <span class="n">r</span> <span class="o">=</span> <span class="n">x</span>
|
||||
<span class="linenos">30</span> <span class="n">x</span> <span class="o">=</span> <span class="p">(</span>
|
||||
<span class="linenos">31</span> <span class="n">b</span> <span class="o">*</span> <span class="mf">0.114</span> <span class="o">+</span>
|
||||
<span class="linenos">32</span> <span class="n">g</span> <span class="o">*</span> <span class="mf">0.587</span> <span class="o">+</span>
|
||||
<span class="linenos">33</span> <span class="n">r</span> <span class="o">*</span> <span class="mf">0.299</span>
|
||||
<span class="linenos">34</span> <span class="p">)</span><span class="o">.</span><span class="n">squeeze</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span>
|
||||
<span class="linenos">35</span> <span class="n">x</span> <span class="o">=</span> <span class="n">ops</span><span class="o">.</span><span class="n">clip_by_value</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">255</span><span class="p">)</span>
|
||||
<span class="linenos">36</span> <span class="n">x</span> <span class="o">=</span> <span class="n">x</span> <span class="o">/</span> <span class="mf">255.0</span> <span class="c1"># 数据归一化</span>
|
||||
<span class="linenos">37</span> <span class="n">x</span> <span class="o">=</span> <span class="n">x</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">128</span><span class="p">,</span> <span class="mi">128</span><span class="p">)</span> <span class="c1"># 灰度化处理后结果需要重塑成cnn输入形状</span>
|
||||
<span class="linenos">38</span> <span class="n">x</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">cnn</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
|
||||
<span class="linenos">39</span> <span class="k">return</span> <span class="n">x</span>
|
||||
<span class="linenos">40</span>
|
||||
<span class="linenos">41</span><span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s2">"__main__"</span><span class="p">:</span>
|
||||
<span class="linenos">42</span> <span class="n">export_cnn</span><span class="p">()</span>
|
||||
<span class="linenos">43</span> <span class="n">context</span><span class="o">.</span><span class="n">set_context</span><span class="p">(</span><span class="n">mode</span><span class="o">=</span><span class="n">context</span><span class="o">.</span><span class="n">GRAPH_MODE</span><span class="p">)</span>
|
||||
<span class="linenos">44</span> <span class="c1"># 1. 读取图片(保持原始uint8类型)</span>
|
||||
<span class="linenos">45</span> <span class="n">color_image</span> <span class="o">=</span> <span class="n">cv2</span><span class="o">.</span><span class="n">imread</span><span class="p">(</span><span class="s2">"image_origin.jpg"</span><span class="p">)</span> <span class="c1"># 默认uint8</span>
|
||||
<span class="linenos">46</span> <span class="n">resized_image</span> <span class="o">=</span> <span class="n">cv2</span><span class="o">.</span><span class="n">resize</span><span class="p">(</span>
|
||||
<span class="linenos">47</span> <span class="n">color_image</span><span class="p">,</span>
|
||||
<span class="linenos">48</span> <span class="p">(</span><span class="mi">128</span><span class="p">,</span> <span class="mi">128</span><span class="p">),</span> <span class="c1"># 目标尺寸(width, height)</span>
|
||||
<span class="linenos">49</span> <span class="n">interpolation</span><span class="o">=</span><span class="n">cv2</span><span class="o">.</span><span class="n">INTER_LINEAR</span>
|
||||
<span class="linenos">50</span> <span class="p">)</span>
|
||||
<span class="linenos">51</span> <span class="n">resized_image</span> <span class="o">=</span> <span class="n">resized_image</span><span class="o">.</span><span class="n">astype</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">float32</span><span class="p">)</span>
|
||||
<span class="linenos">52</span> <span class="n">resized_image_tensor</span> <span class="o">=</span> <span class="n">ms</span><span class="o">.</span><span class="n">Tensor</span><span class="p">(</span><span class="n">resized_image</span><span class="p">)</span>
|
||||
<span class="linenos">53</span>
|
||||
<span class="linenos">54</span> <span class="n">my_model</span> <span class="o">=</span> <span class="n">GrayCNN</span><span class="p">()</span>
|
||||
<span class="linenos">55</span> <span class="n">param_dict</span> <span class="o">=</span> <span class="n">ms</span><span class="o">.</span><span class="n">load_checkpoint</span><span class="p">(</span><span class="s2">"cnn.ckpt"</span><span class="p">)</span>
|
||||
<span class="linenos">56</span> <span class="n">param_not_load</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="n">ms</span><span class="o">.</span><span class="n">load_param_into_net</span><span class="p">(</span><span class="n">my_model</span><span class="p">,</span> <span class="n">param_dict</span><span class="p">,</span> <span class="n">strict_load</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
<span class="linenos">57</span>
|
||||
<span class="linenos">58</span> <span class="n">input_tensor</span> <span class="o">=</span> <span class="n">ms</span><span class="o">.</span><span class="n">Tensor</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">ones</span><span class="p">((</span><span class="mi">128</span><span class="p">,</span> <span class="mi">128</span><span class="p">,</span> <span class="mi">3</span><span class="p">),</span> <span class="n">dtype</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">float32</span><span class="p">))</span>
|
||||
<span class="linenos">59</span> <span class="n">export</span><span class="p">(</span><span class="n">my_model</span><span class="p">,</span> <span class="n">input_tensor</span><span class="p">,</span> <span class="n">file_name</span><span class="o">=</span><span class="s1">'gray_cnn'</span><span class="p">,</span> <span class="n">file_format</span><span class="o">=</span><span class="s1">'MINDIR'</span><span class="p">)</span>
|
||||
<span class="linenos">60</span>
|
||||
<span class="linenos">61</span> <span class="n">reload_cnn</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">GraphCell</span><span class="p">(</span><span class="n">ms</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">file_name</span><span class="o">=</span><span class="s1">'gray_cnn.mindir'</span><span class="p">))</span>
|
||||
<span class="linenos">62</span> <span class="n">reload_cnn</span> <span class="o">=</span> <span class="n">ms</span><span class="o">.</span><span class="n">Model</span><span class="p">(</span><span class="n">reload_cnn</span><span class="p">)</span>
|
||||
<span class="linenos">63</span> <span class="n">m</span> <span class="o">=</span> <span class="n">reload_cnn</span><span class="o">.</span><span class="n">predict</span><span class="p">(</span><span class="n">resized_image_tensor</span><span class="p">)</span>
|
||||
<span class="linenos">64</span> <span class="nb">print</span><span class="p">(</span><span class="n">m</span><span class="p">)</span>
|
||||
<span class="linenos">65</span> <span class="n">output_np</span> <span class="o">=</span> <span class="n">m</span><span class="o">.</span><span class="n">asnumpy</span><span class="p">()</span>
|
||||
<span class="linenos">66</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">output_np</span><span class="o">.</span><span class="n">shape</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span> <span class="c1"># 对于分类任务,通常输出是[batch_size, num_classes]</span>
|
||||
<span class="linenos">67</span> <span class="n">output_prob</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">exp</span><span class="p">(</span><span class="n">output_np</span><span class="p">)</span> <span class="o">/</span> <span class="n">np</span><span class="o">.</span><span class="n">exp</span><span class="p">(</span><span class="n">output_np</span><span class="p">)</span><span class="o">.</span><span class="n">sum</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">keepdims</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
<span class="linenos">68</span> <span class="n">predicted_class</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">argmax</span><span class="p">(</span><span class="n">output_prob</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
|
||||
<span class="linenos">69</span> <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"预测结果: </span><span class="si">{</span><span class="n">class_labels</span><span class="p">[</span><span class="n">predicted_class</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>该代码首先定义了一个新的网络结构GrayCNN,
|
||||
在 <code class="docutils literal notranslate"><span class="pre">construct</span></code> 方法中,首先通过gray模型处理输入图像,然后通过归一化和重塑张量,最后cnn模型进行识别。
|
||||
在主函数中,首先导出cnn模型。
|
||||
然后加载cnn模型参数,并使用MindSpore的 <code class="docutils literal notranslate"><span class="pre">export</span></code> 方法导出新的网络结构。
|
||||
最后,使用重新组网后的模型进行预测,并输出结果。</p>
|
||||
</div></blockquote>
|
||||
</section>
|
||||
<section id="id6">
|
||||
<h3>4. 转换模型<a class="headerlink" href="#id6" title="此标题的永久链接"></a></h3>
|
||||
<blockquote>
|
||||
<div><p>在前面的代码中,我们已经使用了 <code class="docutils literal notranslate"><span class="pre">export</span></code> 方法导出了gray_cnn.mindir模型。
|
||||
要将该模型部署到FT78NE平台,需要将MINDIR格式转换成mindspore lite的ms格式模型。
|
||||
要将该模型转换为ms格式,可以使用MindSpore的转换工具(converter_lite)。
|
||||
该工具已经集成在我们的 <code class="docutils literal notranslate"><span class="pre">YHFT-IDE</span></code> 中,可以直接在IDE中使用。或者也可以使用命令行工具进行转换。</p>
|
||||
<p>转换命令如下:</p>
|
||||
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>./converter_lite<span class="w"> </span>--fmk<span class="o">=</span>MINDIR<span class="w"> </span>--modelFile<span class="o">=</span>gray_cnn.mindir<span class="w"> </span>--outputFile<span class="o">=</span>gray_cnn
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>转换完成后,会在当前目录下生成gray_cnn.ms模型文件。该模型可以使用可视化工具(netron)可以打开该文件,查看模型结构。
|
||||
该工具可以直接在 <code class="docutils literal notranslate"><span class="pre">YHFT-IDE</span></code> 中使用,可以从官网下载使用,也可以在线使用。在线地址为:<a class="reference external" href="https://netron.app/">https://netron.app/</a>。</p>
|
||||
<p>该模型文件可视化如图所示:</p>
|
||||
<a class="reference internal image-reference" href="../../_images/gray_cnn.png"><img alt="gray_cnn模型结构图" class="align-center" src="../../_images/gray_cnn.png" style="width: 40.0%; height: 2025.0px;" /></a>
|
||||
</div></blockquote>
|
||||
</section>
|
||||
<section id="id7">
|
||||
<h3>5. 部署和运行程序<a class="headerlink" href="#id7" title="此标题的永久链接"></a></h3>
|
||||
<blockquote>
|
||||
<div><ul>
|
||||
<li><p>在IDE中新建一个Python项目,将下面的 <a class="reference internal" href="#python-code"><span class="std std-ref">python完整代码示例</span></a> 代码拷贝到项目中,并运行。
|
||||
运行成功后,会在当前目录下生成一个名为 <code class="docutils literal notranslate"><span class="pre">gray_cnn.midir</span></code> 的模型文件,以及输出图片的预测结果。
|
||||
结果如图所示:</p>
|
||||
<a class="reference internal image-reference" href="../../_images/python_gray_cnn_res.png"><img alt="python运行结果" class="align-center" src="../../_images/python_gray_cnn_res.png" style="width: 40.0%; height: 67.5px;" /></a>
|
||||
<p>将该文件转换为ms格式,并将ms格式模型和测试图片拷贝到FT78NE平台中。</p>
|
||||
</li>
|
||||
<li><p>打开 <code class="docutils literal notranslate"><span class="pre">YHFT-IDE</span></code> ,新建工程。输入工程名、路径,工程类型选择 <code class="docutils literal notranslate"><span class="pre">Heterogeneous</span></code> ,
|
||||
输入交叉编译工具路径,然后点确定。会生成一个异构模板工程。通过修改 <code class="docutils literal notranslate"><span class="pre">data_handler.cc</span></code> 文件中的函数来调整输入输出数据,
|
||||
输入改成读取的图片路径;输出改成相应的后处理。在 <code class="docutils literal notranslate"><span class="pre">main</span></code> 函数设置运行后端;修改 <code class="docutils literal notranslate"><span class="pre">CMakeLists.txt</span></code> 文件,
|
||||
添加openCV库的lib和include路径, 最后编译该工程,编译成功后将build文件夹下的 <code class="docutils literal notranslate"><span class="pre">main</span></code> 拷贝到FT78NE平台中,
|
||||
要和gray_cnn.ms模型同一个文件夹下。</p>
|
||||
<p>输入的c++代码示例如下:</p>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="highlight-c++ notranslate"><div class="highlight"><pre><span></span><span class="linenos"> 1</span><span class="cp">#include</span><span class="w"> </span><span class="cpf"><opencv2/opencv.hpp></span>
|
||||
<span class="linenos"> 2</span><span class="kt">int</span><span class="w"> </span><span class="nf">readImage</span><span class="p">(</span><span class="kt">float</span><span class="w"> </span><span class="o">*</span><span class="n">reslut</span><span class="p">,</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="w"> </span><span class="n">imagePath</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
|
||||
<span class="linenos"> 3</span><span class="w"> </span><span class="n">cv</span><span class="o">::</span><span class="n">Mat</span><span class="w"> </span><span class="n">color_image</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">cv</span><span class="o">::</span><span class="n">imread</span><span class="p">(</span><span class="n">imagePath</span><span class="p">.</span><span class="n">c_str</span><span class="p">(),</span><span class="w"> </span><span class="n">cv</span><span class="o">::</span><span class="n">IMREAD_COLOR</span><span class="p">);</span>
|
||||
<span class="linenos"> 4</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">color_image</span><span class="p">.</span><span class="n">empty</span><span class="p">())</span><span class="w"> </span><span class="p">{</span>
|
||||
<span class="linenos"> 5</span><span class="w"> </span><span class="n">fprintf</span><span class="p">(</span><span class="n">stderr</span><span class="p">,</span><span class="w"> </span><span class="s">"read image failed</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span>
|
||||
<span class="linenos"> 6</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">-1</span><span class="p">;</span>
|
||||
<span class="linenos"> 7</span><span class="w"> </span><span class="p">}</span>
|
||||
<span class="linenos"> 8</span>
|
||||
<span class="linenos"> 9</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">width</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">128</span><span class="p">;</span>
|
||||
<span class="linenos">10</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">height</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">128</span><span class="p">;</span>
|
||||
<span class="linenos">11</span><span class="w"> </span><span class="n">cv</span><span class="o">::</span><span class="n">Mat</span><span class="w"> </span><span class="n">resized_image</span><span class="p">;</span>
|
||||
<span class="linenos">12</span><span class="w"> </span><span class="n">cv</span><span class="o">::</span><span class="n">resize</span><span class="p">(</span><span class="n">color_image</span><span class="p">,</span><span class="w"> </span><span class="n">resized_image</span><span class="p">,</span><span class="w"> </span><span class="n">cv</span><span class="o">::</span><span class="n">Size</span><span class="p">(</span><span class="n">width</span><span class="p">,</span><span class="w"> </span><span class="n">height</span><span class="p">),</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="n">cv</span><span class="o">::</span><span class="n">INTER_LINEAR</span><span class="p">);</span>
|
||||
<span class="linenos">13</span><span class="w"> </span><span class="n">resized_image</span><span class="p">.</span><span class="n">convertTo</span><span class="p">(</span><span class="n">resized_image</span><span class="p">,</span><span class="w"> </span><span class="n">CV_32F</span><span class="p">);</span>
|
||||
<span class="linenos">14</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">channels</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">resized_image</span><span class="p">.</span><span class="n">channels</span><span class="p">();</span>
|
||||
<span class="linenos">15</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">element_count</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">width</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">height</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">channels</span><span class="p">;</span>
|
||||
<span class="linenos">16</span>
|
||||
<span class="linenos">17</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="n">height</span><span class="p">;</span><span class="w"> </span><span class="o">++</span><span class="n">i</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
|
||||
<span class="linenos">18</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">float</span><span class="w"> </span><span class="o">*</span><span class="n">src_ptr</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">resized_image</span><span class="p">.</span><span class="n">ptr</span><span class="o"><</span><span class="kt">float</span><span class="o">></span><span class="p">(</span><span class="n">i</span><span class="p">);</span>
|
||||
<span class="linenos">19</span><span class="w"> </span><span class="kt">float</span><span class="w"> </span><span class="o">*</span><span class="n">dst_ptr</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">reslut</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">width</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">channels</span><span class="p">;</span>
|
||||
<span class="linenos">20</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">memcpy</span><span class="p">(</span><span class="n">dst_ptr</span><span class="p">,</span><span class="w"> </span><span class="n">src_ptr</span><span class="p">,</span><span class="w"> </span><span class="n">width</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">channels</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="k">sizeof</span><span class="p">(</span><span class="kt">float</span><span class="p">));</span>
|
||||
<span class="linenos">21</span><span class="w"> </span><span class="p">}</span>
|
||||
<span class="linenos">22</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
|
||||
<span class="linenos">23</span><span class="p">}</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>设置后端代码如下:</p>
|
||||
<div class="highlight-c++ notranslate"><div class="highlight"><pre><span></span><span class="linenos">1</span><span class="k">auto</span><span class="w"> </span><span class="n">context</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">make_shared</span><span class="o"><</span><span class="n">mindspore</span><span class="o">::</span><span class="n">Context</span><span class="o">></span><span class="p">();</span>
|
||||
<span class="linenos">2</span><span class="k">auto</span><span class="w"> </span><span class="o">&</span><span class="n">device_list</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">context</span><span class="o">-></span><span class="n">MutableDeviceInfo</span><span class="p">();</span>
|
||||
<span class="linenos">3</span><span class="n">context</span><span class="o">-></span><span class="n">SetBuiltInDelegate</span><span class="p">(</span><span class="n">mindspore</span><span class="o">::</span><span class="n">DelegateMode</span><span class="o">::</span><span class="n">kPNNA</span><span class="p">);</span>
|
||||
<span class="linenos">4</span><span class="k">auto</span><span class="w"> </span><span class="n">cpu_info</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">make_shared</span><span class="o"><</span><span class="n">mindspore</span><span class="o">::</span><span class="n">CPUDeviceInfo</span><span class="o">></span><span class="p">();</span>
|
||||
<span class="linenos">5</span><span class="k">auto</span><span class="w"> </span><span class="n">dsp_info</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">make_shared</span><span class="o"><</span><span class="n">mindspore</span><span class="o">::</span><span class="n">FT78NEDeviceInfo</span><span class="o">></span><span class="p">();</span>
|
||||
<span class="linenos">6</span><span class="n">device_list</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="n">dsp_info</span><span class="p">);</span>
|
||||
<span class="linenos">7</span><span class="n">device_list</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="n">cpu_info</span><span class="p">);</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>输出结果后处理代码如下:</p>
|
||||
<div class="highlight-c++ notranslate"><div class="highlight"><pre><span></span><span class="linenos"> 1</span><span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="kt">float</span><span class="o">></span><span class="w"> </span><span class="n">floatArrayToVector</span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="kt">float</span><span class="w"> </span><span class="o">*</span><span class="n">array</span><span class="p">,</span><span class="w"> </span><span class="kt">size_t</span><span class="w"> </span><span class="n">size</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
|
||||
<span class="linenos"> 2</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="kt">float</span><span class="o">></span><span class="w"> </span><span class="n">vec</span><span class="p">(</span><span class="n">array</span><span class="p">,</span><span class="w"> </span><span class="n">array</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">size</span><span class="p">);</span>
|
||||
<span class="linenos"> 3</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">vec</span><span class="p">;</span>
|
||||
<span class="linenos"> 4</span><span class="p">}</span>
|
||||
<span class="linenos"> 5</span>
|
||||
<span class="linenos"> 6</span><span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="kt">float</span><span class="o">></span><span class="w"> </span><span class="n">numpy_exp</span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="kt">float</span><span class="o">></span><span class="w"> </span><span class="o">&</span><span class="n">x</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
|
||||
<span class="linenos"> 7</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="kt">float</span><span class="o">></span><span class="w"> </span><span class="n">result</span><span class="p">;</span>
|
||||
<span class="linenos"> 8</span><span class="w"> </span><span class="n">result</span><span class="p">.</span><span class="n">reserve</span><span class="p">(</span><span class="n">x</span><span class="p">.</span><span class="n">size</span><span class="p">());</span>
|
||||
<span class="linenos"> 9</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kt">float</span><span class="w"> </span><span class="n">num</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="n">x</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
|
||||
<span class="linenos">10</span><span class="w"> </span><span class="n">result</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="n">exp</span><span class="p">(</span><span class="n">num</span><span class="p">));</span>
|
||||
<span class="linenos">11</span><span class="w"> </span><span class="p">}</span>
|
||||
<span class="linenos">12</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">result</span><span class="p">;</span>
|
||||
<span class="linenos">13</span><span class="p">}</span>
|
||||
<span class="linenos">14</span>
|
||||
<span class="linenos">15</span><span class="kt">float</span><span class="w"> </span><span class="n">sum_rows</span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="kt">float</span><span class="o">></span><span class="w"> </span><span class="o">&</span><span class="n">vec</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">axis</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
|
||||
<span class="linenos">16</span><span class="w"> </span><span class="kt">float</span><span class="w"> </span><span class="n">sum</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">accumulate</span><span class="p">(</span><span class="n">vec</span><span class="p">.</span><span class="n">begin</span><span class="p">(),</span><span class="w"> </span><span class="n">vec</span><span class="p">.</span><span class="n">end</span><span class="p">(),</span><span class="w"> </span><span class="mf">0.0</span><span class="p">);</span>
|
||||
<span class="linenos">17</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">sum</span><span class="p">;</span>
|
||||
<span class="linenos">18</span><span class="p">}</span>
|
||||
<span class="linenos">19</span>
|
||||
<span class="linenos">20</span><span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="kt">float</span><span class="o">>></span><span class="w"> </span><span class="n">convertTo2D</span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="kt">float</span><span class="o">></span><span class="w"> </span><span class="o">&</span><span class="n">vec</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">rows</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
|
||||
<span class="linenos">21</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="kt">float</span><span class="o">>></span><span class="w"> </span><span class="n">result</span><span class="p">;</span>
|
||||
<span class="linenos">22</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">vec</span><span class="p">.</span><span class="n">empty</span><span class="p">()</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="n">rows</span><span class="w"> </span><span class="o"><=</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
|
||||
<span class="linenos">23</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">result</span><span class="p">;</span>
|
||||
<span class="linenos">24</span><span class="w"> </span><span class="p">}</span>
|
||||
<span class="linenos">25</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">cols</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">vec</span><span class="p">.</span><span class="n">size</span><span class="p">()</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">rows</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="mi">1</span><span class="p">)</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="n">rows</span><span class="p">;</span><span class="w"> </span><span class="c1">// 计算列数</span>
|
||||
<span class="linenos">26</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="n">rows</span><span class="p">;</span><span class="w"> </span><span class="o">++</span><span class="n">i</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
|
||||
<span class="linenos">27</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="kt">float</span><span class="o">></span><span class="w"> </span><span class="n">row</span><span class="p">;</span>
|
||||
<span class="linenos">28</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">j</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">j</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="n">cols</span><span class="p">;</span><span class="w"> </span><span class="o">++</span><span class="n">j</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
|
||||
<span class="linenos">29</span><span class="w"> </span><span class="kt">size_t</span><span class="w"> </span><span class="n">index</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">cols</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">j</span><span class="p">;</span><span class="w"> </span><span class="c1">// 计算索引</span>
|
||||
<span class="linenos">30</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">index</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="n">vec</span><span class="p">.</span><span class="n">size</span><span class="p">())</span><span class="w"> </span><span class="p">{</span>
|
||||
<span class="linenos">31</span><span class="w"> </span><span class="n">row</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="n">vec</span><span class="p">[</span><span class="n">index</span><span class="p">]);</span>
|
||||
<span class="linenos">32</span><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span>
|
||||
<span class="linenos">33</span><span class="w"> </span><span class="n">row</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="mi">0</span><span class="p">);</span><span class="w"> </span><span class="c1">// 填充剩余空间,或者你可以选择不填充</span>
|
||||
<span class="linenos">34</span><span class="w"> </span><span class="p">}</span>
|
||||
<span class="linenos">35</span><span class="w"> </span><span class="p">}</span>
|
||||
<span class="linenos">36</span><span class="w"> </span><span class="n">result</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="n">row</span><span class="p">);</span>
|
||||
<span class="linenos">37</span><span class="w"> </span><span class="p">}</span>
|
||||
<span class="linenos">38</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">result</span><span class="p">;</span>
|
||||
<span class="linenos">39</span><span class="p">}</span>
|
||||
<span class="linenos">40</span>
|
||||
<span class="linenos">41</span><span class="kt">void</span><span class="w"> </span><span class="n">GetOutputData</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="n">MSTensor</span><span class="o">></span><span class="w"> </span><span class="o">&</span><span class="n">outputs</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
|
||||
<span class="linenos">42</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="k">auto</span><span class="w"> </span><span class="n">tensor</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="n">outputs</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
|
||||
<span class="linenos">43</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">cout</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="s">"tensor name is:"</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="n">tensor</span><span class="p">.</span><span class="n">Name</span><span class="p">()</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="s">" tensor size is:"</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="n">tensor</span><span class="p">.</span><span class="n">DataSize</span><span class="p">()</span>
|
||||
<span class="linenos">44</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="s">" tensor elements num is:"</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="n">tensor</span><span class="p">.</span><span class="n">ElementNum</span><span class="p">()</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
|
||||
<span class="linenos">45</span><span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">out_data</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">reinterpret_cast</span><span class="o"><</span><span class="k">const</span><span class="w"> </span><span class="kt">float</span><span class="w"> </span><span class="o">*></span><span class="p">(</span><span class="n">tensor</span><span class="p">.</span><span class="n">Data</span><span class="p">().</span><span class="n">get</span><span class="p">());</span>
|
||||
<span class="linenos">46</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">cout</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="s">"output data is:"</span><span class="p">;</span>
|
||||
<span class="linenos">47</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="n">tensor</span><span class="p">.</span><span class="n">ElementNum</span><span class="p">()</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o"><=</span><span class="w"> </span><span class="mi">50</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
|
||||
<span class="linenos">48</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">cout</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="n">out_data</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="s">" "</span><span class="p">;</span>
|
||||
<span class="linenos">49</span><span class="w"> </span><span class="p">}</span>
|
||||
<span class="linenos">50</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">cout</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
|
||||
<span class="linenos">51</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="kt">float</span><span class="o">></span><span class="w"> </span><span class="n">out</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">floatArrayToVector</span><span class="p">(</span><span class="n">out_data</span><span class="p">,</span><span class="w"> </span><span class="n">tensor</span><span class="p">.</span><span class="n">ElementNum</span><span class="p">());</span>
|
||||
<span class="linenos">52</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="kt">float</span><span class="o">></span><span class="w"> </span><span class="n">exp_x</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">numpy_exp</span><span class="p">(</span><span class="n">out</span><span class="p">);</span>
|
||||
<span class="linenos">53</span><span class="w"> </span><span class="kt">float</span><span class="w"> </span><span class="n">sums</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">sum_rows</span><span class="p">(</span><span class="n">exp_x</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span>
|
||||
<span class="linenos">54</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="kt">float</span><span class="o">></span><span class="w"> </span><span class="n">x1</span><span class="p">;</span>
|
||||
<span class="linenos">55</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kt">float</span><span class="w"> </span><span class="n">num</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="n">exp_x</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
|
||||
<span class="linenos">56</span><span class="w"> </span><span class="n">x1</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="n">num</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="n">sums</span><span class="p">);</span>
|
||||
<span class="linenos">57</span><span class="w"> </span><span class="p">}</span>
|
||||
<span class="linenos">58</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="kt">float</span><span class="o">>></span><span class="w"> </span><span class="n">twoD</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">convertTo2D</span><span class="p">(</span><span class="n">x1</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span>
|
||||
<span class="linenos">59</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="kt">int</span><span class="o">></span><span class="w"> </span><span class="n">argmax_indices</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">argmax</span><span class="p">(</span><span class="n">twoD</span><span class="p">);</span>
|
||||
<span class="linenos">60</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">></span><span class="w"> </span><span class="n">Predicted_class</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="s">"装甲侦察车"</span><span class="p">,</span><span class="w"> </span><span class="s">"装甲运输车"</span><span class="p">,</span><span class="w"> </span><span class="s">"不明"</span><span class="p">,</span><span class="w"> </span><span class="s">"坦克"</span><span class="p">,</span><span class="w"> </span><span class="s">"自行高炮"</span><span class="p">};</span>
|
||||
<span class="linenos">61</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">cout</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="s">"预测结果: "</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="n">Predicted_class</span><span class="p">[</span><span class="n">argmax_indices</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
|
||||
<span class="linenos">62</span><span class="w"> </span><span class="p">}</span>
|
||||
<span class="linenos">63</span><span class="p">}</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<ul>
|
||||
<li><p>在FT78NE上运行可执行文件 <code class="docutils literal notranslate"><span class="pre">main</span></code> ,观察输出结果。与预期结果对比,验证模型推理的正确性。
|
||||
执行命令如下:</p>
|
||||
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="linenos">1</span>./main<span class="w"> </span>gray_cnn.ms<span class="w"> </span>image_origin.jpg
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
<p>执行结果如下图:</p>
|
||||
<a class="reference internal image-reference" href="../../_images/ft78ne_gray_cnn_output.png"><img alt="FT78NE运行结果" class="align-center" src="../../_images/ft78ne_gray_cnn_output.png" style="width: 40.0%; height: 49.0px;" /></a>
|
||||
</div></blockquote>
|
||||
</section>
|
||||
</section>
|
||||
<section id="python">
|
||||
<span id="python-code"></span><h2>python完整代码示例<a class="headerlink" href="#python" title="此标题的永久链接"></a></h2>
|
||||
<blockquote>
|
||||
<div><div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="linenos"> 1</span><span class="c1"># CNN.py</span>
|
||||
<span class="linenos"> 2</span><span class="kn">import</span><span class="w"> </span><span class="nn">mindspore</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">ms</span>
|
||||
<span class="linenos"> 3</span><span class="kn">from</span><span class="w"> </span><span class="nn">mindspore.train.serialization</span><span class="w"> </span><span class="kn">import</span> <span class="n">export</span>
|
||||
<span class="linenos"> 4</span><span class="kn">from</span><span class="w"> </span><span class="nn">mindspore</span><span class="w"> </span><span class="kn">import</span> <span class="n">nn</span><span class="p">,</span> <span class="n">context</span>
|
||||
<span class="linenos"> 5</span><span class="kn">import</span><span class="w"> </span><span class="nn">numpy</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">np</span>
|
||||
<span class="linenos"> 6</span><span class="kn">from</span><span class="w"> </span><span class="nn">PIL</span><span class="w"> </span><span class="kn">import</span> <span class="n">Image</span>
|
||||
<span class="linenos"> 7</span><span class="kn">import</span><span class="w"> </span><span class="nn">mindspore.dataset</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">ds</span>
|
||||
<span class="linenos"> 8</span><span class="kn">from</span><span class="w"> </span><span class="nn">mindspore.dataset</span><span class="w"> </span><span class="kn">import</span> <span class="n">py_transforms</span>
|
||||
<span class="linenos"> 9</span><span class="kn">import</span><span class="w"> </span><span class="nn">mindspore.dataset.vision</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">CV</span>
|
||||
<span class="linenos">10</span><span class="kn">from</span><span class="w"> </span><span class="nn">mindspore.train.callback</span><span class="w"> </span><span class="kn">import</span> <span class="n">LossMonitor</span>
|
||||
<span class="linenos">11</span>
|
||||
<span class="linenos">12</span><span class="c1"># # Define directories and parameters</span>
|
||||
<span class="linenos">13</span><span class="n">batch_size</span> <span class="o">=</span> <span class="mi">32</span>
|
||||
<span class="linenos">14</span><span class="n">img_size</span> <span class="o">=</span> <span class="p">(</span><span class="mi">128</span><span class="p">,</span> <span class="mi">128</span><span class="p">)</span>
|
||||
<span class="linenos">15</span><span class="n">data_path</span> <span class="o">=</span> <span class="s1">'../cnn-sar/Target'</span>
|
||||
<span class="linenos">16</span>
|
||||
<span class="linenos">17</span><span class="c1"># 数据预处理</span>
|
||||
<span class="linenos">18</span><span class="k">def</span><span class="w"> </span><span class="nf">rescale_to_0_1</span><span class="p">(</span><span class="n">image</span><span class="p">):</span>
|
||||
<span class="linenos">19</span> <span class="k">return</span> <span class="n">image</span> <span class="o">/</span> <span class="mf">255.0</span>
|
||||
<span class="linenos">20</span>
|
||||
<span class="linenos">21</span><span class="c1"># 自定义函数,添加 color 通道维度</span>
|
||||
<span class="linenos">22</span><span class="k">def</span><span class="w"> </span><span class="nf">add_channels</span><span class="p">(</span><span class="n">image</span><span class="p">):</span>
|
||||
<span class="linenos">23</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">image</span><span class="o">.</span><span class="n">shape</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span> <span class="c1"># 单个图像,没有 cin_channel 维度</span>
|
||||
<span class="linenos">24</span> <span class="c1"># print("before ===> ", image.shape)</span>
|
||||
<span class="linenos">25</span> <span class="c1"># 添加 color 通道维度,(128x128) => (1, 128, 128)</span>
|
||||
<span class="linenos">26</span> <span class="n">image_four_channels</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">expand_dims</span><span class="p">(</span><span class="n">image</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>
|
||||
<span class="linenos">27</span> <span class="c1"># print("after ===> ", image_four_channels.shape)</span>
|
||||
<span class="linenos">28</span> <span class="k">else</span><span class="p">:</span>
|
||||
<span class="linenos">29</span> <span class="k">pass</span>
|
||||
<span class="linenos">30</span> <span class="k">return</span> <span class="n">image</span>
|
||||
<span class="linenos">31</span> <span class="k">return</span> <span class="n">image_four_channels</span>
|
||||
<span class="linenos">32</span>
|
||||
<span class="linenos">33</span><span class="k">class</span><span class="w"> </span><span class="nc">CNN</span><span class="p">(</span><span class="n">ms</span><span class="o">.</span><span class="n">nn</span><span class="o">.</span><span class="n">Cell</span><span class="p">):</span>
|
||||
<span class="linenos">34</span> <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="linenos">35</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span>
|
||||
<span class="linenos">36</span> <span class="bp">self</span><span class="o">.</span><span class="n">conv1</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">Conv2d</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">32</span><span class="p">,</span> <span class="n">kernel_size</span><span class="o">=</span><span class="mi">3</span><span class="p">,</span> <span class="n">has_bias</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
<span class="linenos">37</span> <span class="bp">self</span><span class="o">.</span><span class="n">pool1</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">MaxPool2d</span><span class="p">(</span><span class="n">kernel_size</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">stride</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>
|
||||
<span class="linenos">38</span> <span class="bp">self</span><span class="o">.</span><span class="n">conv2</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">Conv2d</span><span class="p">(</span><span class="mi">32</span><span class="p">,</span> <span class="mi">64</span><span class="p">,</span> <span class="n">kernel_size</span><span class="o">=</span><span class="mi">3</span><span class="p">,</span> <span class="n">has_bias</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
<span class="linenos">39</span> <span class="bp">self</span><span class="o">.</span><span class="n">pool2</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">MaxPool2d</span><span class="p">(</span><span class="n">kernel_size</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">stride</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>
|
||||
<span class="linenos">40</span> <span class="bp">self</span><span class="o">.</span><span class="n">conv3</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">Conv2d</span><span class="p">(</span><span class="mi">64</span><span class="p">,</span> <span class="mi">128</span><span class="p">,</span> <span class="n">kernel_size</span><span class="o">=</span><span class="mi">3</span><span class="p">,</span> <span class="n">has_bias</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
<span class="linenos">41</span> <span class="bp">self</span><span class="o">.</span><span class="n">pool3</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">MaxPool2d</span><span class="p">(</span><span class="n">kernel_size</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">stride</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>
|
||||
<span class="linenos">42</span> <span class="bp">self</span><span class="o">.</span><span class="n">flatten</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">Flatten</span><span class="p">()</span>
|
||||
<span class="linenos">43</span> <span class="bp">self</span><span class="o">.</span><span class="n">dense1</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">Dense</span><span class="p">(</span><span class="mi">32768</span><span class="p">,</span> <span class="mi">64</span><span class="p">)</span>
|
||||
<span class="linenos">44</span> <span class="bp">self</span><span class="o">.</span><span class="n">dense2</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">Dense</span><span class="p">(</span><span class="mi">64</span><span class="p">,</span> <span class="mi">5</span><span class="p">)</span>
|
||||
<span class="linenos">45</span> <span class="bp">self</span><span class="o">.</span><span class="n">relu</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">ReLU</span><span class="p">()</span>
|
||||
<span class="linenos">46</span>
|
||||
<span class="linenos">47</span> <span class="k">def</span><span class="w"> </span><span class="nf">construct</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">):</span>
|
||||
<span class="linenos">48</span> <span class="n">x</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">relu</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">conv1</span><span class="p">(</span><span class="n">x</span><span class="p">))</span>
|
||||
<span class="linenos">49</span> <span class="n">x</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">pool1</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
|
||||
<span class="linenos">50</span> <span class="n">x</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">relu</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">conv2</span><span class="p">(</span><span class="n">x</span><span class="p">))</span>
|
||||
<span class="linenos">51</span> <span class="n">x</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">pool2</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
|
||||
<span class="linenos">52</span> <span class="n">x</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">relu</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">conv3</span><span class="p">(</span><span class="n">x</span><span class="p">))</span>
|
||||
<span class="linenos">53</span> <span class="n">x</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">pool3</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
|
||||
<span class="linenos">54</span> <span class="n">x</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">flatten</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
|
||||
<span class="linenos">55</span> <span class="n">x</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">relu</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dense1</span><span class="p">(</span><span class="n">x</span><span class="p">))</span>
|
||||
<span class="linenos">56</span> <span class="n">x</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dense2</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
|
||||
<span class="linenos">57</span> <span class="k">return</span> <span class="n">x</span>
|
||||
<span class="linenos">58</span>
|
||||
<span class="linenos">59</span><span class="k">def</span><span class="w"> </span><span class="nf">export_cnn</span><span class="p">():</span>
|
||||
<span class="linenos">60</span> <span class="n">context</span><span class="o">.</span><span class="n">set_context</span><span class="p">(</span><span class="n">mode</span><span class="o">=</span><span class="n">context</span><span class="o">.</span><span class="n">PYNATIVE_MODE</span><span class="p">,</span> <span class="n">device_target</span><span class="o">=</span><span class="s2">"CPU"</span><span class="p">)</span>
|
||||
<span class="linenos">61</span> <span class="n">resize_op</span> <span class="o">=</span> <span class="n">CV</span><span class="o">.</span><span class="n">Resize</span><span class="p">(</span><span class="n">img_size</span><span class="p">)</span>
|
||||
<span class="linenos">62</span> <span class="n">rescale_transform</span> <span class="o">=</span> <span class="n">ms</span><span class="o">.</span><span class="n">dataset</span><span class="o">.</span><span class="n">transforms</span><span class="o">.</span><span class="n">Compose</span><span class="p">([</span><span class="n">rescale_to_0_1</span><span class="p">])</span>
|
||||
<span class="linenos">63</span> <span class="n">f32_typecast</span> <span class="o">=</span> <span class="n">ms</span><span class="o">.</span><span class="n">dataset</span><span class="o">.</span><span class="n">transforms</span><span class="o">.</span><span class="n">TypeCast</span><span class="p">(</span><span class="n">ms</span><span class="o">.</span><span class="n">float32</span><span class="p">)</span>
|
||||
<span class="linenos">64</span> <span class="c1"># 将读取的 RGB 转为 GRAY 模式</span>
|
||||
<span class="linenos">65</span> <span class="n">convert_gray</span> <span class="o">=</span> <span class="n">ms</span><span class="o">.</span><span class="n">dataset</span><span class="o">.</span><span class="n">vision</span><span class="o">.</span><span class="n">ConvertColor</span><span class="p">(</span><span class="n">ms</span><span class="o">.</span><span class="n">dataset</span><span class="o">.</span><span class="n">vision</span><span class="o">.</span><span class="n">ConvertMode</span><span class="o">.</span><span class="n">COLOR_RGB2GRAY</span><span class="p">)</span>
|
||||
<span class="linenos">66</span>
|
||||
<span class="linenos">67</span> <span class="n">transform</span> <span class="o">=</span> <span class="p">[</span><span class="n">convert_gray</span><span class="p">,</span> <span class="n">resize_op</span><span class="p">,</span> <span class="n">f32_typecast</span><span class="p">,</span> <span class="n">rescale_transform</span><span class="p">,</span> <span class="n">CV</span><span class="o">.</span><span class="n">HWC2CHW</span><span class="p">()]</span>
|
||||
<span class="linenos">68</span> <span class="n">train_data</span> <span class="o">=</span> <span class="n">ds</span><span class="o">.</span><span class="n">ImageFolderDataset</span><span class="p">(</span><span class="n">dataset_dir</span><span class="o">=</span><span class="n">data_path</span><span class="p">,</span> <span class="n">decode</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">extensions</span><span class="o">=</span><span class="p">[</span><span class="s2">".JPEG"</span><span class="p">,</span> <span class="s2">".PNG"</span><span class="p">,</span> <span class="s2">".JPG"</span><span class="p">])</span>
|
||||
<span class="linenos">69</span> <span class="n">train_data</span> <span class="o">=</span> <span class="n">train_data</span><span class="o">.</span><span class="n">map</span><span class="p">(</span><span class="n">input_columns</span><span class="o">=</span><span class="s2">"image"</span><span class="p">,</span> <span class="n">operations</span><span class="o">=</span> <span class="n">transform</span><span class="p">)</span>
|
||||
<span class="linenos">70</span> <span class="n">train_data</span> <span class="o">=</span> <span class="n">train_data</span><span class="o">.</span><span class="n">map</span><span class="p">(</span><span class="n">operations</span><span class="o">=</span><span class="k">lambda</span> <span class="n">image</span><span class="p">:</span> <span class="n">add_channels</span><span class="p">(</span><span class="n">image</span><span class="p">),</span> \
|
||||
<span class="linenos">71</span> <span class="n">input_columns</span><span class="o">=</span><span class="p">[</span><span class="s2">"image"</span><span class="p">],</span> \
|
||||
<span class="linenos">72</span> <span class="n">output_columns</span><span class="o">=</span><span class="p">[</span><span class="s2">"image"</span><span class="p">])</span>
|
||||
<span class="linenos">73</span> <span class="n">train_data</span> <span class="o">=</span> <span class="n">train_data</span><span class="o">.</span><span class="n">batch</span><span class="p">(</span><span class="n">batch_size</span><span class="o">=</span><span class="n">batch_size</span><span class="p">)</span>
|
||||
<span class="linenos">74</span> <span class="n">data_iter</span> <span class="o">=</span> <span class="n">train_data</span><span class="o">.</span><span class="n">create_dict_iterator</span><span class="p">()</span>
|
||||
<span class="linenos">75</span> <span class="nb">print</span><span class="p">(</span><span class="s2">"数据集加载完成"</span><span class="p">)</span>
|
||||
<span class="linenos">76</span> <span class="n">my_model</span> <span class="o">=</span> <span class="n">CNN</span><span class="p">()</span>
|
||||
<span class="linenos">77</span> <span class="n">loss</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">CrossEntropyLoss</span><span class="p">(</span><span class="n">reduction</span><span class="o">=</span><span class="s1">'mean'</span><span class="p">)</span>
|
||||
<span class="linenos">78</span> <span class="n">optimizer</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">Adam</span><span class="p">(</span><span class="n">my_model</span><span class="o">.</span><span class="n">trainable_params</span><span class="p">(),</span> <span class="n">learning_rate</span><span class="o">=</span><span class="mf">0.01</span><span class="p">)</span>
|
||||
<span class="linenos">79</span> <span class="n">cnn_model</span> <span class="o">=</span> <span class="n">ms</span><span class="o">.</span><span class="n">Model</span><span class="p">(</span><span class="n">my_model</span><span class="p">,</span> <span class="n">loss_fn</span><span class="o">=</span><span class="n">loss</span><span class="p">,</span> <span class="n">optimizer</span><span class="o">=</span><span class="n">optimizer</span><span class="p">,</span> <span class="n">metrics</span><span class="o">=</span><span class="p">{</span><span class="s1">'Accuracy'</span><span class="p">:</span> <span class="n">nn</span><span class="o">.</span><span class="n">Accuracy</span><span class="p">()})</span>
|
||||
<span class="linenos">80</span> <span class="nb">print</span><span class="p">(</span><span class="s2">"网络构建完成"</span><span class="p">)</span>
|
||||
<span class="linenos">81</span> <span class="n">num_epoch</span> <span class="o">=</span> <span class="mi">10</span>
|
||||
<span class="linenos">82</span> <span class="n">cnn_model</span><span class="o">.</span><span class="n">train</span><span class="p">(</span><span class="n">num_epoch</span><span class="p">,</span> <span class="n">train_data</span><span class="p">,</span><span class="n">callbacks</span><span class="o">=</span><span class="p">[</span><span class="n">LossMonitor</span><span class="p">()],</span><span class="n">dataset_sink_mode</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
||||
<span class="linenos">83</span> <span class="n">inputs</span> <span class="o">=</span> <span class="n">ms</span><span class="o">.</span><span class="n">Tensor</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">randn</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">128</span><span class="p">,</span> <span class="mi">128</span><span class="p">)</span><span class="o">.</span><span class="n">astype</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">float32</span><span class="p">))</span>
|
||||
<span class="linenos">84</span> <span class="n">ms</span><span class="o">.</span><span class="n">save_checkpoint</span><span class="p">(</span><span class="n">my_model</span><span class="p">,</span> <span class="s1">'cnn.ckpt'</span><span class="p">)</span>
|
||||
<span class="linenos">85</span> <span class="n">export</span><span class="p">(</span><span class="n">my_model</span><span class="p">,</span> <span class="n">inputs</span><span class="p">,</span> <span class="n">file_name</span><span class="o">=</span><span class="s1">'cnn'</span><span class="p">,</span> <span class="n">file_format</span><span class="o">=</span><span class="s2">"MINDIR"</span><span class="p">)</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="linenos"> 1</span><span class="c1"># GRAY_CNN.py</span>
|
||||
<span class="linenos"> 2</span><span class="kn">import</span><span class="w"> </span><span class="nn">cv2</span>
|
||||
<span class="linenos"> 3</span><span class="kn">import</span><span class="w"> </span><span class="nn">mindspore</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">ms</span>
|
||||
<span class="linenos"> 4</span><span class="kn">from</span><span class="w"> </span><span class="nn">mindspore.train.serialization</span><span class="w"> </span><span class="kn">import</span> <span class="n">export</span>
|
||||
<span class="linenos"> 5</span><span class="kn">import</span><span class="w"> </span><span class="nn">numpy</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">np</span>
|
||||
<span class="linenos"> 6</span><span class="kn">from</span><span class="w"> </span><span class="nn">mindspore</span><span class="w"> </span><span class="kn">import</span> <span class="n">nn</span><span class="p">,</span> <span class="n">ops</span><span class="p">,</span> <span class="n">context</span>
|
||||
<span class="linenos"> 7</span><span class="kn">from</span><span class="w"> </span><span class="nn">CNN</span><span class="w"> </span><span class="kn">import</span> <span class="n">export_cnn</span>
|
||||
<span class="linenos"> 8</span>
|
||||
<span class="linenos"> 9</span><span class="n">class_names</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'BRDM_2'</span><span class="p">,</span> <span class="s1">'BTR_60'</span><span class="p">,</span> <span class="s1">'SLICY'</span><span class="p">,</span> <span class="s1">'T62'</span><span class="p">,</span> <span class="s1">'ZSU_23_4'</span><span class="p">]</span>
|
||||
<span class="linenos">10</span><span class="n">class_labels</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"装甲侦察车"</span><span class="p">,</span> <span class="s2">"装甲运输车"</span><span class="p">,</span> <span class="s2">"不明"</span><span class="p">,</span> <span class="s2">"坦克"</span><span class="p">,</span> <span class="s2">"自行高炮"</span><span class="p">]</span>
|
||||
<span class="linenos">11</span>
|
||||
<span class="linenos">12</span><span class="k">class</span><span class="w"> </span><span class="nc">GrayCNN</span><span class="p">(</span><span class="n">nn</span><span class="o">.</span><span class="n">Cell</span><span class="p">):</span>
|
||||
<span class="linenos">13</span> <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="linenos">14</span> <span class="nb">super</span><span class="p">(</span><span class="n">GrayCNN</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span>
|
||||
<span class="linenos">15</span> <span class="bp">self</span><span class="o">.</span><span class="n">split</span> <span class="o">=</span> <span class="n">ops</span><span class="o">.</span><span class="n">Split</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">output_num</span><span class="o">=</span><span class="mi">3</span><span class="p">)</span>
|
||||
<span class="linenos">16</span> <span class="bp">self</span><span class="o">.</span><span class="n">conv1</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">Conv2d</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">32</span><span class="p">,</span> <span class="n">kernel_size</span><span class="o">=</span><span class="mi">3</span><span class="p">,</span> <span class="n">has_bias</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
<span class="linenos">17</span> <span class="bp">self</span><span class="o">.</span><span class="n">pool1</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">MaxPool2d</span><span class="p">(</span><span class="n">kernel_size</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">stride</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>
|
||||
<span class="linenos">18</span> <span class="bp">self</span><span class="o">.</span><span class="n">conv2</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">Conv2d</span><span class="p">(</span><span class="mi">32</span><span class="p">,</span> <span class="mi">64</span><span class="p">,</span> <span class="n">kernel_size</span><span class="o">=</span><span class="mi">3</span><span class="p">,</span> <span class="n">has_bias</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
<span class="linenos">19</span> <span class="bp">self</span><span class="o">.</span><span class="n">pool2</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">MaxPool2d</span><span class="p">(</span><span class="n">kernel_size</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">stride</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>
|
||||
<span class="linenos">20</span> <span class="bp">self</span><span class="o">.</span><span class="n">conv3</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">Conv2d</span><span class="p">(</span><span class="mi">64</span><span class="p">,</span> <span class="mi">128</span><span class="p">,</span> <span class="n">kernel_size</span><span class="o">=</span><span class="mi">3</span><span class="p">,</span> <span class="n">has_bias</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
<span class="linenos">21</span> <span class="bp">self</span><span class="o">.</span><span class="n">pool3</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">MaxPool2d</span><span class="p">(</span><span class="n">kernel_size</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">stride</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>
|
||||
<span class="linenos">22</span> <span class="bp">self</span><span class="o">.</span><span class="n">flatten</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">Flatten</span><span class="p">()</span>
|
||||
<span class="linenos">23</span> <span class="bp">self</span><span class="o">.</span><span class="n">dense1</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">Dense</span><span class="p">(</span><span class="mi">32768</span><span class="p">,</span> <span class="mi">64</span><span class="p">)</span>
|
||||
<span class="linenos">24</span> <span class="bp">self</span><span class="o">.</span><span class="n">dense2</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">Dense</span><span class="p">(</span><span class="mi">64</span><span class="p">,</span> <span class="mi">5</span><span class="p">)</span>
|
||||
<span class="linenos">25</span> <span class="bp">self</span><span class="o">.</span><span class="n">relu</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">ReLU</span><span class="p">()</span>
|
||||
<span class="linenos">26</span> <span class="bp">self</span><span class="o">.</span><span class="n">cnn</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">GraphCell</span><span class="p">(</span><span class="n">ms</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">file_name</span><span class="o">=</span><span class="s2">"cnn.mindir"</span><span class="p">))</span>
|
||||
<span class="linenos">27</span>
|
||||
<span class="linenos">28</span> <span class="k">def</span><span class="w"> </span><span class="nf">construct</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">):</span>
|
||||
<span class="linenos">29</span> <span class="n">x</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
|
||||
<span class="linenos">30</span> <span class="n">b</span><span class="p">,</span> <span class="n">g</span><span class="p">,</span> <span class="n">r</span> <span class="o">=</span> <span class="n">x</span>
|
||||
<span class="linenos">31</span> <span class="n">x</span> <span class="o">=</span> <span class="p">(</span>
|
||||
<span class="linenos">32</span> <span class="n">b</span> <span class="o">*</span> <span class="mf">0.114</span> <span class="o">+</span>
|
||||
<span class="linenos">33</span> <span class="n">g</span> <span class="o">*</span> <span class="mf">0.587</span> <span class="o">+</span>
|
||||
<span class="linenos">34</span> <span class="n">r</span> <span class="o">*</span> <span class="mf">0.299</span>
|
||||
<span class="linenos">35</span> <span class="p">)</span><span class="o">.</span><span class="n">squeeze</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span>
|
||||
<span class="linenos">36</span> <span class="n">x</span> <span class="o">=</span> <span class="n">ops</span><span class="o">.</span><span class="n">clip_by_value</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">255</span><span class="p">)</span>
|
||||
<span class="linenos">37</span> <span class="n">x</span> <span class="o">=</span> <span class="n">x</span> <span class="o">/</span> <span class="mf">255.0</span> <span class="c1"># 数据归一化</span>
|
||||
<span class="linenos">38</span> <span class="n">x</span> <span class="o">=</span> <span class="n">x</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">128</span><span class="p">,</span> <span class="mi">128</span><span class="p">)</span> <span class="c1"># 灰度化处理后结果需要重塑成cnn输入形状</span>
|
||||
<span class="linenos">39</span> <span class="n">x</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">cnn</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
|
||||
<span class="linenos">40</span> <span class="k">return</span> <span class="n">x</span>
|
||||
<span class="linenos">41</span>
|
||||
<span class="linenos">42</span><span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s2">"__main__"</span><span class="p">:</span>
|
||||
<span class="linenos">43</span> <span class="n">export_gray</span><span class="p">()</span>
|
||||
<span class="linenos">44</span> <span class="n">export_connection</span><span class="p">()</span>
|
||||
<span class="linenos">45</span> <span class="n">export_cnn</span><span class="p">()</span>
|
||||
<span class="linenos">46</span> <span class="n">context</span><span class="o">.</span><span class="n">set_context</span><span class="p">(</span><span class="n">mode</span><span class="o">=</span><span class="n">context</span><span class="o">.</span><span class="n">GRAPH_MODE</span><span class="p">)</span>
|
||||
<span class="linenos">47</span> <span class="c1"># 1. 读取图片(保持原始uint8类型)</span>
|
||||
<span class="linenos">48</span> <span class="n">color_image</span> <span class="o">=</span> <span class="n">cv2</span><span class="o">.</span><span class="n">imread</span><span class="p">(</span><span class="s2">"image_origin.jpg"</span><span class="p">)</span> <span class="c1"># 默认uint8</span>
|
||||
<span class="linenos">49</span> <span class="n">resized_image</span> <span class="o">=</span> <span class="n">cv2</span><span class="o">.</span><span class="n">resize</span><span class="p">(</span>
|
||||
<span class="linenos">50</span> <span class="n">color_image</span><span class="p">,</span>
|
||||
<span class="linenos">51</span> <span class="p">(</span><span class="mi">128</span><span class="p">,</span> <span class="mi">128</span><span class="p">),</span> <span class="c1"># 目标尺寸(width, height)</span>
|
||||
<span class="linenos">52</span> <span class="n">interpolation</span><span class="o">=</span><span class="n">cv2</span><span class="o">.</span><span class="n">INTER_LINEAR</span>
|
||||
<span class="linenos">53</span> <span class="p">)</span>
|
||||
<span class="linenos">54</span> <span class="n">resized_image</span> <span class="o">=</span> <span class="n">resized_image</span><span class="o">.</span><span class="n">astype</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">float32</span><span class="p">)</span>
|
||||
<span class="linenos">55</span> <span class="n">resized_image_tensor</span> <span class="o">=</span> <span class="n">ms</span><span class="o">.</span><span class="n">Tensor</span><span class="p">(</span><span class="n">resized_image</span><span class="p">)</span>
|
||||
<span class="linenos">56</span> <span class="n">my_model</span> <span class="o">=</span> <span class="n">GrayCNN</span><span class="p">()</span>
|
||||
<span class="linenos">57</span> <span class="n">param_dict</span> <span class="o">=</span> <span class="n">ms</span><span class="o">.</span><span class="n">load_checkpoint</span><span class="p">(</span><span class="s2">"cnn.ckpt"</span><span class="p">)</span>
|
||||
<span class="linenos">58</span> <span class="n">param_not_load</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="n">ms</span><span class="o">.</span><span class="n">load_param_into_net</span><span class="p">(</span><span class="n">my_model</span><span class="p">,</span> <span class="n">param_dict</span><span class="p">,</span> <span class="n">strict_load</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
<span class="linenos">59</span> <span class="n">input_tensor</span> <span class="o">=</span> <span class="n">ms</span><span class="o">.</span><span class="n">Tensor</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">ones</span><span class="p">((</span><span class="mi">128</span><span class="p">,</span> <span class="mi">128</span><span class="p">,</span> <span class="mi">3</span><span class="p">),</span> <span class="n">dtype</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">float32</span><span class="p">))</span>
|
||||
<span class="linenos">60</span> <span class="n">export</span><span class="p">(</span><span class="n">my_model</span><span class="p">,</span> <span class="n">input_tensor</span><span class="p">,</span> <span class="n">file_name</span><span class="o">=</span><span class="s1">'gray_cnn'</span><span class="p">,</span> <span class="n">file_format</span><span class="o">=</span><span class="s1">'MINDIR'</span><span class="p">)</span>
|
||||
<span class="linenos">61</span> <span class="n">reload_cnn</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">GraphCell</span><span class="p">(</span><span class="n">ms</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">file_name</span><span class="o">=</span><span class="s1">'gray_cnn.mindir'</span><span class="p">))</span>
|
||||
<span class="linenos">62</span> <span class="n">reload_cnn</span> <span class="o">=</span> <span class="n">ms</span><span class="o">.</span><span class="n">Model</span><span class="p">(</span><span class="n">reload_cnn</span><span class="p">)</span>
|
||||
<span class="linenos">63</span> <span class="n">m</span> <span class="o">=</span> <span class="n">reload_cnn</span><span class="o">.</span><span class="n">predict</span><span class="p">(</span><span class="n">resized_image_tensor</span><span class="p">)</span>
|
||||
<span class="linenos">64</span> <span class="nb">print</span><span class="p">(</span><span class="n">m</span><span class="p">)</span>
|
||||
<span class="linenos">65</span> <span class="n">output_np</span> <span class="o">=</span> <span class="n">m</span><span class="o">.</span><span class="n">asnumpy</span><span class="p">()</span>
|
||||
<span class="linenos">66</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">output_np</span><span class="o">.</span><span class="n">shape</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span> <span class="c1"># 对于分类任务,通常输出是[batch_size, num_classes]</span>
|
||||
<span class="linenos">67</span> <span class="n">output_prob</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">exp</span><span class="p">(</span><span class="n">output_np</span><span class="p">)</span> <span class="o">/</span> <span class="n">np</span><span class="o">.</span><span class="n">exp</span><span class="p">(</span><span class="n">output_np</span><span class="p">)</span><span class="o">.</span><span class="n">sum</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">keepdims</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
<span class="linenos">68</span> <span class="n">predicted_class</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">argmax</span><span class="p">(</span><span class="n">output_prob</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
|
||||
<span class="linenos">69</span> <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"预测结果: </span><span class="si">{</span><span class="n">class_labels</span><span class="p">[</span><span class="n">predicted_class</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</div></blockquote>
|
||||
</section>
|
||||
</section>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<footer><div class="rst-footer-buttons" role="navigation" aria-label="页脚">
|
||||
<a href="index.html" class="btn btn-neutral float-left" title="AI+DSP应用示例" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> 上一页</a>
|
||||
<a href="../dsp/index.html" class="btn btn-neutral float-right" title="DSP应用示例" accesskey="n" rel="next">下一页 <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
|
||||
</div>
|
||||
|
||||
<hr/>
|
||||
|
||||
<div role="contentinfo">
|
||||
<p>© 版权所有 2025 - 2025, NUDT-674。</p>
|
||||
</div>
|
||||
|
||||
利用 <a href="https://www.sphinx-doc.org/">Sphinx</a> 构建,使用的
|
||||
<a href="https://github.com/readthedocs/sphinx_rtd_theme">主题</a>
|
||||
由 <a href="https://readthedocs.org">Read the Docs</a> 开发.
|
||||
|
||||
|
||||
</footer>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
<script>
|
||||
jQuery(function () {
|
||||
SphinxRtdTheme.Navigation.enable(true);
|
||||
});
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html class="writer-html5" lang="zh-CN" data-content_root="../../">
|
||||
<html class="writer-html5" lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
|
||||
|
|
@ -14,15 +14,15 @@
|
|||
|
||||
<script src="../../_static/jquery.js?v=5d32c60e"></script>
|
||||
<script src="../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
|
||||
<script src="../../_static/documentation_options.js?v=406e4f49"></script>
|
||||
<script src="../../_static/doctools.js?v=9bcbadda"></script>
|
||||
<script src="../../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||
<script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js?v=595569a8"></script>
|
||||
<script src="../../_static/doctools.js?v=888ff710"></script>
|
||||
<script src="../../_static/sphinx_highlight.js?v=4825356b"></script>
|
||||
<script src="../../_static/translations.js?v=beaddf03"></script>
|
||||
<script src="../../_static/table.js?v=99ed15ba"></script>
|
||||
<script src="../../_static/js/theme.js"></script>
|
||||
<link rel="index" title="索引" href="../../genindex.html" />
|
||||
<link rel="search" title="搜索" href="../../search.html" />
|
||||
<link rel="next" title="DSP应用示例" href="../dsp/index.html" />
|
||||
<link rel="next" title="GRAY_CNN(图片灰度化处理+图片识别)" href="gray_cnn.html" />
|
||||
<link rel="prev" title="应用开发示例" href="../index.html" />
|
||||
</head>
|
||||
|
||||
|
|
@ -48,10 +48,12 @@
|
|||
<ul class="current">
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../quickstart/index.html">快速入门</a></li>
|
||||
<li class="toctree-l1 current"><a class="reference internal" href="../index.html">应用开发示例</a><ul class="current">
|
||||
<li class="toctree-l2 current"><a class="current reference internal" href="#">AI+DSP应用示例</a><ul class="simple">
|
||||
<li class="toctree-l2 current"><a class="current reference internal" href="#">AI+DSP应用示例</a><ul>
|
||||
<li class="toctree-l3"><a class="reference internal" href="gray_cnn.html">GRAY_CNN(图片灰度化处理+图片识别)</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../dsp/index.html">DSP应用示例</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../autocodegen/index.html">AI辅助开发示例</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../functionlib/index.html">算子库支持</a></li>
|
||||
|
|
@ -84,8 +86,11 @@
|
|||
<div itemprop="articleBody">
|
||||
|
||||
<section id="ai-dsp">
|
||||
<h1>AI+DSP应用示例<a class="headerlink" href="#ai-dsp" title="Link to this heading"></a></h1>
|
||||
<h1>AI+DSP应用示例<a class="headerlink" href="#ai-dsp" title="此标题的永久链接"></a></h1>
|
||||
<div class="toctree-wrapper compound">
|
||||
<ul>
|
||||
<li class="toctree-l1"><a class="reference internal" href="gray_cnn.html">GRAY_CNN(图片灰度化处理+图片识别)</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
|
@ -94,7 +99,7 @@
|
|||
</div>
|
||||
<footer><div class="rst-footer-buttons" role="navigation" aria-label="页脚">
|
||||
<a href="../index.html" class="btn btn-neutral float-left" title="应用开发示例" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> 上一页</a>
|
||||
<a href="../dsp/index.html" class="btn btn-neutral float-right" title="DSP应用示例" accesskey="n" rel="next">下一页 <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
|
||||
<a href="gray_cnn.html" class="btn btn-neutral float-right" title="GRAY_CNN(图片灰度化处理+图片识别)" accesskey="n" rel="next">下一页 <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
|
||||
</div>
|
||||
|
||||
<hr/>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html class="writer-html5" lang="zh-CN" data-content_root="../../">
|
||||
<html class="writer-html5" lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
|
||||
|
|
@ -14,16 +14,16 @@
|
|||
|
||||
<script src="../../_static/jquery.js?v=5d32c60e"></script>
|
||||
<script src="../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
|
||||
<script src="../../_static/documentation_options.js?v=406e4f49"></script>
|
||||
<script src="../../_static/doctools.js?v=9bcbadda"></script>
|
||||
<script src="../../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||
<script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js?v=595569a8"></script>
|
||||
<script src="../../_static/doctools.js?v=888ff710"></script>
|
||||
<script src="../../_static/sphinx_highlight.js?v=4825356b"></script>
|
||||
<script src="../../_static/translations.js?v=beaddf03"></script>
|
||||
<script src="../../_static/table.js?v=99ed15ba"></script>
|
||||
<script src="../../_static/js/theme.js"></script>
|
||||
<link rel="index" title="索引" href="../../genindex.html" />
|
||||
<link rel="search" title="搜索" href="../../search.html" />
|
||||
<link rel="next" title="算子库支持" href="../../functionlib/index.html" />
|
||||
<link rel="prev" title="DSP应用示例" href="../dsp/index.html" />
|
||||
<link rel="prev" title="RDSAR(距离-多普勒SAR成像算法)" href="../dsp/rdsar.html" />
|
||||
</head>
|
||||
|
||||
<body class="wy-body-for-nav">
|
||||
|
|
@ -85,7 +85,7 @@
|
|||
<div itemprop="articleBody">
|
||||
|
||||
<section id="ai">
|
||||
<h1>AI辅助开发示例<a class="headerlink" href="#ai" title="Link to this heading"></a></h1>
|
||||
<h1>AI辅助开发示例<a class="headerlink" href="#ai" title="此标题的永久链接"></a></h1>
|
||||
<div class="toctree-wrapper compound">
|
||||
</div>
|
||||
</section>
|
||||
|
|
@ -94,7 +94,7 @@
|
|||
</div>
|
||||
</div>
|
||||
<footer><div class="rst-footer-buttons" role="navigation" aria-label="页脚">
|
||||
<a href="../dsp/index.html" class="btn btn-neutral float-left" title="DSP应用示例" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> 上一页</a>
|
||||
<a href="../dsp/rdsar.html" class="btn btn-neutral float-left" title="RDSAR(距离-多普勒SAR成像算法)" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> 上一页</a>
|
||||
<a href="../../functionlib/index.html" class="btn btn-neutral float-right" title="算子库支持" accesskey="n" rel="next">下一页 <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
|
||||
</div>
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html class="writer-html5" lang="zh-CN" data-content_root="../../">
|
||||
<html class="writer-html5" lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
|
||||
|
|
@ -14,16 +14,16 @@
|
|||
|
||||
<script src="../../_static/jquery.js?v=5d32c60e"></script>
|
||||
<script src="../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
|
||||
<script src="../../_static/documentation_options.js?v=406e4f49"></script>
|
||||
<script src="../../_static/doctools.js?v=9bcbadda"></script>
|
||||
<script src="../../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||
<script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js?v=595569a8"></script>
|
||||
<script src="../../_static/doctools.js?v=888ff710"></script>
|
||||
<script src="../../_static/sphinx_highlight.js?v=4825356b"></script>
|
||||
<script src="../../_static/translations.js?v=beaddf03"></script>
|
||||
<script src="../../_static/table.js?v=99ed15ba"></script>
|
||||
<script src="../../_static/js/theme.js"></script>
|
||||
<link rel="index" title="索引" href="../../genindex.html" />
|
||||
<link rel="search" title="搜索" href="../../search.html" />
|
||||
<link rel="next" title="RDSAR(距离-多普勒SAR成像算法)" href="rdsar.html" />
|
||||
<link rel="prev" title="AI+DSP应用示例" href="../ai_dsp/index.html" />
|
||||
<link rel="prev" title="GRAY_CNN(图片灰度化处理+图片识别)" href="../ai_dsp/gray_cnn.html" />
|
||||
</head>
|
||||
|
||||
<body class="wy-body-for-nav">
|
||||
|
|
@ -86,7 +86,7 @@
|
|||
<div itemprop="articleBody">
|
||||
|
||||
<section id="dsp">
|
||||
<h1>DSP应用示例<a class="headerlink" href="#dsp" title="Link to this heading"></a></h1>
|
||||
<h1>DSP应用示例<a class="headerlink" href="#dsp" title="此标题的永久链接"></a></h1>
|
||||
<div class="toctree-wrapper compound">
|
||||
<ul>
|
||||
<li class="toctree-l1"><a class="reference internal" href="rdsar.html">RDSAR(距离-多普勒SAR成像算法)</a></li>
|
||||
|
|
@ -98,7 +98,7 @@
|
|||
</div>
|
||||
</div>
|
||||
<footer><div class="rst-footer-buttons" role="navigation" aria-label="页脚">
|
||||
<a href="../ai_dsp/index.html" class="btn btn-neutral float-left" title="AI+DSP应用示例" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> 上一页</a>
|
||||
<a href="../ai_dsp/gray_cnn.html" class="btn btn-neutral float-left" title="GRAY_CNN(图片灰度化处理+图片识别)" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> 上一页</a>
|
||||
<a href="rdsar.html" class="btn btn-neutral float-right" title="RDSAR(距离-多普勒SAR成像算法)" accesskey="n" rel="next">下一页 <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
|
||||
</div>
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html class="writer-html5" lang="zh-CN" data-content_root="../../">
|
||||
<html class="writer-html5" lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
|
||||
|
|
@ -14,9 +14,9 @@
|
|||
|
||||
<script src="../../_static/jquery.js?v=5d32c60e"></script>
|
||||
<script src="../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
|
||||
<script src="../../_static/documentation_options.js?v=406e4f49"></script>
|
||||
<script src="../../_static/doctools.js?v=9bcbadda"></script>
|
||||
<script src="../../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||
<script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js?v=595569a8"></script>
|
||||
<script src="../../_static/doctools.js?v=888ff710"></script>
|
||||
<script src="../../_static/sphinx_highlight.js?v=4825356b"></script>
|
||||
<script src="../../_static/translations.js?v=beaddf03"></script>
|
||||
<script src="../../_static/table.js?v=99ed15ba"></script>
|
||||
<script src="../../_static/js/theme.js"></script>
|
||||
|
|
@ -94,13 +94,13 @@
|
|||
<div itemprop="articleBody">
|
||||
|
||||
<section id="rdsar-sar">
|
||||
<h1>RDSAR(距离-多普勒SAR成像算法)<a class="headerlink" href="#rdsar-sar" title="Link to this heading"></a></h1>
|
||||
<h1>RDSAR(距离-多普勒SAR成像算法)<a class="headerlink" href="#rdsar-sar" title="此标题的永久链接"></a></h1>
|
||||
<section id="id1">
|
||||
<h2>算法概述<a class="headerlink" href="#id1" title="Link to this heading"></a></h2>
|
||||
<h2>算法概述<a class="headerlink" href="#id1" title="此标题的永久链接"></a></h2>
|
||||
<p>RDSAR(Range-Doppler SAR)是一种经典的合成孔径雷达(SAR)成像算法,通过距离-多普勒域处理实现高分辨率雷达图像重建。该算法是SAR成像的基础方法之一,广泛应用于遥感、军事侦察、地形测绘等领域。</p>
|
||||
</section>
|
||||
<section id="matlab">
|
||||
<h2>MATLAB 实现<a class="headerlink" href="#matlab" title="Link to this heading"></a></h2>
|
||||
<h2>MATLAB 实现<a class="headerlink" href="#matlab" title="此标题的永久链接"></a></h2>
|
||||
<div class="highlight-matlab notranslate"><div class="highlight"><pre><span></span><span class="cm">%{</span>
|
||||
<span class="cm"> 本代码用于对雷达的回波数据,利用RD算法~普通版本进行成像。</span>
|
||||
<span class="cm"> 2023/11/18 20:47</span>
|
||||
|
|
@ -207,7 +207,7 @@
|
|||
</div>
|
||||
</section>
|
||||
<section id="mindspore-signal">
|
||||
<h2>MindSpore Signal+ 实现<a class="headerlink" href="#mindspore-signal" title="Link to this heading"></a></h2>
|
||||
<h2>MindSpore Signal+ 实现<a class="headerlink" href="#mindspore-signal" title="此标题的永久链接"></a></h2>
|
||||
<p>在开始编写 MindSpore Signal+ 实现之前,建议先对原始 MATLAB 代码做流程梳理。可以将整体算法分为以下几个部分:</p>
|
||||
<ul class="simple">
|
||||
<li><p>1.数据读取</p></li>
|
||||
|
|
@ -216,7 +216,7 @@
|
|||
<li><p>4.数据后处理</p></li>
|
||||
</ul>
|
||||
<section id="id2">
|
||||
<h3>1. 数据读取<a class="headerlink" href="#id2" title="Link to this heading"></a></h3>
|
||||
<h3>1. 数据读取<a class="headerlink" href="#id2" title="此标题的永久链接"></a></h3>
|
||||
<p>在matlab中,数据读取是通过<code class="docutils literal notranslate"><span class="pre">importdata</span></code>函数实现的。在Python中使用MindSpore Signal+时,我们可以使用NumPy的<code class="docutils literal notranslate"><span class="pre">loadmat</span></code>或SciPy的<code class="docutils literal notranslate"><span class="pre">io.loadmat</span></code>来加载MATLAB文件中的变量,因此在Python代码开头需要导入NumPy和SciPy。</p>
|
||||
<p>示例代码:</p>
|
||||
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="c1"># step 0 : 准备初始数据</span>
|
||||
|
|
@ -235,7 +235,7 @@
|
|||
</div>
|
||||
</section>
|
||||
<section id="id3">
|
||||
<h3>2. 数据预处理<a class="headerlink" href="#id3" title="Link to this heading"></a></h3>
|
||||
<h3>2. 数据预处理<a class="headerlink" href="#id3" title="此标题的永久链接"></a></h3>
|
||||
<p>从算法整体分析,数据读取后到核心计算之前的步骤,主要是对数据进行填充和轴的生成,这部分都是核心计算的前期准备,建议将这部分代码封装在<code class="docutils literal notranslate"><span class="pre">__init__</span></code>函数中完成,不放在<code class="docutils literal notranslate"><span class="pre">construct</span></code>函数中可以避免额外的开销,当实例化一个类时自动触发一次<code class="docutils literal notranslate"><span class="pre">__init__</span></code>函数。</p>
|
||||
<p>示例代码:</p>
|
||||
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="k">class</span><span class="w"> </span><span class="nc">rdsar</span><span class="p">(</span><span class="n">nn</span><span class="o">.</span><span class="n">Cell</span><span class="p">):</span>
|
||||
|
|
@ -263,7 +263,7 @@
|
|||
</div>
|
||||
</section>
|
||||
<section id="id4">
|
||||
<h3>3. 核心计算<a class="headerlink" href="#id4" title="Link to this heading"></a></h3>
|
||||
<h3>3. 核心计算<a class="headerlink" href="#id4" title="此标题的永久链接"></a></h3>
|
||||
<p>核心计算部分是算法的核心,也是计算复杂度最高的部分,建议将这部分代码封装在<code class="docutils literal notranslate"><span class="pre">construct</span></code>函数中,这样可以方便后续的调用。核心计算的迁移主要是将matlab的计算逻辑转换为MindSpore Signal+的API调用,例如:matlab中的<code class="docutils literal notranslate"><span class="pre">fft(echo,[],2)</span></code>可以转换为<code class="docutils literal notranslate"><span class="pre">mr.FFT(dim=1)</span></code>,dim=1 表示按行计算(沿着列移动,计算每行的FFT)。MindSpore Signal+ API列表可以查阅<a class="reference external" href="https://www.mindspore.cn/docs/zh-CN/r2.3.1/api_python/mindspore.html">MindSpore官方文档</a>和<a class="reference internal" href="../../functionlib/custom_op/index.html"><span class="doc">自定义算子列表</span></a>。</p>
|
||||
<p>示例代码:</p>
|
||||
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="k">class</span><span class="w"> </span><span class="nc">rdsar</span><span class="p">(</span><span class="n">nn</span><span class="o">.</span><span class="n">Cell</span><span class="p">):</span>
|
||||
|
|
@ -329,7 +329,7 @@
|
|||
</div>
|
||||
</section>
|
||||
<section id="id5">
|
||||
<h3>4. 数据后处理<a class="headerlink" href="#id5" title="Link to this heading"></a></h3>
|
||||
<h3>4. 数据后处理<a class="headerlink" href="#id5" title="此标题的永久链接"></a></h3>
|
||||
<p>需要对计算结果进行成像,这部分主要是将计算结果转换为图像,可以使用matplotlib库进行绘制。</p>
|
||||
<p>示例代码:</p>
|
||||
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span><span class="w"> </span><span class="nn">matplotlib.pyplot</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">plt</span>
|
||||
|
|
@ -486,7 +486,7 @@
|
|||
</section>
|
||||
</section>
|
||||
<section id="id6">
|
||||
<h2>板卡部署<a class="headerlink" href="#id6" title="Link to this heading"></a></h2>
|
||||
<h2>板卡部署<a class="headerlink" href="#id6" title="此标题的永久链接"></a></h2>
|
||||
<p>模型部署建议使用 <code class="docutils literal notranslate"><span class="pre">YHFT-IDE</span></code>,它集成了模型转换、模型可视化与 MindSpore Lite 端部署模板。具体使用方法可参考 <a class="reference internal" href="../../quickstart/hellodsp.html#c"><span class="std std-ref">HelloDSP MindSpore Lite端</span></a>。</p>
|
||||
<div class="admonition tip">
|
||||
<p class="admonition-title">小技巧</p>
|
||||
|
|
@ -494,7 +494,7 @@
|
|||
</div>
|
||||
</section>
|
||||
<section id="id7">
|
||||
<h2>参考与源码<a class="headerlink" href="#id7" title="Link to this heading"></a></h2>
|
||||
<h2>参考与源码<a class="headerlink" href="#id7" title="此标题的永久链接"></a></h2>
|
||||
<ul class="simple">
|
||||
<li><p>基于RD、CS和ωk算法的合成孔径雷达成像算法原理与实现:<a class="reference external" href="https://github.com/highskyno1/SAR_imaging_with_RD_CS_wk">SAR_imaging_with_RD_CS_wk</a></p></li>
|
||||
<li><p>Python 示例:<a class="reference external" href="https://gitee.com/nudt-674/mind-radar/tree/master/examples/rdsar">RDSAR</a></p></li>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html class="writer-html5" lang="zh-CN" data-content_root="../">
|
||||
<html class="writer-html5" lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
|
||||
|
|
@ -14,9 +14,9 @@
|
|||
|
||||
<script src="../_static/jquery.js?v=5d32c60e"></script>
|
||||
<script src="../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
|
||||
<script src="../_static/documentation_options.js?v=406e4f49"></script>
|
||||
<script src="../_static/doctools.js?v=9bcbadda"></script>
|
||||
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js?v=595569a8"></script>
|
||||
<script src="../_static/doctools.js?v=888ff710"></script>
|
||||
<script src="../_static/sphinx_highlight.js?v=4825356b"></script>
|
||||
<script src="../_static/translations.js?v=beaddf03"></script>
|
||||
<script src="../_static/table.js?v=99ed15ba"></script>
|
||||
<script src="../_static/js/theme.js"></script>
|
||||
|
|
@ -82,7 +82,7 @@
|
|||
<div itemprop="articleBody">
|
||||
|
||||
<section id="id1">
|
||||
<h1>应用开发示例<a class="headerlink" href="#id1" title="Link to this heading"></a></h1>
|
||||
<h1>应用开发示例<a class="headerlink" href="#id1" title="此标题的永久链接"></a></h1>
|
||||
<div class="toctree-wrapper compound">
|
||||
<ul>
|
||||
<li class="toctree-l1"><a class="reference internal" href="ai_dsp/index.html">AI+DSP应用示例</a></li>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html class="writer-html5" lang="zh-CN" data-content_root="../../">
|
||||
<html class="writer-html5" lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
|
||||
|
|
@ -14,9 +14,9 @@
|
|||
|
||||
<script src="../../_static/jquery.js?v=5d32c60e"></script>
|
||||
<script src="../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
|
||||
<script src="../../_static/documentation_options.js?v=406e4f49"></script>
|
||||
<script src="../../_static/doctools.js?v=9bcbadda"></script>
|
||||
<script src="../../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||
<script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js?v=595569a8"></script>
|
||||
<script src="../../_static/doctools.js?v=888ff710"></script>
|
||||
<script src="../../_static/sphinx_highlight.js?v=4825356b"></script>
|
||||
<script src="../../_static/translations.js?v=beaddf03"></script>
|
||||
<script src="../../_static/table.js?v=99ed15ba"></script>
|
||||
<script src="../../_static/js/theme.js"></script>
|
||||
|
|
@ -85,7 +85,7 @@
|
|||
<div itemprop="articleBody">
|
||||
|
||||
<section id="id1">
|
||||
<h1>自定义算子列表<a class="headerlink" href="#id1" title="Link to this heading"></a></h1>
|
||||
<h1>自定义算子列表<a class="headerlink" href="#id1" title="此标题的永久链接"></a></h1>
|
||||
<div class="toctree-wrapper compound">
|
||||
</div>
|
||||
</section>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html class="writer-html5" lang="zh-CN" data-content_root="../../">
|
||||
<html class="writer-html5" lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
|
||||
|
|
@ -14,9 +14,9 @@
|
|||
|
||||
<script src="../../_static/jquery.js?v=5d32c60e"></script>
|
||||
<script src="../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
|
||||
<script src="../../_static/documentation_options.js?v=406e4f49"></script>
|
||||
<script src="../../_static/doctools.js?v=9bcbadda"></script>
|
||||
<script src="../../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||
<script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js?v=595569a8"></script>
|
||||
<script src="../../_static/doctools.js?v=888ff710"></script>
|
||||
<script src="../../_static/sphinx_highlight.js?v=4825356b"></script>
|
||||
<script src="../../_static/translations.js?v=beaddf03"></script>
|
||||
<script src="../../_static/table.js?v=99ed15ba"></script>
|
||||
<script src="../../_static/js/theme.js"></script>
|
||||
|
|
@ -47,7 +47,7 @@
|
|||
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="导航菜单">
|
||||
<ul class="current">
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../quickstart/index.html">快速入门</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../appdevelop/index.html">应用开发</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../appdevelop/index.html">应用开发示例</a></li>
|
||||
<li class="toctree-l1 current"><a class="reference internal" href="../index.html">算子库支持</a><ul class="current">
|
||||
<li class="toctree-l2"><a class="reference internal" href="../supported_op.html">算子库支持情况</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../custom_op/index.html">自定义算子列表</a></li>
|
||||
|
|
@ -90,11 +90,11 @@
|
|||
<div itemprop="articleBody">
|
||||
|
||||
<section id="add">
|
||||
<h1>Add<a class="headerlink" href="#add" title="Link to this heading"></a></h1>
|
||||
<h1>Add<a class="headerlink" href="#add" title="此标题的永久链接"></a></h1>
|
||||
<p><strong>共享存储版本:</strong></p>
|
||||
<dl class="c function">
|
||||
<dt class="sig sig-object c" id="c.my_c_add_anycore">
|
||||
<span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">my_c_add_anycore</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">param1</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">param2</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.my_c_add_anycore" title="Link to this definition"></a><br /></dt>
|
||||
<span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">my_c_add_anycore</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">param1</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">param2</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.my_c_add_anycore" title="永久链接至目标"></a><br /></dt>
|
||||
<dd><p>两个输入Tensor逐元素相加。</p>
|
||||
<dl class="simple">
|
||||
<dt>输入:</dt><dd><ul class="simple">
|
||||
|
|
@ -129,7 +129,7 @@
|
|||
<p><strong>私有存储版本:</strong></p>
|
||||
<dl class="c function">
|
||||
<dt class="sig sig-object c" id="c.my_c_add_1core">
|
||||
<span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">my_c_add_1core</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">param1</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">param2</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.my_c_add_1core" title="Link to this definition"></a><br /></dt>
|
||||
<span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">my_c_add_1core</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">param1</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">param2</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.my_c_add_1core" title="永久链接至目标"></a><br /></dt>
|
||||
<dd><p>两个输入Tensor逐元素相加。</p>
|
||||
<dl class="simple">
|
||||
<dt>输入:</dt><dd><ul class="simple">
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html class="writer-html5" lang="zh-CN" data-content_root="../../">
|
||||
<html class="writer-html5" lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
|
||||
|
|
@ -14,11 +14,10 @@
|
|||
|
||||
<script src="../../_static/jquery.js?v=5d32c60e"></script>
|
||||
<script src="../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
|
||||
<script src="../../_static/documentation_options.js?v=406e4f49"></script>
|
||||
<script src="../../_static/doctools.js?v=9bcbadda"></script>
|
||||
<script src="../../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||
<script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js?v=595569a8"></script>
|
||||
<script src="../../_static/doctools.js?v=888ff710"></script>
|
||||
<script src="../../_static/sphinx_highlight.js?v=4825356b"></script>
|
||||
<script src="../../_static/translations.js?v=beaddf03"></script>
|
||||
<script async="async" src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
|
||||
<script src="../../_static/table.js?v=99ed15ba"></script>
|
||||
<script src="../../_static/js/theme.js"></script>
|
||||
<link rel="index" title="索引" href="../../genindex.html" />
|
||||
|
|
@ -48,7 +47,7 @@
|
|||
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="导航菜单">
|
||||
<ul class="current">
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../quickstart/index.html">快速入门</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../appdevelop/index.html">应用开发</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../appdevelop/index.html">应用开发示例</a></li>
|
||||
<li class="toctree-l1 current"><a class="reference internal" href="../index.html">算子库支持</a><ul class="current">
|
||||
<li class="toctree-l2"><a class="reference internal" href="../supported_op.html">算子库支持情况</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../custom_op/index.html">自定义算子列表</a></li>
|
||||
|
|
@ -90,7 +89,7 @@
|
|||
<div itemprop="articleBody">
|
||||
|
||||
<section id="dsp-library-c-api-reference">
|
||||
<h1>DSP Library C API Reference<a class="headerlink" href="#dsp-library-c-api-reference" title="Link to this heading"></a></h1>
|
||||
<h1>DSP Library C API Reference<a class="headerlink" href="#dsp-library-c-api-reference" title="此标题的永久链接"></a></h1>
|
||||
<div class="toctree-wrapper compound">
|
||||
<ul>
|
||||
<li class="toctree-l1"><a class="reference internal" href="add.html">Add</a></li>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html class="writer-html5" lang="zh-CN" data-content_root="../../">
|
||||
<html class="writer-html5" lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
|
||||
|
|
@ -14,9 +14,9 @@
|
|||
|
||||
<script src="../../_static/jquery.js?v=5d32c60e"></script>
|
||||
<script src="../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
|
||||
<script src="../../_static/documentation_options.js?v=406e4f49"></script>
|
||||
<script src="../../_static/doctools.js?v=9bcbadda"></script>
|
||||
<script src="../../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||
<script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js?v=595569a8"></script>
|
||||
<script src="../../_static/doctools.js?v=888ff710"></script>
|
||||
<script src="../../_static/sphinx_highlight.js?v=4825356b"></script>
|
||||
<script src="../../_static/translations.js?v=beaddf03"></script>
|
||||
<script async="async" src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
|
||||
<script src="../../_static/table.js?v=99ed15ba"></script>
|
||||
|
|
@ -48,7 +48,7 @@
|
|||
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="导航菜单">
|
||||
<ul class="current">
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../quickstart/index.html">快速入门</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../appdevelop/index.html">应用开发</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../appdevelop/index.html">应用开发示例</a></li>
|
||||
<li class="toctree-l1 current"><a class="reference internal" href="../index.html">算子库支持</a><ul class="current">
|
||||
<li class="toctree-l2"><a class="reference internal" href="../supported_op.html">算子库支持情况</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../custom_op/index.html">自定义算子列表</a></li>
|
||||
|
|
@ -91,46 +91,46 @@
|
|||
<div itemprop="articleBody">
|
||||
|
||||
<section id="equal">
|
||||
<h1>Equal<a class="headerlink" href="#equal" title="Link to this heading"></a></h1>
|
||||
<h1>Equal<a class="headerlink" href="#equal" title="此标题的永久链接"></a></h1>
|
||||
<p><strong>共享存储版本:</strong></p>
|
||||
<dl class="c function">
|
||||
<dt class="sig sig-object c" id="c.i8_equal_s">
|
||||
<span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">i8_equal_s</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">int8_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">Input0</span></span>, <span class="n"><span class="pre">int8_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">Input1</span></span>, <span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">output</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n"><span class="pre">length</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n"><span class="pre">core_mask</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.i8_equal_s" title="Link to this definition"></a><br /></dt>
|
||||
<span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">i8_equal_s</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">int8_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">Input0</span></span>, <span class="n"><span class="pre">int8_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">Input1</span></span>, <span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">output</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n"><span class="pre">length</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n"><span class="pre">core_mask</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.i8_equal_s" title="永久链接至目标"></a><br /></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="c function">
|
||||
<dt class="sig sig-object c" id="c.i16_equal_s">
|
||||
<span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">i16_equal_s</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">int16_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">Input0</span></span>, <span class="n"><span class="pre">int16_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">Input1</span></span>, <span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">output</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n"><span class="pre">length</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n"><span class="pre">core_mask</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.i16_equal_s" title="Link to this definition"></a><br /></dt>
|
||||
<span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">i16_equal_s</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">int16_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">Input0</span></span>, <span class="n"><span class="pre">int16_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">Input1</span></span>, <span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">output</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n"><span class="pre">length</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n"><span class="pre">core_mask</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.i16_equal_s" title="永久链接至目标"></a><br /></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="c function">
|
||||
<dt class="sig sig-object c" id="c.i32_equal_s">
|
||||
<span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">i32_equal_s</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">Input0</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">Input1</span></span>, <span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">output</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n"><span class="pre">length</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n"><span class="pre">core_mask</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.i32_equal_s" title="Link to this definition"></a><br /></dt>
|
||||
<span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">i32_equal_s</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">Input0</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">Input1</span></span>, <span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">output</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n"><span class="pre">length</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n"><span class="pre">core_mask</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.i32_equal_s" title="永久链接至目标"></a><br /></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="c function">
|
||||
<dt class="sig sig-object c" id="c.hp_equal_s">
|
||||
<span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">hp_equal_s</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">half</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">Input0</span></span>, <span class="n"><span class="pre">half</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">Input1</span></span>, <span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">output</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n"><span class="pre">length</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n"><span class="pre">core_mask</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.hp_equal_s" title="Link to this definition"></a><br /></dt>
|
||||
<span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">hp_equal_s</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">half</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">Input0</span></span>, <span class="n"><span class="pre">half</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">Input1</span></span>, <span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">output</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n"><span class="pre">length</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n"><span class="pre">core_mask</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.hp_equal_s" title="永久链接至目标"></a><br /></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="c function">
|
||||
<dt class="sig sig-object c" id="c.fp_equal_s">
|
||||
<span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">fp_equal_s</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">float</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">Input0</span></span>, <span class="kt"><span class="pre">float</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">Input1</span></span>, <span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">output</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n"><span class="pre">length</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n"><span class="pre">core_mask</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.fp_equal_s" title="Link to this definition"></a><br /></dt>
|
||||
<span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">fp_equal_s</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">float</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">Input0</span></span>, <span class="kt"><span class="pre">float</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">Input1</span></span>, <span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">output</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n"><span class="pre">length</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n"><span class="pre">core_mask</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.fp_equal_s" title="永久链接至目标"></a><br /></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="c function">
|
||||
<dt class="sig sig-object c" id="c.dp_equal_s">
|
||||
<span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">dp_equal_s</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">double</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">Input0</span></span>, <span class="kt"><span class="pre">double</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">Input1</span></span>, <span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">output</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n"><span class="pre">length</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n"><span class="pre">core_mask</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.dp_equal_s" title="Link to this definition"></a><br /></dt>
|
||||
<span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">dp_equal_s</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">double</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">Input0</span></span>, <span class="kt"><span class="pre">double</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">Input1</span></span>, <span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">output</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n"><span class="pre">length</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n"><span class="pre">core_mask</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.dp_equal_s" title="永久链接至目标"></a><br /></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="c function">
|
||||
<dt class="sig sig-object c" id="c.c64_equal_s">
|
||||
<span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">c64_equal_s</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">float</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">Input0</span></span>, <span class="kt"><span class="pre">float</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">Input1</span></span>, <span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">output</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n"><span class="pre">length</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n"><span class="pre">core_mask</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.c64_equal_s" title="Link to this definition"></a><br /></dt>
|
||||
<span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">c64_equal_s</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">float</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">Input0</span></span>, <span class="kt"><span class="pre">float</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">Input1</span></span>, <span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">output</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n"><span class="pre">length</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n"><span class="pre">core_mask</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.c64_equal_s" title="永久链接至目标"></a><br /></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="c function">
|
||||
<dt class="sig sig-object c" id="c.c128_equal_s">
|
||||
<span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">c128_equal_s</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">double</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">Input0</span></span>, <span class="kt"><span class="pre">double</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">Input1</span></span>, <span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">output</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n"><span class="pre">length</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n"><span class="pre">core_mask</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.c128_equal_s" title="Link to this definition"></a><br /></dt>
|
||||
<span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">c128_equal_s</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">double</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">Input0</span></span>, <span class="kt"><span class="pre">double</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">Input1</span></span>, <span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">output</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n"><span class="pre">length</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n"><span class="pre">core_mask</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.c128_equal_s" title="永久链接至目标"></a><br /></dt>
|
||||
<dd><p>逐元素计算两个输入是否相等</p>
|
||||
<div class="math notranslate nohighlight">
|
||||
\[\begin{split}output_i = \begin{cases}
|
||||
|
|
@ -180,42 +180,42 @@
|
|||
<p><strong>私有存储版本:</strong></p>
|
||||
<dl class="c function">
|
||||
<dt class="sig sig-object c" id="c.i8_equal_p">
|
||||
<span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">i8_equal_p</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">int8_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">Input0</span></span>, <span class="n"><span class="pre">int8_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">Input1</span></span>, <span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">output</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n"><span class="pre">length</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.i8_equal_p" title="Link to this definition"></a><br /></dt>
|
||||
<span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">i8_equal_p</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">int8_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">Input0</span></span>, <span class="n"><span class="pre">int8_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">Input1</span></span>, <span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">output</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n"><span class="pre">length</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.i8_equal_p" title="永久链接至目标"></a><br /></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="c function">
|
||||
<dt class="sig sig-object c" id="c.i16_equal_p">
|
||||
<span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">i16_equal_p</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">int16_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">Input0</span></span>, <span class="n"><span class="pre">int16_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">Input1</span></span>, <span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">output</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n"><span class="pre">length</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.i16_equal_p" title="Link to this definition"></a><br /></dt>
|
||||
<span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">i16_equal_p</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">int16_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">Input0</span></span>, <span class="n"><span class="pre">int16_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">Input1</span></span>, <span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">output</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n"><span class="pre">length</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.i16_equal_p" title="永久链接至目标"></a><br /></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="c function">
|
||||
<dt class="sig sig-object c" id="c.i32_equal_p">
|
||||
<span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">i32_equal_p</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">int32_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">Input0</span></span>, <span class="n"><span class="pre">int32_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">Input1</span></span>, <span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">output</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n"><span class="pre">length</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.i32_equal_p" title="Link to this definition"></a><br /></dt>
|
||||
<span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">i32_equal_p</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">int32_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">Input0</span></span>, <span class="n"><span class="pre">int32_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">Input1</span></span>, <span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">output</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n"><span class="pre">length</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.i32_equal_p" title="永久链接至目标"></a><br /></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="c function">
|
||||
<dt class="sig sig-object c" id="c.hp_equal_p">
|
||||
<span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">hp_equal_p</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">half</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">Input0</span></span>, <span class="n"><span class="pre">half</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">Input1</span></span>, <span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">output</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n"><span class="pre">length</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.hp_equal_p" title="Link to this definition"></a><br /></dt>
|
||||
<span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">hp_equal_p</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">half</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">Input0</span></span>, <span class="n"><span class="pre">half</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">Input1</span></span>, <span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">output</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n"><span class="pre">length</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.hp_equal_p" title="永久链接至目标"></a><br /></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="c function">
|
||||
<dt class="sig sig-object c" id="c.fp_equal_p">
|
||||
<span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">fp_equal_p</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">float</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">Input0</span></span>, <span class="kt"><span class="pre">float</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">Input1</span></span>, <span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">output</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n"><span class="pre">length</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.fp_equal_p" title="Link to this definition"></a><br /></dt>
|
||||
<span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">fp_equal_p</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">float</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">Input0</span></span>, <span class="kt"><span class="pre">float</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">Input1</span></span>, <span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">output</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n"><span class="pre">length</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.fp_equal_p" title="永久链接至目标"></a><br /></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="c function">
|
||||
<dt class="sig sig-object c" id="c.dp_equal_p">
|
||||
<span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">dp_equal_p</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">double</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">Input0</span></span>, <span class="kt"><span class="pre">double</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">Input1</span></span>, <span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">output</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n"><span class="pre">length</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.dp_equal_p" title="Link to this definition"></a><br /></dt>
|
||||
<span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">dp_equal_p</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">double</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">Input0</span></span>, <span class="kt"><span class="pre">double</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">Input1</span></span>, <span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">output</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n"><span class="pre">length</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.dp_equal_p" title="永久链接至目标"></a><br /></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="c function">
|
||||
<dt class="sig sig-object c" id="c.c64_equal_p">
|
||||
<span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">c64_equal_p</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">float</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">Input0</span></span>, <span class="kt"><span class="pre">float</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">Input1</span></span>, <span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">output</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n"><span class="pre">length</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.c64_equal_p" title="Link to this definition"></a><br /></dt>
|
||||
<span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">c64_equal_p</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">float</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">Input0</span></span>, <span class="kt"><span class="pre">float</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">Input1</span></span>, <span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">output</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n"><span class="pre">length</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.c64_equal_p" title="永久链接至目标"></a><br /></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="c function">
|
||||
<dt class="sig sig-object c" id="c.c128_equal_p">
|
||||
<span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">c128_equal_p</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">double</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">Input0</span></span>, <span class="kt"><span class="pre">double</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">Input1</span></span>, <span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">output</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n"><span class="pre">length</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.c128_equal_p" title="Link to this definition"></a><br /></dt>
|
||||
<span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">c128_equal_p</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">double</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">Input0</span></span>, <span class="kt"><span class="pre">double</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">Input1</span></span>, <span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">output</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n"><span class="pre">length</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.c128_equal_p" title="永久链接至目标"></a><br /></dt>
|
||||
<dd><p>逐元素计算两个输入是否相等</p>
|
||||
<div class="math notranslate nohighlight">
|
||||
\[\begin{split}output_i = \begin{cases}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html class="writer-html5" lang="zh-CN" data-content_root="../../">
|
||||
<html class="writer-html5" lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
|
||||
|
|
@ -14,9 +14,9 @@
|
|||
|
||||
<script src="../../_static/jquery.js?v=5d32c60e"></script>
|
||||
<script src="../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
|
||||
<script src="../../_static/documentation_options.js?v=406e4f49"></script>
|
||||
<script src="../../_static/doctools.js?v=9bcbadda"></script>
|
||||
<script src="../../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||
<script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js?v=595569a8"></script>
|
||||
<script src="../../_static/doctools.js?v=888ff710"></script>
|
||||
<script src="../../_static/sphinx_highlight.js?v=4825356b"></script>
|
||||
<script src="../../_static/translations.js?v=beaddf03"></script>
|
||||
<script async="async" src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
|
||||
<script src="../../_static/table.js?v=99ed15ba"></script>
|
||||
|
|
@ -48,7 +48,7 @@
|
|||
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="导航菜单">
|
||||
<ul class="current">
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../quickstart/index.html">快速入门</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../appdevelop/index.html">应用开发</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../appdevelop/index.html">应用开发示例</a></li>
|
||||
<li class="toctree-l1 current"><a class="reference internal" href="../index.html">算子库支持</a><ul class="current">
|
||||
<li class="toctree-l2"><a class="reference internal" href="../supported_op.html">算子库支持情况</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../custom_op/index.html">自定义算子列表</a></li>
|
||||
|
|
@ -94,10 +94,10 @@
|
|||
<div itemprop="articleBody">
|
||||
|
||||
<section id="fftwithsize">
|
||||
<h1>FFTWithSize<a class="headerlink" href="#fftwithsize" title="Link to this heading"></a></h1>
|
||||
<h1>FFTWithSize<a class="headerlink" href="#fftwithsize" title="此标题的永久链接"></a></h1>
|
||||
<dl class="py class">
|
||||
<dt class="sig sig-object py" id="mindspore.ops.FFTWithSize">
|
||||
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">mindspore.ops.</span></span><span class="sig-name descname"><span class="pre">FFTWithSize</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">signal_ndim</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">inverse</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">real</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">norm</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'backward'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">onesided</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">signal_sizes</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">()</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#mindspore.ops.FFTWithSize" title="Link to this definition"></a></dt>
|
||||
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">mindspore.ops.</span></span><span class="sig-name descname"><span class="pre">FFTWithSize</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">signal_ndim</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">inverse</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">real</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">norm</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'backward'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">onesided</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">signal_sizes</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">()</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#mindspore.ops.FFTWithSize" title="永久链接至目标"></a></dt>
|
||||
<dd><p>傅里叶变换,可以对参数进行调整,以实现FFT/IFFT/RFFT/IRFFT。</p>
|
||||
<p>对于FFT,它计算以下表达式:</p>
|
||||
<div class="math notranslate nohighlight">
|
||||
|
|
@ -143,9 +143,9 @@
|
|||
</li>
|
||||
<li><p><strong>norm</strong> (str,可选) - 表示该操作的规范化方式,可选值:[ <code class="docutils literal notranslate"><span class="pre">"backward"</span></code> , <code class="docutils literal notranslate"><span class="pre">"forward"</span></code> , <code class="docutils literal notranslate"><span class="pre">"ortho"</span></code> ]。默认值: <code class="docutils literal notranslate"><span class="pre">"backward"</span></code> 。</p>
|
||||
<ul>
|
||||
<li><p>"backward",正向变换不缩放,逆变换按 <span class="math notranslate nohighlight">\(1/n\)</span> 缩放,其中 <cite>n</cite> 表示输入 <cite>x</cite> 的元素数量。。</p></li>
|
||||
<li><p>"ortho",正向变换与逆变换均按 <span class="math notranslate nohighlight">\(1/\sqrt n\)</span> 缩放。</p></li>
|
||||
<li><p>"forward",正向变换按 <span class="math notranslate nohighlight">\(1/n\)</span> 缩放,逆变换不缩放。</p></li>
|
||||
<li><p>“backward”,正向变换不缩放,逆变换按 <span class="math notranslate nohighlight">\(1/n\)</span> 缩放,其中 <cite>n</cite> 表示输入 <cite>x</cite> 的元素数量。。</p></li>
|
||||
<li><p>“ortho”,正向变换与逆变换均按 <span class="math notranslate nohighlight">\(1/\sqrt n\)</span> 缩放。</p></li>
|
||||
<li><p>“forward”,正向变换按 <span class="math notranslate nohighlight">\(1/n\)</span> 缩放,逆变换不缩放。</p></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><p><strong>onesided</strong> (bool,可选) - 控制输入是否减半以避免冗余。默认值: <code class="docutils literal notranslate"><span class="pre">True</span></code> 。</p></li>
|
||||
|
|
@ -170,7 +170,7 @@
|
|||
<li><p><strong>TypeError</strong> - 如果输入的类型不是Tensor。</p></li>
|
||||
<li><p><strong>ValueError</strong> - 如果输入 <cite>x</cite> 的维度小于 <cite>signal_ndim</cite> 。</p></li>
|
||||
<li><p><strong>ValueError</strong> - 如果 <cite>signal_ndim</cite> 大于3或小于1。</p></li>
|
||||
<li><p><strong>ValueError</strong> - 如果 <cite>norm</cite> 取值不是"backward"、"forward"或"ortho"。</p></li>
|
||||
<li><p><strong>ValueError</strong> - 如果 <cite>norm</cite> 取值不是”backward”、”forward”或”ortho”。</p></li>
|
||||
</ul>
|
||||
</dd>
|
||||
</dl>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html class="writer-html5" lang="zh-CN" data-content_root="../../">
|
||||
<html class="writer-html5" lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
|
||||
|
|
@ -14,9 +14,9 @@
|
|||
|
||||
<script src="../../_static/jquery.js?v=5d32c60e"></script>
|
||||
<script src="../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
|
||||
<script src="../../_static/documentation_options.js?v=406e4f49"></script>
|
||||
<script src="../../_static/doctools.js?v=9bcbadda"></script>
|
||||
<script src="../../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||
<script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js?v=595569a8"></script>
|
||||
<script src="../../_static/doctools.js?v=888ff710"></script>
|
||||
<script src="../../_static/sphinx_highlight.js?v=4825356b"></script>
|
||||
<script src="../../_static/translations.js?v=beaddf03"></script>
|
||||
<script async="async" src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
|
||||
<script src="../../_static/table.js?v=99ed15ba"></script>
|
||||
|
|
@ -48,7 +48,7 @@
|
|||
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="导航菜单">
|
||||
<ul class="current">
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../quickstart/index.html">快速入门</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../appdevelop/index.html">应用开发</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../appdevelop/index.html">应用开发示例</a></li>
|
||||
<li class="toctree-l1 current"><a class="reference internal" href="../index.html">算子库支持</a><ul class="current">
|
||||
<li class="toctree-l2"><a class="reference internal" href="../supported_op.html">算子库支持情况</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../custom_op/index.html">自定义算子列表</a></li>
|
||||
|
|
@ -91,11 +91,11 @@
|
|||
<div itemprop="articleBody">
|
||||
|
||||
<section id="log10">
|
||||
<h1>Log10<a class="headerlink" href="#log10" title="Link to this heading"></a></h1>
|
||||
<h1>Log10<a class="headerlink" href="#log10" title="此标题的永久链接"></a></h1>
|
||||
<p><strong>共享存储版本:</strong></p>
|
||||
<dl class="c function">
|
||||
<dt class="sig sig-object c" id="c.fp_log10_s">
|
||||
<span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">fp_log10_s</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">float</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">input1</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n"><span class="pre">n</span></span>, <span class="kt"><span class="pre">float</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">output</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n"><span class="pre">mask</span></span><span class="sig-paren">)</span><span class="p"><span class="pre">;</span></span><a class="headerlink" href="#c.fp_log10_s" title="Link to this definition"></a><br /></dt>
|
||||
<span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">fp_log10_s</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">float</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">input1</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n"><span class="pre">n</span></span>, <span class="kt"><span class="pre">float</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">output</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n"><span class="pre">mask</span></span><span class="sig-paren">)</span><span class="p"><span class="pre">;</span></span><a class="headerlink" href="#c.fp_log10_s" title="永久链接至目标"></a><br /></dt>
|
||||
<dd><p>快速计算以10为底的对数</p>
|
||||
<div class="math notranslate nohighlight">
|
||||
\[output_i = \log_{10}(input1_i)\]</div>
|
||||
|
|
@ -127,9 +127,9 @@
|
|||
<span class="linenos"> 5</span><span class="w"> </span><span class="kt">float</span><span class="w"> </span><span class="o">*</span><span class="n">input1</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">float</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="mh">0x100000000</span><span class="p">;</span><span class="w"> </span><span class="c1">//input在DDR空间</span>
|
||||
<span class="linenos"> 6</span><span class="w"> </span><span class="kt">float</span><span class="w"> </span><span class="o">*</span><span class="n">output</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">float</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="mh">0x100001000</span><span class="p">;</span>
|
||||
<span class="linenos"> 7</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">n</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1000</span><span class="p">;</span>
|
||||
<span class="hll"><span class="linenos"> 8</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">mask</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mh">0xf</span><span class="p">;</span>
|
||||
</span><span class="linenos"> 9</span><span class="w"> </span><span class="n">fp_log10_s</span><span class="p">(</span><span class="n">input1</span><span class="p">,</span><span class="w"> </span><span class="n">n</span><span class="p">,</span><span class="w"> </span><span class="n">output</span><span class="p">,</span><span class="w"> </span><span class="n">mask</span><span class="p">);</span>
|
||||
<span class="linenos">10</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
|
||||
<span class="linenos"> 8</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">mask</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mh">0xf</span><span class="p">;</span>
|
||||
<span class="hll"><span class="linenos"> 9</span><span class="w"> </span><span class="n">fp_log10_s</span><span class="p">(</span><span class="n">input1</span><span class="p">,</span><span class="w"> </span><span class="n">n</span><span class="p">,</span><span class="w"> </span><span class="n">output</span><span class="p">,</span><span class="w"> </span><span class="n">mask</span><span class="p">);</span>
|
||||
</span><span class="linenos">10</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
|
||||
<span class="linenos">11</span><span class="p">}</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html class="writer-html5" lang="zh-CN" data-content_root="../">
|
||||
<html class="writer-html5" lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
|
||||
|
|
@ -14,11 +14,10 @@
|
|||
|
||||
<script src="../_static/jquery.js?v=5d32c60e"></script>
|
||||
<script src="../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
|
||||
<script src="../_static/documentation_options.js?v=406e4f49"></script>
|
||||
<script src="../_static/doctools.js?v=9bcbadda"></script>
|
||||
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js?v=595569a8"></script>
|
||||
<script src="../_static/doctools.js?v=888ff710"></script>
|
||||
<script src="../_static/sphinx_highlight.js?v=4825356b"></script>
|
||||
<script src="../_static/translations.js?v=beaddf03"></script>
|
||||
<script async="async" src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
|
||||
<script src="../_static/table.js?v=99ed15ba"></script>
|
||||
<script src="../_static/js/theme.js"></script>
|
||||
<link rel="index" title="索引" href="../genindex.html" />
|
||||
|
|
@ -83,7 +82,7 @@
|
|||
<div itemprop="articleBody">
|
||||
|
||||
<section id="id1">
|
||||
<h1>算子库支持<a class="headerlink" href="#id1" title="Link to this heading"></a></h1>
|
||||
<h1>算子库支持<a class="headerlink" href="#id1" title="此标题的永久链接"></a></h1>
|
||||
<div class="toctree-wrapper compound">
|
||||
<ul>
|
||||
<li class="toctree-l1"><a class="reference internal" href="supported_op.html">算子库支持情况</a></li>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html class="writer-html5" lang="zh-CN" data-content_root="../">
|
||||
<html class="writer-html5" lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
|
||||
|
|
@ -14,9 +14,9 @@
|
|||
|
||||
<script src="../_static/jquery.js?v=5d32c60e"></script>
|
||||
<script src="../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
|
||||
<script src="../_static/documentation_options.js?v=406e4f49"></script>
|
||||
<script src="../_static/doctools.js?v=9bcbadda"></script>
|
||||
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js?v=595569a8"></script>
|
||||
<script src="../_static/doctools.js?v=888ff710"></script>
|
||||
<script src="../_static/sphinx_highlight.js?v=4825356b"></script>
|
||||
<script src="../_static/translations.js?v=beaddf03"></script>
|
||||
<script src="../_static/table.js?v=99ed15ba"></script>
|
||||
<script src="../_static/js/theme.js"></script>
|
||||
|
|
@ -47,7 +47,7 @@
|
|||
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="导航菜单">
|
||||
<ul class="current">
|
||||
<li class="toctree-l1"><a class="reference internal" href="../quickstart/index.html">快速入门</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../appdevelop/index.html">应用开发</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../appdevelop/index.html">应用开发示例</a></li>
|
||||
<li class="toctree-l1 current"><a class="reference internal" href="index.html">算子库支持</a><ul class="current">
|
||||
<li class="toctree-l2 current"><a class="current reference internal" href="#">算子库支持情况</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="custom_op/index.html">自定义算子列表</a></li>
|
||||
|
|
@ -83,7 +83,7 @@
|
|||
<div itemprop="articleBody">
|
||||
|
||||
<section id="id1">
|
||||
<h1>算子库支持情况<a class="headerlink" href="#id1" title="Link to this heading"></a></h1>
|
||||
<h1>算子库支持情况<a class="headerlink" href="#id1" title="此标题的永久链接"></a></h1>
|
||||
<ul class="simple">
|
||||
<li><p>MindSpore Lite支持不同硬件后端的算子列表</p></li>
|
||||
</ul>
|
||||
|
|
@ -4315,7 +4315,8 @@
|
|||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div></section>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html class="writer-html5" lang="zh-CN" data-content_root="./">
|
||||
<html class="writer-html5" lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
|
|
@ -13,9 +13,9 @@
|
|||
|
||||
<script src="_static/jquery.js?v=5d32c60e"></script>
|
||||
<script src="_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
|
||||
<script src="_static/documentation_options.js?v=406e4f49"></script>
|
||||
<script src="_static/doctools.js?v=9bcbadda"></script>
|
||||
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js?v=595569a8"></script>
|
||||
<script src="_static/doctools.js?v=888ff710"></script>
|
||||
<script src="_static/sphinx_highlight.js?v=4825356b"></script>
|
||||
<script src="_static/translations.js?v=beaddf03"></script>
|
||||
<script src="_static/table.js?v=99ed15ba"></script>
|
||||
<script src="_static/js/theme.js"></script>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html class="writer-html5" lang="zh-CN" data-content_root="./">
|
||||
<html class="writer-html5" lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
|
||||
|
|
@ -14,11 +14,10 @@
|
|||
|
||||
<script src="_static/jquery.js?v=5d32c60e"></script>
|
||||
<script src="_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
|
||||
<script src="_static/documentation_options.js?v=406e4f49"></script>
|
||||
<script src="_static/doctools.js?v=9bcbadda"></script>
|
||||
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js?v=595569a8"></script>
|
||||
<script src="_static/doctools.js?v=888ff710"></script>
|
||||
<script src="_static/sphinx_highlight.js?v=4825356b"></script>
|
||||
<script src="_static/translations.js?v=beaddf03"></script>
|
||||
<script async="async" src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
|
||||
<script src="_static/table.js?v=99ed15ba"></script>
|
||||
<script src="_static/js/theme.js"></script>
|
||||
<link rel="index" title="索引" href="genindex.html" />
|
||||
|
|
@ -77,7 +76,7 @@
|
|||
<div itemprop="articleBody">
|
||||
|
||||
<section id="mindspore-signal">
|
||||
<h1>MindSpore Signal+ 使用手册<a class="headerlink" href="#mindspore-signal" title="Link to this heading"></a></h1>
|
||||
<h1>MindSpore Signal+ 使用手册<a class="headerlink" href="#mindspore-signal" title="此标题的永久链接"></a></h1>
|
||||
<div class="toctree-wrapper compound">
|
||||
<ul>
|
||||
<li class="toctree-l1"><a class="reference internal" href="quickstart/index.html">快速入门</a><ul>
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -1,7 +1,7 @@
|
|||
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html class="writer-html5" lang="zh-CN" data-content_root="../">
|
||||
<html class="writer-html5" lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
|
||||
|
|
@ -14,9 +14,9 @@
|
|||
|
||||
<script src="../_static/jquery.js?v=5d32c60e"></script>
|
||||
<script src="../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
|
||||
<script src="../_static/documentation_options.js?v=406e4f49"></script>
|
||||
<script src="../_static/doctools.js?v=9bcbadda"></script>
|
||||
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js?v=595569a8"></script>
|
||||
<script src="../_static/doctools.js?v=888ff710"></script>
|
||||
<script src="../_static/sphinx_highlight.js?v=4825356b"></script>
|
||||
<script src="../_static/translations.js?v=beaddf03"></script>
|
||||
<script src="../_static/table.js?v=99ed15ba"></script>
|
||||
<script src="../_static/js/theme.js"></script>
|
||||
|
|
@ -100,16 +100,16 @@
|
|||
<div itemprop="articleBody">
|
||||
|
||||
<section id="hellodsp">
|
||||
<h1>HelloDSP<a class="headerlink" href="#hellodsp" title="Link to this heading"></a></h1>
|
||||
<h1>HelloDSP<a class="headerlink" href="#hellodsp" title="此标题的永久链接"></a></h1>
|
||||
<p>HelloDSP 是一个简单的MindSpore Signal+平台开发示例,展示如何开发一个矩阵乘程序。主要流程分为两部分操作,分别为<a class="reference internal" href="#python"><span class="std std-ref">MindSpore Python端</span></a>和<a class="reference internal" href="#c"><span class="std std-ref">MindSpore Lite端</span></a>。MindSpore Python端在本地运行,用于生成模型;MindSpore Lite端在本地交叉编译,编译产物拷贝到MT7004板卡上运行。以下是HelloDSP矩阵乘例子介绍:</p>
|
||||
<section id="mindspore-python">
|
||||
<span id="python"></span><h2>1.MindSpore Python端<a class="headerlink" href="#mindspore-python" title="Link to this heading"></a></h2>
|
||||
<span id="python"></span><h2>1.MindSpore Python端<a class="headerlink" href="#mindspore-python" title="此标题的永久链接"></a></h2>
|
||||
<section id="id1">
|
||||
<h3>1.1 新建Python文件<a class="headerlink" href="#id1" title="Link to this heading"></a></h3>
|
||||
<h3>1.1 新建Python文件<a class="headerlink" href="#id1" title="此标题的永久链接"></a></h3>
|
||||
<p>打开<code class="docutils literal notranslate"><span class="pre">YHFT-IDE</span></code>,新建<code class="docutils literal notranslate"><span class="pre">test_matmul.py</span></code>文件</p>
|
||||
</section>
|
||||
<section id="id2">
|
||||
<h3>1.2 编写Python代码<a class="headerlink" href="#id2" title="Link to this heading"></a></h3>
|
||||
<h3>1.2 编写Python代码<a class="headerlink" href="#id2" title="此标题的永久链接"></a></h3>
|
||||
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span><span class="w"> </span><span class="nn">mindspore</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">ms</span>
|
||||
<span class="kn">import</span><span class="w"> </span><span class="nn">numpy</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">np</span>
|
||||
<span class="kn">from</span><span class="w"> </span><span class="nn">mindspore</span><span class="w"> </span><span class="kn">import</span> <span class="n">nn</span><span class="p">,</span> <span class="n">ops</span>
|
||||
|
|
@ -154,21 +154,21 @@
|
|||
</ul>
|
||||
</section>
|
||||
<section id="id3">
|
||||
<h3>1.3 运行Python代码<a class="headerlink" href="#id3" title="Link to this heading"></a></h3>
|
||||
<h3>1.3 运行Python代码<a class="headerlink" href="#id3" title="此标题的永久链接"></a></h3>
|
||||
<p>在<code class="docutils literal notranslate"><span class="pre">YHFT-IDE</span></code>中运行<code class="docutils literal notranslate"><span class="pre">test_matmul.py</span></code>文件,会生成一个<code class="docutils literal notranslate"><span class="pre">matmul.mindir</span></code>模型文件,要在MindSpore Lite端运行则需要转成ms模型文件。mindir转ms的converter工具也已经集成到vscode,有两种方式使用converter工具:</p>
|
||||
<p>方式一:点击调试按钮;点击模型转换;选择要转的mindir模型文件即可。</p>
|
||||
<p>方式二:选择模型文件直接右键,找到模型转换选项,点击即可。</p>
|
||||
</section>
|
||||
</section>
|
||||
<section id="mindspore-lite">
|
||||
<span id="c"></span><h2>MindSpore Lite端<a class="headerlink" href="#mindspore-lite" title="Link to this heading"></a></h2>
|
||||
<span id="c"></span><h2>MindSpore Lite端<a class="headerlink" href="#mindspore-lite" title="此标题的永久链接"></a></h2>
|
||||
<section id="id4">
|
||||
<h3>1. 新建工程<a class="headerlink" href="#id4" title="Link to this heading"></a></h3>
|
||||
<h3>1. 新建工程<a class="headerlink" href="#id4" title="此标题的永久链接"></a></h3>
|
||||
<p>打开<code class="docutils literal notranslate"><span class="pre">YHFT-IDE</span></code>,新建工程。输入工程名、路径,工程类型选择<code class="docutils literal notranslate"><span class="pre">Heterogeneous</span></code>,输入交叉编译工具路径,参照<a class="reference internal" href="installation.html#toolchain"><span class="std std-ref">配置交叉编译工具链</span></a>,然后点确定。会生成一个异构模板工程。</p>
|
||||
<img src="../_static/create_project.png" alt="create_project" width="auto"/>
|
||||
</section>
|
||||
<section id="id5">
|
||||
<h3>2. 工程目录结构<a class="headerlink" href="#id5" title="Link to this heading"></a></h3>
|
||||
<h3>2. 工程目录结构<a class="headerlink" href="#id5" title="此标题的永久链接"></a></h3>
|
||||
<p>生成的异构模板工程具有以下目录结构:</p>
|
||||
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>test_matmul/
|
||||
├──<span class="w"> </span>model/
|
||||
|
|
@ -218,7 +218,7 @@
|
|||
</table>
|
||||
</section>
|
||||
<section id="id6">
|
||||
<h3>3. 更改输入数据<a class="headerlink" href="#id6" title="Link to this heading"></a></h3>
|
||||
<h3>3. 更改输入数据<a class="headerlink" href="#id6" title="此标题的永久链接"></a></h3>
|
||||
<p>通过修改 <code class="docutils literal notranslate"><span class="pre">data_handler.cc</span></code> 文件中的函数来调整输入输出数据:</p>
|
||||
<ul class="simple">
|
||||
<li><p><strong>修改输入数据</strong>:编辑 <code class="docutils literal notranslate"><span class="pre">GetInputData</span></code> 函数内容</p></li>
|
||||
|
|
@ -232,15 +232,15 @@
|
|||
<img src="../_static/init_input_data.png" alt="init_input_data" width="auto"/>
|
||||
</section>
|
||||
<section id="main-cc">
|
||||
<h3>4. main.cc 功能介绍<a class="headerlink" href="#main-cc" title="Link to this heading"></a></h3>
|
||||
<h3>4. main.cc 功能介绍<a class="headerlink" href="#main-cc" title="此标题的永久链接"></a></h3>
|
||||
<p><code class="docutils literal notranslate"><span class="pre">main</span></code> 函数主要包含 6 个核心步骤,实现完整的模型推理流程:</p>
|
||||
<section id="id7">
|
||||
<h4>4.1 读取模型文件<a class="headerlink" href="#id7" title="Link to this heading"></a></h4>
|
||||
<h4>4.1 读取模型文件<a class="headerlink" href="#id7" title="此标题的永久链接"></a></h4>
|
||||
<p>通过 <code class="docutils literal notranslate"><span class="pre">ReadFile</span></code> 接口读取 <code class="docutils literal notranslate"><span class="pre">.ms</span></code> 模型文件,将数据保存到 <code class="docutils literal notranslate"><span class="pre">model_buf</span></code> 中。</p>
|
||||
<img src="../_static/read_model.png" alt="read_model" width="auto"/>
|
||||
</section>
|
||||
<section id="id8">
|
||||
<h4>4.2 设置运行后端<a class="headerlink" href="#id8" title="Link to this heading"></a></h4>
|
||||
<h4>4.2 设置运行后端<a class="headerlink" href="#id8" title="此标题的永久链接"></a></h4>
|
||||
<p>通过 <code class="docutils literal notranslate"><span class="pre">context</span></code> 的 <code class="docutils literal notranslate"><span class="pre">MutableDeviceInfo</span></code> 添加一个或多个后端:</p>
|
||||
<ul class="simple">
|
||||
<li><p><strong>默认后端</strong>:<code class="docutils literal notranslate"><span class="pre">MT7004</span></code></p></li>
|
||||
|
|
@ -249,7 +249,7 @@
|
|||
<img src="../_static/set_device.png" alt="set_device" width="auto"/>
|
||||
</section>
|
||||
<section id="id9">
|
||||
<h4>4.3 编译模型图<a class="headerlink" href="#id9" title="Link to this heading"></a></h4>
|
||||
<h4>4.3 编译模型图<a class="headerlink" href="#id9" title="此标题的永久链接"></a></h4>
|
||||
<p>通过 MindSpore 的 <code class="docutils literal notranslate"><span class="pre">Model</span></code> 类的 <code class="docutils literal notranslate"><span class="pre">Build</span></code> 方法编译模型图:</p>
|
||||
<p><strong>编译规则</strong>:按设置顺序查找后端算子,都没找到则编译失败</p>
|
||||
<p><strong>Build 方法参数:</strong></p>
|
||||
|
|
@ -282,12 +282,12 @@
|
|||
<img src="../_static/build_model.png" alt="build_model" width="auto"/>
|
||||
</section>
|
||||
<section id="id10">
|
||||
<h4>4.4 获取模型输入<a class="headerlink" href="#id10" title="Link to this heading"></a></h4>
|
||||
<h4>4.4 获取模型输入<a class="headerlink" href="#id10" title="此标题的永久链接"></a></h4>
|
||||
<p>通过 <code class="docutils literal notranslate"><span class="pre">Model</span></code> 类的 <code class="docutils literal notranslate"><span class="pre">GetInputs</span></code> 方法获取所有模型输入的 <code class="docutils literal notranslate"><span class="pre">Tensor</span></code> 地址,通过修改 <code class="docutils literal notranslate"><span class="pre">GetInputData</span></code> 函数传递输入值。</p>
|
||||
<img src="../_static/get_input.png" alt="get_input" width="auto"/>
|
||||
</section>
|
||||
<section id="id11">
|
||||
<h4>4.5 执行模型推理<a class="headerlink" href="#id11" title="Link to this heading"></a></h4>
|
||||
<h4>4.5 执行模型推理<a class="headerlink" href="#id11" title="此标题的永久链接"></a></h4>
|
||||
<p>通过 <code class="docutils literal notranslate"><span class="pre">Model</span></code> 类的 <code class="docutils literal notranslate"><span class="pre">Predict</span></code> 方法进行模型推理:</p>
|
||||
<p><strong>Predict 方法参数:</strong></p>
|
||||
<table class="docutils align-default">
|
||||
|
|
@ -311,13 +311,13 @@
|
|||
<img src="../_static/model_predict.png" alt="model_predict" width="auto"/>
|
||||
</section>
|
||||
<section id="id12">
|
||||
<h4>4.6 获取模型结果<a class="headerlink" href="#id12" title="Link to this heading"></a></h4>
|
||||
<h4>4.6 获取模型结果<a class="headerlink" href="#id12" title="此标题的永久链接"></a></h4>
|
||||
<p>通过 <code class="docutils literal notranslate"><span class="pre">Model</span></code> 类的 <code class="docutils literal notranslate"><span class="pre">GetOutputs</span></code> 方法获取所有模型输出,通过修改 <code class="docutils literal notranslate"><span class="pre">GetOutputData</span></code> 函数查看输出值。</p>
|
||||
<img src="../_static/get_output.png" alt="get_output" width="auto"/>
|
||||
</section>
|
||||
</section>
|
||||
<section id="id13">
|
||||
<h3>5. 编译工程<a class="headerlink" href="#id13" title="Link to this heading"></a></h3>
|
||||
<h3>5. 编译工程<a class="headerlink" href="#id13" title="此标题的永久链接"></a></h3>
|
||||
<p>提供多种编译方式,选择其中一种即可:</p>
|
||||
<p><strong>编译方式:</strong></p>
|
||||
<ul class="simple">
|
||||
|
|
@ -328,10 +328,10 @@
|
|||
<img src="../_static/build_project.png" alt="build_project" width="auto"/>
|
||||
</section>
|
||||
<section id="id14">
|
||||
<h3>6. 运行工程<a class="headerlink" href="#id14" title="Link to this heading"></a></h3>
|
||||
<h3>6. 运行工程<a class="headerlink" href="#id14" title="此标题的永久链接"></a></h3>
|
||||
<p>编译生成的可执行文件位于 <code class="docutils literal notranslate"><span class="pre">build</span></code> 目录下,默认文件名为 <code class="docutils literal notranslate"><span class="pre">main</span></code>。需要将可执行文件拷贝到 MT7004 板卡上运行。</p>
|
||||
<section id="mt7004">
|
||||
<h4>6.1 连接 MT7004 板卡<a class="headerlink" href="#mt7004" title="Link to this heading"></a></h4>
|
||||
<h4>6.1 连接 MT7004 板卡<a class="headerlink" href="#mt7004" title="此标题的永久链接"></a></h4>
|
||||
<p><strong>步骤 1:</strong> 打开远程窗口</p>
|
||||
<ul class="simple">
|
||||
<li><p>在 <code class="docutils literal notranslate"><span class="pre">YHFT-IDE</span></code> 左下角找到远程窗口功能</p></li>
|
||||
|
|
@ -356,14 +356,15 @@
|
|||
<img src="../_static/ssh_success.png" alt="ssh_success" width="auto"/>
|
||||
</section>
|
||||
<section id="id15">
|
||||
<h4>6.2 部署和运行程序<a class="headerlink" href="#id15" title="Link to this heading"></a></h4>
|
||||
<h4>6.2 部署和运行程序<a class="headerlink" href="#id15" title="此标题的永久链接"></a></h4>
|
||||
<p><strong>步骤 4:</strong> 部署程序文件</p>
|
||||
<ul class="simple">
|
||||
<li><p>在 MT7004 板卡上新建目录存放程序</p></li>
|
||||
<li><p>通过拖拽方式将可执行文件和模型文件传输到板卡</p></li>
|
||||
<li><p>使用 <code class="docutils literal notranslate"><span class="pre">chmod</span></code> 命令赋予可执行文件执行权限</p></li>
|
||||
</ul>
|
||||
<img src="../_static/model_run.png" alt="model_run" width="auto"/></section>
|
||||
<img src="../_static/model_run.png" alt="model_run" width="auto"/>
|
||||
</section>
|
||||
</section>
|
||||
</section>
|
||||
</section>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html class="writer-html5" lang="zh-CN" data-content_root="../">
|
||||
<html class="writer-html5" lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
|
||||
|
|
@ -14,9 +14,9 @@
|
|||
|
||||
<script src="../_static/jquery.js?v=5d32c60e"></script>
|
||||
<script src="../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
|
||||
<script src="../_static/documentation_options.js?v=406e4f49"></script>
|
||||
<script src="../_static/doctools.js?v=9bcbadda"></script>
|
||||
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js?v=595569a8"></script>
|
||||
<script src="../_static/doctools.js?v=888ff710"></script>
|
||||
<script src="../_static/sphinx_highlight.js?v=4825356b"></script>
|
||||
<script src="../_static/translations.js?v=beaddf03"></script>
|
||||
<script src="../_static/table.js?v=99ed15ba"></script>
|
||||
<script src="../_static/js/theme.js"></script>
|
||||
|
|
@ -82,7 +82,7 @@
|
|||
<div itemprop="articleBody">
|
||||
|
||||
<section id="id1">
|
||||
<h1>快速入门<a class="headerlink" href="#id1" title="Link to this heading"></a></h1>
|
||||
<h1>快速入门<a class="headerlink" href="#id1" title="此标题的永久链接"></a></h1>
|
||||
<div class="toctree-wrapper compound">
|
||||
<ul>
|
||||
<li class="toctree-l1"><a class="reference internal" href="installation.html">环境安装</a></li>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html class="writer-html5" lang="zh-CN" data-content_root="../">
|
||||
<html class="writer-html5" lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
|
||||
|
|
@ -14,15 +14,15 @@
|
|||
|
||||
<script src="../_static/jquery.js?v=5d32c60e"></script>
|
||||
<script src="../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
|
||||
<script src="../_static/documentation_options.js?v=406e4f49"></script>
|
||||
<script src="../_static/doctools.js?v=9bcbadda"></script>
|
||||
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js?v=595569a8"></script>
|
||||
<script src="../_static/doctools.js?v=888ff710"></script>
|
||||
<script src="../_static/sphinx_highlight.js?v=4825356b"></script>
|
||||
<script src="../_static/translations.js?v=beaddf03"></script>
|
||||
<script src="../_static/table.js?v=99ed15ba"></script>
|
||||
<script src="../_static/js/theme.js"></script>
|
||||
<link rel="index" title="索引" href="../genindex.html" />
|
||||
<link rel="search" title="搜索" href="../search.html" />
|
||||
<link rel="next" title="HelloDSP" href="helloworld.html" />
|
||||
<link rel="next" title="HelloDSP" href="hellodsp.html" />
|
||||
<link rel="prev" title="快速入门" href="index.html" />
|
||||
</head>
|
||||
|
||||
|
|
@ -60,11 +60,11 @@
|
|||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="helloworld.html">HelloDSP</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="hellodsp.html">HelloDSP</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="overview.html">整体概览</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../appdevelop/index.html">应用开发</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../appdevelop/index.html">应用开发示例</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../functionlib/index.html">算子库支持</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../refdoc/index.html">参考资料</a></li>
|
||||
</ul>
|
||||
|
|
@ -95,9 +95,9 @@
|
|||
<div itemprop="articleBody">
|
||||
|
||||
<section id="id1">
|
||||
<h1>环境安装<a class="headerlink" href="#id1" title="Link to this heading"></a></h1>
|
||||
<h1>环境安装<a class="headerlink" href="#id1" title="此标题的永久链接"></a></h1>
|
||||
<section id="mindspore-radar">
|
||||
<h2>安装MindSpore Radar 与依赖软件<a class="headerlink" href="#mindspore-radar" title="Link to this heading"></a></h2>
|
||||
<h2>安装MindSpore Radar 与依赖软件<a class="headerlink" href="#mindspore-radar" title="此标题的永久链接"></a></h2>
|
||||
<table class="docutils align-default">
|
||||
<thead>
|
||||
<tr class="row-odd"><th class="head"><p>软件名称</p></th>
|
||||
|
|
@ -142,18 +142,18 @@
|
|||
</table>
|
||||
<p>上述所有软件包可以通过在线链接提取:<a class="reference external" href="https://">软件资源包</a></p>
|
||||
<section id="python">
|
||||
<span id="install-python"></span><h3>安装Python<a class="headerlink" href="#python" title="Link to this heading"></a></h3>
|
||||
<span id="install-python"></span><h3>安装Python<a class="headerlink" href="#python" title="此标题的永久链接"></a></h3>
|
||||
<p>本文提供两种不同的安装方式,自行选择合适的方式安装。</p>
|
||||
<section id="id2">
|
||||
<h4>1.安装包方式安装<a class="headerlink" href="#id2" title="Link to this heading"></a></h4>
|
||||
<h4>1.安装包方式安装<a class="headerlink" href="#id2" title="此标题的永久链接"></a></h4>
|
||||
<section id="id3">
|
||||
<h5>1.1 下载安装包<a class="headerlink" href="#id3" title="Link to this heading"></a></h5>
|
||||
<h5>1.1 下载安装包<a class="headerlink" href="#id3" title="此标题的永久链接"></a></h5>
|
||||
<p>根据机器的操作系统版本,在官网下载32位或64位windows版本的python3.8安装包:</p>
|
||||
<p>64位:<a class="reference external" href="https://www.python.org/ftp/python/3.8.10/python-3.8.10-amd64.exe">https://www.python.org/ftp/python/3.8.10/python-3.8.10-amd64.exe</a></p>
|
||||
<p>32位:<a class="reference external" href="https://www.python.org/ftp/python/3.8.10/python-3.8.10.exe">https://www.python.org/ftp/python/3.8.10/python-3.8.10.exe</a></p>
|
||||
</section>
|
||||
<section id="id4">
|
||||
<h5>1.2 开始安装<a class="headerlink" href="#id4" title="Link to this heading"></a></h5>
|
||||
<h5>1.2 开始安装<a class="headerlink" href="#id4" title="此标题的永久链接"></a></h5>
|
||||
<p>双击打开python安装包,选择Customize installation方式安装,并勾选<code class="docutils literal notranslate"><span class="pre">Add</span> <span class="pre">python3.8</span> <span class="pre">to</span> <span class="pre">PATH</span></code>。如下图:</p>
|
||||
<img src="../_static/python_install_step1.png" alt="python_install_step1" width="auto"/>
|
||||
<p>接着按默认选项点击下一步,可以根据需求选择安装路径,以及是否安装给所有用户。如下图:</p>
|
||||
|
|
@ -162,7 +162,7 @@
|
|||
<img src="../_static/python_install_success.png" alt="python_install_success" width="auto"/>
|
||||
</section>
|
||||
<section id="id5">
|
||||
<h5>1.3 验证安装<a class="headerlink" href="#id5" title="Link to this heading"></a></h5>
|
||||
<h5>1.3 验证安装<a class="headerlink" href="#id5" title="此标题的永久链接"></a></h5>
|
||||
<p>可以在cmd命令窗口通过以下命令查看Python版本。</p>
|
||||
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>python<span class="w"> </span>--version
|
||||
</pre></div>
|
||||
|
|
@ -170,7 +170,7 @@
|
|||
</section>
|
||||
</section>
|
||||
<section id="conda">
|
||||
<h4>2.Conda方式安装<a class="headerlink" href="#conda" title="Link to this heading"></a></h4>
|
||||
<h4>2.Conda方式安装<a class="headerlink" href="#conda" title="此标题的永久链接"></a></h4>
|
||||
<p><a class="reference external" href="https://docs.conda.io/en/latest/">Conda</a>是一个开源跨平台语言无关的包管理与环境管理系统,允许用户方便地安装不同版本的二进制软件包,以及该计算平台需要的所有库。</p>
|
||||
<ul class="simple">
|
||||
<li><p>确认安装Windows是x86架构64位操作系统。</p></li>
|
||||
|
|
@ -182,7 +182,7 @@
|
|||
</li>
|
||||
</ul>
|
||||
<section id="id6">
|
||||
<h5>创建并进入Conda虚拟环境<a class="headerlink" href="#id6" title="Link to this heading"></a></h5>
|
||||
<h5>创建并进入Conda虚拟环境<a class="headerlink" href="#id6" title="此标题的永久链接"></a></h5>
|
||||
<p>在Windows上使用Anaconda,请通过<code class="docutils literal notranslate"><span class="pre">开始</span> <span class="pre">|</span> <span class="pre">Anaconda3</span> <span class="pre">|</span> <span class="pre">Anaconda</span> <span class="pre">Promt</span></code>打开Anaconda命令行。</p>
|
||||
<p>根据您希望使用的Python版本,创建对应的Conda虚拟环境,并进入虚拟环境。
|
||||
如果您希望使用Python3.8.10版本:</p>
|
||||
|
|
@ -194,7 +194,7 @@ conda<span class="w"> </span>activate<span class="w"> </span>mindspore_py38
|
|||
</section>
|
||||
</section>
|
||||
<section id="mindspore">
|
||||
<span id="install-mindspore"></span><h3>安装MindSpore<a class="headerlink" href="#mindspore" title="Link to this heading"></a></h3>
|
||||
<span id="install-mindspore"></span><h3>安装MindSpore<a class="headerlink" href="#mindspore" title="此标题的永久链接"></a></h3>
|
||||
<p>通过<code class="docutils literal notranslate"><span class="pre">pip</span> <span class="pre">install</span> <span class="pre">mindspore-xxx-win_amd64.whl</span></code>命令安装MindSpore。验证是否成功安装,执行以下命令:</p>
|
||||
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>python<span class="w"> </span>-c<span class="w"> </span><span class="s2">"import mindspore;mindspore.set_device(device_target='CPU');mindspore.run_check()"</span>
|
||||
</pre></div>
|
||||
|
|
@ -211,7 +211,7 @@ The result of multiplication calculation is correct, MindSpore has been installe
|
|||
</div>
|
||||
</section>
|
||||
<section id="mindradar">
|
||||
<span id="install-mindradar"></span><h3>安装MindRadar<a class="headerlink" href="#mindradar" title="Link to this heading"></a></h3>
|
||||
<span id="install-mindradar"></span><h3>安装MindRadar<a class="headerlink" href="#mindradar" title="此标题的永久链接"></a></h3>
|
||||
<p>通过<code class="docutils literal notranslate"><span class="pre">pip</span> <span class="pre">install</span> <span class="pre">mindradar-xxx-py3-none-any.whl</span></code>命令安装MindRadar。验证是否成功安装,执行以下命令:</p>
|
||||
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>python<span class="w"> </span>-c<span class="w"> </span><span class="s2">"import mindspore;import mindradar;from mindradar import ComplexAbs;"</span>
|
||||
</pre></div>
|
||||
|
|
@ -219,20 +219,20 @@ The result of multiplication calculation is correct, MindSpore has been installe
|
|||
<p>如果没有报错,说明MindRadar安装成功了。</p>
|
||||
</section>
|
||||
<section id="toolchain">
|
||||
<span id="id7"></span><h3>配置交叉编译工具链<a class="headerlink" href="#toolchain" title="Link to this heading"></a></h3>
|
||||
<span id="id7"></span><h3>配置交叉编译工具链<a class="headerlink" href="#toolchain" title="此标题的永久链接"></a></h3>
|
||||
<p>官网下载windows版本的交叉编译工具:
|
||||
<a class="reference external" href="https://releases.linaro.org/components/toolchain/binaries/7.5-2019.12/arm-linux-gnueabihf/gcc-linaro-7.5.0-2019.12-i686-mingw32_arm-linux-gnueabihf.tar.xz">https://releases.linaro.org/components/toolchain/binaries/7.5-2019.12/arm-linux-gnueabihf/gcc-linaro-7.5.0-2019.12-i686-mingw32_arm-linux-gnueabihf.tar.xz</a></p>
|
||||
<p>将下载好的交叉编译工具包解压到一个全英文的文件夹即可,后续编译MindSpore Signal+ C++ 应用时需要填写交叉编译工具包的绝对路径。</p>
|
||||
</section>
|
||||
<section id="yhft-ide">
|
||||
<span id="install-yhft-ide"></span><h3>安装YHFT-IDE<a class="headerlink" href="#yhft-ide" title="Link to this heading"></a></h3>
|
||||
<span id="install-yhft-ide"></span><h3>安装YHFT-IDE<a class="headerlink" href="#yhft-ide" title="此标题的永久链接"></a></h3>
|
||||
<p>找到软件安装包,双击打开安装,同意条款;选择安装目录,点击下一步:</p>
|
||||
<img src="../_static/yhft-ide_install.png" alt="yhft-ide_install" width="auto"/>
|
||||
<p>然后一直按默认选项点下一步,直到点击安装。安装完成如下:</p>
|
||||
<img src="../_static/yhft-ide_install_success.png" alt="yhft-ide_install_success" width="auto"/>
|
||||
</section>
|
||||
<section id="cmake">
|
||||
<span id="install-cmake"></span><h3>安装CMake<a class="headerlink" href="#cmake" title="Link to this heading"></a></h3>
|
||||
<span id="install-cmake"></span><h3>安装CMake<a class="headerlink" href="#cmake" title="此标题的永久链接"></a></h3>
|
||||
<p>CMake官网选择合适版本下载CMake安装包:<a class="reference external" href="https://cmake.org/download/">https://cmake.org/download/</a></p>
|
||||
<p>双击打开安装包,会弹出如下界面,点击<code class="docutils literal notranslate"><span class="pre">Next</span></code>,进入下一步:</p>
|
||||
<img src="../_static/cmake_install_step1.png" alt="cmake_install_step1" width="auto"/>
|
||||
|
|
@ -245,7 +245,7 @@ The result of multiplication calculation is correct, MindSpore has been installe
|
|||
<img src="../_static/cmake_install_success.png" alt="cmake_install_step3" width="auto"/>
|
||||
</section>
|
||||
<section id="netron">
|
||||
<span id="install-netron"></span><h3>安装Netron<a class="headerlink" href="#netron" title="Link to this heading"></a></h3>
|
||||
<span id="install-netron"></span><h3>安装Netron<a class="headerlink" href="#netron" title="此标题的永久链接"></a></h3>
|
||||
<p>找到软件安装包,双击打开安装即可。</p>
|
||||
</section>
|
||||
</section>
|
||||
|
|
@ -256,7 +256,7 @@ The result of multiplication calculation is correct, MindSpore has been installe
|
|||
</div>
|
||||
<footer><div class="rst-footer-buttons" role="navigation" aria-label="页脚">
|
||||
<a href="index.html" class="btn btn-neutral float-left" title="快速入门" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> 上一页</a>
|
||||
<a href="helloworld.html" class="btn btn-neutral float-right" title="HelloDSP" accesskey="n" rel="next">下一页 <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
|
||||
<a href="hellodsp.html" class="btn btn-neutral float-right" title="HelloDSP" accesskey="n" rel="next">下一页 <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
|
||||
</div>
|
||||
|
||||
<hr/>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html class="writer-html5" lang="zh-CN" data-content_root="../">
|
||||
<html class="writer-html5" lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
|
||||
|
|
@ -14,16 +14,16 @@
|
|||
|
||||
<script src="../_static/jquery.js?v=5d32c60e"></script>
|
||||
<script src="../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
|
||||
<script src="../_static/documentation_options.js?v=406e4f49"></script>
|
||||
<script src="../_static/doctools.js?v=9bcbadda"></script>
|
||||
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js?v=595569a8"></script>
|
||||
<script src="../_static/doctools.js?v=888ff710"></script>
|
||||
<script src="../_static/sphinx_highlight.js?v=4825356b"></script>
|
||||
<script src="../_static/translations.js?v=beaddf03"></script>
|
||||
<script src="../_static/table.js?v=99ed15ba"></script>
|
||||
<script src="../_static/js/theme.js"></script>
|
||||
<link rel="index" title="索引" href="../genindex.html" />
|
||||
<link rel="search" title="搜索" href="../search.html" />
|
||||
<link rel="next" title="应用开发" href="../appdevelop/index.html" />
|
||||
<link rel="prev" title="HelloDSP" href="helloworld.html" />
|
||||
<link rel="next" title="应用开发示例" href="../appdevelop/index.html" />
|
||||
<link rel="prev" title="HelloDSP" href="hellodsp.html" />
|
||||
</head>
|
||||
|
||||
<body class="wy-body-for-nav">
|
||||
|
|
@ -48,11 +48,11 @@
|
|||
<ul class="current">
|
||||
<li class="toctree-l1 current"><a class="reference internal" href="index.html">快速入门</a><ul class="current">
|
||||
<li class="toctree-l2"><a class="reference internal" href="installation.html">环境安装</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="helloworld.html">HelloDSP</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="hellodsp.html">HelloDSP</a></li>
|
||||
<li class="toctree-l2 current"><a class="current reference internal" href="#">整体概览</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../appdevelop/index.html">应用开发</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../appdevelop/index.html">应用开发示例</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../functionlib/index.html">算子库支持</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../refdoc/index.html">参考资料</a></li>
|
||||
</ul>
|
||||
|
|
@ -83,15 +83,15 @@
|
|||
<div itemprop="articleBody">
|
||||
|
||||
<section id="id1">
|
||||
<h1>整体概览<a class="headerlink" href="#id1" title="Link to this heading"></a></h1>
|
||||
<h1>整体概览<a class="headerlink" href="#id1" title="此标题的永久链接"></a></h1>
|
||||
</section>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<footer><div class="rst-footer-buttons" role="navigation" aria-label="页脚">
|
||||
<a href="helloworld.html" class="btn btn-neutral float-left" title="HelloDSP" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> 上一页</a>
|
||||
<a href="../appdevelop/index.html" class="btn btn-neutral float-right" title="应用开发" accesskey="n" rel="next">下一页 <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
|
||||
<a href="hellodsp.html" class="btn btn-neutral float-left" title="HelloDSP" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> 上一页</a>
|
||||
<a href="../appdevelop/index.html" class="btn btn-neutral float-right" title="应用开发示例" accesskey="n" rel="next">下一页 <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
|
||||
</div>
|
||||
|
||||
<hr/>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html class="writer-html5" lang="zh-CN" data-content_root="../">
|
||||
<html class="writer-html5" lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
|
||||
|
|
@ -14,9 +14,9 @@
|
|||
|
||||
<script src="../_static/jquery.js?v=5d32c60e"></script>
|
||||
<script src="../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
|
||||
<script src="../_static/documentation_options.js?v=406e4f49"></script>
|
||||
<script src="../_static/doctools.js?v=9bcbadda"></script>
|
||||
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js?v=595569a8"></script>
|
||||
<script src="../_static/doctools.js?v=888ff710"></script>
|
||||
<script src="../_static/sphinx_highlight.js?v=4825356b"></script>
|
||||
<script src="../_static/translations.js?v=beaddf03"></script>
|
||||
<script src="../_static/table.js?v=99ed15ba"></script>
|
||||
<script src="../_static/js/theme.js"></script>
|
||||
|
|
@ -47,7 +47,7 @@
|
|||
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="导航菜单">
|
||||
<ul class="current">
|
||||
<li class="toctree-l1"><a class="reference internal" href="../quickstart/index.html">快速入门</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../appdevelop/index.html">应用开发</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../appdevelop/index.html">应用开发示例</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../functionlib/index.html">算子库支持</a></li>
|
||||
<li class="toctree-l1 current"><a class="current reference internal" href="#">参考资料</a><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="mindspore.html">官方资料</a></li>
|
||||
|
|
@ -81,7 +81,7 @@
|
|||
<div itemprop="articleBody">
|
||||
|
||||
<section id="id1">
|
||||
<h1>参考资料<a class="headerlink" href="#id1" title="Link to this heading"></a></h1>
|
||||
<h1>参考资料<a class="headerlink" href="#id1" title="此标题的永久链接"></a></h1>
|
||||
<div class="toctree-wrapper compound">
|
||||
<ul>
|
||||
<li class="toctree-l1"><a class="reference internal" href="mindspore.html">官方资料</a></li>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html class="writer-html5" lang="zh-CN" data-content_root="../">
|
||||
<html class="writer-html5" lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
|
||||
|
|
@ -14,9 +14,9 @@
|
|||
|
||||
<script src="../_static/jquery.js?v=5d32c60e"></script>
|
||||
<script src="../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
|
||||
<script src="../_static/documentation_options.js?v=406e4f49"></script>
|
||||
<script src="../_static/doctools.js?v=9bcbadda"></script>
|
||||
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js?v=595569a8"></script>
|
||||
<script src="../_static/doctools.js?v=888ff710"></script>
|
||||
<script src="../_static/sphinx_highlight.js?v=4825356b"></script>
|
||||
<script src="../_static/translations.js?v=beaddf03"></script>
|
||||
<script src="../_static/table.js?v=99ed15ba"></script>
|
||||
<script src="../_static/js/theme.js"></script>
|
||||
|
|
@ -47,7 +47,7 @@
|
|||
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="导航菜单">
|
||||
<ul class="current">
|
||||
<li class="toctree-l1"><a class="reference internal" href="../quickstart/index.html">快速入门</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../appdevelop/index.html">应用开发</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../appdevelop/index.html">应用开发示例</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../functionlib/index.html">算子库支持</a></li>
|
||||
<li class="toctree-l1 current"><a class="reference internal" href="index.html">参考资料</a><ul class="current">
|
||||
<li class="toctree-l2 current"><a class="current reference internal" href="#">官方资料</a></li>
|
||||
|
|
@ -82,7 +82,7 @@
|
|||
<div itemprop="articleBody">
|
||||
|
||||
<section id="id1">
|
||||
<h1>官方资料<a class="headerlink" href="#id1" title="Link to this heading"></a></h1>
|
||||
<h1>官方资料<a class="headerlink" href="#id1" title="此标题的永久链接"></a></h1>
|
||||
<ul class="simple">
|
||||
<li><p><a class="reference external" href="https://www.mindspore.cn/">MindSpore</a></p></li>
|
||||
<li><p><a class="reference external" href="https://www.mindspore.cn/lite/">Minsdpore Lite</a></p></li>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html class="writer-html5" lang="zh-CN" data-content_root="../">
|
||||
<html class="writer-html5" lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
|
||||
|
|
@ -14,9 +14,9 @@
|
|||
|
||||
<script src="../_static/jquery.js?v=5d32c60e"></script>
|
||||
<script src="../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
|
||||
<script src="../_static/documentation_options.js?v=406e4f49"></script>
|
||||
<script src="../_static/doctools.js?v=9bcbadda"></script>
|
||||
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js?v=595569a8"></script>
|
||||
<script src="../_static/doctools.js?v=888ff710"></script>
|
||||
<script src="../_static/sphinx_highlight.js?v=4825356b"></script>
|
||||
<script src="../_static/translations.js?v=beaddf03"></script>
|
||||
<script src="../_static/table.js?v=99ed15ba"></script>
|
||||
<script src="../_static/js/theme.js"></script>
|
||||
|
|
@ -46,7 +46,7 @@
|
|||
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="导航菜单">
|
||||
<ul class="current">
|
||||
<li class="toctree-l1"><a class="reference internal" href="../quickstart/index.html">快速入门</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../appdevelop/index.html">应用开发</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../appdevelop/index.html">应用开发示例</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../functionlib/index.html">算子库支持</a></li>
|
||||
<li class="toctree-l1 current"><a class="reference internal" href="index.html">参考资料</a><ul class="current">
|
||||
<li class="toctree-l2"><a class="reference internal" href="mindspore.html">官方资料</a></li>
|
||||
|
|
@ -81,7 +81,7 @@
|
|||
<div itemprop="articleBody">
|
||||
|
||||
<section id="mindspore-signal">
|
||||
<h1>MindSpore Signal+ 调度方案<a class="headerlink" href="#mindspore-signal" title="Link to this heading"></a></h1>
|
||||
<h1>MindSpore Signal+ 调度方案<a class="headerlink" href="#mindspore-signal" title="此标题的永久链接"></a></h1>
|
||||
<p>1.xxx</p>
|
||||
</section>
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html class="writer-html5" lang="zh-CN" data-content_root="./">
|
||||
<html class="writer-html5" lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
|
|
@ -14,9 +14,9 @@
|
|||
|
||||
<script src="_static/jquery.js?v=5d32c60e"></script>
|
||||
<script src="_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
|
||||
<script src="_static/documentation_options.js?v=406e4f49"></script>
|
||||
<script src="_static/doctools.js?v=9bcbadda"></script>
|
||||
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js?v=595569a8"></script>
|
||||
<script src="_static/doctools.js?v=888ff710"></script>
|
||||
<script src="_static/sphinx_highlight.js?v=4825356b"></script>
|
||||
<script src="_static/translations.js?v=beaddf03"></script>
|
||||
<script src="_static/table.js?v=99ed15ba"></script>
|
||||
<script src="_static/js/theme.js"></script>
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue