当前位置: 首页 > news >正文

广东省白云区属于哪个市seo对网络推广的作用是什么?

广东省白云区属于哪个市,seo对网络推广的作用是什么?,互联网推广方式有哪些,企业培训心得1 引言 STM32 微控制器在嵌入式领域应用广泛#xff0c;因为它性能不错、功耗低#xff0c;还有丰富的外设#xff0c;像工业控制、智能家居、物联网这些场景都能看到它的身影。与此同时#xff0c;人工智能技术发展迅速#xff0c;也逐渐融入各个行业。 把 AI 部署到 STM…1 引言 STM32 微控制器在嵌入式领域应用广泛因为它性能不错、功耗低还有丰富的外设像工业控制、智能家居、物联网这些场景都能看到它的身影。与此同时人工智能技术发展迅速也逐渐融入各个行业。 把 AI 部署到 STM32 上能让嵌入式系统更智能不过这并不容易。AI 模型运行需要大量计算资源和内存而 STM32 硬件资源有限。所以找到合适工具很重要。 今天介绍两款能在 STM32 上部署 AI 的实用软件Nanoedge AI Studio 和 STM32Cube AI。它们能帮开发者解决难题顺利在 STM32 上部署 AI 算法下面就详细讲讲这两款软件。 2 Nanoedge AI Studio 2.1 软件获取 Nanoedge AI Studio是用于STM32部署边缘AI的软件Studio可生成四种类型的库异常检测、单分类、多分类、预测。它支持所有类型的传感器所生成的库不需要任何云连接可以直接在本地学习与部署支持STM32所有MCU系列。需要搭配STM32CubeMX、Keil或STM32CubeIDE等编译器使用。 下面这个链接是ST的下载网址 https://www.st.com/en/development-tools/nanoedgeaistudio.html 下载过程中会收到邮件里面有license第一次使用软件需要用到 到此软件就获取完毕 2.2 软件介绍 前面已提到Studio可生成四种类型的库异常检测、单分类、多分类、预测。左上角四个模型分别对应这四种库AD异常检测nC多分类1C单分类E预测然后下面是以前做过的一些历史工程。 下面对这四种库讲一下使用流程 2.2.1 异常检测 异常检测异常检测是指模型对正常数据与异常数据进行训练、学习后生成的模型可以识别生成的边缘AI可以判断数据是正常还是错误。 这里可能会有疑问为什么不使用阈值判断等方法甚至加个滤波可能更加准确这么做不是更简单吗在这里使用AI的作用在哪 答案是第一得到的数据难免会出现上下浮动的问题如何选取阈值是一个值得考虑的问题对于界限没那么清晰的情况经常需要经过多次实验确定阈值。而如果使用AI我们只需要告诉模型一种情况下的现象是如何另一种情况下的现象是如何直接由算法帮我们分析。 第二也是比较关键的一点如果我们需要根据多维参数确定一个整体的综合情况比如评价水质我们可能会从多角度去考虑温度、浊度、PH值、含氧量等那么这个时候设定阈值就会非常难。 综上使用AI来做异常检测会使得问题考虑起来更容易。 在学习这里的时候在几个平台看到了几个比较经典的例子可以引入异常检测 1.风扇、电机等异常检测通过电流传感器、ADC等检测电流、电压等物理量我试过通过MPU6050加速度传感器监测电机是否在正常工作 2.声音检测通过声音传感器反馈出电压模拟量 3.无人机飞行异常检测没有仔细去研究参考的物理量个人认为需要通过上述提到的物理量综合考虑 当然还有一些例子这里就不一一列举了大家可以尝试做一下 那么下面就开始讲解软件基本用法 点开左上角的AD进入模型构建界面 第一个界面是Project Setting 第一步确定模型在ROM和RAM上的最大占据量这里我直接用默认 第二步在右边确定芯片型号。这里比较好的一点是我可以直接选择一个系列这个系列里的所有型号都能够通用 第三步选择参考量的个数。如果想用三轴加速度传感器那么显然这时需要参考三个量点击第一个图标即可选择。当然后面还有电流量等等的检测这里就不再赘述了。 当然上面也提到了使用AI来做异常检测的好处是能综合多个量判断状态这时点击Cross sectional选项可以选择Multi-sensor注意参考量个数的选择几个量就是几个Axes。 这里我选择三轴加速度传感器作为演示实例。 第二个界面是Regular signals。前面提到需要引入正常数据和异常数据进行检测这里就是采集正常数据。 点击Add Signal然后看到有两个方法 一个是导入本地csv格式的数据表格另一种是用串口向电脑发送数据。 对于导入csv表格软件内的提示我感觉写的并不是很清晰我的理解是进行的一次实验测得的数据写在一行内。测得的每个数据都要按照x,y,z的顺序来然后不要空格。比如我得到三个方向加速度分别为xyz。第一次实验我在一段时间内测得200次也就是得到200组加速度数据第一组为x1y1z1第二组为x2y2z2。那么放在表格里的顺序是x1y1z1x2y2z2......第一次实验完成后进行第二次实验把实验数据写在第二行每行最多有256组数据然后实验次数不要低于20次也就是行数不低于20行。 这里注意的一点是不要写任何题头直接顶格写数据。 对于用串口发送数据可能会更加方便一点但前提是不对数据再做人工处理。但这里需要写程序把数据按顺序通过串口发送电脑上。下面的是我用MPU6050发送数据的代码其他的思路都是一样的供大家参考。 char buf[30];int cnt;MPU6050_Init();while (1){sprintf(buf,%ld,%ld,%ld,,AccelData[0],AccelData[1],AccelData[2]);MPU6050ReadAcc(Accel);for( int i0;i3;i){if(Accel[i]0){AccelData[i]Accel[i]*2000/32768;}else{AccelData[i]-(-Accel[i]1)*2000/32768;} }HAL_UART_Transmit(huart1,(uint8_t*)buf,strlen(buf),0xFFFF);cnt;if(cnt256){cnt0;HAL_UART_Transmit(huart1,(uint8_t*)\r\n,2,0xFFFF);} } 每一次实验的数据要用回车隔开每个数要用特定字符隔开这里我用的是逗号当然其他一些符号也行大家可以自己研究最后导入之前再把提示的异常数据删除即可。 这时就能看到导入的数据的直观图了至于RUN OPTIONAL CHECKS那里我觉得点不点都行这个的目的是检查数据的质量。 第三个部分是对异常情况下数据的采集一样的就不赘述了 第四个部分Benchmark就是模型训练了这里会自动计算若干个算法对于导入的这些数据的适配性 训练完如此可以选择最好的几个进行仿真测试。 最后一步就是自动生成代码了。 左边这几个选项第三个和第四个勾选即可 第二个如果导入的数据里没有浮点数就不要勾选 如果想同时使用多个模型勾选第一个并命名。 最后点击COMPILE LIBRARY生成文件。 这里需要导入编译器的文件是libenai.a和NanoEdgeAI.h找到自己工程的位置 打开Core文件夹里面有Src和Inc两个文件夹把libenai.a放到Src文件夹里NanoEdgeAI.h放到Inc文件夹里。然后打开编译器我这里使用Keil 导入到工程里然后双击libneai.h文件点第一个 文件类型选Library file  至此文件就导入完毕了 在Studio最后一步右边还有自动生成的代码 /* Includes --------------------------------------------------------------------*/ #include NanoEdgeAI.h//直接粘贴 /* Number of samples for learning: set by user ---------------------------------*/ #define LEARNING_ITERATIONS 30//直接粘贴 float input_user_buffer[DATA_INPUT_USER * AXIS_NUMBER]; //直接粘贴 void fill_buffer(float input_buffer[])//直接粘贴后续需要在这里加代码填充input_buffer[] {/* USER BEGIN *//* USER END */ }/* -----------------------------------------------------------------------------*/ int main(void) {/* Initialization ------------------------------------------------------------*/enum neai_state error_code neai_anomalydetection_init();//直接粘贴uint8_t similarity 0;//直接粘贴if (error_code ! NEAI_OK) {/* This happens if the library works into a not supported board. */}//直接粘贴/* Learning process ----------------------------------------------------------*/for (uint16_t iteration 0 ; iteration LEARNING_ITERATIONS ; iteration) {fill_buffer(input_user_buffer);neai_anomalydetection_learn(input_user_buffer);}//直接粘贴/* Detection process ---------------------------------------------------------*/while (1) {fill_buffer(input_user_buffer);neai_anomalydetection_detect(input_user_buffer, similarity);//直接粘贴/* USER BEGIN *//** e.g.: Trigger functions depending on similarity* (blink LED, ring alarm, etc.).*//* USER END */} } similarity代表相似度相似度越高代表越正常最高为100最低为0低于一定值就代表异常一般认为90以下异常 最后别忘勾选Short enums/wchar之前在Studio里勾选这里照应上了 到这里就应该可以正常编译了 2.2.2 单分类/多分类 单分类的是指将数据进行导入进行机器学习后可以判断出设备的正常或者异常。这里与异常判断不同的是这里会将所有非正常的数据判断为异常而异常判断却可以分析出当前数据与正常数据的相似度。 单分类跟异常检测还是很像的这里就不多说了唯一需要说的是导入数据的时候要把两类都导入同样多分类也是也不多说了 2.2.3 预测 模型可以对过往的数据进行分析训练生成的模型可以根据近期的数据近似分析出下一个时刻可能的数据大家也可以自行研究。 至此Nanoedge AI Studio讲解完毕 3 STM32Cube AI 3.1 软件获取 X-CUBE-AI是STM32Cube.AI生态系统的STM32Cube扩展软件包的一部分通过自动转换预训练的神经网络并将生成的优化库集成到用户的项目中扩展了STM32CubeMX功能。 简而言之就是通过X-Cube-AI扩展将当前比较热门的AI框架进行C代码的转化以支持在嵌入式设备上使用目前使用X-Cube-AI需要在STM32CubeMX版本5.0以上目前支持转化的模型有Keras、TF lite、ONNX等还算比较牛的Cube-AI把模型转化为一堆数组而后将这些数组内容解析成模型和Tensorflow里的模型转数组后使用原理是一样的。 在工程内或Manage Embedded Software Packages里安装 3.2 软件介绍 我这里使用8.1版本导入什么类型的模型就选什么格式选择STM32Cube.AI runtimeCompression代表压缩模型如果模型过于复杂那么根据需求选择压缩程度Optimization是选择时间和空间的协调程度即时间优先还是空间优先 然后点击Analyze分析模型分析结束后可以直接生成代码打开编译器这里着重讲一下代码需要对自动生成的代码有一定了解。 写程序基本的思路是输入数据预处理、模型推理、输出数据后处理 先看main.c文件自动生成的代码如下 MX_X_CUBE_AI_Init(); while (1) {MX_X_CUBE_AI_Process(); } 显然第一句是AI初始化while内的是AI的数据处理 AI的初始化我没有改动主要看AI的数据处理过程右键MX_X_CUBE_AI_Process看这个函数的定义 void MX_X_CUBE_AI_Process(void) {/* USER CODE BEGIN 6 */int res -1;printf(TEMPLATE - run - main loop\r\n);if (network) {do {/* 1 - acquire and pre-process input data */res acquire_and_process_data(data_ins);/* 2 - process the data - call inference engine */if (res 0)res ai_run();/* 3- post-process the predictions */if (res 0)res post_process(data_outs);} while (res0);}if (res) {ai_error err {AI_ERROR_INVALID_STATE, AI_ERROR_CODE_NETWORK};ai_log_err(err, Process has FAILED);}/* USER CODE END 6 */ } 其实这里就可以看出前面提到的三个步骤但这里的逻辑我感觉没有说很好于是决定自己封装函数。 这里就不过多讲解了其实这里需要对app_x_cube_ai.c文件里的代码做一定的了解 比如代码里涉及到的数据类型这里换了个名要能看懂 typedef uint8_t ai_custom_type_signature;typedef void* ai_handle; typedef const void* ai_handle_const;typedef float ai_float; typedef double ai_double;typedef bool ai_bool;typedef char ai_char;typedef uint32_t ai_size; typedef int16_t ai_short_size;typedef uintptr_t ai_uptr;typedef unsigned int ai_uint; typedef uint8_t ai_u8; typedef uint16_t ai_u16; typedef uint32_t ai_u32; typedef uint64_t ai_u64;typedef int ai_int; typedef int8_t ai_i8; typedef int16_t ai_i16; typedef int32_t ai_i32; typedef int64_t ai_i64;typedef uint64_t ai_macc;typedef int32_t ai_pbits;typedef uint32_t ai_signature;typedef void (*ai_handle_func)(ai_handle); CubeMX也提供了一些示例代码也有一个大概的了解 /* USER CODE BEGIN 2 */ int acquire_and_process_data(ai_i8* data[]) {/* fill the inputs of the c-modelfor (int idx0; idx AI_NETWORK_1_IN_NUM; idx ){data[idx] ....}*/return 0; }int post_process(ai_i8* data[]) {/* process the predictionsfor (int idx0; idx AI_NETWORK_1_OUT_NUM; idx ){data[idx] ....}*/return 0; } /* USER CODE END 2 */ 最后附上我自己封装的代码供大家参考。 我训练的模型是输入5个float数据输出1个ai_i32数据 app_x_cube_ai.c文件 ai_buffer* Get_Inputs(void) {ai_u16 *in_buffer(short unsigned int*)0;return ai_network_inputs_get(network,in_buffer); } ai_buffer* Get_Outputs(void) {ai_u16 *out_buffer(short unsigned int*)0;return ai_network_outputs_get(network,out_buffer); } void PrepareInput(ai_float* InputData) {ai_inputGet_Inputs();ai_input-dataInputData; } ai_i32* Predict() {ai_outputGet_Outputs();ai_run();return (ai_i32*)ai_output-data; } void NetPrint() {printf(Input shape:);for(int i0;iGet_Inputs()-shape.size;i){printf(%d ,Get_Inputs()-shape.data[i]);}printf(\r\n);printf(Output shape:);for(int i0;iGet_Outputs()-shape.size;i){printf(%d ,Get_Outputs()-shape.data[i]);}printf(\r\n); } .h文件 void PrepareInput(ai_float* InputData); void NetPrint(void); ai_i32* Predict(void); main.c文件 float Data[6][5]{{1,450,23,7,60},{0,640,25,8,10},{2,420,25,8,0},{3,680,27,8.5,20},{4,400,24,7,80},{5,530,22,7.5,40}}; NetPrint();while (1){ for(int k0;k6;k){float InputData[5]{Data[k][0],Data[k][1],Data[k][2],Data[k][3],Data[k][4]};PrepareInput(InputData);printf(InputData:%f %f %f %f %f\r\n,InputData[0],InputData[1],InputData[2],InputData[3],InputData[4]);printf(outData:%d\r\n,*Predict());printf(\r\n);}} 测试结果与上位机一致。至此STM32Cube AI的基本使用讲解结束。
http://www.w-s-a.com/news/475596/

相关文章:

  • site之后网站在首页说明说明网络舆情分析师怎么考
  • 本溪网站建设兼职wordpress lapa
  • 官网网站设计费用vue大型网站怎么做路由
  • 青海省安建设管理部门网站厦门网站快照优化公司
  • 张家港建网站公司网站开发 认证
  • 网站建设方式优化兰州医院网站制作
  • 怎么创造网站wordpress伪静态规则怎么写
  • 自己怎么做一元购物网站信誉好的合肥网站推广
  • 做网站的骗术有什么好的网站设计思想的博客
  • 网站建设工作 方案企查查企业信息查询在线
  • 上海外贸建站商城定制软件安卓
  • 成都网站建设_创新互联wordpress 相邻文章
  • 电子商务网站制作步骤免费建网站知乎
  • 龙岩有什么招聘本地网站团购网站 方案
  • 服务器运行一段时间网站打不开注册公司名字核名查询系统
  • 企业网站改版的意义响应式网站建设新闻
  • 大连金州新区规划建设局网站金坛市建设局网站
  • 有哪些做排球比赛视频网站wordpress 教师工作坊
  • 深圳好点的网站建设公司互联网企业信息服务平台
  • 下载空间大的网站建设哈尔滨网站制作软件
  • 南城网站仿做无锡网站制作哪家价格便宜
  • c做的网站营销策划课程
  • 免费网站404免费进入重庆的公需科目在哪个网站做
  • 网站空间租用费用网站建设公司怎么宣传
  • 镇江网站建设优化案例分析dw2018网页制作步骤图文
  • 网站开发一个多少钱为什么前端都不用dw
  • 网站降权的原因北京中小企业网站建设公司
  • 个人域名能做网站吗wordpress
  • 手机网站设计只找亿企邦工业设计公司简介
  • 腾讯云主机做网站免费网站怎么做啊