• [问题求助] 本地电脑可以直接获取到摄像机里的视频数据嘛?
    1、C2150-10-SIU型号的摄像机,设定好录像计划,视频是存在sd卡里的,有没有api或者其他方式(java开发,代码写协议?),可以直接拿到视频流?需要用到视频流做后续的开发。2、后台web页面有录像回放,可以查到sd卡里的视频信息并且播放出来,就类似于这个操作
  • 意境之美
    绘画 创新 新时代 科技 意境之美
  • [其他] A daydream girl who dreams of not being fat is also a wild girl
    A daydream girl who dreams of not being fat is also a wild girl
  • [技术干货] ModelBox 端云协同AI开发套件(RK3568)上手指南
    ModelBox 端云协同AI开发套件(RK3568)上手指南开发套件简介ModelBox AI开发套件(RK3568)是一款体积小巧、功能强大的人工智能嵌入式开发板,结合ModelBox开发框架和HiLens管理平台,开发者可以方便快速的进行AI应用的开发部署。开箱配件开发板零配件见下图: RK3568开发板(查看详细硬件配置)电源插头&电源线(type-c接口)散热风扇散热片TF卡(用于安装系统)USB摄像头WIFI模组(带天线)金属外壳、螺丝、支架等开发板详细接口见下图: 另外,还需要准备TF卡读卡器,用于在TF卡上烧录操作系统。环境配置1. 安装系统1)下载系统镜像在github网站下载对应的镜像,镜像版本可以按需选择(本教程基于Ubuntu 20.04),下载的镜像需要是rock-3a开头并以gpt.img.xz结尾的文件。如果github下载较慢,也可以从这个OBS地址下载,目前我们建议下载0320版本,最新的版本在WIFI驱动上还有问题。 2)读写镜像在ROCK 3A官网下载镜像读写工具balenaEtcher,将TF卡接到读卡器上,插入电脑,然后打开balenaEtcher,点击Flash from file选择刚刚下载的固件 3)烧录镜像在Select target里选中读卡器所在的盘符,最后点击Flash进行烧录 4)启动开发板烧录完成之后拔出TF卡,接到板子上(芯片面朝向主板),然后接通电源,开发板正常启动会亮两个灯:绿灯常亮,蓝灯闪烁 5)安装配件WIFI模组:先将天线固定到WIFI模组上,再将WIFI芯片插入主板正面的接口中(接口上印有173004),最后再固定好螺丝即可。散热片:使用散热片可以辅助散热,撕开背部的薄膜将其贴在主板的芯片上: 散热器:如果环境温度较高,可以将散热片换成散热器,撕开散热器背部的薄膜,将其贴在主板的芯片上,然后将风扇的电源线接入下方第二排针脚中,从右往左数,红线接入第二个针脚,黑线接入第三个针脚: 金属外壳:先卸下外壳底板,装上4颗金色螺丝;再将主板固定在底板上;最后根据各个接口在外壳上的开口位置,将底板+开发板装进外壳中 2. 配置网络使用开发板进行ModelBox AI应用开发有两种方式,一是开发板连接显示器和键盘鼠标,安装Ubuntu桌面,直接在开发板上进行开发;二是使用远程连接工具(如VS Code中的Remote-SSH)从PC端登录开发板进行开发。这里我们推荐第二种方式,因为PC端可以使用功能更丰富、界面更友好的IDE。PC连接开发板需要知道开发板的ip,但是开发板默认没有固定ip,此时有两种解决方案:1. 动态ip方式将PC和开发板都连接到同一无线路由器,然后PC登录到该无线路由器主页,通过终端列表查看开发板的ip(下图以华为无线路由器为例,红框中即为开发板ip)。这个ip是无线路由器动态分配给开发板的,下一次连接时可能会变化,需要重新查询。 2. 静态ip方式我们开发了一款小工具:ModelBox PC Tool,其中有个功能是为开发板分配一个固定ip,使用方式如下:1) 安装Python3.8.10PC Tool的运行依赖Python3环境,请先下载Python3.8.10进行安装,注意安装第一步需要勾选“将Python3.8加到环境变量PATH中”: 2) 在HiLens管理控制台专业版的技能开发-工具/插件板块下载Windows ModelBox SDK:3) 解压SDK,使用管理员身份运行connect_wizard.exe(connect_wizard文件夹内):4) 在ModelBox PC Tool界面中选择“使用网线连接开发板”,点击“下一步”:5) 在Step1界面中,点击“打开配置指导”:6) 根据网络配置指导,对PC与开发板连接的以太网进行设置,将其ip设定为192.168.2.2:7) 回到ModelBox PC Tool界面,连续点击“下一步”,将弹出dhcp程序,自动为开发板分配固定ip:8) 当ModelBox PC Tool界面跳转到step2时,表示开发板的有线网ip已经被修改为192.168.2.111,点击“最小化”将工具隐藏到任务栏:9) 打开cmd,使用ping命令进行验证,如果可以ping通即表示开发板的静态ip已经分配成功,PC可以使用192.168.2.111ip连接开发板了:C:\Users\███>ping 192.168.2.111 正在 Ping 192.168.2.111 具有 32 字节的数据: 来自 192.168.2.111 的回复: 字节=32 时间=1ms TTL=64 来自 192.168.2.111 的回复: 字节=32 时间=1ms TTL=64 来自 192.168.2.111 的回复: 字节=32 时间=1ms TTL=64 来自 192.168.2.111 的回复: 字节=32 时间=1ms TTL=64 192.168.2.111 的 Ping 统计信息: 数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失), 往返行程的估计时间(以毫秒为单位): 最短 = 1ms,最长 = 1ms,平均 = 1ms C:\Users\███>当然,此时只是实现了PC与开发板的有线连接,开发板自身连接公网还需要进行设置。10) 使用SSH工具(如MobaXterm),通过192.168.2.111ip登录到开发板(默认用户名密码都是rock),使用nmcli命令连接WIFI:查询可以连接的WIFI:sudo nmcli device wifi list连接某个WIFI:sudo nmcli device wifi connect [WIFI名称] password [WIFI密码]11) 为开发板分配的有线网固定ip可能会影响到无线网,因此还需要使用如下命令对路由表进行修改:原始的路由表:rock@rock-3a:~$ route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface default 192.168.2.1 0.0.0.0 UG 203 0 0 eth0 default 192.168.1.1 0.0.0.0 UG 600 0 0 wlan0 link-local 0.0.0.0 255.255.0.0 U 304 0 0 wlan0 192.168.1.0 0.0.0.0 255.255.255.0 U 304 0 0 wlan0 192.168.1.0 0.0.0.0 255.255.255.0 U 600 0 0 wlan0 192.168.2.0 0.0.0.0 255.255.255.0 U 203 0 0 eth0 rock@rock-3a:~$删除有线网关:rock@rock-3a:~$ sudo route del default gw 192.168.2.1修改后的路由表:rock@rock-3a:~$ route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface default _gateway 0.0.0.0 UG 600 0 0 wlan0 link-local 0.0.0.0 255.255.0.0 U 304 0 0 wlan0 192.168.1.0 0.0.0.0 255.255.255.0 U 304 0 0 wlan0 192.168.1.0 0.0.0.0 255.255.255.0 U 600 0 0 wlan0 192.168.2.0 0.0.0.0 255.255.255.0 U 203 0 0 eth0 rock@rock-3a:~$此时,开发板既可以通过有线与PC连接,又可以通过WIFI连接公网(有些系统还需要配置DNS),网络设置就完成了。3. 安装Ubuntu桌面(可选)登入系统,连接网络,更新软件列表:sudo apt-get update安装桌面:sudo apt install ubuntu-mate-core sudo apt install ubuntu-mate-desktop安装完成,然后重启,就有界面了: 应用开发1. 远程连接开发板我们推荐在PC端使用VS Code远程连接开发板来对设备操作。1)下载VS CodeVS Code官网下载安装Windows x64版本的编辑器。 2)安装Remote-SSH在VS Code中安装Remote-SSH插件,安装完成后侧边栏将出现远程连接Remote Explorer的图标。 3)进入SSH配置文件点击VS Code侧边栏的Remote Explorer图标,在弹出的SSH TARGETS界面中点击齿轮图标,选择一个SSH配置文件路径。 4)配置SSH连接配置SSH连接,参考下图,其中Host是自己设置的盒子名称,HostName是盒子ip地址,User是SSH连接用户名。保存配置文件,SSH TARGETS将出现该Host图标,点击图标后面的连接图标。 5)连接到主机第一次连接时需要选择远程主机的操作系统类型,这里我们选择Linux: 选择Continue: 输入密码: 注意:第一次连接会自动下载VS Code相关软件到远程主机上,耗时较长,且需要多次输入登录密码。6)打开文件夹点击Open Folder。 7)进入开发目录选择一个路径作为ModelBox SDK和应用存放的目录,再次输入密码,即可连接到开发板的该路径下进行应用开发。 2. 注册HiLens设备1)在HiLens管理控制台专业版的设备管理板块点击右上角的“注册设备”按钮:2)参考下图填写注册信息,设置一个设备名称,设备类型选择“RK系列(轻量)”,其他可以保持默认,点击右下角的“下一步”:3)下载固件和证书文件4)安装HiLens Agent(开发板需联网)将上一步下载的HiLens_Device_Agent拷贝到开发板上(拖动文件到VS Code界面中即可),执行命令安装Agent服务:tar -xvf [Agent安装包名称] bash install_manual.sh5)注册设备将第3步下载的与设备名称同名的证书文件拷贝到开发板上(拖动文件到VS Code界面中即可),执行如下注册命令:hdactl register_bind -p [证书文件名称]注册成功后将在HiLens设备列表页面看到该设备: 注:注册成功后设备状态会显示“运行中”,就可以进行ModelBox技能开发了;如果想要安装部署技能市场上的技能,需要付费激活,激活后激活状态才会显示“已激活”3. 下载ModelBox sdk1)在HiLens管理控制台专业版的技能开发-工具/插件板块下载RK系列的ModelBox sdk:2)将sdk拷贝到开发板上(拖动文件到VS Code界面中即可),解压可得到sdk如下:其中modelbox-rk-aarch64文件夹即为ModelBox核心库,包含ModelBox运行环境、内置的功能单元等,create.py为创建ModelBox工程、创建功能单元、编译运行等的辅助工具。进入sdk目录,执行create.py可看到辅助工具的用法介绍(需使用python3.8版本进行编码开发):rock@rock-3a:~/███/modelbox$ ./create.py Usage: Create ModelBox project and flowunit NOTE : you must firstly use bellow cmd to create a project in workspace create.py -t server -n your_proj_name {option: -s name, create this project from a solution}, support hilens deployment or create.py -t project -n your_proj_name {option: -s name, create this project from a solution} AND : use bellow cmd to create [c++|python|infer] flowunit in this project create.py -t c++ -n your_flowunit_name -p your_proj_name AND : call workspace/your_proj_name/build_project.sh to build your project, call bin/main.sh[bat] to run FINAL: create.py -t rpm -n your_proj_name to package your project (the same folder with create.py) if upload to hilens NOTE: create.py -t editor -n your_proj_name to start web ui editor to edit your graph -h or --help:show help -t or --template [c++|python|infer|project|server|rpm|editor] create a template or package to rpm -n or --name [your template name] -p or --project [your project name when create c++|python|infer] -s or --solution [the solution name when create project] create a project from solution -v or --version:show sdk version rock@rock-3a:~/███/modelbox$4. 开发Hello World应用接下来我们用Python开发一个最简单的ModelBox应用:打开一个视频文件,在画面左上方写上“Hello World”,再输出到另一个视频文件中。1)创建工程使用create.py创建hello_world工程rock@rock-3a:~/███/modelbox$ ./create.py -t server -n hello_world sdk version is modelbox-rk-aarch64 success: create hello_world in /home/rock/███/modelbox/workspace build success: you can run main.sh in ./bin folder可以看到,第一次创建工程时,在ModelBox sdk目录下,自动生成了workspace文件夹,此文件夹将作为ModelBox应用的默认目录。workspace目录下创建了hello_world工程: 2)创建功能单元为hello_world工程创建python的draw_text功能单元:rock@rock-3a:~/███/modelbox$ ./create.py -t python -n draw_text -p hello_world sdk version is modelbox-rk-aarch64 success: create python draw_text in /home/rock/███/modelbox/workspace/hello_world/etc/flowunit/draw_text可以看到,在hello_world工程的etc/flowunit目录(此目录将作为Python功能单元的默认存放目录)下,生成了draw_text文件夹,其中自动生成了Python功能单元所需的py文件和toml配置文件: 3)修改功能单元draw_text.toml中配置该功能单元的名称、类别、输入输出端口等信息,当前不用修改;draw_text.py中描述了该功能单元的处理逻辑,这里我们增加OpenCV与NumPy包的引用(需要事先用pip install opencv-python命令安装OpenCV与NumPy的Python库),修改其中的process函数如下:import cv2 import numpy as np import _flowunit as modelbox … def process(self, data_context): # Process the data in_data = data_context.input("in_1") out_data = data_context.output("out_1") # draw_text process code. # Remove the following code and add your own code here. for buffer_img in in_data: width = buffer_img.get('width') height = buffer_img.get('height') channel = buffer_img.get('channel') img_data = np.array(buffer_img.as_object(), copy=False) img_data = img_data.reshape((height, width, channel)) cv2.putText(img_data, 'Hello World', (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 2) out_buffer = self.create_buffer(img_data) out_buffer.copy_meta(buffer_img) out_data.push_back(out_buffer) return modelbox.Status.StatusCode.STATUS_SUCCESS4)修改流程图hello_world工程graph目录下默认生成了一个hello_world.toml流程图,修改其中的流程定义graphconf如下:graphconf = """digraph hello_world { node [shape=Mrecord]; queue_size = 4 batch_size = 1 input1[type=input] data_source_parser[type=flowunit, flowunit=data_source_parser, device=cpu, deviceid=0] video_demuxer[type=flowunit, flowunit=video_demuxer, device=cpu, deviceid=0] video_decoder[type=flowunit, flowunit=video_decoder, device=rknpu, deviceid=0, pix_fmt=bgr] draw_text[type=flowunit, flowunit=draw_text, device=cpu, deviceid=0] video_out[type=flowunit, flowunit=video_out, device=rknpu, deviceid=0] input1:input -> data_source_parser:in_data data_source_parser:out_video_url -> video_demuxer:in_video_url video_demuxer:out_video_packet -> video_decoder:in_video_packet video_decoder:out_video_frame -> draw_text:in_1 draw_text:out_1 -> video_out:in_video_frame }"""5)配置输入和输出我们需要准备一个mp4文件拷贝到hello_world工程中,将sdk目录下的solution/car_det/common/data/car_test_video.mp4拷贝到hello_world工程目录的data文件夹下,然后打开工程目录下bin/mock_task.toml文件,修改其中的任务输入和任务输出配置为如下内容:# 任务输入,mock模拟目前仅支持一路rtsp或者本地url # rtsp摄像头,type = "rtsp", url里面写入rtsp地址 # 其它用"url",比如可以是本地文件地址, 或者httpserver的地址,(摄像头 url = "0") [input] type = "url" url = "../data/car_test_video.mp4" # 任务输出,目前仅支持"webhook", 和本地输出"local"(输出到屏幕,url="0", 输出到rtsp,填写rtsp地址) # (local 还可以输出到本地文件,这个时候注意,文件可以是相对路径,是相对这个mock_task.toml文件本身) [output] type = "local" url = "../hilens_data_dir/hello.mp4"6)构建工程在hello_world工程路径下执行build_project.sh进行工程构建:rock@rock-3a:~/███/modelbox/workspace/hello_world$ ./build_project.sh build success: you can run main.sh in ./bin folder rock@rock-3a:~/███/modelbox/workspace/hello_world $如果执行过程中dos2unix报错,请使用sudo apt-get install dos2unix安装:./build_project.sh: line 26: dos2unix: command not found7)运行应用执行bin/main.sh运行应用(如果执行过程中报错,可用sudo su切换到root用户再运行):rock@rock-3a:~/███/modelbox/workspace/hello_world$ ./bin/main.sh [2022-05-17 08:59:55,009][ INFO][ main.cc:369 ] modelbox config path : /home/rock/███/modelbox/workspace/hello_world/bin/../graph/modelbox.conf ... [2022-05-17 08:59:55,184][ INFO][ iva_config.cc:146 ] load config success [2022-05-17 08:59:55,184][ INFO][ iva_manager.cc:168 ] grap path : /home/rock/███/modelbox/workspace/hello_world/bin/../graph/hello_world.toml … [2022-05-17 08:59:57,949][ INFO][ iva_task.cc:230 ] source_type: url [2022-05-17 08:59:57,951][ INFO][ iva_task.cc:231 ] input_cfg: {"url":"/home/rock/███/modelbox/workspace/hello_world/bin/../bin/../data/car_test_video.mp4","url_type":"file"} [2022-05-17 08:59:57,952][ INFO][ iva_task.cc:263 ] output_cfg: {"brokers":[{"cfg":"{\"headers\":null,\"url\":\"/home/rock/███/modelbox/workspace/hello_world/bin/../bin/../hilens_data_dir/hello.mp4\"}","name":"webhook","type":"webhook"}]} … [2022-05-17 09:00:10,052][ INFO][mock_communicate.cc:483 ] Task SUCCEEDED, Mock will exit application [2022-05-17 09:00:10,052][ INFO][iva_task_manager.cc:788 ] task finish. f79b102f-7bb4-43a7-a324-47a8601bf52b … [2022-05-17 09:00:10,054][ INFO][session_context.cc:41 ] session context finish se id:09a7d8b0-e883-4513-8981-b745e5ce7c15 ... [2022-05-17 09:00:10,064][ INFO][ main.cc:382 ] exit modelbox process出现Task SUCCEEDED日志即表示这个图运行结束了,工程目录下的hilens_data_dir文件夹下将会生成视频文件hello.mp4,可以下载到PC端查看。 注意:如果没有为系统安装桌面环境,运行应用时可能会报错缺少某些库,可以先安装对应的库再运行。缺少libatomic.so.1库:rock@rock-3a:~/███/modelbox/workspace/hello_world$ ./bin/main.sh debain os need load libgomp modelbox: error while loading shared libraries: libatomic.so.1: cannot open shared object file: No such file or directory rock@rock-3a:~/███/modelbox/workspace/hello_world$ sudo apt-get update && sudo apt-get install -y libatomic1 Reading package lists... Done Building dependency tree Reading state information... Done The following additional packages will be installed: gcc-10-base libgcc-s1 libgcc1 libgomp1 libstdc++6 The following NEW packages will be installed: libatomic1 The following packages will be upgraded: gcc-10-base libgcc-s1 libgcc1 libgomp1 libstdc++6 5 upgraded, 1 newly installed, 0 to remove and 247 not upgraded. Need to get 654 kB of archives. After this operation, 75.8 kB of additional disk space will be used. ... Setting up libgcc1 (1:10.3.0-1ubuntu1~20.04) ... Setting up libgomp1:arm64 (10.3.0-1ubuntu1~20.04) ... Setting up libatomic1:arm64 (10.3.0-1ubuntu1~20.04) ... Processing triggers for libc-bin (2.31-0ubuntu9) ... rock@rock-3a:~/███/modelbox/workspace/hello_world$缺少libcurl.so.4库:rock@rock-3a:~/███/modelbox/workspace/hello_world$ ./bin/main.sh ... [2022-07-17 03:52:25,091][ERROR][ server_plugin.cc:79 ] Open library /home/rock/███/modelbox/workspace/hello_world/bin/../../../modelbox-rk-aarch64/lib/modelbox-iva-plugin.so failed, libcurl.so.4: cannot open shared object file: No such file or directory ... rock@rock-3a:~/███/modelbox/workspace/hello_world$ sudo apt-get install -y libcurl4 Reading package lists... Done Building dependency tree Reading state information... Done The following NEW packages will be installed: libcurl4 0 upgraded, 1 newly installed, 0 to remove and 247 not upgraded. Need to get 215 kB of archives. After this operation, 660 kB of additional disk space will be used. ... Setting up libcurl4:arm64 (7.68.0-1ubuntu2.12) ... Processing triggers for libc-bin (2.31-0ubuntu9) ... rock@rock-3a:~/███/modelbox/workspace/hello_world$缺少libGL.so.1库:rock@rock-3a:~/███/modelbox/workspace/hello_world$ ./bin/main.sh ... [2022-07-17 03:52:25,085][ WARN][flowunit_group.cc:388 ] draw_car_bbox: open failed: code: Invalid argument, errmsg: import draw_car_bbox@draw_car_bboxFlowUnit failed: ImportError: libGL.so.1: cannot open shared object file: No such file or directory ... rock@rock-3a:~/███/modelbox/workspace/hello_world$ sudo apt-get install -y libgl1 Reading package lists... Done Building dependency tree Reading state information... Done The following additional packages will be installed: libdrm-amdgpu1 libdrm-nouveau2 libdrm-radeon1 libgl1-mesa-dri libglapi-mesa libglvnd0 libglx-mesa0 libglx0 libllvm12 libxcb-dri2-0 libxcb-dri3-0 libxcb-glx0 libxcb-present0 libxcb-sync1 libxcb-xfixes0 libxshmfence1 The following NEW packages will be installed: libdrm-amdgpu1 libdrm-nouveau2 libdrm-radeon1 libgl1 libgl1-mesa-dri libglapi-mesa libglvnd0 libglx-mesa0 libglx0 libllvm12 libxcb-dri2-0 libxcb-dri3-0 libxcb-glx0 libxcb-present0 libxcb-sync1 libxcb-xfixes0 libxshmfence1 0 upgraded, 17 newly installed, 0 to remove and 247 not upgraded. Need to get 24.1 MB of archives. After this operation, 1004 MB of additional disk space will be used. ... Setting up libgl1:arm64 (1.3.2-1~ubuntu0.20.04.2) ... Processing triggers for libc-bin (2.31-0ubuntu9) ... rock@rock-3a:~/███/modelbox/workspace/hello_world$另外,如果运行日志中有类似下面这样的报错,可以忽略,这是应用在尝试与云侧通信校验license,但当前我们是在本地测试,不需要这类校验:rock@rock-3a:~/███/modelbox/workspace/hello_world$ ./bin/main.sh ... [2022-07-17 03:52:25,091][ERROR][iva_auth_info_updater.cc:29 ] IvaManager::SetIAMAuthInfo Not enough meassage. userId and (domain_id or vas_x_role_name) is empty. ... [2022-07-17 03:52:25,091][ERROR][ iva_io.cc:118 ] tempAuthInfo is nullptr ...8)生成视频流应用的流程图除了使用视频文件进行测试,ModelBox还支持输入实时视频流,接下来我们试试在USB摄像头的实时画面上写“Hello World”,这个功能需要用到上面介绍的ModelBox PC Tool工具。使用cp graph/hello_world.toml graph/hello_world_camera.toml命令生成新的流程图,修改hello_world_camera.toml中的流程定义graphconf如下,可以对比它与hello_world.toml的区别:graphconf = """digraph hello_world { node [shape=Mrecord]; queue_size = 4 batch_size = 1 input1[type=input] data_source_parser[type=flowunit, flowunit=data_source_parser, device=cpu, deviceid=0] local_camera[type=flowunit, flowunit=local_camera, device=rknpu, deviceid=0, pix_fmt=bgr, cam_width=1280, cam_height=720] draw_text[type=flowunit, flowunit=draw_text, device=cpu, deviceid=0] video_out[type=flowunit, flowunit=video_out, device=rknpu, deviceid=0] input1:input -> data_source_parser:in_data data_source_parser:out_video_url -> local_camera:in_camera_packet local_camera:out_camera_frame -> draw_text:in_1 draw_text:out_1 -> video_out:in_video_frame }"""9)修改输入和输出配置打开工程目录下bin/mock_task.toml文件,修改其中的任务输入和任务输出配置为如下内容:# 任务输入,mock模拟目前仅支持一路rtsp或者本地url # rtsp摄像头,type = "rtsp", url里面写入rtsp地址 # 其它用"url",比如可以是本地文件地址, 或者httpserver的地址,(摄像头 url = "0") [input] type = "url" url = "0" # 任务输出,目前仅支持"webhook", 和本地输出"local"(输出到屏幕,url="0", 输出到rtsp,填写rtsp地址) # (local 还可以输出到本地文件,这个时候注意,文件可以是相对路径,是相对这个mock_task.toml文件本身) [output] type = "local" url = "rtsp://192.168.2.2:8554/outstream"注意,output条目下url配置中的ip是PC的ip地址,如果之前是用ModelBox PC Tool配置静态ip的方式设置的网络,那PC的ip地址就是192.168.2.2,否则需要做相应修改。10)运行应用将USB摄像头插到开发板上,双击任务栏上的ModelBox PC Tool工具图标弹出主界面,在Step2界面上选择“使用开发板侧视频流”,点击“启动推流”,推流服务将启动,ModelBox PC Tool工具也会再次最小化到任务栏上: 在VS CodeTerminal中执行bin/main.sh camera运行应用:rock@rock-3a:~/███/modelbox/workspace/hello_world$ ./bin/main.sh camera [2022-05-17 08:59:55,009][ INFO][ main.cc:369 ] modelbox config path : /home/rock/███/modelbox/workspace/hello_world/bin/../graph/modelbox.conf ... [2022-05-17 08:59:55,184][ INFO][ iva_config.cc:146 ] load config success [2022-05-17 08:59:55,184][ INFO][ iva_manager.cc:168 ] grap path : /home/rock/███/modelbox/workspace/hello_world/bin/../graph/hello_world_camera.toml … [2022-05-17 09:00:10,054][ INFO][video_out_flowunit.cc:304 ] video_out url is rtsp://192.168.2.2:8554/outstream [2022-05-17 09:00:10,064][ INFO][ ffmpeg_writer.cc:55 ] Open url rtsp://192.168.2.2:8554/outstream, format rtsp success此时,浏览器将会自动打开,网页中的视频窗口将输出应用的实时画面: 5. 开发第一个AI应用接下来我们开发一个车辆检测应用:打开一个视频文件,使用检测模型检测出画面中车辆并画框,再输出到另一个视频文件中。本应用作为模板案例已内置在sdk中,不需要另外下载。1)创建工程使用车辆检测模板创建car_det工程(注意与创建hello_world工程的区别):rock@rock-3a:~/███/modelbox$ ./create.py -t server -n car_det -s car_det sdk version is modelbox-rk-aarch64 success: create car_det in /home/rock/███/modelbox/workspace2)查看推理功能单元这个应用使用到了模型推理,需要用到推理功能单元,可以看到,在car_det工程目录的model文件夹下,存在yolox_infer推理功能单元文件夹,里面有yolox模型文件(yolox_nano_288x512.rknn)和模型配置文件(yolox_infer.toml),模型配置文件内容如下:# Copyright (C) 2022 Huawei Technologies Co., Ltd. All rights reserved. [base] name = "yolox_infer" device = "rknpu" version = "1.0.0" description = "car detection" entry = "./yolox_nano_288x512.rknn" # model file path, use relative path type = "inference" virtual_type = "rknpu2" # inference engine type: rockchip now support rknpu, rknpu2(if exist) group_type = "Inference" # flowunit group attribution, do not change is_input_contiguous = "false" # input data attribution, do not change # input port description, suporrt multiple input ports [input] [input.input1] name = "input" type = "uint8" device = "rknpu" # output port description, suporrt multiple output ports [output] [output.output1] name = "output" type = "float"可以看到该模型有1个输入节点,1个输出节点。需要注意其中的virtual_type配置与npu类别有关,RK3568需配置为rknpu2;输入节点的device配置建议设为与该推理功能单元的上一个功能单元相同。 ModelBox内置了rknn推理引擎和推理逻辑,开发者只需要准备好模型、编辑好配置文件,即可使用该模型进行推理,无需编写推理代码。如果想要创建另外的推理功能单元,可以使用如下命令,推理功能单元默认创建在工程目录的model文件夹下:rock@rock-3a:~/███/modelbox$ ./create.py -t infer -n my_model -p car_det sdk version is modelbox-rk-aarch64 success: create infer my_model in /home/rock/███/modelbox/workspace/car_det/model/my_model另外,本案例使用的车辆检测模型是由PyTorch框架训练得到,我们事先使用rknn-toolkit2工具将它转换为RK3568支持的模型格式,感兴趣的话可以在RK3568模型转换验证案例中查看模型转换过程。3)查看其他功能单元车辆检测模型推理后需要做一些后处理操作得到检测框,再把检测框添加到原始画面中,我们已经准备好了对应的功能单元yolox_post和draw_car_bbox: 4)查看执行脚本car_det工程graph目录下带有多个流程图,配置文件modelbox.conf中的flow_path参数指定了技能运行时的流程图路径:flow_path = "${APP_ROOT}/graph/car_det${HILENS_GRAPH_TYPE}.toml"其中环境变量${APP_ROOT}在运行技能时将自动替换为当前工程的实际路径,而${HILENS_GRAPH_TYPE}可以在执行bin/main.sh脚本时输入流程图后缀名作为参数指定当前运行哪个图,打开该脚本看到相关参数内容为:if [ "$1" = "default" -o "$1" = "" ]; then export HILENS_GRAPH_TYPE= else export HILENS_GRAPH_TYPE=_$1 fi默认执行与工程同名的流程图car_det.toml,如果输入bin/main.sh http即执行car_det_http.toml。5)查看默认流程图与工程同名的car_det.toml流程图中的流程定义graphconf如下:graphconf = """digraph car_det { node [shape=Mrecord]; queue_size = 4 batch_size = 1 input1[type=input] data_source_parser[type=flowunit, flowunit=data_source_parser, device=cpu, deviceid=0] video_demuxer[type=flowunit, flowunit=video_demuxer, device=cpu, deviceid=0] video_decoder[type=flowunit, flowunit=video_decoder, device=rknpu, deviceid=0, pix_fmt=bgr] image_resize[type=flowunit, flowunit=resize, device=rknpu, deviceid=0, image_width=512, image_height=288] car_detection[type=flowunit, flowunit=yolox_infer, device=rknpu, deviceid=0] yolox_post[type=flowunit, flowunit=yolox_post, device=cpu, deviceid=0] draw_car_bbox[type=flowunit, flowunit=draw_car_bbox, device=cpu, deviceid=0] video_out[type=flowunit, flowunit=video_out, device=rknpu, deviceid=0] input1:input -> data_source_parser:in_data data_source_parser:out_video_url -> video_demuxer:in_video_url video_demuxer:out_video_packet -> video_decoder:in_video_packet video_decoder:out_video_frame -> image_resize:in_image image_resize:out_image -> car_detection:input car_detection:output -> yolox_post:in_feat video_decoder:out_video_frame -> draw_car_bbox:in_image yolox_post:out_data -> draw_car_bbox:in_bbox draw_car_bbox:out_image -> video_out:in_video_frame }"""查看任务配置文件bin/mock_task.toml,可以看到其中的任务输入和任务输出配置为如下内容:# 任务输入,mock模拟目前仅支持一路rtsp或者本地url # rtsp摄像头,type = "rtsp", url里面写入rtsp地址 # 其它用"url",比如可以是本地文件地址, 或者httpserver的地址,(摄像头 url = "0") [input] type = "url" url = "../data/car_test_video.mp4" # 任务输出,目前仅支持"webhook", 和本地输出"local"(输出到屏幕,url="0", 输出到rtsp,填写rtsp地址) # (local 还可以输出到本地文件,这个时候注意,文件可以是相对路径,是相对这个mock_task.toml文件本身) [output] type = "local" url = "../hilens_data_dir/car_test_result.mp4"该流程图使用data/car_test_video.mp4文件进行车辆检测,检测结果绘制后保存为hilens_data_dir/car_test_result.mp4文件。6)运行默认应用在car_det工程路径下执行build_project.sh进行工程构建:rock@rock-3a:~/███/modelbox/workspace/car_det$ ./build_project.sh build success: you can run main.sh in ./run folder rock@rock-3a:~/███/modelbox/workspace/car_det$切换到root账号,执行bin/main.sh运行应用,运行结束后在hilens_data_dir目录下生成了car_test_result.mp4文件,可以下载到PC端查看。 7)查看HTTP流程图除了开发视频推理类应用,我们还可以使用ModelBox开发HTTP服务类应用,打开car_det/graph/car_det_http.toml,看到流程定义graphconf如下:graphconf = """digraph car_det { node [shape=Mrecord]; queue_size = 4 batch_size = 1 input1[type=input] httpserver_sync_receive[type=flowunit, flowunit=httpserver_sync_receive_v2, device=cpu, deviceid=0, time_out_ms=5000, endpoint="http://0.0.0.0:8083/v1/car_det", max_requests=100] image_decoder[type=flowunit, flowunit=image_decoder, device=rknpu, deviceid=0, key="image_base64"] image_resize[type=flowunit, flowunit=resize, device=rknpu, deviceid=0, image_width=512, image_height=288] car_detection[type=flowunit, flowunit=yolox_infer, device=rknpu, deviceid=0] yolox_post[type=flowunit, flowunit=yolox_post, device=cpu, deviceid=0] httpserver_sync_reply[type=flowunit, flowunit=httpserver_sync_reply_v2, device=cpu, deviceid=0] input1:input -> httpserver_sync_receive:in_url httpserver_sync_receive:out_request_info -> image_decoder:in_encoded_image image_decoder:out_image -> image_resize:in_image image_resize:out_image -> car_detection:input car_detection:output -> yolox_post:in_feat yolox_post:out_data -> httpserver_sync_reply:in_reply_info }"""该流程图从HTTP请求中接收一张图片进行车辆检测,并返回检测结果。8)运行HTTP应用我们使用root账号运行car_det_http.toml流程图(注意命令后的http参数):root@rock-3a:/home/rock/███/modelbox/workspace/car_det# ./bin/main.sh http [2022-05-17 10:20:47,315][ INFO][ main.cc:369 ] modelbox config path : /home/rock/███/modelbox/workspace/car_det/bin/../graph/modelbox.conf ... [2022-05-17 10:20:47,444][ INFO][ iva_config.cc:146 ] load config success [2022-05-17 10:20:47,444][ INFO][ iva_manager.cc:168 ] grap path : /home/rock/███/modelbox/workspace/car_det/bin/../graph/car_det_http.toml ... [2022-05-17 10:20:49,800][ INFO][httpserver_sync_receive.cc:188 ] Start server at http://0.0.0.0:8083/v1/car_det看到Start server at http...字样的日志即表示HTTP服务已启动,等待调用。9)调用HTTP服务在car_det/data目录下我们准备了HTTP调用的测试脚本test_http.py和测试图片car_test_pic.jpg,可以看到默认是在本机发起调用请求:… if __name__ == "__main__": port = 8083 ip = "127.0.0.1" url = "/v1/car_det" img_path = "./car_test_pic.jpg" test_image(img_path, ip, port, url)我们在VS Code中打开另一个终端,执行该脚本,将在car_det/data下生成测试图片的推理结果car_test_pic.jpg: 当然,也可以将测试脚本和图片拷贝到PC上,并将test_http.py中的ip变量修改为开发板的ip进行远程调用测试。至此,我们的第一个AI应用就已经开发好了。 有关ModelBox核心概念、功能单元和流程图开发的更多介绍,可查看ModelBox手册。
  • [问题求助] 已确认制卡成功,但启动失败,附串口日志
    制卡完全按照教程进行的制卡,期间只是改了两个ip地址, 上电插上后,连接串口,就一直卡在这里 等待过程中自动重启了几次,但每次都卡在这里,只是编号发生变化: 灯只有两个3559常亮串口日志4 5 6 00000232 51 52 70 71 78 b806f000 80 current[1], last[0]. Start watchdog boot_count = 3...... 00000100 Get board ID:4 00000101 00000000 - 00000000 00000104 00000104 00000115 00000115 00000115 - 000001dd 00000000 0000031e 00000308 current[2], last[0]. current[3], last[0]. 0.5 c-init ok Partition 0 is not a vaild NVE partition [NVE]current_id = 1,nve_age = 4,age = 0 [NVE]current_id = 2,nve_age = 2,age = 4 [NVE]current_id = 3,nve_age = 3,age = 4 [NVE]current_id = 1 number of nvbin = 24, version = 45681427 [NVE]nve_offser = 0x000038a0 nve_valid_items = 22 current[4], las0]. cpu mode 3, efuse:267! cpu pll recfg function,success---200777! current[5], last[0]. current[6], last[0]. current[7], last[0]. Ddr_freq->ddr_freq 1600 ! uc sector[0] valid flag not enabled! uc sector[1] valid flag not enabled! [UC]ddr_iecc_en:0 freq 60 vol 2: ch_mask: 0x000000ff ch_lr: 0x00000003 ch_num: 0x00000008 rank_num: 0x00000001 Manufacturer ID[0]:0x00000006 Manufacturer ID[1]:0x00000006 Manufacturer ID[2]:0x00000006 Manufacturer ID[3]:0x00000006 Manufacturer ID[4]:0x00000006 Manufacturer ID[5]:0x00000006 Manufacturer ID[6]:0x00000006 Manufacturer ID[7]:0x00000006 Total size:0x00000008 DDR info:0x00000806 DDR_TYPE_8CH_ALL 1_rank 8G ! DDR HHA interleave enabled! idx: 0 start_addr_l: 0x00000000 start_addr_h: 0x00000000 length: 0x00000800 idx: 1 start_addr_l: 0x80000000 start_addr_h: 0x00000008 length: 0x00001800 uce init entry uce profile total is 0x0000032c uce init end freq 400 vol 2: freq 1600 vol 2: HVrefThres:8 uce init entry uce profile total is 0x00000298 uce init end transfer ddr data to l2_buf 0x40000000. DDR Total Capacity: 8192 MB. DDR Rank Type: single. DDR Channel with DRAM: A B C D E F G H DDR Init 846 ms current[8], last[0]. ==================================== Xloader version is 00000001.00000003.00000011.0000b902 ==================================== maintain:00000001, static:695f656b current[9], last[0]. [STID]adcin7:0x00000002. [STID]adcin7_remap:0x00000000. [STID]adcin8:0x00000003. [STID]adcin8_remap:0x00000000. current[10], last[0]. SPI FLASH download uefi. current[25], last[0]. PCIE_RC_MODE... g_imgNum = 1 current[26], last[0]. SPI FLASH download uefi finish. si current[34], last[0]. ns, suc current[35], last[0]. si suc current[36], last[0]. s vr bg ns vr, sc current[37], last[0]. sv suc sv suc high mntn_config=0xa0000000, low mntn_config=0x00000000 high addr=0x00000008, low addr=0x90000000 lpm3 will WFE disreset A55. current[0], last[0]. aicore_power_on:312----core1 step1 aicore_pmu_up:233----repair step 5 _aicore0_buck_on:164---state -0x0000000f--cfg:0x00000064--buck voltage:0x00000064 _aicore1_buck_on:222---state -0x0000000f--cfg:0x00000064--buck voltage:0x00000064 _aimemory0_1_buck_on:193---state -0x0000000f--cfg:0x00000064--buck voltage:0x00000064 aicore_pmu_up:257----pmu up step1 aicore0_power_reset:74 aicore0_power_reset:83 aicore1_power_reset:88 aicore1_power_reset:97 aicore1_isolation_enable:112----repair step 4 aicore_power_on:331----power on success. DDR HHA interleave enrc_ep_mode = 0 ==================================== UEFI version is 1.3.11.B902 ==================================== UEFI Platform GICD init...OK UEFI ltf start UEFI ctf ok NOTICE: B T FNOTICE: 2 NOTICE: 31 UEFI ltf finish Install gSpiFlashProtocol Protocol Interface ok! AgingResultSaveDxeEntry ............. finish Pcie Port Init Start. Run RC Mode Init code [get_ltssm_def_param][539]get table-idx 0 [pcie_set_port_en_enable][722]: port 8 disable port_id : 8, reset bit_mask:21 port_id : 8, dereset bit_mask:21 [pcie_establish_link_phase1][3817]: port 8 config: [pcie_establish_link_phase1][3818]: port enable: 1 [pcie_establish_link_phase1][3819]: port mode: 1 [pcie_establish_link_phase1][3820]: port lane num: 2 [pcie_port_global_config][2013] [pcie_port_global_config][2021] [pcie_port_global_config][2029] [pcie_establish_link_phase1][3828] [pcie_establish_link_phase1][3845] [pcie_establish_link_phase1][3858] mac set data 16bit [pcie_establish_link_phase1][3866] RP TL init [pcie_establish_link][3909] [pcie_establish_link][3917] [pcie_establish_link][3925] [pcie_set_port_en_enable][719]: port 8 enable [pcie_establish_link][3974] Pcie iATU Init Start! Start nve init(5103). UEFI get board id from DDR:4 [nve_find_valid_partition]current_id = 1 valid_items = 22, version = 805766929, sha_support = 1 Finish nve init(5638). this is not uart loopback mode. pmu_ldo16_disable: pmu_initialized success voltage:0x6.buck status:0x0. pmu_ldo9_disable:sdcard pmu_initialized success voltage:0x5.buck status:0x0. ldo9__:sdcard pmu_initialized success voltage:0x5.buck status:0x0. ldo16__: pmu_initialized success voltage:0x6.buck status:0x0. ldo9__:sdcard pmu_initialized success voltage:0x5.buck status:0x3. ldo16__: pmu_initialized success voltage:0x6.buck status:0x3. 60906 Spec 3.0 SD card . 0x83 2048 16777216 SdReadBlock HEAD_MAIN_MAGIC_BLOCK value = 0xAA55AA55 part_offset 0 UEFI get slot id from DDR:0 this is not uart loopback mode. Now start to auto boot linux.(7094) This is Flash Boot Entry SD_Start_OS start! bootInfo = 0x232, envState = 0x0 SD_Start_OS ... Start dump(7106) mntn config is 0xA000000000000000 [get_dump_flag_from_pmu]:[829L] pmu reg10[0x0] [get_dump_flag_from_pmu]:[832L] pmu reg0[0] get_dump_flag_from_pmu - 849 scRstSrc=0x0, sc_rst_src_clr=0x0 [get_dump_flag_of_rc]:[895L] get dump flag from pmu reg1 is[0] read 4 from ack field [get_reserved_mem]:[1259L] reserved memory[0x890000000][0xA0000000] [do_others_dump]:[2325L] Dump data to host, data type is 1 [do_others_dump]:[2329L] End ddr dump : 7381ms [get_reserved_mem]:[1259L] reserved memory[0x890000000][0xA0000000] [do_others_dump]:[2325L] Dump data to host, data type is 2 [do_others_dump]:[2329L] End ddr dump : 7425ms dump ret:0 read 9 from upload field, ret[0] Finish dump(7433) SdBlockIoRead HEAD_MAIN_MAGIC_BLOCK value = 0xAA55AA55 GetImgFromSDBlock main_backup booting, boot area: 0x100, componentBase: 0x12 offset = 0x75F5000 , size = 0x400 , DstAddr = 0xA40000 , imgLen = 0x40000 offset = 0x75F5800 , size = 0x400 , DstAddr = 0x12E80000 , imgLen = 0x80000 offset = 0x75F6000 , size = 0x1000 , DstAddr = 0xDD7C000 , imgLen = 0x100000 offset = 0x75F7000 , size = 0x10000 , DstAddr = 0x7E7C000 , imgLen = 0xB00000 g_fileSize[0] = 0xF3000 g_fileSize[1] = 0xBFAA00 g_fileSize[2] = 0x44DE19EA g_fileSize[3] = 0x268F0 g_fileSize[4] = 0x63638 pmu_ldo16_disable: pmu_initialized success voltage:0x6.buck status:0x0. pmu_ldo9_disable:sdcard pmu_initialized success voltage:0x5.buck status:0x0. pmu10[0x0] pmu00[0x0] reboot reason [0x0][0x0] [get_reboot_reason_from_pmu_reg1]:[789L] pmu reg1[0x0] Check tee hash ... MemCmp:55, 55 ok V-TEE NOTICE: t-p12. C-dtb u ns. C-Image u ns. Check dtb hash ... MemCmp:F3, F3 ok Check Image hash ... MemCmp:E2, 69 ROTPK check fail fail C-OS hash fail! boardid = 1004 Update FDT [0] base = 0x0, length = 0x80000000 [1] base = 0x880000000, length = 0x180000000 soc node = 38744 Lpapnv->cpu_idle_en = 0 Lpapnv->acpu_num = 8 cpus node = 184 cpu-map node = 1312 cluster0 node = 1324 cpus node = 184 [cpu@0] subnode = 228 [cpu@1] subnode = 356 [cpu@2] subnode = 484 [cpu@3] subnode = 612 [cpu@4] subnode = 740 [cpu@5] subnode = 868 [cpu@6] subnode = 996 [cpu@7] subnode = 1124 [GetKernelLogBuf]:[483L] tmp=0x1fc000 [GetKernelLogBuf]:[496L] end=10 argsBuf[0x6fe04000 default_hugepagesz=2M ascend_enable_all ascend_mini_enable reboot_reason=DEVICE_LOAD_TIMEOUT himntn=1010000000000000000000000000000000000000000000000000000000000000 slotid=00 boardid=004 slaveboot=0] [GetKernelLogBuf]:[504L] kernel log buffer[0x6FE04000][0x1FC000] [get_reserved_mem]:[1259L] reserved memory[0x890000000][0x1400000] [_UpdateReserveMem]:[567L], reserved memory[0x890000000][0x1400000] Start to boot Linux V-LPM3 LPMCU has covered bootrom keypoint. NOTICE: l-p12. W-LPM3 Start to jump Linux kernel(11472)
  • [活动公告] 议程揭晓!第一届云原生边缘计算学术研讨会议程公布!
    探索,边缘新未来2022年11月16日-17日第一届云原生边缘计算学术研讨会 The 1st KubeEdge Academic Workshop 2022议程揭晓!CNCF KubeEdge 社区将于2022年11月16日-17日举办第一届云原生边缘计算学术研讨会 The 1st KubeEdge Academic Workshop 2022 (KEAW'22)。本次研讨会聚合学界领军专家和技术爱好者,汇集边缘计算学术研究及实践案例,旨在进一步帮助更多云原生边缘计算开发者、用户了解边缘计算最新技术突破与未来挑战,洞察边缘计算前沿技术及趋势,开拓行业发展新机遇! 作为业界首个云原生边缘计算开源项目,KubeEdge自开源以来受到了产业界和学术界广泛的关注和支持,吸引了全球来自30+国家的70+贡献组织及16万+开发者,在Google Scholar中,KubeEdge相关学术论文已超过400篇。本届会议也将聚焦边缘计算技术研究和产业转化,携手共建边缘计算生态。CNCF KubeEdge 社区邀您一起见证云原生边缘计算技术突破与多场景创新,欢迎全球边缘计算技术爱好者线上与会!回复研讨会 进入研讨会交流群填写报名表 赢取社区周边
  • [传感器适配] mdc300f适配艾瑞M3图像数据不对。
    1、设备为mdc300f2、版本为:mdc@mdchost:~$ swmc -t 1slotId:100main planeWhole version:MDC300 1.0.106-TVersion status:OKComponent version:Running Module PackageType Versionssd FIRMWARE TDU56IHost OS 1.0.106.2tHost FIRMWARE 1.0.11ISP FIRMWARE 1.15.2CPLD2 FIRMWARE 106MCU FIRMWARE 1.0.106.2Mini0 FIRMWARE 1.76.22.90220Mini1 FIRMWARE 1.76.22.90220Mini2 FIRMWARE 1.76.22.90220Mini3 FIRMWARE 1.76.22.90220Backup Module PackageType VersionHost OS 1.0.106.2Host FIRMWARE 1.0.11ISP FIRMWARE 1.15.2MCU FIRMWARE 1.0.106.2Mini0 FIRMWARE 1.76.22.90220Mini1 FIRMWARE 1.76.22.90220Mini2 FIRMWARE 1.76.22.90220Mini3 FIRMWARE 1.76.22.902203、摄像头配置文件为:{"slotId": "C1","cameraModule": "iray_m3","fps": 50,"res": {"width": 384, "height": 288},"dstNode": "MINI_2","instanceId": 1}4、可视化结果:5、使用MCDtools查看相关信息:其中1和79为红外,2和75为森云可见光。可见光fps设置为30,正常。红外fps设设置的50,这里只有30。如果设置为30,则只有19左右。配置流程按照说明文档操作,B1口的森云摄像头使用正常,iray摄像头也是按流程配置,并且验证过摄像头正常使用。请问这个问题该怎么解决?或者艾瑞M3该如何适配。
  • [数据处理] [mindspore/ccsrc/minddata/dataset/engine/ir/datasetops/source/generator_node.cc:114] ValidateParams] GeneratorNode: data
    [mindspore/ccsrc/minddata/dataset/engine/ir/datasetops/source/generator_node.cc:114] ValidateParams] GeneratorNode: data row of input source must not be 0, got: 0训练自己的数据集提示这样的问题,是mindspore的环境没有装好,还是我的数据集本身有问题了。请华为大佬排查一下
  • [问题求助] 好望在线平台 yolov3 转 wk
    问题   好望在线平台 yolov 在线转 wk  中间过程有没有量化处理?
  • [问题求助] 昇腾推理问题
    使用yolov5模型进行推理,在华为云提供的8张Ascend310推理卡的服务器可以正常使用om模型推理出图片,在本地部署与服务器一样的CANN5.1.RC1环境进行推理时出现如下错误:
  • [问题求助] 同样的模型文件,利用pyACL推理和mxMamufacture进行推理速度为啥会相差许多
    如题,我是用的yolov5s训练的可见光模型,同一个模型pyACL推理耗时330ms单张,而利用mxMamufacture跑只需要40ms左右,pyACL这个表现算正常吗?怎样才能查看pyACL有没有调用华为的NPU?
  • [问题求助] Atlas200DK运行量化模型
    我的任务需求是:在Atlas200DK开发板上运行量化后的模型,要实现这样的操作我需要借助AMCT_Pytorch工具,有以下问题需要请教:1)请问AMCT_Pytorch是可以选择安装在PC端(Ubuntu 18.04)和Atlas200DK开发板(ARM aarch64)上两种平台吗?2)若安装在PC端(Ubuntu 18.04)上,则只能进行模型训练后量化操作,不能完成模型量化感知训练?得到量化模型后再借助Atlas200DK开发板上的ATC工具,将模型转为om文件供推理运行?该模式相当于EP模式吗?3)若安装在Atlas200DK开发板上(ARM aarch64),则所有工作均可以在开发板上完成(量化(AMCT)和模型转换工作(ATC))?该模式相当于RC模式?4)(3)虽然可行,但是因为Atlas200dk cpu较弱,所以不推荐吗?(因为我在开发板上安装AMCT_Pytorch时会出现系统卡死现象)
  • [问题求助] atlas200dk inceptionv3合设环境异常
    模型输入尺寸:3*299*299
  • [技术干货] 【论文分享】边缘智能驱动的车联网
    边缘智能驱动的车联网张彦1, 张科2, 曹佳钰21 挪威奥斯陆大学,挪威 奥斯陆 03162 电子科技大学信息与通信工程学院,四川 成都 611731摘要边缘智能技术通过将计算、存储等资源向用户端推进的方式,赋予了网络边缘实体更强大的信息处理与内容投递能力,也为移动业务的开发与实现提供了高效、低时延的服务支撑平台,深刻地改变着移动应用的功能与网络资源的利用模式。首先对网络边缘智能技术在车联网中的应用进行研究,提出了设计高效车联边缘系统所需要解决的核心科学问题。然后,深入分析了以上问题解决过程中所面临的技术挑战,并给出了应对策略。关键词: 边缘智能 ; 车联网 ; 资源协同 ; 区块链1 引言作为互联网的延伸,物联网正深刻地影响并改变着人们的生活。遍布于全球不同形态的信息实体利用各种智能泛在通信系统连接起来,构成一个复杂异构的万物互联体系,为信息采集、数据分析、态势预测、优化控制等需求提供了强有力的支撑平台。统计结果表明,物联网络中80%的流量与业务需要在接入网段甚至移动节点邻近区域得到处理,这就促使了边缘网络技术的快速发展。区别于云端处理平台通常在核心网络提供大规模集中式处理资源,边缘网络服务将计算、存储、通信等资源下延至用户侧,在业务节点所在网段就近提供业务服务,避免信息在用户端与核心网服务节点间的长距离、高时延传输,提升处理效率并为用户业务提供更敏捷的响应。在技术发展与业务需求的双重驱动下,边缘网络产业正持续向纵深发展。由于网络边缘技术涉及网络连接、环境感知、数据聚合以及信息处理等多个领域,面对复杂多态的物联网应用环境,如何实现相关业务的紧密耦合、异构资源的协同调度、不同处理阶段的有序协作都是急需解决的关键问题。边缘智能为以上问题提供了一种新的解决思路。在边缘网络实体中集成了智能处理模块,可使边缘物联网系统具备自治自律的行为能力,实现面向目标应用需求的资源调配与处理机制,构建健硕的边缘应用体系。现有的边缘智能机制主要包括移动边缘计算(MEC,mobile edge computing)和移动边缘缓存(mobile edge caching)。MEC技术由欧洲电信标准化协会(ETSI,european telecommunications standards institute)在2014年提出,旨在为无线移动节点的信息处理提供强大的计算服务支持并满足其严格的时延约束要求。该技术通过布放在无线接入网边缘的计算服务器为其邻近区域中的移动节点提供所需的计算处理服务,既满足了无线节点设备计算能力的扩展需求,也弥补了核心云计算服务耗时较长的缺陷。作为万物互联应用的一种核心计算支撑平台,边缘计算已成为物联网中不可或缺的重要部分。在产业界,包括华为、英特尔、ARM、通软动力以及中国信息通信研究院等在内的机构共同成立了边缘计算产业联盟,标志着边缘计算已从单纯的技术概念成为行业共识。物联网为人们进行信息交换和资源共享提供便利的同时,也促使了网络流量呈指数级增长,这就给网络运营商在传输带宽及设备容量等方面带来了巨大压力。针对传输信息的分析表明,用户的数据需求大量集中于部分热点内容。在网络上重复传输相同信息将会造成通信资源的严重浪费,为了缓解大规模数据传输需求与通信资源受限的矛盾,并实现物联网络的低时延内容投递,业界提出了边缘存储机制。该机制基于布设在接入网段的多个存储设备,分布式地预先缓存部分热点内容,在用户需要该数据时,利用接入网段多种异构通信资源实现邻近节点间信息的直接投递,从而避免从位于远端网络的数据源直接获取内容,减少核心网络流量,显著降低信息的传输时延与通信开销。近年来,随着汽车保有量的持续增长,道路承载容量在许多城市已达到饱和,交通安全、出行效率以及节能减排等问题日益突出。汽车的智能化和网联化被普遍认为是解决上述交通问题的重要途径。“中国制造 2025”战略部署指出,具备自动驾驶技术的智能网联汽车是未来我国汽车发展的重要战略方向。典型的自动驾驶技术是通过装备在车辆上的雷达、传感和监控等设备,建立并认知车辆行驶环境,进而实现车辆自动操控。面对复杂时变的路网交通环境,单车车载设备处理能力弱与数据容量低等特点将极大地制约车辆对采集的大规模交通信息进行实时处理与有效存储,严重影响自动驾驶的安全性与可靠性。另一方面,随着汽车产业与信息通信技术的深度融合,通过车联网(IoV,Internet of vehicles)互联的智能汽车,为车载应用的开发与应用注入了新活力,新型应用如道路环境增强现实、交通行为智能导引、基于语音的人车动态交互等不断涌现。这些应用通常需要强大的计算处理与海量数据内容的支持,其在为用户带来丰富、便利的驾乘体验的同时,也对智能车辆的计算和存储能力提出了严峻挑战。网联汽车作为物联网络的一种重要表现形态,可利用边缘网络智能技术来解决车辆自动驾驶和车载应用等面临的相关问题。MEC可实现交通态势认知及车载应用等计算任务向边缘服务器的卸载与处理,为事故预警、辅助驾驶、行驶路径优化、智能信息导引等应用提供所需的计算资源。将移动边缘存储应用于车联网通信,可将交通路况、行驶导引以及热点资讯等大量信息预先缓存于路旁系统,为道路中行驶的智能车辆提供低时延的内容投递服务。考虑智能车辆在行驶过程中的快速移动性,车联拓扑动态变化,且车间通信具有高度不稳定性。此外,车—车(V2V,vehicle-to-vehicle)通信、车—路(V2I,vehicle-to-infrastructure)通信和车—人(vehicle-to-pedestrian)通信等多种模式的混合作用,将进一步增加数据传输过程的复杂性。以上特征将影响计算任务卸载和信息分发过程的传输效率,制约边缘计算处理和边缘存储内容投递的性能,给移动边缘智能在车联网中的推广与应用带来新的技术难题和挑战。此外,边缘网络中的通信、计算和存储资源可以互为补充、相互促进,这些异构资源间甚至还存在“互换”的可能。例如,通过协同计算进行交通与通信网络态势预测,可以大幅减少车联网无线资源的消耗,缓解车辆高速移动对网络拓扑的影响。在车辆间、车辆与路旁系统间分担复杂的计算任务以及共享存储资源,可为网联车辆提供更加高效的信息服务。目前,网络边缘智能技术已经成为物联网领域的一个研究热点,并在应用处理、信息投递和资源优化等方面展现了巨大优势。但是,将边缘智能应用于车联网应用领域的进程才刚刚起步。抓住网络边缘智能化与网联智能交通系统发展的重大机遇,在边缘智能驱动的车联网体系架构、资源管理及应用开发等方面进行技术创新并发挥引领作用,将为我国利用“弯道效应”抢占未来车载互联技术的制高点提供难得的机遇。针对上述需求,本文就边缘智能驱动车联网的系统架构、资源协同调度及信息安全问题展开研究。首先全面综述了边缘智能技术在车联网领域的国内外研究及应用现状,然后提出了面向智能交通业务需求构建高效车联边缘处理机制所需要解决的核心科学问题,分析了面临的技术挑战并给出了对应的解决思路。2 国内外研究及应用现状2.1 基于移动边缘计算的车联应用针对 MEC 技术在车联网中的应用,国内外学者已开展了广泛研究。文献[1]针对车辆高速移动环境中的车联计算任务卸载问题,设计了基于 SDN控制的 MEC 架构,提高车联系统的拓展性与灵活性,并利用软件定义控制器简化任务卸载的复杂部署。文献[2-3]提出基于无人机辅助作用的车联边缘计算方案,根据具有计算服务功能的无人机飞行轨迹优化交通导引任务的卸载策略,降低了计算处理时延并减少了车辆行驶能耗。文献[4]考虑任务数据的完整性和任务所属地域的相似性,利用相邻多车辆协同传输,实施分层次数据接入以提高任务卸载过程的数据传输速率。文献[5]则分析了车载应用在云计算与边缘计算两种服务场景中的服务质量指标,提出了云计算资源与边缘计算资源协同的任务卸载策略,并利用博弈论方法实现了任务卸载目标确定与资源调度优化。在应用实施方面,中国香港京信有限公司开发了基于虚拟化移动边缘计算平台的车联网原型系统,该系统可完成低时延车辆监控,并可实现智慧城市的道路安全管理及智能交通导引等功能[6]。2.2 基于移动边缘存储的车联信息投递在基于边缘存储技术的车联信息投递研究中,文献[7]提出了一种十字路口场景下智能车辆节点间的分布式数据缓存机制,并设计内容动态流行度判定算法,改善了缓存过程中的内容重复率、资源利用率和内容投递时延等性能指标。为了保证内容传递的及时性和可靠性,文献[8-9]设计了一种基于优先级的车联内容存储策略,依据信息优先级高低实行内容分发排序,并结合缓存车辆的移动性特征优化数据存储方案,提升了网内缓存内容的命中率。文献[10]研究了车联视频应用中的自适应比特流存储问题,以全网视频清晰度与回程通信链路性能为变量,采用李雅普诺夫优化方法使系统效用最大化。根据车辆的内容请求,文献[11]利用RSU存储多个内容的副本来提升内容访问命中率,并设计了基于交叉熵的动态内容存储算法,有效保证了车联内容的低时延访问。文献[12-13]研究了 5G 车联自组网场景中通过车间协作进行的内容共享与分发,并利用图论机制优化内容存储决策。文献[14]提出基于车辆行驶路线的文件存储机制,根据车辆的当前行驶路径预测短期未来车辆的位置,根据预测结果对车辆请求的内容进行选择性存储,显著缩短了内容投递时延。文献[15-16]采用 SDN 车联网络模型,研究时延容忍的数据存储问题,根据车辆的移动性和当前路段路况信息构建马尔可夫决策优化数据流的存储方式,提升了系统吞吐率。在边缘存储的工程应用实践中,中国联合网络通信集团有限公司与中兴通讯股份有限公司在 2016 年世界移动通信大会上展示了基于 5G 架构的移动边缘存储解决方案,将内容缓存应用于仓储运输、智能驾驶、交通导引、信息分发等领域。2.3 边缘计算与存储协同的智能车联网车联应用性能的提升需要不断整合并利用异构边缘资源,边缘计算与存储协同的智能车联系统正成为研究热点。文献[17]探讨了未来5G场景中,智能车辆的低时延、高效率通信需求与 MEC 及存储服务的关联,指出了边缘计算存储协同调度的必要性。文献[18]采用深度增强学习的方式整合车联网中的边缘计算和存储资源,设计多目标优化算法,提升系统运行效率。文献[19]提出基于智能车辆辅助的云端与边缘协同机制,将智能车辆与基站作为资源协同节点,对网络中的计算与存储进行共同调度。文献[20]设计车联网中的主动式内容投递策略,通过将车辆的计算能力与边缘节点的存储能力进行有机结合,实现无线网络内容的高效投递。文献[21]针对全双工车联网中的差异化应用服务需求,在分析高数据率服务和高计算需求服务特性的基础上,对车辆能耗及计算通信等异构资源进行联合优化,提升系统效用。文献[22]结合车辆的移动性特征与车联应用服务的时延要求,通过构建车辆与边缘节点效用的博弈模型,优化边缘计算与存储资源的调度策略。在应用实践中,中国移动通信集团有限公司率先布局移动边缘系统平台,对计算和存储基础设施进一步优化,以提供增强现实、虚拟现实、超清视频以及移动云等多项车联应用服务。边缘智能网络与车联网密切相关,为新型车联应用的开发提供了通信、计算、存储等资源的服务支持,被广泛认为是未来智能交通系统发展的重要技术组成部分。虽然国内外已经针对边缘智能在车联网中的应用进行了相关研究,但是边缘服务与交通路网行为特征的智能匹配以及异构资源的深度融合问题尚未被深入探讨,边缘资源调度策略实施过程中的诸多关键问题还有待解决。3 边缘智能车联系统中的核心科学问题在将网络边缘智能技术应用于车联网的过程中,其计算处理速度和内容投递效率将受车辆个体行为及网联车系统特征等因素的影响。为了有效提升车联网络边缘资源的利用效率与运行性能,需要解决如下4个核心科学问题。3.1 交通流与边缘网络资源的动态匹配机理在边缘智能驱动的车联网络中,提供边缘计算和存储节点的服务能力通常受制于单台服务设备的计算资源能力及信息存储容量。同时,边缘服务节点大多基于接入网段的蜂窝网络基站或路旁单元(RSU,roadside unit)并利用无线方式进行数据传输,接入节点无线覆盖区域的有限性将进一步约束各边缘节点的服务范围。因此,车联应用服务过程需要不同区域多边缘节点的协同支持。交通路网中车辆的快速移动性将引发网络拓扑的动态改变以及车联应用业务的时空迁移,从而改变对不同路段、不同服务节点群组提供的边缘资源需求。由此可见,网络边缘资源与交通路网状态具有紧密的耦合关系,只有将车联边缘网络的通信、计算和存储资源管理与车辆在路网交通中的行为特征紧密结合,从宏观上实现跨区域、多节点异构边缘资源与智能车辆交通流在时空维度上的动态匹配,才能最大限度地利用车联网资源,达到保障服务质量、提升交通运营效率的目的。考虑城市路网的分布特征及上下游路段交通流的相互关联,在实现边缘网络资源与各路段交通流进行动态匹配的过程中,可充分利用车辆移动的可预测性和交通流的时空相关性,将网络边缘异构资源进行自组融合并随车联业务变化实施随动迁移。3.2 针对车联应用的边缘异构资源协同融合机理边缘智能网络虽然能为车联应用提供计算与存储支持,但在严重拥堵的交通路网场景下,仍然无法承载大规模车辆的海量接入和并行计算卸载,也难以保障大量自动驾驶车辆间的交通信息实时传输需求。研究表明,车联网络中的通信、计算、存储资源可以互为补充、相互促进。例如对数据的计算处理能减少其对通信传输的需求,利用智能车辆的“存储—携带—转发”机制可大幅度降低信道带宽的占用,增加机会网络的传输容量。可见,挖掘边缘网络异构资源间的相互作用机理,研究多资源紧密协同的资源调度与互补机制,将有助于减少车联网无线资源的消耗,缓解车辆高速移动行为对网络拓扑的影响,并且能在车辆间、车路间分担复杂的计算任务,更高效地使用存储资源为车联内容服务。在边缘资源融合的过程中,服务节点资源容量限制、服务区域分布、异构资源在不同车联应用场景中的互换补充效用等因素都将影响并制约边缘网络的业务性能。因此,针对车联应用需求的边缘异构资源协同调度是一个动态复杂的优化问题。3.3 边缘网络资源调度的驱动式实施机制车联网中的车辆从属于不同用户个体,并且车联应用大多可独立执行。用户的个人理性和逐利性特征通常促使其追求更强大的应用功能和更迅捷的处理响应,这就会引发更多的资源需求。虽然动态协同的异构资源调度策略可以有效提升边缘网络运营效率,但在实施过程中将受用户逐利性的影响,难以保证车载应用无条件地遵从资源调度指令,从而造成车辆对边缘资源的无序争用与低效耗费。因此,急需提出一种对智能车联实体具有内在驱动能力的边缘网络资源协同管理机制。该机制需要引入车联应用的资源需求、服务质量约束等自有特征以及用户个体在使用边缘资源过程中的获取效用和支付代价等潜在因素,探究决定应用资源需求量的核心驱动要素。基于该核心要素,实现区分智慧车联应用并且优化系统整体性能的边缘资源调度。3.4 车联网络中边缘资源调度的安全保障机制车联边缘网络中的应用计算任务卸载以及内容获取都需要在智能车辆与边缘服务器间进行资源的调度与使用。从服务供需的角度来看,边缘资源的配给与使用可视为车联应用与服务节点间的交易行为。如何保障资源交易过程的安全与公平,已成为边缘网络高效运行的必备前提。考虑车联应用与边缘服务节点通常归属于具有不同利益的用户实体,各实体在资源交易过程中均力图使自身效用最大化,因此,急需建立一种满足车联边缘网络应用需求且能够真实反映交易事实的公平资源调度机制。此外,车联网作为一种具有泛在无线接入能力的开放式物联网络,不可避免地会受到恶意节点的信息干扰或数据攻击。恶意节点可能会篡改甚至伪造真实交易记录,破坏正常边缘资源调度进程。因此,在边缘智能网络应用中,既需要针对车联业务需求的时空分布实施精准资源调度,也需要对边缘资源调度指令、交易记录等敏感信息进行保护与验证。4 结束语本文针对边缘智能技术在车联网中的应用展开研究。在总结移动边缘计算与边缘存储在智能交通系统中的研究应用现状的基础上,指出了设计高效边缘智能车联网络急需解决的资源智能匹配、异构资源协同融合、调度机制驱动式实施和资源交易安全保障等关键科学问题。分析了解决这些问题过程中面临的技术挑战,并给出了对应的解决思路。总之,边缘智能技术的出现,促使车联应用从车辆个体向区域局部、从利用单一资源向异构资源融合纵深发展,为车联网进一步演进提供新机遇。The authors have declared that no competing interests exist.作者已声明无竞争性利益关系。5 原文出处《物联网学报》2018, 2(4):  40-48.  doi:10.11959/j.issn.2096-3750.2018.00080
  • [技术干货] 【论文分享】基于边缘计算的物联网监测系统中利用自编码神经网络实现的异常检测
    基于边缘计算的物联网监测系统中利用自编码神经网络实现的异常检测于天琪1, 朱咏絮2, 王现斌11 西安大略大学电气与计算机工程学院,安大略 伦敦N6A 5B92 拉夫堡大学沃尔夫森机械、电气与制造工程学院,拉夫伯勒LE11 3TU摘要物联网以其便于搭建及成本低廉等优点,被广泛地应用于环境监测中。在大规模物联网监测系统中,云平台一直被用作远程的数据和控制中心,然而系统中大量的数据上传和处理给云平台的带宽负载和实时性反馈等方面带来了巨大挑战。因此,提出了基于边缘计算的物联网监测系统框架。边缘计算作为该系统的中间层,能够为终端设备提供实时的本地服务,同时能够通过初步分析分流云平台的计算任务进而降低数据上传量。在此基础上,进一步提出了一种利用自编码神经网络实现的异常检测方法。采用实地采集的海洋气候监测数据进行仿真分析,仿真结果表明,本文提出的基于自编码神经网络的异常检测方法能够充分利用采集数据的空间相关性并准确地检测出异常数据。关键词: 自编码神经网络 ; 异常检测 ; 边缘计算 ; 物联网1 引言随着物联网技术的发展,物联网系统以其成本低廉以及易于部署的特性被广泛应用于环境监测中,如森林火灾监测、海洋气候监测等。在系统部署过程中,大量的物联网终端设备被添加到系统中,随之而来的大规模数据处理分析以及存储,给基于云平台的物联网系统带来如带宽负载、实时性反馈以及网络连接稳定性等诸多方面新的困难和挑战[1]。在此情况下,边缘计算技术被迅速地纳入大规模物联网监测系统中[2]。边缘计算由边缘计算设备提供支持,常用的设备有智能网关、轻量级服务器以及小型基站等。在物联网系统中,边缘计算节点位于系统的中间层,相比于云平台更加贴近物联网终端设备。因此,边缘计算节点能够向终端设备提供本地服务,以提高服务及信息反馈的实时性,进而降低由于终端设备与云平台的远程交互所带来的回程时延。与此同时,边缘计算设备也能够提供数据的初步处理,分流云平台的计算任务,降低上传至云平台的数据量,从而达到减轻主干链路带宽负载的目的。在本文中,首先提出基于边缘计算的物联网监测系统框架,主要由无线传感器监测节点、边缘计算节点和云平台构成,对每个组成部分的功能及相互之间的通信过程进行详细探讨。在此系统框架的基础上,提出一种利用自编码神经网络(以下简称“自编码器”)实现的数据异常检测方法。在大规模物联网监测系统中,数据异常时常发生。造成数据异常的原因有多种,如监测环境中的突发事件和传感器自身的异常。无论是何种原因,数据异常都直接关联环境以及物联网系统自身的安全。因此,需要及时、准确地对数据异常进行检测。考虑边缘计算设备的能力和在系统中的特殊位置,本文提出了一种基于边缘计算的异常检测方法,一种人工神经网络模型即自编码器,用以捕捉和利用环境监测数据自身的空间相关性。之所以采用自编码器,主要是考虑所监测环境的复杂性,采集的数据虽然具有较强的规律性但可能呈现非简单的线性相关性。自编码器作为一种神经网络,有能力处理复杂的数据模型,既能够对线性相关的数据进行建模分析,也能够应对非线性相关的数据。考虑神经网络模型训练的复杂度,训练过程被部署在云平台进行,所得到的模型及参数将被回传至边缘计算节点用以进行后续的异常检测。在边缘计算节点,利用异常数据在通过自编码器编码与解码过程中所产生的较大波动对其进行检测。针对实地采集的海洋气候监测数据进行分析可知,本文提出的基于自编码器的异常检测方法,能够准确地检测出异常数据。此外,文章末尾对基于边缘计算的物联网系统中存在的问题和潜在的研究方向进行了简要讨论。2 基于边缘计算的物联网监测系统基于边缘计算的物联网监测系统具体由3部分组成,包括无线传感器监测节点、边缘计算节点和云计算平台。图12.1 无线传感器监测节点在大规模物联网监测系统中,无线传感器节点是系统中最基础、最重要的组成部分。在监测区域,大量的无线传感器节点被随机或有组织地投放出去,用以实时感知并采集环境数据。如在江苏省无锡市部署的森林监测系统GreenOrbs中,无线传感器节点被安置在树木上,每一个节点都嵌入了温度、湿度、光照强度以及二氧化碳浓度等传感器,用以监测森林环境并实时检测及预防森林火灾。在基于边缘计算的物联网系统框架中,无线传感器节点主要与边缘计算节点进行通信,与云平台的通信也由边缘计算节点作为中继进行。一方面,可以降低对无线传感器节点通信能力的要求;另一方面,可以充分利用边缘计算节点的数据处理能力优势。2.2 边缘计算节点在大规模物联网监测系统中,监测节点周围已部署的小型地面基站可以作为边缘计算的节点。在一些难以进行基站部署的地区,无人机也可以作为移动边缘计算节点提供相应的边缘计算服务。从系统架构角度来看,边缘计算节点作为中间层存在,向无线传感器节点提供本地服务以提高服务质量及信息反馈的实时性,进而降低与云平台的远程交互所带来的时延。与此同时,能够提供数据的初步处理,分流云平台的计算任务,降低上传至云平台的数据量,从而减轻主干链路的带宽负载。在提出的异常检测方法中,边缘计算节点具有至关重要的作用。在系统初始化阶段,作为中继设备将无线传感器节点采集的环境监测数据上传至云平台。在系统常规运行阶段,对采集的数据进行异常检测。一旦检测出异常情况,边缘计算节点会立即将异常报告给位于云平台的数据和控制中心,同时驱动位于底层的控制器,提供紧急应对方案。图22.3 云计算平台云计算平台以其超强的计算能力和超大的存储空间,在系统中起到远程数据和控制中心的作用,主要用于大规模和高复杂度的数据处理及数据存储。在提出的异常检测方法中,使用自编码器模型以捕捉和利用环境监测数据自身的空间相关性。自编码器作为一种用于特征提取的人工神经网络模型,模型参数的训练具有较高的复杂度。无线传感器节点和边缘计算节点难以提供相应的计算能力以及复杂计算所带来的资源消耗,因此,模型训练过程被部署在云平台进行。生成的模型参数被回传至边缘计算节点,用于实时的异常检测。3 结束语本文首先提出了基于边缘计算的物联网监测系统架构,由云平台、边缘计算节点以及无线传感器监测节点组成。对各组成部分的功能以及相互之间的信息交互方式均进行了详细介绍,并且在此基础上提出了利用自编码器实现的数据异常检测方法。应用美国国家海洋和大气管理局提供的 TAO监测数据对该异常检测方法进行了分析,所得到的ROC曲线表明,该异常检测方法接近理想检测器。最后,对基于边缘计算的物联网系统中仍存在的问题和潜在的研究方向进行讨论。The authors have declared that no competing interests exist.作者已声明无竞争性利益关系。4 原文出处《物联网学报》2018, 2(4):  14-21.  doi:10.11959/j.issn.2096-3750.2018.00076
总条数:48 到第
上滑加载中