香橙派 AIpro 评测与使用心得

引言

香橙派 AIpro(OrangePi AIpro)是一款尺寸小巧却功能强大的AI边缘设备,其仅有107*68mm的超小尺寸使得它在各种场景下都能轻松部署。它支持两种流行的操作系统,包括Ubuntu和openEuler,为用户提供了更多的选择和灵活性。在供电方面,采用了Type-C PD 20V IN接口,标准65W的供电能力确保了设备的稳定运行。

AI算力方面,香橙派 AIpro搭载了一颗性能强劲的4核64位处理器,再加上专用的AI处理器,总共提供了8TOPS的算力,为各种AI应用提供了充足的计算资源。而内存方面,用户可根据需求选择8GB或16GB的内存版本,内存速率高达3200Mbps,保证了数据的快速读写和处理能力。

在存储方面,香橙派 AIpro提供了多种选择,包括SPI FLASH、SATA/NVME SSD(M.2接口2280)、eMMC插槽等,用户可以根据需求选择不同性能和容量的存储设备,满足各种应用场景下的需求。同时,通讯模块方面,设备配备了Wi-Fi 5双频2.4G和5G、蓝牙BT4.2/BLE以及10/100/1000Mbps以太网收发器,为设备提供了多种联网方式,保证了稳定的网络连接和高速数据传输。

在显示方面,香橙派 AIpro支持多种显示接口,包括2xHDMI2.0 Type-A TX 4K@60FPS和1x2 lane MIPI DSI via FPC connector,用户可以根据需要连接不同的显示设备,满足各种显示需求。

总体来说,香橙派 AIpro以其小巧的尺寸、强大的性能和丰富的接口,为用户提供了一款多功能、易用的AI边缘设备,将在各种领域,包括自动驾驶、智能家居、工业控制等方面发挥重要作用。
在这里插入图片描述
在这里插入图片描述

开箱感受

这块开发板虽然体积小巧,却拥有丰富多样的接口,给人以惊喜。特别是其底部设计了M.2插槽和eMMC插槽,极大地扩展了其功能和应用范围。这种巧妙的设计使其成为开发者的利器,不论是快速原型开发还是复杂系统集成,都能轻松胜任。从而提高了开发效率,加速了产品上市时间,让创新更加便捷。此外,它的小巧体积还意味着更多的灵活性和便携性,能够适应各种场景和需求,为开发者带来更多可能性和惊喜。
在这里插入图片描述

拿到这块板卡后,我就迫不及待的将其上电并远程连接。首先需要远程登陆,远程登陆需要安装VNC。

# vnc安装
sudo apt update
sudo apt install xfce4 xfce4-goodies
sudo apt install tightvncserver

# 语言设置
sudo apt-get install xfonts-base

# 设置账号密码

# 设置开机自启动
mv ~/.vnc/xstartup ~/.vnc/xstartup.bak
vim ~/.vnc/xstartup
#!/bin/bash
xrdb $HOME/.Xresources
startxfce4 &
sudo chmod +x ~/.vnc/xstartup

# 启动vnc
vncserver

接着使用本地另外一台跟他在同一局域网下的Ubuntu系统电脑的VNC来连接。
在这里插入图片描述

开始测试

由于他是一款AI边缘设备,那么最重要的就是测试它在AI方面的性能,正好最近笔者也在研究关于实例分割方面的算法,就简单的运行一下我最近在使用的的算法吧!!!

YOLACT算法简介

YOLACT(You Only Look At CoefficienTs)是一种用于实时实例分割的算法,它结合了目标检测和语义分割的方法。由于采用了一些创新的技术,YOLACT在实时性和准确性上都取得了很好的平衡。它具有如下两大特点:

  • 实时性:YOLACT通过引入一些创新的技术来提高实时性,使得在GPU上可以达到30FPS的速度,这使得它非常适合用于视频分析等实时应用。
  • 准确性:尽管追求实时性,但YOLACT在准确性方面并未妥协,它在多个标准数据集上都取得了很好的分割结果。
  • 论文地址:https://arxiv.org/pdf/1912.06218.pdf
  • 论文代码:https://github.com/dbolya/yolact

YOLACT的主要想法是直接在one-stage目标检测算法中加入Mask分支,而不添加任何的RoI池化的操作,将实例分割分成两个并行的分支:

  • 使用FCN来生成分辨率较大的原型mask,原型mask不针对任何的实例。
  • 目标检测分支添加额外的head来预测mask因子向量,用于对原型mask进行特定实例的加权编码

最后取目标检测分支经过NMS后的实例,逐个将原型mask和mask因子向量相乘,再将相乘后的结果合并输出,其网络结构如图所示。
在这里插入图片描述

由于其具有上述两大特性,其具有应用领域

  • 视频分析:由于其实时性,YOLACT适用于视频实例分割任务,如实时视频监控、自动驾驶等。
  • 图像分析:YOLACT也可以用于静态图像的实例分割,如医学图像分析、工业检测等领域。

在本文中,我们将其应用在自动驾驶场景中动态车辆的分割中。

算法运行

首先通过Yolact官方配置来安装运行Yolact所需要的依赖,接着下载其预训练权重,通过如下代码进行推理:

python eval.py --trained_model=weights/yolact_base_54_800000.pth --score_threshold=0.15 --top_k=15 --image=my_image.png

注意修改对应的权重和图像为自己的权重和图像路径。

其eval的代码如下:

def evaluate(net:Yolact, dataset, train_mode=False):
    net.detect.use_fast_nms = args.fast_nms
    net.detect.use_cross_class_nms = args.cross_class_nms
    cfg.mask_proto_debug = args.mask_proto_debug

    # TODO Currently we do not support Fast Mask Re-scroing in evalimage, evalimages, and evalvideo
    if args.image is not None:
        if ':' in args.image:
            inp, out = args.image.split(':')
            evalimage(net, inp, out)
        else:
            evalimage(net, args.image)
        return
    elif args.images is not None:
        inp, out = args.images.split(':')
        evalimages(net, inp, out)
        return
    elif args.video is not None:
        if ':' in args.video:
            inp, out = args.video.split(':')
            evalvideo(net, inp, out)
        else:
            evalvideo(net, args.video)
        return

    frame_times = MovingAverage()
    dataset_size = len(dataset) if args.max_images < 0 else min(args.max_images, len(dataset))
    progress_bar = ProgressBar(30, dataset_size)

    print()

    if not args.display and not args.benchmark:
        # For each class and iou, stores tuples (score, isPositive)
        # Index ap_data[type][iouIdx][classIdx]
        ap_data = {
            'box' : [[APDataObject() for _ in cfg.dataset.class_names] for _ in iou_thresholds],
            'mask': [[APDataObject() for _ in cfg.dataset.class_names] for _ in iou_thresholds]
        }
        detections = Detections()
    else:
        timer.disable('Load Data')

    dataset_indices = list(range(len(dataset)))
    
    if args.shuffle:
        random.shuffle(dataset_indices)
    elif not args.no_sort:
        # Do a deterministic shuffle based on the image ids
        #
        # I do this because on python 3.5 dictionary key order is *random*, while in 3.6 it's
        # the order of insertion. That means on python 3.6, the images come in the order they are in
        # in the annotations file. For some reason, the first images in the annotations file are
        # the hardest. To combat this, I use a hard-coded hash function based on the image ids
        # to shuffle the indices we use. That way, no matter what python version or how pycocotools
        # handles the data, we get the same result every time.
        hashed = [badhash(x) for x in dataset.ids]
        dataset_indices.sort(key=lambda x: hashed[x])

    dataset_indices = dataset_indices[:dataset_size]

    try:
        # Main eval loop
        for it, image_idx in enumerate(dataset_indices):
            timer.reset()

            with timer.env('Load Data'):
                img, gt, gt_masks, h, w, num_crowd = dataset.pull_item(image_idx)

                # Test flag, do not upvote
                if cfg.mask_proto_debug:
                    with open('scripts/info.txt', 'w') as f:
                        f.write(str(dataset.ids[image_idx]))
                    np.save('scripts/gt.npy', gt_masks)

                batch = Variable(img.unsqueeze(0))
                if args.cuda:
                    batch = batch.cuda()

            with timer.env('Network Extra'):
                preds = net(batch)
            # Perform the meat of the operation here depending on our mode.
            if args.display:
                img_numpy = prep_display(preds, img, h, w)
            elif args.benchmark:
                prep_benchmark(preds, h, w)
            else:
                prep_metrics(ap_data, preds, img, gt, gt_masks, h, w, num_crowd, dataset.ids[image_idx], detections)
            
            # First couple of images take longer because we're constructing the graph.
            # Since that's technically initialization, don't include those in the FPS calculations.
            if it > 1:
                frame_times.add(timer.total_time())
            
            if args.display:
                if it > 1:
                    print('Avg FPS: %.4f' % (1 / frame_times.get_avg()))
                plt.imshow(img_numpy)
                plt.title(str(dataset.ids[image_idx]))
                plt.show()
            elif not args.no_bar:
                if it > 1: fps = 1 / frame_times.get_avg()
                else: fps = 0
                progress = (it+1) / dataset_size * 100
                progress_bar.set_val(it+1)
                print('\rProcessing Images  %s %6d / %6d (%5.2f%%)    %5.2f fps        '
                    % (repr(progress_bar), it+1, dataset_size, progress, fps), end='')

        if not args.display and not args.benchmark:
            print()
            if args.output_coco_json:
                print('Dumping detections...')
                if args.output_web_json:
                    detections.dump_web()
                else:
                    detections.dump()
            else:
                if not train_mode:
                    print('Saving data...')
                    with open(args.ap_data_file, 'wb') as f:
                        pickle.dump(ap_data, f)

                return calc_map(ap_data)
        elif args.benchmark:
            print()
            print()
            print('Stats for the last frame:')
            timer.print_stats()
            avg_seconds = frame_times.get_avg()
            print('Average: %5.2f fps, %5.2f ms' % (1 / frame_times.get_avg(), 1000*avg_seconds))

    except KeyboardInterrupt:
        print('Stopping...')

最后得到我们的输出结果如下图所示。
在这里插入图片描述

为了进一步测试其性能,我们将其转换为ONNX模型并测试其推理延迟,
在这里插入图片描述
经过5次测试取平均,发现运行压缩后的KITTI数据集的推理延迟约为18ms。

总结

OrangePi AIpro的强大性能和适用性在自动驾驶领域将会有更广泛的应用。以下是一些关键点的总结:

  1. 实时性和流畅性:OrangePi AIpro在边缘部署中展现了出色的实时检测性能,即使在640x640的分辨率下也能够实现流畅的视频处理。这对于自动驾驶领域至关重要,因为实时的目标检测和跟踪是确保车辆安全和精准导航的基础。
  2. 边缘计算的潜力:以前人们普遍认为在工业场景下实现实时检测需要强大的GPU支持,但OrangePi AIpro的出现改变了这一观念。它展示了即使在边缘设备上也能够实现高性能的深度学习推理,这对于自动驾驶系统而言非常具有吸引力,因为车载设备通常有限的计算资源。
  3. 适用于多种场景:自动驾驶领域涉及多种场景和任务,包括交通标志识别、车辆检测与跟踪、行人识别、车道线检测等。OrangePi AIpro的性能表现以及边缘计算的优势使得它可以广泛应用于这些场景,为自动驾驶系统提供关键的感知和决策支持。
  4. 低功耗设计:OrangePi AIpro采用了低功耗设计,这对于自动驾驶系统而言尤为重要。在车辆上运行的设备需要尽可能地节省能源,以延长电池续航时间或者减少对车辆电力系统的负荷。OrangePi AIpro的低功耗设计使得它在自动驾驶系统中具有较大的优势。
  5. 开发和部署的便利性:OrangePi AIpro提供了丰富的开发工具和支持,使得开发人员能够快速构建和部署自动驾驶系统。其友好的用户界面和丰富的文档资料进一步降低了开发和部署的门槛,使更多的开发者能够参与到自动驾驶技术的研究和应用中来。

综上所述,OrangePi AIpro作为一款强大的边缘计算设备,在自动驾驶领域具有广泛的应用前景。它的高性能、低功耗、易用性等特点使得它成为自动驾驶系统中不可或缺的重要组成部分,能够为自动驾驶技术的发展和应用带来新的活力和可能性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/705566.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Windows同一文件夹下支持大小写同名文件

举例&#xff1a;同一文件目录下需要存在A.java, a.java, Windows是不支持的&#xff0c;这时候需要建一个Linux子系统的文件夹 创建教程 1、在启用或关闭Windows功能下面找到 适用于Linux系统的Windows子系统 2、cmd 执行命令 fsutil file SetCaseSensitiveInfo 文件夹路径 …

新注册与新核准有什么区别?在哪可以找到新注册新核准的企业名单?

新注册&#xff1a;指的是公司刚刚完成工商注册登记&#xff0c;成为法律意义的经营实体。 新核准&#xff1a;指的是企业通过证券监管机构的审核&#xff0c;获得公开发行股票或债券的资格。 注册主要关注企业的基本资质和合规性&#xff0c;而核准是已经注册的公司进行财务…

【React】如何使用npm run start命令运行两个服务

我们开发前端项目时&#xff0c;有时候需要本地 mock 数据&#xff0c;这样就需要启动两个服务&#xff0c;一个是接口服务&#xff0c;一个是前端项目。可以安装一个插件来帮助我们通过一个命令启动两个服务。 方法一 添加& npm run server 注意&#xff1a;Windows系统…

人脸匹配——OpenCV

人脸匹配 导入所需的库加载dlib的人脸识别模型和面部检测器读取图片并转换为灰度图比较两张人脸选择图片并显示结果比较图片创建GUI界面运行GUI主循环运行显示全部代码 导入所需的库 cv2&#xff1a;OpenCV库&#xff0c;用于图像处理。 dlib&#xff1a;一个机器学习库&#x…

用Python绘制yolo训练结果比较图-论文需要

代码内容来自于网络用博客记录 利用训练生成的result.csv中数据&#xff0c;形成多模型的比较图。 代码中演示的是map50、map50-95、losss的比较图 import matplotlib.pyplot as plt import pandas as pd import numpy as npif __name__ __main__:# 列出待获取数据内容的…

webstorm自定义vue模板

<!--* Description: ${COMPONENT_NAME} 页面* Author: * Date: ${DATE} --> <template><div>${COMPONENT_NAME} </div> </template><script> export default {name: "${COMPONENT_NAME}",components: {},data() {return {};},co…

【数据结构】单链表(C语言)

在数据结构和算法中&#xff0c;链表是一种常见的数据结构&#xff0c;它由一系列节点组成&#xff0c;每个节点包含数据和指向下一个节点的指针。在C语言中&#xff0c;我们可以使用指针来实现单向链表。下面将详细讲述如何利用C语言实现单向链表。 1.单链表的概念和结构 概…

Yolo-World训练过程中使用wandb进行可视化

训练过程可视化有两种方式&#xff1a;wandb和tensorboard&#xff0c;这里我采用的是wandb&#xff0c;想要在训练过程中调用wandb只需要在要训练的配置文件&#xff08;如yolo_world_v2_l_vlpan_bn_sgd_1e-3_40e_8gpus_finetune_coco.py&#xff09;中加上一行代码即可&#…

美业门店管理系统Java源码分享-【库存管理】的功能和作用

美业收银系统在美容行业中的作用和重要性体现在提高管理效率、提升客户满意度、降低成本、促进业务增长等方面。它为连锁美业提供了一个全面的管理工具&#xff0c;能够更好地应对市场挑战&#xff0c;提升竞争力。 美业系统中的【库存管理】在整个美容行业中起着非常重要的作…

【机器学习】以DIFY为例分享一种使用dockerhub镜像的方法

目录 一、引言 二、Dify在dockerhub被禁用后&#xff0c;如何部署、升级 2.1 网络及硬件条件 2.2 docker部署、升级方案 三、总结 一、引言 关于dify&#xff0c;之前力推过&#xff0c;大家可以跳转 AI智能体研发之路-工程篇&#xff08;二&#xff09;&#xff1a;Dify…

LayUI使用(二)处理表格会出现下拉框的问题

一、问题描述 如下&#xff0c;layui的表格渲染后&#xff0c;当鼠标悬停在表格项时会出现右侧的下拉框&#xff0c;layui版本较老&#xff0c;原因未知 二、处理办法 在cols里面加上width&#xff0c;也不用每个都加&#xff0c;加一部分表格项即可 注意&#xff1a;若想禁止…

18. 四数之和 - 力扣

1. 题目 给你一个由 n 个整数组成的数组 nums &#xff0c;和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] &#xff08;若两个四元组元素一一对应&#xff0c;则认为两个四元组重复&#xff09;&#xff1a; 0 …

# RocketMQ 实战:模拟电商网站场景综合案例(十一)

RocketMQ 实战&#xff1a;模拟电商网站场景综合案例&#xff08;十一&#xff09; 一、RocketMQ 实战&#xff1a;模拟电商网站场景综合案例-- web 端项目开发 1、在 shop-order-web 工程模块中&#xff0c;创建 Controller 类 OrderControllre.java /*** shop\shop-order…

ABB光纤控制单元NDBU-95 64008366D

ABB光纤控制单元NDBU-95 64008366D 控制单元&#xff08;Control Unit&#xff09;负责程序的流程管理。正如工厂的物流分配部门&#xff0c;控制单元是整个CPU的指挥控制中心&#xff0c;由指令寄存器IR(Instruction Register)、指令译码器ID(Instruction Decoder)和操作控制…

easyexcel的简单使用(execl模板导出)

模板支持功能点 支持列表支持自定义头名称支持自定义fileName支持汇总 模板示例 操作 pom引入 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>${easyexcel.version}</version></dep…

【Python】教你彻底了解Python中的数据科学与机器学习

​​​​ 文章目录 一、数据科学的基本概念1. 数据收集2. 数据清洗3. 数据分析4. 数据可视化5. 机器学习 二、常用的数据科学库1. Pandas1.1 创建Series和DataFrame1.2 数据操作 2. NumPy2.1 创建数组2.2 数组操作 3. Scikit-learn3.1 数据预处理3.2 特征工程 三、数据预处理与…

力扣每日一题 6/13 反悔贪心算法

博客主页&#xff1a;誓则盟约系列专栏&#xff1a;IT竞赛 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 2813.子序列最大优雅度【困难】 题目&#xff1a; 给你一个长度为 n 的二…

vue技巧(十)全局配置使用(打包后可修改配置文件)

1、背景 vue打包目前主流用的有webpack和vite两种&#xff0c;默认用的webpack。&#xff08;二者的区别大家可以各自上网查&#xff0c;我没用过vite&#xff0c;所以不过多介绍&#xff09;vue通过webpack打包后&#xff0c;源码会被压缩&#xff0c;但一些关键配置可…

Redis高级特性和应用:慢查询、Pipeline、事务、Lua

Redis提供了许多高级特性&#xff0c;可以帮助优化和管理系统性能。本文将介绍Redis的慢查询、Pipeline、事务和Lua脚本的使用及其相关配置。 Redis的慢查询 慢查询日志是开发和运维人员定位系统慢操作的重要工具。Redis也提供了类似的功能&#xff0c;通过记录超过预设阀值的…

C# WPF入门学习主线篇(三十四)—— 图形和动画

C# WPF入门学习主线篇&#xff08;三十四&#xff09;—— 图形和动画 图形和动画是WPF的重要组成部分&#xff0c;能够大幅提升应用程序的用户体验。本篇博客将详细介绍WPF中图形和动画的使用方法&#xff0c;涵盖基本图形绘制、动画创建及多媒体的应用。通过本文&#xff0c;…