-
the scheduler caught an error:stop operation这是什么报错
-
使用yolov3进行口罩检测。与车辆检测不同,口罩检测需要自行准备模型和配置文件,但这并没有增加太多难度,因为所需资源的下载和使用都非常便捷。工程创建与模型配置 使用create.py脚本创建了名为mask_det_yolo3的工程,并利用-t infer选项创建了名为mask_infer的推理功能单元。这一步骤在工程目录的model下生成了必要的配置文件。模型与配置文件的整合 将下载的rknpu2.zip中的rknn模型文件和配置文件复制到工程目录中,替换原有的mask_infer.toml。mask_infer.toml文件定义了模型输出,涉及头部、面部和口罩的信息。功能单元的开发 接着,使用-t python选项创建了两个功能单元:yolo3_post用于后处理,draw_mask_bbox用于在原图上绘制展示框。这些功能单元的逻辑是判断是否佩戴口罩——如果面部检测框与口罩检测框的重合度超过设定阈值,则判定为佩戴口罩;否则,判定为未佩戴。流程图与任务配置 串接流程图(graph/mask_det_yolo3.toml)和配置任务输入输出(bin/mock_task.toml)是实现口罩检测的关键步骤。下载的资源中已经包含了配置好的文件,只需拷贝到相应目录即可。测试视频的准备与应用运行 准备工作完成后,将测试视频拷贝到data目录,并在工程目录下执行build_project.sh和bin/main.sh来运行应用。视频文件中的戴口罩检测结果被成功输出。视频流的探索 下载的资源中还包括了一个camera配置文件,该文件允许将输入输出都配置为视频流,这为实时口罩检测提供了可能。结语 通过这次试用,ModelBox端云协同AI开发套件的口罩检测功能得到了充分的展示。从模型下载到配置,再到功能单元的开发和流程图的串接,每一个步骤都体现了ModelBox的灵活性和强大能力。这不仅是技术的实践,更是对AI应用潜力的一次深入挖掘。
-
初识ModelBox:SDK的快速入门 试用的第一步,自然是从SDK的安装开始。考虑到效率,直接以root用户身份进行操作。安装了必要的库dos2unix和numpy opencv-python后,解压缩SDK包,一个丰富的开发环境展现在眼前,包含了bin、doc、etc等多个目录,每个目录都有其独特的用途。创建Hello World工程:探索目录结构 使用create.py脚本创建了一个名为hello_world的工程,这个工程的目录结构清晰有序,从CMake文件到bin目录,再到data和dependence等,每一个部分都为接下来的开发工作做好了准备。开发第一个Flowunit:视频上的文字叠加 在etc/flowunit目录下,新增了一个名为draw_text的python flowunit。通过修改draw_text.py文件中的process函数,实现了在视频帧上叠加"Hello World"文字的功能。这一改动,虽然简单,却标志着功能单元处理逻辑的初步构建。配置流程图和任务:从本地视频到RTSP流 接着,调整了hello_world.toml流程图配置和mock_task.toml任务配置,使得应用能够处理本地的mp4视频文件,并将处理结果输出到指定路径。执行构建和运行脚本后,虽然遇到了一些报错信息,但目标文件成功生成,视频播放时叠加了预期的文字效果。扩展到视频流:实时文字叠加 不满足于仅处理视频文件,进一步尝试了视频流的处理。通过修改配置文件,将输入源改为摄像头,输出到RTSP流,实现了在实时视频流上叠加文字的功能。车辆检测:探索ModelBox的高级应用 在完成基础的文字叠加后,进一步探索了ModelBox的高级应用——车辆检测。使用内置的yolox模型进行视频画面中车辆的检测,并在检测到的车辆周围绘制边框。这一过程涉及到模型推理单元的使用,ModelBox内置的rknn推理引擎和推理逻辑,大大简化了开发过程。HTTP服务:提供远程车辆检测API 更进一步,通过配置http服务,使得车辆检测功能可以通过HTTP接口进行调用,这为远程车辆检测提供了便利。结语 通过这一系列的尝试和探索,ModelBox端云协同AI开发套件展现出了其强大的功能和灵活性。无论是视频上的文字叠加,还是复杂的车辆检测,ModelBox都能够提供高效的解决方案。这不仅是一次技术的尝试,更是一次对AI开发潜力的深刻认识。
-
在一个月的试用期内,有幸体验了ModelBox端云协同AI开发套件(RK3568),心中满是激动。收到开发套件的那一刻,便迫不及待地按照《上手指南》开始了探索之旅。首先映入眼帘的是整齐摆放的开发套件组件,随后在安装过程中,逐步展现出其形态。待板子上电并启动系统后,一切准备就绪。操作系统的制作是第一步,没有系统的板子上电后仅显示绿灯常亮。系统启动镜像需要写入到Micro SD卡中,而家中的读卡器恰好派上用场。虽然balenaEtcher镜像读写工具下载缓慢,但急性子的我选择放弃等待,转而在Linux环境下,使用Ubuntu 20.04系统自带的磁盘映像写入器完成了镜像的写入。将镜像成功写入32G的TF卡后,系统启动便水到渠成。接下来,面临两种登录开发板的方式选择:一是直接连接显示器和键盘鼠标,安装Ubuntu桌面进行开发;二是通过远程连接工具,如VS Code中的Remote-SSH,从PC端登录开发板。为了便捷,选择了前者,将hdmi线连接至荣耀智慧屏作为显示器,并通过nmcli命令连接无线网络,顺利完成了系统登录。系统登录后,安装了桌面环境mate,虽然下载和安装过程中遇到了一些挑战,如系统源替换和自动升级的关闭,但最终都得到了解决。进入桌面后,虽然操作略显卡顿,但通过调整分辨率和关闭一些系统进程,问题得到了缓解。随后,按照指南在HiLens管理控制台专业版进行了设备注册、下载固件(Device_Agent)和证书,并将其传送到开发板进行安装。值得一提的是,使用十元优惠券激活了一个月的设备使用权。开发环境的准备工作告一段落后,便开始了SDK的下载和真正的开发工作。整个试用过程充满了挑战和学习,ModelBox端云协同AI开发套件(RK3568)的体验让人印象深刻,期待未来能够探索更多的可能性。
-
边缘盒子芯片不支持gpu(海思3521DV200)需要运行cpu版本推理模型,谁可以提供一个modelbox torch版本镜像,搞了几天了始终不行,运行就报环境不支持。
-
我使用的是modelbox-develop-mindspore_1.6.1-cann_5.0.4-ubuntu-aarch64镜像,按照教程运行modelbox-tool develop -s正常,但是运行modelbox命令提示找不到文件,导致我无法修改ACL,浏览器访问图排界面显示拒绝访问。界面如下:
-
例如对一路图像同时进行OCR识别和目标检测,有案例吗?
-
自动驾驶(AIOT) - 轻量级目标检测与分割算法开发和部署(RK3568)本文将在ModelArts平台上开发轻量级目标检测与分割算法,并使用ModelBox框架在RK3568开发板上实现模型推理和部署。数据准备我们收集了一份200张由Labelme标注的道路图像分割数据集,之后使用脚本将其转换为VOC格式的数据集并进行数据增强:处理好的数据集已经分享到AI Gallery上,可以使用OBS下载:算法简介像素级的图像分割不仅需要精确,有时还需要高效以便应用到real-time application比如自动驾驶汽车等。现有的方法可能精度较高但往往参数量巨大,为了解决这个问题,我们使用LinkNet作为主干网络[Fig. 1],中间层[Fig. 2]使用LeakyRelu进行激活,最后一层使用Sigmoid做归一化,并在Encoder Block 4后增添目标检测分支,训练过程中进行梯度裁剪防止梯度爆炸。云端训练算法详情可以运行我发布的Notebook,并下载转换好的模型文件:端侧推理1、我们在VS Code中使用Remote-SSH远程连接ModelBox端云协同AI开发套件(RK3568):2、在SDK目录下使用create.py脚本创建工程object_detection_seg(od_seg):3、创建推理功能单元yolo_tf_seg:4、将转换好的模型放到yolo_tf_seg目录下,我们的模型有一个输入和两个输出:修改配置文件如下:5、创建后处理功能单元post_process:对于后处理功能单元,我们在config中配置参数,接收2个float类型的推理结果,返回类别检测框和图像掩码:对应的逻辑代码如下:6、创建绘图功能单元draw_image:对于绘图功能单元,我们接收解码后的原始图像和目标检测框以及分割图像,对应的配置文件如下:接下来补充逻辑代码生成新的图像:7、查看流程图:对应代码如下:8、配置输入和输出,运行应用:9、我们可以在Chrome浏览器chrome://tracing/中加载性能统计文件:通过分析耗时最久的是推理功能单元,720p视频检测帧率在6fps左右。小结:本文总体而言并没有太多的创新点,是一个纯工程化的项目,主要工作是将学术界的优秀论文落地到边缘设备上,通过对网络的魔改,得到一个兼顾精度、速度和体积的目标检测和分割模型,在模型量化过程中会出现精度损失,后续会通过优化算法以及选择不同的量化算法kl_divergence(feature分布不均匀时可以得到较好的改善效果)继续提高模型的检测效果,复现本案例所需资源(代码、模型、测试数据等)均可从object_detection_seg.zip获取。
-
https://hub.docker.com/u/modelbox,访问不了。
-
modelbox支持多路视频输入吗?我理解modelbox框架与nvidia的deepstream类似,deepstream可以通过配置输入多路视频进行分析。modelbox可不可以也通过配置实现呢?
-
1.案例效果本案例主要使用的技术有:FairMOT进行车辆检测与跟踪yolov5进行车牌检测crnn进行车牌识别,在停车场入口、出口、停车位对车辆进行跟踪与车牌识别,无论停车场路线多复杂,小车在你掌控之中最终效果如下:2.环境安装2.1 ModelBox端云协同AI开发套件(Windows)设备注册2.1.1 安装VS Code与使用ModelBox的其他套件一样,我们推荐使用VS Code进行技能开发,请登录VS Code官网下载安装Windows x64版本的编辑器。2.1.2 注册HiLens设备HiLens设备的注册有两种方式:使用VS Code插件注册登录华为云HiLens页面手动下载注册固件,使用命令行注册。 我们推荐第一种方式,操作更简单1)在VS Code中搜索并安装ModelBox管理插件:2)安装完成后,点击界面下方进入华为云登录界面,获取访问密钥,再进行登录:如果有访问密钥,即AK/SK,直接输入登录即可登录;否则则需要点击第②步获取访问密钥,在弹出的页面点击新增访问密钥,确认后将下载的表格文件中的AK/SK依次复制填入第③步的填空框内即可。3)如下图依次点击,进行ModelBox设备注册:4)确认后,如下图显示“运行中”即完成注册:2.2 ModelBox端云协同AI开发套件(Windows)SDK安装2.2.1 安装Git for WindowsModelBox中有些脚本的执行依赖bash,使用Git bash也可以让开发者在Windows上获得与Linux相同的执行环境,因此需要安装Git for Windows。安装完成后右键点击可以看到:2.2.2 下载ModelBox sdk1)在HiLens管理控制台专业版的技能开发-工具/插件板块下载Windows系列的ModelBox sdk:2)新建一个用于ModelBox开发的文件夹(注意路径中不能有中文和空格),将下载的sdk压缩包移动到该路径并解压,使用VS Code打开该文件夹:其中modelbox-win10-x64文件夹即为ModelBox核心库,包含ModelBox运行环境、内置的功能单元等。另外,为了做到开箱即用,可以看到sdk中已经包含了Python运行环境(python-embed目录),AI应用常用的OpenCV、NumPy等三方库也已经内置,开发者无需手动安装。此外,我们也推荐安装一些VS Code插件,提高开发效率。1、Python插件后面教程会涉及到ModelBox的Python功能单元开发,推荐安装Python插件,微软官方出品,可以进行语法高亮、自动补全、代码跳转等:2、Even Better TOMLModelBox中的流程图、配置文件等使用 TOML 语法编写,因此我们推荐安装 Even Better TOML 插件,可以进行语法检查、关键字高亮、文件排版等:3)打开Terminal终端4)ModelBox技能模板我们准备了一些口罩检测、手势检测、人体姿态识别等AI技能模板,存放在华为云OBS中;然后在ModelBox sdk中提供了一个solution.bat工具,用于下载云侧的技能模板,执行.\solution.bat -l可看到当前已有的技能模板:3.AI寻车系统搭建相关步骤这个应用对应的ModelBox版本已经做成模板放在华为云OBS中,可以用sdk中的solution.bat工具下载,接下来我们给出该应用在ModelBox中的完整开发过程:3.1 下载模板执行.\solution.bat -l可看到当前公开的技能模板:结果中的vehicle_plate_multi_centernet_yolov5_crnn即为AI寻车应用模板,可使用如下命令下载模板:.\solution.bat -s vehicle_plate_multi_centernet_yolov5_crnnsolution.bat工具的参数中,-l 代表list,即列出当前已有的模板名称;-s 代表solution-name,即下载对应名称的模板。下载下来的模板资源,将存放在ModelBox核心库的solution目录下。3.2 创建工程在ModelBox sdk目录下使用create.bat创建vehicle_plate工程:.\create.bat -t server -n vehicle_plate -s vehicle_plate_multi_centernet_yolov5_crnncreate.bat工具的参数中,-t 表示创建事务的类别,包括工程(server)、Python功能单元(Python)、推理功能单元(infer)等;-n 代表name,即创建事务的名称;-s 代表solution-name,表示将使用后面参数值代表的模板创建工程,而不是创建空的工程。workspace目录下将创建出vehicle_plate工程,工程内容如下所示:vehicle_plate|--bin│ |--main.bat:应用执行入口│ |--mock_task.toml:应用在本地执行时的输入输出配置,此应用默认使用4路本地视频文件为输入源,最终结果拼接为四宫格输出到屏幕,可根据需要修改|--CMake:存放一些自定义CMake函数|--data:存放应用运行所需要的图片、视频、文本、配置等数据│ |--chuchang_10.mp4:停车场出口测试视频│ |--ruchang_10.mp4:停车场入口测试视频│ |--ruku_10.mp4:停车位1测试视频│ |--kong_10.mp4:停车位2测试视频│ |--plate_keys.txt:车牌字符文件│ |--content_file.json:技能参数全局配置文件|--dependence│ |--modelbox_requirements.txt:应用运行依赖的外部库在此文件定义,本应用依赖pillow、scipy等工具包|--etc│ |--flowunit:应用所需的功能单元存放在此目录│ │ |--cpp:存放C++功能单元编译后的动态链接库,此应用没有C++功能单元│ │ |--collapse_ocr:归拢功能单元,车牌识别后处理│ │ |--condition:条件功能单元,判断是否检测到车辆/车牌│ │ |--draw_full_screen:多路视频拼接输出功能单元│ │ |--draw_plate:车牌检测结果绘制│ │ |--draw_track_bbox:车辆跟踪结果绘制│ │ |--expand_image:展开功能单元,展开车辆检测/车牌检测结果并行推理│ │ |--letter_resize:车辆检测预处理功能单元│ │ |--object_tracker:跟踪功能单元│ │ |--plate_det_post:车牌检测后处理功能单元│ │ |--url_cfg:流单元,多路输入解析│ │ |--vehicle_det_post:车牌检测结果绘制|--flowunit_cpp:存放C++功能单元的源代码,此应用没有C++功能单元|--graph:存放流程图│ |--vehicle_plate.toml:默认流程图,使用本地视频文件作为输入源│ |--modelbox.conf:modelbox相关配置|--hilens_data_dir:存放应用输出的结果文件、日志、性能统计信息|--model:推理功能单元目录│ |--vehicle_det:车辆检测推理功能单元│ │ |--vehicle_det.toml:车辆检测推理功能单元的配置文件│ │ |--vehicle_det_320x576.onnx:车辆检测onnx模型│ |--plate_det:车牌检测推理功能单元│ │ |--plate_det.toml:车牌检测推理功能单元的配置文件│ │ |--plate_det.onnx:车牌检测onnx模型│ |--plate_rec:车牌识别推理功能单元│ │ |--plate_rec.toml:车牌识别推理功能单元的配置文件│ │ |--plate_rec.onnx:车牌识别onnx模型|--build_project.sh:应用构建脚本|--CMakeLists.txt|--rpm:打包rpm时生成的目录,将存放rpm包所需数据|--rpm_copyothers.sh:rpm打包时的辅助脚本3.3 查看流程图vehicle_plate工程graph目录下存放流程图,默认的流程图vehicle_plate.toml与工程同名,其内容为(以Windows版ModelBox为例):anar_transpose device=cpu deviceid="0"] plate_normalize[type=flowunit flowunit=normalize device=cpu deviceid=0 standard_deviation_inverse="0.003921568627451,0.003921568627451,0.003921568627451"] plate_det[type=flowunit flowunit=plate_det device=cpu deviceid="0", batch_size=1] plate_det_post[type=flowunit, flowunit=plate_det_post, device=cpu, deviceid=0] plate_condition[type=flowunit, flowunit=condition, device=cpu, deviceid=0, key="plate"] expand_plate[type=flowunit, flowunit=expand_image, device=cpu, deviceid=0, img_h=48, img_w=168, key="plate"] ocr_color_transpose[type=flowunit flowunit=packed_planar_transpose device=cpu deviceid="0"] ocr_mean[type=flowunit flowunit=mean device=cpu deviceid="0" mean="149.94,149.94,149.94"] ocr_normalize[type=flowunit flowunit=normalize device=cpu deviceid=0 standard_deviation_inverse="0.020319,0.020319,0.020319"] plate_rec[type=flowunit flowunit=plate_rec device=cpu deviceid="0", batch_size=1] collapse_ocr[type=flowunit flowunit=collapse_ocr device=cpu deviceid="0"] draw_plate[type=flowunit, flowunit=draw_plate, device=cpu, deviceid=0] draw_track_bbox[type=flowunit, flowunit=draw_track_bbox, device=cpu, deviceid=0] draw_full_screen[type=flowunit, flowunit=draw_full_screen, device=cpu, deviceid=0] video_out[type=flowunit, flowunit=video_out, device=cpu, deviceid=0, full_screen=true] input1:input -> data_source_parser:in_data data_source_parser:out_video_url -> url_cfg:in_1 url_cfg:out_1 -> video_demuxer:in_video_url video_demuxer:out_video_packet -> video_decoder:in_video_packet video_decoder:out_video_frame -> letter_resize:in_image letter_resize:resized_image -> color_transpose:in_image color_transpose:out_image -> normalize:in_data normalize:out_data -> vehicle_det:input vehicle_det:output -> vehicle_det_post:in_feat letter_resize:out_image -> vehicle_det_post:in_image vehicle_det_post:out_feat -> object_tracker:in_feat object_tracker:out_track -> vehicle_condition:in_track video_decoder:out_video_frame -> vehicle_condition:in_image vehicle_condition:out_track -> expand_car:in_image expand_car:out_image -> plate_color_transpose:in_image plate_color_transpose:out_image -> plate_normalize:in_data plate_normalize:out_data -> plate_det:input plate_det:output -> plate_det_post:in_feat expand_car:out_image -> plate_det_post:in_image plate_det_post:out_tracks -> plate_condition: in_track vehicle_condition:out_track -> plate_condition: in_image plate_condition:out_track -> expand_plate:in_image expand_plate:out_image -> ocr_color_transpose:in_image ocr_color_transpose:out_image -> ocr_mean:in_data ocr_mean:out_data -> ocr_normalize:in_data ocr_normalize:out_data -> plate_rec:input plate_rec:output -> collapse_ocr:in_feat expand_plate:out_image -> collapse_ocr:in_image collapse_ocr:out_tracks -> draw_plate:in_feat plate_condition:out_track -> draw_plate:in_image draw_plate:out_image -> draw_track_bbox:in_image plate_condition:out_image -> draw_track_bbox:in_image draw_track_bbox:out_image -> draw_full_screen:in_image vehicle_condition:out_image -> draw_full_screen:in_image draw_full_screen:out_image -> video_out:in_video_frame}"""[flow]desc = "vehicle_plate run in modelbox-win10-x64"将流程图可视化:功能解释如下:灰色部分为预置功能单元绿色为一般通用功能单元红色为推理功能单元蓝色为条件功能单元黄色为展开归拢功能单元整个应用逻辑如下:视频解码后做图像预处理接着是车辆检测模型后处理得到车形框与128维车辆reid特征送入跟踪算法进行实时跟踪,经过条件功能单元判断,检测到车辆的图送入展开功能单元切图进行车牌检测,车牌检测结果归拢后同样要判断是否检测到车牌检测到车牌的帧再展开并行进行车牌识别,未检测到的则直接绘制车辆信息。 而未检测到车辆的帧则直接送入多路拼接功能单元,最终输出。3.4 核心逻辑本应用核心逻辑中的跟踪与区域判断,跟踪逻辑在object_tracker功能单元中,检测与跟踪使用的是FairMOT算法,算法介绍可参考论文。首先查看object_tracker功能单元中返回的跟踪对象结构:def get_tracking_objects(self, online_targets_dict): tracking_objects = {} for cls_id in range(self.num_classes): online_targets = online_targets_dict[cls_id] for t in online_targets: obj = {} tlwh = t.tlwh if tlwh[2] * tlwh[3] < self.min_box_area: continue tid = t.track_id obj["bbox"] = [max(0, tlwh[0]), max(0, tlwh[1]), tlwh[0] + tlwh[2], tlwh[1] + tlwh[3]] obj["licence"] = "" obj["licence_score"] = 0.0 obj["plate"] = np.zeros((4, 2)).tolist() obj["plate_score"] = 0.0 obj["bbox_score"] = t.score tracking_objects[tid] = obj return tracking_objects可以看到,我们返回的跟踪对象包括车型框、车辆检测得分等已有信息以及车牌、车牌得分、车牌框、车牌框得分等包含默认数据的占位信息,方便后续功能单元获取更新。从流程图中可以看到,object_tracker后结果送入车辆检测条件功能单元,同样的在流程图中还包含车牌检测条件功能单元,我们当然是希望使用同一个功能单元完成两个判断,所以在条件功能单元condition中,我们配置了参数key,默认为key = “bbox”,即对结构体中的车型框进行判断,具体实现为:if track_result and np.any([v.get(self.key) for k, v in track_result.items()]): buffer_img.set("track", track_json) out_track.push_back(buffer_img)else: buffer_img.set("track", track_json) out_image.push_back(buffer_img)这样的话如果是对车型框进行判断,只需要在流程图中配置key = “plate”即可。同样的,图展开功能单元expand_image也使用了同样的方法,使车辆检测与车牌检测可以共用功能单元:tracking_objects = json.loads(buffer_img.get("track"))for idx, target in tracking_objects.items(): box = np.array(target.get(self.key)) ...此外,由于本应用输入为4路视频,因此需要在url_cfg单元中进行session级别信息配置:url_str = str(self.count) + input_meta.get_private_string("source_url") self.count += 1data_context.get_session_context().set_private_string("multi_source_url", url_str)session级别的信息在功能单元之间是同步的,这样就可以在后续的功能单元中获取当前输入为哪路输入:url = data_context.get_session_context().get_private_string("multi_source_url")image_index = int(url[0])同样的,对于多路输入,我们需要在本地mock时在bin/mock_task.toml文件中进行输入配置:[input]type = "url"url = "${HILENS_APP_ROOT}/data/ruchang_10.mp4"[input1]type = "url"url = "${HILENS_APP_ROOT}/data/chuchang_10.mp4"[input2]type = "url"url = "${HILENS_APP_ROOT}/data/ruku_10.mp4"[input3]type = "url"url = "${HILENS_APP_ROOT}/data/kong_10.mp4"对于多路输入的感兴趣区域划定,我们使用content_file配置:[common]content_file = "../data/content_file.json"配置文件内容为:[ { "vehicle_area": "190,245,382,656,1265,630,956,249", "plate_area": "190,245,382,656,1265,630,956,249" }, { "vehicle_area": "663,467,228,675,994,682,1167,459", "plate_area": "663,467,228,675,994,682,1167,459" }, { "vehicle_area": "0,0,1280,0,1280,720,0,720", "plate_area": "0,0,1280,0,1280,720,0,720" }, { "vehicle_area": "0,0,1280,0,1280,720,0,720", "plate_area": "0,0,1280,0,1280,720,0,720" }]即针对不同输入配置各自的车型车牌感兴趣区域,在后续功能单元中获取配置的参数信息进行处理,如plate_det_post功能单元:self.areas = json.loads(data_context.get_session_config().get_string("iva_task_common"))url = data_context.get_session_context().get_private_string("multi_source_url")image_index = int(url[0])self.area = self.areas[image_index].get("plate_area")if self.area: self.area = np.array(list(map(int, self.area.split(",")))).reshape(-1, 1, 2).astype(np.int32)我们目前对于车型和车牌检测的参数配置是保持一致的,也可以配置为不同参数。3.5 三方依赖库本应用依赖scipy等工具包,ModelBox应用不需要手动安装三方依赖库,只需要配置在dependence\modelbox_requirements.txt,应用在编译时会自动安装。3.6 启动脚本执行应用在项目目录下执行.\bin\main.bat运行应用:.\bin\main.bat白线即配置的感兴趣区域,区域外/未过线车辆根据id赋色,区域内/已过线车辆的使用灰色框,可在输入输出配置中修改划区域任务类型与坐标点。总结AI寻车系统的搭建难点和挑战主要包括以下几个方面:数据采集和处理:需要收集大量的车辆数据,包括车型、颜色、车牌号码等信息,并对这些数据进行处理和分析,以便系统能够准确地识别和追踪车辆。图像识别和处理:需要使用先进的图像识别技术,对车辆的外观特征进行识别和分析,以便系统能够准确地识别车辆。实时性和准确性:需要保证系统能够实时地追踪车辆,并准确地识别车辆的位置和状态,以便及时采取措施。安全性和隐私保护:需要保护车主的隐私和车辆的安全,防止系统被黑客攻击或滥用。华为云ModelBox提供了一种快速、高效的模型部署方式,可以帮助开发者快速将训练好的模型部署到生产环境中,从而提高应用的响应速度和性能表现。同时,ModelBox还提供了多种部署方式和灵活的配置选项,可以满足不同场景下的需求。转载自:【愚公系列】华为云系列之基于ModelBox搭建的AI寻车系统
-
1.ModelBox是什么ModelBox是端边云统一的、高性能、高扩展、易用的AI推理开发框架,它可以帮助AI开发者快速完成从模型文件到AI推理应用的开发和上线工作,降低AI算法落地门槛,同时带来AI应用的高稳定性和极致性能。2.AI开发遇到的问题和解决方案一2.1 相关问题AI硬件主要有以下几种:GPU(图形处理器):GPU是一种高度并行的处理器,适合于处理大规模的数据并行计算,因此被广泛应用于深度学习等AI领域。FPGA(现场可编程门阵列):FPGA是一种可编程的硬件,可以根据需要重新配置其电路,因此适合于加速特定的计算任务,如卷积神经网络。ASIC(专用集成电路):ASIC是一种专门为某种特定应用而设计的芯片,可以提供高性能和低功耗,但是开发成本较高。CPU(中央处理器):CPU是一种通用的处理器,可以执行各种不同的计算任务,但是在处理大规模的数据并行计算时性能较差。TPU(张量处理器):TPU是一种专门为深度学习任务而设计的芯片,可以提供高性能和低功耗,但是只能用于特定的计算任务。AI 基础框架种类包括 TensorFlow、PyTorch、Keras、Caffe、MXNet 等。在如此多的AI硬件和基础框架会造成一系列问题:部署场景复杂,系统架构涉及端边云多种组合芯片、操作系统、推理框架纷繁多样2.2 解决方案ModelBox的特性(应用编排异构计算组件),它具有以下特性:支持多种异构计算组件,包括CPU、GPU、FPGA等。提供了灵活的应用编排能力,可以根据应用需求自由组合不同的计算组件。支持动态调度和资源管理,可以根据实际负载情况自动调整计算资源。具有高效的数据传输和通信能力,可以实现不同计算组件之间的数据交换和协同计算。总之,ModelBox是一种高性能、灵活、可扩展的应用编排异构计算组件,可以为各种应用提供强大的计算支持,缩短跨平台开发和部署成本,一次开发,端边云部署运行。3.AI开发遇到的问题和解决方案二3.1 相关问题AI应用性能优化确实是一个挑战,因为AI模型通常需要大量的计算资源和时间来训练和推理。但是,有许多技术可以用来优化AI应用的性能,例如使用更高效的算法、优化硬件和软件配置、使用分布式计算等。此外,还可以使用一些技术来减少模型的大小和复杂度,以提高性能。对于本案例中AI应用性能优化困难主要有:视频分析应用:多模型多模块,提高FPSHTTP服务:高并发,降低时延,提高吞吐量3.2 解决方案ModelBox的特性(高性能并发调度引擎):ModelBox是一个高性能并发调度引擎,它可以帮助开发者更高效地管理和调度任务,提高系统的并发能力和性能。它的特性包括:支持多种任务类型,支持任务优先级,支持任务依赖关系,支持任务超时控制,支持任务重试机制,支持任务状态监控和报告等。开发者无需掌握底层调度机制,也能保证应用优化效果。4.ModelBox的功能流程图:有向图,表达应用逻辑,控制ModelBox执行过程,采用GraphvizDOT语言进行表述功能单元:流程图中的顶点,应用的基本组成部分,ModelBox的执行单元,开发者主要开发的组件ModelBoxAI应用开发流程:流程图设计:定义业务流程,划分功能单元,理顺功能单元间的数据传递关系功能单元开发:采用框架已提供的通用功能单元,实现自己定义的业务功能单元运行与测试:使用图片、视频文件、实时视频流等测试应用5.ModelBox的其他特性预置视频处理、图像处理、HTTP服务等通用功能单元,缩短开发成本集成可视化编排服务,零代码体验AI应用开发6.ModelBox的应用场景华为云ModelBox的应用场景包括但不限于:机器学习、深度学习、自然语言处理、图像识别、智能推荐、数据分析等领域。它可以帮助企业快速构建和部署AI模型,提高数据的价值和利用率,实现智能化转型。
-
云养猪 - 猪只关键点检测关键点检测可用于猪只骨架提取、姿态识别、体重估计等多方面的研究,本文将基于ModelArts和ModelBox开发一个猪只关键点检测的AI应用,并将其部署到RK3568开发板上。视频链接:cid:link_4模型训练首先我们使用YOLOX训练了一个猪只目标检测模型,YOLOX是YOLO的无锚版本,设计更简单,且性能更好!它旨在弥合研究界和工业界之间的差距,详细内容可以参考Arxiv。我们使用猪只目标检测数据集进行训练,训练前对该数据集进行了图像增强,包含两类图像piglet、swine,拥有3065张jpg图像数据以及对应的xml标签文件,训练日志如下:之后利用TensorFlow开发一个猪只关键点检测模型,使用预训练网络MobileNetV2作为卷积基提取图像特征,模型训练与转换教程可以参考我们发布的Notebook:应用开发1、在VS Code中使用Remote-SSH远程连接RK3568开发板(算力:0.8Tops)2、下载ModelBox SDK插件安装运行3、查看技能模板,下载技能模板:single_hand_pose_yolox_mbv24、使用模板创建工程:single_pig_pose4.1、推理功能单元使用我们自己导出的模型进行替换并修改模型配置文件:4.2、修改条件功能单元的代码:4.3、修改通用功能单元代码和配置文件:4.4、修改模型配置文件并替换为我们自己开发的猪只关键点检测模型4.5、修改猪只关键点检测后处理功能单元和配置文件4.6、修改绘图功能单元代码5、查看流程图开启性能统计6、在bin/mock_task.toml配置输入输出,使用提前准备好的视频进行推理,选择推流到本地,执行bin/main.sh运行应用查看性能统计文件我们开发的应用平均每次推理(batch_size:4)耗时193 / 4 = 48ms,视频测试的帧率为1000 / 48 = 21fps,基本满足摄像头实时检测的要求。复现本案例所需资源(代码、模型、测试数据等)均可从single_pig_pose.zip获取。
-
我的配置如下所示,batch_size设置为了32。[graph] graphconf = """ digraph model_inference { ... model_infer [ type=flowunit flowunit=infer device=cpu batch_size="32" ]然后用并发为32的请求对推理容器做压测,在容器内打印batch size时发现长度只有16。为什么不能如设置的一样是大于16的batch呢?
-
1、ModelBox简介:(100分)完成截图:2、Windows开发套件环境准备:①安装Git for Windows(20分)②安装Python (20分)③安装Vscode(20分)已完成④设备注册(40分)完成截图:3、第一个应用(100分)4、推理功能单元:(100分)5、Steam数据功能单元(100分)6、展开/收拢功能单元:(100分)7、MNIST手写数字识别(200分)模型训练完成截图ModelArts训练:程序运行效果截图8、手写汉字识别(100分)9、验证码识别(200分)10、视频字幕识别(100分)11、AI倒车(200分)
上滑加载中
推荐直播
-
全面解析华为云EI-API服务:理论基础与实践应用指南
2024/11/29 周五 18:20-20:20
Alex 华为云学堂技术讲师
本期直播给大家带来的是理论与实践结合的华为云EI-API的服务介绍。从“主要功能,应用场景,实践案例,调用流程”四个维度来深入解析“语音交互API,文字识别API,自然语言处理API,图像识别API及图像搜索API”五大场景下API服务,同时结合实验,来加深开发者对API服务理解。
正在直播 -
企业员工、应届毕业生、在读研究生共探项目实践
2024/12/02 周一 19:00-21:00
姚圣伟 在职软件工程师 昇腾社区优秀开发者 华为云云享专家 HCDG天津地区发起人
大神带你一键了解和掌握LeakyReLU自定义算子在ONNX网络中应用和优化技巧,在线分享如何入门,以及在工作中如何结合实际项目进行学习
即将直播 -
昇腾云服务ModelArts深度解析:理论基础与实践应用指南
2024/12/03 周二 14:30-16:30
Alex 华为云学堂技术讲师
如何快速创建和部署模型,管理全周期AI工作流呢?本期直播聚焦华为昇腾云服务ModelArts一站式AI开发平台功能介绍,同时结合基于ModelArts 的实践性实验,帮助开发者从理论到实验更好地理解和使用ModelArts。
去报名
热门标签