412 lines
29 KiB
HTML
412 lines
29 KiB
HTML
|
||
|
||
<!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>HelloDSP — 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" />
|
||
<link rel="stylesheet" type="text/css" href="../_static/pageviews.css?v=ff0ce7dc" />
|
||
|
||
|
||
<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 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="overview.html" />
|
||
<link rel="prev" title="环境安装" href="installation.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 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 current"><a class="current reference internal" href="#">HelloDSP</a><ul>
|
||
<li class="toctree-l3"><a class="reference internal" href="#mindspore-python">1.MindSpore Python端</a><ul>
|
||
<li class="toctree-l4"><a class="reference internal" href="#id1">1.1 新建Python文件</a></li>
|
||
<li class="toctree-l4"><a class="reference internal" href="#id2">1.2 编写Python代码</a></li>
|
||
<li class="toctree-l4"><a class="reference internal" href="#id3">1.3 运行Python代码</a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toctree-l3"><a class="reference internal" href="#mindspore-lite">MindSpore Lite端</a><ul>
|
||
<li class="toctree-l4"><a class="reference internal" href="#id4">1. 新建工程</a></li>
|
||
<li class="toctree-l4"><a class="reference internal" href="#id5">2. 工程目录结构</a></li>
|
||
<li class="toctree-l4"><a class="reference internal" href="#id6">3. 更改输入数据</a></li>
|
||
<li class="toctree-l4"><a class="reference internal" href="#main-cc">4. main.cc 功能介绍</a></li>
|
||
<li class="toctree-l4"><a class="reference internal" href="#id13">5. 编译工程</a></li>
|
||
<li class="toctree-l4"><a class="reference internal" href="#id14">6. 运行工程</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</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="../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 active">HelloDSP</li>
|
||
<li class="wy-breadcrumbs-aside">
|
||
<a href="../_sources/quickstart/hellodsp.md.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="hellodsp">
|
||
<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="此标题的永久链接"></a></h2>
|
||
<section id="id1">
|
||
<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="此标题的永久链接"></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>
|
||
|
||
|
||
<span class="k">class</span><span class="w"> </span><span class="nc">Matmul</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="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="nb">super</span><span class="p">(</span><span class="n">Matmul</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="bp">self</span><span class="o">.</span><span class="n">matmul</span> <span class="o">=</span> <span class="n">ops</span><span class="o">.</span><span class="n">MatMul</span><span class="p">()</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">x1</span><span class="p">,</span> <span class="n">x2</span><span class="p">):</span>
|
||
<span class="n">out</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">matmul</span><span class="p">(</span><span class="n">x1</span><span class="p">,</span> <span class="n">x2</span><span class="p">)</span>
|
||
<span class="k">return</span> <span class="n">out</span>
|
||
|
||
|
||
<span class="n">x1</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">ones</span><span class="p">((</span><span class="mi">2</span><span class="p">,</span> <span class="mi">2</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="n">x2</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">ones</span><span class="p">((</span><span class="mi">2</span><span class="p">,</span> <span class="mi">2</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="n">x1_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">x1</span><span class="p">)</span>
|
||
<span class="n">x2_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">x2</span><span class="p">)</span>
|
||
|
||
<span class="n">model</span> <span class="o">=</span> <span class="n">Matmul</span><span class="p">()</span>
|
||
<span class="n">out</span> <span class="o">=</span> <span class="n">model</span><span class="p">(</span><span class="n">x1_tensor</span><span class="p">,</span> <span class="n">x2_tensor</span><span class="p">)</span>
|
||
<span class="nb">print</span><span class="p">(</span><span class="n">out</span><span class="p">)</span>
|
||
|
||
<span class="n">ms</span><span class="o">.</span><span class="n">export</span><span class="p">(</span><span class="n">model</span><span class="p">,</span> <span class="n">x1_tensor</span><span class="p">,</span> <span class="n">x2_tensor</span><span class="p">,</span> <span class="n">file_name</span><span class="o">=</span><span class="s2">"matmul"</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>
|
||
<p>以上代码的作用说明如下:</p>
|
||
<ul class="simple">
|
||
<li><p><strong>导入库</strong>:<code class="docutils literal notranslate"><span class="pre">mindspore</span></code> 用于构建与导出模型;<code class="docutils literal notranslate"><span class="pre">numpy</span></code> 用于生成示例数据;从 <code class="docutils literal notranslate"><span class="pre">mindspore</span></code> 引入 <code class="docutils literal notranslate"><span class="pre">nn</span></code> 与 <code class="docutils literal notranslate"><span class="pre">ops</span></code> 以定义网络与调用算子。</p></li>
|
||
<li><p><strong>定义网络 <code class="docutils literal notranslate"><span class="pre">Matmul</span></code></strong>:继承 <code class="docutils literal notranslate"><span class="pre">nn.Cell</span></code>,在 <code class="docutils literal notranslate"><span class="pre">__init__</span></code> 中实例化矩阵乘算子 <code class="docutils literal notranslate"><span class="pre">ops.MatMul()</span></code>;在 <code class="docutils literal notranslate"><span class="pre">construct</span></code> 中实现前向计算,将输入 <code class="docutils literal notranslate"><span class="pre">x1</span></code>、<code class="docutils literal notranslate"><span class="pre">x2</span></code> 进行矩阵乘法并返回结果。</p></li>
|
||
<li><p><strong>准备数据</strong>:使用 <code class="docutils literal notranslate"><span class="pre">numpy.ones</span></code> 生成两个形状为 <code class="docutils literal notranslate"><span class="pre">(2,</span> <span class="pre">2)</span></code>、类型为 <code class="docutils literal notranslate"><span class="pre">float32</span></code> 的数组,全为 1。</p></li>
|
||
<li><p><strong>张量转换</strong>:用 <code class="docutils literal notranslate"><span class="pre">ms.Tensor</span></code> 将 <code class="docutils literal notranslate"><span class="pre">numpy</span></code> 数组转换为 MindSpore 张量,作为模型输入。</p></li>
|
||
<li><p><strong>构建与执行模型</strong>:实例化 <code class="docutils literal notranslate"><span class="pre">Matmul</span></code> 模型,传入张量执行前向推理,打印结果。对于两个全 1 的 <code class="docutils literal notranslate"><span class="pre">2x2</span></code> 矩阵,输出为一个元素均为 2 的 <code class="docutils literal notranslate"><span class="pre">2x2</span></code> 张量。</p></li>
|
||
<li><p><strong>导出模型</strong>:调用 <code class="docutils literal notranslate"><span class="pre">ms.export</span></code> 将模型导出为 <code class="docutils literal notranslate"><span class="pre">MINDIR</span></code> 格式:</p>
|
||
<ul>
|
||
<li><p><strong><code class="docutils literal notranslate"><span class="pre">file_name</span></code></strong>: 保存的基础文件名为 <code class="docutils literal notranslate"><span class="pre">matmul</span></code>;</p></li>
|
||
<li><p><strong><code class="docutils literal notranslate"><span class="pre">file_format</span></code></strong>: 指定为 <code class="docutils literal notranslate"><span class="pre">MINDIR</span></code>(MindSpore IR 格式),用于后续在 MindSpore Lite 端加载与推理;</p></li>
|
||
<li><p>传入的输入张量 <code class="docutils literal notranslate"><span class="pre">x1_tensor</span></code> 与 <code class="docutils literal notranslate"><span class="pre">x2_tensor</span></code> 用于固化输入<code class="docutils literal notranslate"><span class="pre">shape</span></code>和<code class="docutils literal notranslate"><span class="pre">dtype</span></code>,确保在部署端可正确构建模型输入。</p></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</section>
|
||
<section id="id3">
|
||
<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端运行则需要转成 <code class="docutils literal notranslate"><span class="pre">ms</span></code> 模型文件。mindir转ms的converter工具也已经集成到vscode,使用converter工具方式:</p>
|
||
<p>选择模型文件直接右键,找到模型转换选项,点击即可。
|
||
<img src="../_static/converter_lite.png" alt="create_project" width="auto"/></p>
|
||
</section>
|
||
</section>
|
||
<section id="mindspore-lite">
|
||
<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="此标题的永久链接"></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="此标题的永久链接"></a></h3>
|
||
<p>生成的异构模板工程具有以下目录结构:</p>
|
||
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>test_matmul/
|
||
├──<span class="w"> </span>model/
|
||
│<span class="w"> </span>└──<span class="w"> </span>matmul.ms
|
||
├──<span class="w"> </span>arm_toolchain.cmake
|
||
├──<span class="w"> </span>build.bat
|
||
├──<span class="w"> </span>CMakeLists.txt
|
||
├──<span class="w"> </span>data_handler.cc
|
||
├──<span class="w"> </span>data_handler.h
|
||
└──<span class="w"> </span>main.cc
|
||
</pre></div>
|
||
</div>
|
||
<p><strong>文件说明:</strong></p>
|
||
<table class="docutils align-default">
|
||
<thead>
|
||
<tr class="row-odd"><th class="head"><p>文件名</p></th>
|
||
<th class="head"><p>类型</p></th>
|
||
<th class="head"><p>作用</p></th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">model/matmul.ms</span></code></p></td>
|
||
<td><p>模型文件</p></td>
|
||
<td><p>MindSpore 导出的模型权重和结构文件</p></td>
|
||
</tr>
|
||
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">arm_toolchain.cmake</span></code></p></td>
|
||
<td><p>配置文件</p></td>
|
||
<td><p>指定 ARM 交叉编译工具链路径和参数</p></td>
|
||
</tr>
|
||
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">build.bat</span></code></p></td>
|
||
<td><p>脚本文件</p></td>
|
||
<td><p>Windows 环境下的编译构建脚本</p></td>
|
||
</tr>
|
||
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">CMakeLists.txt</span></code></p></td>
|
||
<td><p>构建文件</p></td>
|
||
<td><p>CMake 构建系统的主配置文件</p></td>
|
||
</tr>
|
||
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">data_handler.h/.cc</span></code></p></td>
|
||
<td><p>源码文件</p></td>
|
||
<td><p>数据预处理和结果处理的实现</p></td>
|
||
</tr>
|
||
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">main.cc</span></code></p></td>
|
||
<td><p>源码文件</p></td>
|
||
<td><p>程序主入口,包含模型加载和推理逻辑</p></td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
</section>
|
||
<section id="id6">
|
||
<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>
|
||
<li><p><strong>查看输出结果</strong>:编辑 <code class="docutils literal notranslate"><span class="pre">GetOutputData</span></code> 函数内容</p></li>
|
||
</ul>
|
||
<p><strong>默认配置:</strong></p>
|
||
<ul class="simple">
|
||
<li><p>输入数据填充为 1</p></li>
|
||
<li><p>输出结果打印输出地址</p></li>
|
||
</ul>
|
||
<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="此标题的永久链接"></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="此标题的永久链接"></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="此标题的永久链接"></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>
|
||
<li><p><strong>可选后端</strong>:<code class="docutils literal notranslate"><span class="pre">CPU</span></code>、<code class="docutils literal notranslate"><span class="pre">FT78NE</span></code></p></li>
|
||
</ul>
|
||
<img src="../_static/set_device.png" alt="set_device" width="auto"/>
|
||
</section>
|
||
<section id="id9">
|
||
<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>
|
||
<table class="docutils align-default">
|
||
<thead>
|
||
<tr class="row-odd"><th class="head"><p>参数</p></th>
|
||
<th class="head"><p>类型</p></th>
|
||
<th class="head"><p>说明</p></th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">model_data</span></code></p></td>
|
||
<td><p><code class="docutils literal notranslate"><span class="pre">const</span> <span class="pre">void</span> <span class="pre">*</span></code></p></td>
|
||
<td><p>模型数据</p></td>
|
||
</tr>
|
||
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">data_size</span></code></p></td>
|
||
<td><p><code class="docutils literal notranslate"><span class="pre">size_t</span></code></p></td>
|
||
<td><p>模型数据大小</p></td>
|
||
</tr>
|
||
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">model_type</span></code></p></td>
|
||
<td><p><code class="docutils literal notranslate"><span class="pre">ModeType</span></code></p></td>
|
||
<td><p>模型类型</p></td>
|
||
</tr>
|
||
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">model_context</span></code></p></td>
|
||
<td><p><code class="docutils literal notranslate"><span class="pre">const</span> <span class="pre">std::shared_ptr<Context></span> <span class="pre">&</span></code></p></td>
|
||
<td><p>模型上下文(主要传递设备信息)</p></td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<img src="../_static/build_model.png" alt="build_model" width="auto"/>
|
||
</section>
|
||
<section id="id10">
|
||
<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="此标题的永久链接"></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">
|
||
<thead>
|
||
<tr class="row-odd"><th class="head"><p>参数</p></th>
|
||
<th class="head"><p>类型</p></th>
|
||
<th class="head"><p>说明</p></th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">inputs</span></code></p></td>
|
||
<td><p><code class="docutils literal notranslate"><span class="pre">const</span> <span class="pre">std::vector<MSTensor></span> <span class="pre">&</span></code></p></td>
|
||
<td><p>模型的输入</p></td>
|
||
</tr>
|
||
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">output</span></code></p></td>
|
||
<td><p><code class="docutils literal notranslate"><span class="pre">const</span> <span class="pre">std::vector<MSTensor></span> <span class="pre">*</span></code></p></td>
|
||
<td><p>模型的输出地址</p></td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<img src="../_static/model_predict.png" alt="model_predict" width="auto"/>
|
||
</section>
|
||
<section id="id12">
|
||
<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="此标题的永久链接"></a></h3>
|
||
<p>提供多种编译方式,选择其中一种即可:</p>
|
||
<p><strong>编译方式:</strong></p>
|
||
<ul class="simple">
|
||
<li><p><strong>方式一</strong>:在 <code class="docutils literal notranslate"><span class="pre">YHFT-IDE</span></code> 集成终端运行 <code class="docutils literal notranslate"><span class="pre">build.bat</span></code> 脚本</p></li>
|
||
<li><p><strong>方式二</strong>:点击调试按钮 → 编译</p></li>
|
||
<li><p><strong>方式三</strong>:直接点击编译图标</p></li>
|
||
</ul>
|
||
<img src="../_static/build_project.png" alt="build_project" width="auto"/>
|
||
</section>
|
||
<section id="id14">
|
||
<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="此标题的永久链接"></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>
|
||
<li><p>点击打开远程窗口按钮</p></li>
|
||
</ul>
|
||
<img src="../_static/open_ssh.png" alt="open_ssh" width="auto"/>
|
||
<p><strong>步骤 2:</strong> 选择连接方式</p>
|
||
<ul class="simple">
|
||
<li><p>在弹出的选项中选择第一个选项进行远程连接</p></li>
|
||
</ul>
|
||
<img src="../_static/connect_mt7004.png" alt="connect_mt7004" width="auto"/>
|
||
<p><strong>步骤 3:</strong> 输入连接信息</p>
|
||
<ul class="simple">
|
||
<li><p>输入 MT7004 板卡的用户名和 IP 地址</p></li>
|
||
<li><p>按回车键后会弹出新的窗口界面</p></li>
|
||
</ul>
|
||
<blockquote>
|
||
<div><p><strong>注意</strong>:确保本机和 MT7004 板卡在同一网段,或使用网线直接连接并修改本机 IP 地址与板卡在同一网段</p>
|
||
</div></blockquote>
|
||
<img src="../_static/ssh.png" alt="ssh" width="auto"/>
|
||
<p><strong>连接成功标志:</strong> 新界面左下角出现 <code class="docutils literal notranslate"><span class="pre">SSH:xxx</span></code> 表示连接成功</p>
|
||
<img src="../_static/ssh_success.png" alt="ssh_success" width="auto"/>
|
||
</section>
|
||
<section id="id15">
|
||
<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>
|
||
</section>
|
||
</section>
|
||
</section>
|
||
|
||
|
||
</div>
|
||
</div>
|
||
|
||
|
||
<div class="pageviews-container">
|
||
访问量:<span id="busuanzi_page_uv"></span> 次
|
||
</div>
|
||
<footer><div class="rst-footer-buttons" role="navigation" aria-label="页脚">
|
||
<a href="installation.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="overview.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/>
|
||
|
||
<div role="contentinfo">
|
||
<p>© 版权所有 2025 - 2026, 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>
|
||
|
||
<script src="//cdn.busuanzi.cc/busuanzi/3.6.9/busuanzi.min.js" defer></script>
|
||
|
||
</body>
|
||
</html> |