• [技术干货] 苹果发布AI眼镜与空间计算:开启全新的交互体验时代
    在科技飞速发展的今天,苹果公司再次以其前瞻性的眼光和强大的研发实力,为我们带来了全新的AI眼镜与空间计算技术。这一创新不仅将重新定义我们与数字世界的交互方式,更预示着未来智能生活的新篇章。首先,让我们来探讨一下苹果的AI眼镜。这款眼镜融合了最先进的人工智能技术,能够实时识别用户的动作、语音和情绪,从而提供更加个性化、智能化的服务。无论是查询信息、导航路线,还是进行语音通话,AI眼镜都能以更加自然、便捷的方式满足用户的需求。同时,通过内置的传感器和摄像头,AI眼镜还能够实时监测用户的健康状况,如心率、血压等,为用户的健康保驾护航。而空间计算技术则是苹果AI眼镜的另一大亮点。空间计算通过精确测量和解析三维空间信息,实现了对现实世界的数字化映射。这意味着,用户可以通过AI眼镜看到虚拟物体与现实世界的完美融合,体验到前所未有的沉浸式交互。无论是游戏、教育还是工作,空间计算都将为我们带来更加丰富的视觉体验和更高效的工作流程。此外,苹果AI眼镜与空间计算技术的结合,还将催生出更多创新的应用场景。例如,在医疗领域,医生可以通过AI眼镜远程查看患者的身体状况,进行精准的诊断和治疗;在旅游领域,游客可以通过AI眼镜了解景点的历史文化和背景信息,获得更加丰富的旅游体验;在教育领域,学生可以通过AI眼镜与虚拟教师进行互动学习,提高学习效果和兴趣。当然,任何新技术的推出都不可避免地会面临一些挑战和质疑。例如,隐私保护、数据安全等问题都需要得到充分的重视和解决。但相信以苹果公司的实力和经验,这些问题都将得到有效的解决。总的来说,苹果发布的AI眼镜与空间计算技术无疑为我们打开了一扇通往未来智能生活的大门。它将改变我们与数字世界的交互方式,为我们带来更加便捷、高效、丰富的体验。随着技术的不断进步和应用场景的不断拓展,我们有理由相信,未来的智能生活将更加美好和精彩。
  • [问题求助] yolov5成功安装算法App,但检测不出来结果,有没有一个嵌入成功并且可检测的模型,需要排查一下问题。
     什么报错的信息都没有,就是检测框不出来。
  • [优秀实践] 基于ModelArts实现目标物体检测
    基于ModelArts实现目标物体检测模型训练和部署。本实验将提供一个“找云宝”样例(“云宝”是华为云的吉祥物),帮助用户快速熟悉ModelArts自动学习的使用过程。通过预置的图像数据集,自动训练并生成检测模型,同时将生成的模型部署为在线服务。部署完成后,用户可通过在线服务识别输入图片是否包含目标物体。实现流程1.准备环境和创建OBS桶2.准备数据3.创建物体检测项目4.数据标注5.自动训练,生成模型6.将模型部署上线为在线服务7.发起检测 1创建OBS桶和目录进入方式,“控制台”->“服务列表”->“存储”->“对象存储服务”,页面右上角点击“创建桶”按钮进入创建页面。什么是OBS?对象存储服务(Object Storage Service,OBS)是一个基于对象的海量存储服务,为客户提供海量、安全、高可靠、低成本的数据存储能力,包括:创建、修改、删除桶,上传、下载、删除对象等。1.2 OBS桶设置OBD桶设置参数如下:区域:华北桶名称:自定义(注意:此名称会在后续步骤使用)我将此处的桶名称取为yuntest-modelarts存储类别:标准存储桶策略:私有归档数据直读:开启多AZ:开启点击"立即创建",完成创建1.4创建文件夹点击刚创建的桶名称,进入详情页左侧栏选择“对象”,点击“新建文件夹”,在弹出的新建窗口中:文件夹名称:自定义(此名称会在后续步骤中使用)我将此处的文件夹名称取为dataset-yun点击“确定”完成添加1.5服务授权由于创建自动学习项目需要使用数据管理功能,在开始使用前,需为数据管理模块获取访问OBS权限。在ModelArts管理控制台,进入“数据管理->数据集”页面,单击“服务授权”由具备授权的账号“同意授权”后,即可正常使用:22.1准备数据ModelArts在公共OBS桶中提供了云宝的示例数据集,命名为“Yunbao-Data-Custom”,因此,本文的操作示例使用此数据集进行模型构建。关于数据集的下载您可以在华为云搜索栏,搜索Yunbao-Data-Custom即可获取下载资源:2.2数据解压在本地,将“Yunbao-Data-Custom.zip”压缩包解压。例如,解压至本地“Yunbao-Data-Custom”文件夹下。2.3数据上传按照步骤1操作进入对象存储服务:点击创建的好的桶yuntest-modelarts,进入“对象”页面:再次点击文件夹dataset-yun,在文件夹中选择“上传对象”将步骤2.1下载的本地数据集中的文件夹拖拽至上传对象框中,点击上传即可:点击上传即可完成本地到云端的数据上传:33.1创建物体检测项目进入ModelArts管理控制台主页,单击左侧导航栏“自动学习”添加步骤1保存的访问密钥文件中的密钥:在“物体检测”方框中单击“创建项目”在“创建物体检测项目”页面中,填写“项目名称”、“数据集名称”选择“数据集输入位置”云宝数据集OBS路径为“/yuntest-modelarts/dataset-yun/train/”“数据集输出位置”选择一个空目录如“/yuntest-modelarts/dataset-yun/output/”添加标签集为“yunbao”44.1数据标注数据标注,针对物体检测项目,即在已有数据集图像中,标注出物体位置,并为其打上标签。标注好的数据用于模型训练。云宝数据集中,已标注部分数据,还有部分数据未标注,用户可以选择未标注数据进行手动标注。自动学习项目创建时,会自动执行数据源同步操作。由于数据源同步需要一定时间,如果出现同步失败,可单击“同步数据源”手动执行。在“自动学习->数据标注”页面单击“未标注”页签,此页面展示所有未标注的图片数据。单击任意一张图片,进入图片标注界面。用鼠标框选图片中的云宝所在区域,然后在弹出的对话框中输入标签名称,例如此示例中的“yunbao”,按“Enter”键完成此图片的添加。标注完成后,左侧图片目录中此图片的状态将显示为“已标注”用户可以在下方图片目录中,选择其他图片,重复上述操作继续进行图片标注。如果一张图片有多个云宝,用户可以标注多处。建议将数据集中所有图片都标注完成,这样能得到一个效果比较好的模型。55.1自动训练,生成模型 本次实验由于作者网速问题,只标注了24张图片,建议用户全部标注完成后再选择右侧的开始训练点击开始训练,设置训练参数:单击“确定”开始模型的自动训练。深度学习训练时间相对较长,建议用户耐心等待。如果关闭或退出此页面,系统仍然在执行训练操作。训练完成后,用户可以在界面中查看训练详情,如 “准确率”“评估结果”“训练参数”“分类统计表”等66.1将模型部署上线为在线服务 在“模型训练”页签中,待训练状态变为“已完成”,单击“版本管理”区域中的“部署”。在弹出的部署设置对话框中,选择“计算节点规格”,设置“自动停止”功能,单击“确定”开始将物体检测模型部署上线为在线服务。如果选择免费规格,则不需要设置“自动停止”功能,1小时之后自动停止。启动部署上线后,系统自动跳转至部署上线页面。此页面将呈现模型部署上线的进度和状态。部署上线将耗费较多时间,请您耐心等待。部署完成后,版本管理区域的状态将变更为“运行中”。77.1发起检测模型部署完成后,用户可添加图片进行检测,在“部署上线”界面,选择状态为“运行中”的服务版本,在“服务测试”区域单击“上传”检测图片进行检测。测试1测试2测试3至此实验全部完成。最后大家使用的云端资源记得全部删除如对象存储服务创建的桶,文件夹;ModelArts创建的数据集,部署的模型等都需要删除,并停用访问密钥,以免造成不必要的花费。通过对实验结果的比对,可以看出利用[华为云ModelArts]训练出来的目标物体识别模型是很棒的,六个字总结就是-高效,快捷,省心。
  • [技术干货] opencv消除图像水印
    原本链接cid:link_0问题:原本代码局限:只能处理黑白图片改进方法:将初始水印消除后的图片作为标签,再次进行分割(如果是黑色就保留原图像素,如果没有就消除)import cv2 import numpy as np import matplotlib.pyplot as plt def enable_color(rgb_image,check_image): # h, w = rgb_image.shape[:2] for i in range(0, h - 1): for j in range(0, w - 1): if check_image[i][j] == 255: for k in range(3): rgb_image[i][j][k] = 255 return rgb_image if __name__ =='__main__': img_path = "1.jpg" im = cv2.imread(img_path) gray = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY) background = gray.copy() for i in range(1,5): kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(2*i+1,2*i+1)) # print('kernel size is ',kernel) background = cv2.morphologyEx(background,cv2.MORPH_CLOSE,kernel) background = cv2.morphologyEx(background,cv2.MORPH_CLOSE,kernel) diff = background - gray # 计算差距 # cv2.namedWindow('diff',cv2.WINDOW_FREERATIO) # 获取图像中前景背景之差 # cv2.imshow('diff',background) # 阈值分割获取黑色字体 _,bw = cv2.threshold(diff,0,255,cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU) # 阈值分割获取黑色区域 # cv2.namedWindow('bw_before', cv2.WINDOW_FREERATIO) # cv2.imshow('bw_before', bw) _,dark = cv2.threshold(background,0,255,cv2.THRESH_BINARY_INV|cv2.THRESH_OTSU) darkpix = cv2.countNonZero(dark)# 获取 dark非0d图像像素个数 darkpix = [0]*darkpix index = 0 # cv2.namedWindow('gray', cv2.WINDOW_FREERATIO) # cv2.imshow('gray', gray) for r in range(dark.shape[0]): for c in range(dark.shape[1]): if(dark[r][c]): darkpix[index] = gray[r][c] index = index +1 # 阈值分割 dark 区域 因此我们在里面得到更深的像素 darkpix = np.array(darkpix) _,darkpix = cv2.threshold(darkpix,0,255,cv2.THRESH_BINARY | cv2.THRESH_OTSU) # cv2.namedWindow('darkpix', cv2.WINDOW_FREERATIO) # cv2.imshow('darkpix', darkpix) # 把 取到的像素粘贴到 其渠道的 darker pixels # cv2.namedWindow('dark',cv2.WINDOW_FREERATIO) # cv2.imshow('dark',dark) index = 0 for r in range(dark.shape[0]): for c in range(dark.shape[1]): if (dark[r][c]): bw[r][c] = darkpix[index] index = index +1 # cv2.namedWindow('bw',cv2.WINDOW_FREERATIO) # cv2.imshow('bw',bw) out=enable_color(im, bw) # cv2.namedWindow('out',cv2.WINDOW_FREERATIO) # cv2.imshow('out',out) cv2.imwrite(filename="77__.jpg", img=bw) cv2.imwrite(filename="77__5.jpg",img=out) # cv2.waitKey(0)
  • [云实验室] 基于华为云自动学习的垃圾分类图像识别系统
    一、简介本项目主要运用华为云 EI 的 ModelArts 的自动学习以及云对象存储的 OBS,实现简单的垃圾分类系统。二、内容描述本垃圾分类图像识别系统主要通过创建图像分类自动学习项目,进行数据标注,进行自动训练和部署测试,再到最后的结束测试。 三、主要流程四、图像分类任务介绍ModelArts 服务之自动学习图像分类项目,是对图像进行检测分类。添加图片并对图像进行分类标注,每个分类识别一种类型的图像。完成图片标注后开始自动训练,即可快速生成图像分类模型。可应用于商品的自动识别、运输车辆种类识别和残次品的自动检测。例如质量检查的场景,则可以上传产品图片,将图片标注“合格”、“不合格”,通过训练部署模型,实现产品的质检。五、系统创建1、创建项目2、添加图片3、数据标注进行“一次性快餐盒-其他垃圾” 的数据标注。 先将左下角的数字选择为 45, 点击图片选择同类的图片(一次可以选择一张或者多张),在标签名栏填写当前选择图片的标签(已有的标签可以直接选择) , 输入标签名, 点击确定。4、自动训练5、部署测试预测结果:
  • [大赛资讯] 2023华为开发者大赛 北京赛区招募正式打响
    2023华为开发者大赛 随 华为开发者大会北京分会场活动走进北京信息职业技术学院!北京赛区招募正式打响!期待北京赛区的企业及学生团队带来的优秀参赛作品!2023让我们继续实现无限创新,创造无限价值!
  • [问题求助] 固定区域的图像识别
    使用RPA里的图像识别的控件时,它识别的是整个图片中所有的内容,怎么让他只识别图片的固定范围内的内容呢?
  • [调试调优] mindspore.ops.value_and_grad求梯度花费时间很久正常吗?
    Epoch: [2][0/98], Time 62.016607, Data 0.979176 Loss 4.791955 Prec@1 10.742188 Prec@5 49.804688 forward time: 3.8906619548797607forward time: 6.2228193283081055grad time: 56.18103861808777accuracy time: 0.010275602340698242optimizer time: 0.07999753952026367
  • [其他] 新NeRF 场景模型
    ClimateNeRF 将物理模拟与 NeRF 场景模型融合在一起,制作出逼真的气候变化影响视频。下面将举一个简单的例子来说明在该方法中组件如何实现交互:假设现在要建立一个秋天洪水泛滥场景的模型。研究者首先获取图像,应用 Fall 风格,并根据结果构建出 NeRF。然后使用 NeRF 中的几何信息来计算水面。这可以用密度场、颜色场以及法线和 BRDF 表征来表示。最后为了渲染,我们用光线来查询模型。研究者编辑 NeRF 的密度和颜色函数来表示烟雾等效果,并截取光线来表示镜面效应。如果一条光线首先在 NeRF 中遇到高密度,那么会对这条光线使用 NeRF integral;但如果第一次碰撞是在水面,则光线会被反射到水面,然后用反射光线查询 NeRF。人们往往难以从日积月累的小变化中推导出实质性的结果,所以对于大多数人而言,将气候变化所产生的影响具像化也并非易事。减缓二氧化碳排放(比如减少化石燃料的使用)或弱化其环境影响(比如建立防洪措施)等的成本往往是人尽皆知的高昂,而其所能带来的收益却看似虚无缥缈、遥遥无期。如果无法将效果具像化,那么这些措施的投用也将举步维艰。本文中,来自 UIUC、马里兰大学帕克分校的研究者展示了如何将物理模拟(产生很好的天气效果预测,但只有中分辨率图像)与神经辐射场(产生 SOTA 场景模型,但据悉从未与物理模拟一起使用)合并使用。传统物理模拟可以在传统图形 pipeline 中为 3D 场景模拟出真实的天气效果,但这些方法基于传统的多边形模型,而构建能从单个场景的多个图像中产生逼真渲染的多边形模型仍具有挑战性。神经辐射场(NeRFs)可以从少量图像中生成逼真的 3D 场景模型。论文地址:https://arxiv.org/pdf/2211.13226.pdf研究者推出了一个 ClimateNeRF,它可以渲染出真实的天气效果,包括雾霾、雪和洪水。渲染效果和在画面上看到的一致,因此生成的影片往往令人信服。从更高的层面来看,研究者调整了场景图像以反映整体物理效果,并根据调整后的图像构建了场景的 NeRF 模型;接着复原了一个近似的几何表示,并在该几何中应用物理模拟;最后使用全新的光线追踪器进行渲染。调整图像这一步很重要。比方在冬天,树木图像的饱和度往往较低。研究者在一个 NGP 框架中使用一种新颖的风格迁移方法,它可以在不改变场景几何的情况下获得全局效果。光线追踪器通过在渲染过程中仔细考虑光线效果将物理模型和 NeRF 模型相融合,例如一条眼球射线可能首先遇到高密度的 NeRF(因此返回通常的结果)或者它可以击中插入的水面(因此被反射以再次查询模型)。研究者展示了 ClimateNeRF 在 Tanks and Temple、MipNeRF360 和 KITTI-360 数据集中不同 3D 场景的适用性,同时与 stable diffusion inpainting、ClimateGAN 等 SOTA 2D 图像编辑方法以及与 SOTA 3D NeRF stylization 的对比。定性和定量研究结果都表明,ClimateNeRF 的模拟结果明显较同类方法更加真实。此外,本文还展示了这种物理启发方法的可控性,可以改变水位、风力和方向,以及雪和雾霾的厚度和浓度。ClimateNeRF 方法可以做到:让视图保持一致(这也是可以用来制作影片的原因,这在逐帧合成中很难做到)、逼真的超级现实主义(场景是一个 NeRF 表示)、并且是可控的(用户可以在模拟中调整物理参数)。如下图 1 所示,生成的照片逼真、符合常理且具备时间一致性。
  • [分享交流] AI绘画作品《采花》
    一名身穿白色连衣裙的少女正在伸手采花,她动作轻柔,姿态款款,眼眸低垂。
  • [通用服务] 【AI使能】图像识别Image
    图像识别(Image Recognition),基于深度学习技术,可准确识别图像中的视觉内容,提供多种物体、场景和概念标签,具备目标检测和属性识别等能力,帮助客户准确识别和理解图像内容。分类文档链接备注最新动态cid:link_5 应用场景cid:link_2 API参考cid:link_3 FAQcid:link_4 华为云在线课程图像识别服务https://education.huaweicloud.com/courses/course-v1:HuaweiX+CBUCNXE025+Self-paced/about?isAuth=0&cfrom=hwc图像识别,基于深度学习技术,可准确识别图像中的视觉内容,提供数万种物体、场景和概念标签,具备目标检测和属性识别等能力,帮助客户准确识别和理解图像内容。图像处理理论、应用与实验https://education.huaweicloud.com/courses/course-v1:HuaweiX+CBUCNXE175+Self-paced/about?isAuth=0&cfrom=hwc计算机视觉是深度学习领域最热门的研究领域之一,它衍生出了一大批快速发展且具有实际作用的应用,包括人脸识别、图像检测、目标监测以及智能驾驶等。这一切本质都是对图像数据进行处理,本课程就图像处理理论及相应技术做了介绍,包括传统特征提取算法和卷积神经网络,学习时注意两者的区别。华为云开发者网图像识别 Image开放能力cid:link_6 
  • [技术干货] pix2pix图像风格迁移
    pix2pix论文链接: cid:link_3图像处理的很多问题都是将一张输入的图片转变为一张对应的输出图片,比如灰度图、梯度图、彩色图之间的转换等。通常每一种问题都使用特定的算法(如:使用CNN来解决图像转换问题时,要根据每个问题设定一个特定的loss function 来让CNN去优化,而一般的方法都是训练CNN去缩小输入跟输出的欧氏距离,但这样通常会得到比较模糊的输出)。这些方法的本质其实都是从像素到像素的映射。于是论文在GAN的基础上提出一个通用的方法:pix2pix 来解决这一类问题。通过pix2pix来完成成对的图像转换(Labels to Street Scene, Aerial to Map,Day to Night等),可以得到比较清晰的结果。注意事项:使用框架**:** PyTorch1.4.0使用硬件**:** 8 vCPU + 64 GiB + 1 x Tesla V100-PCIE-32GB运行代码方法**:** 点击本页面顶部菜单栏的三角形运行按钮或按Ctrl+Enter键 运行每个方块中的代码JupyterLab的详细用法**:** 请参考《ModelAtrs JupyterLab使用指导》碰到问题的解决办法**:** 请参考《ModelAtrs JupyterLab常见问题解决办法》1.下载代码和数据集运行下面代码,进行数据和代码的下载和解压缩使用facades数据集,数据位于pix2pix/datasets/facades/中import os数据代码下载!wget cid:link_0解压缩os.system('unzip pix2pix.zip -d ./') os.chdir('./pix2pix')2.训练2.1安装依赖库!pip install -r requirements.txt2.2开始训练训练参数可以在pix2pix/options/train_options.py中查看和修改 如果使用其他数据集,需要修改数据路径 模型命名为facades_pix2pix!python train.py --dataroot ./datasets/facades --name facades_pix2pix --model pix2pix --direction BtoA----------------- Options --------------- batch_size: 1 beta1: 0.5 checkpoints_dir: ./checkpoints continue_train: False crop_size: 256 dataroot: ./datasets/facades [default: None] dataset_mode: aligned direction: BtoA [default: AtoB] ----------------------------------------------- /home/ma-user/anaconda3/envs/PyTorch-1.4/lib/python3.7/site-packages/torch/optim/lr_scheduler.py:122: UserWarning: Detected call of `lr_scheduler.step()` before `optimizer.step()`. In PyTorch 1.1.0 and later, you should call them in the opposite order: `optimizer.step()` before `lr_scheduler.step()`. Failure to do this will result in PyTorch skipping the first value of the learning rate schedule. See more details at https://pytorch.org/docs/stable/optim.html#how-to-adjust-learning-rate "https://pytorch.org/docs/stable/optim.html#how-to-adjust-learning-rate", UserWarning) learning rate 0.0002000 -> 0.0002000 (epoch: 1, iters: 100, time: 0.041, data: 0.195) (epoch: 1, iters: 200, time: 0.041, data: 0.001) End of epoch 10 / 10 Time Taken: 14 sec3.测试查看刚才生成的模型facades_pix2pix是否已经生成,如果生成则会在checkpoints文件下!ls checkpoints/facades_label2photo_pretrained facades_pix2pix用训练生成的模型facades_pix2pix进行测试!python test.py --dataroot ./datasets/facades --direction BtoA --model pix2pix --name facades_pix2pix展示测试结果可以在./results/facades_pix2pix/文件下看到测试生成的结果import matplotlib.pyplot as plt img = plt.imread('./results/facades_pix2pix/test_latest/images/100_fake_B.png') plt.imshow(img)<matplotlib.image.AxesImage at 0x7ff680a8cd50>img = plt.imread('./results/facades_pix2pix/test_latest/images/100_real_A.png') plt.imshow(img)<matplotlib.image.AxesImage at 0x7ff680524090>img = plt.imread('./results/facades_pix2pix/test_latest/images/100_real_B.png') plt.imshow(img)<matplotlib.image.AxesImage at 0x7ff6613ceb90>
  • [技术干货] ACGAN-动漫头像自动生成
    ACGAN论文:Conditional Image Synthesis with Auxiliary Classifier GANs使用标签的数据集应用于生成对抗网络可以增强现有的生成模型,并形成两种优化思路。cGAN使用了辅助的标签信息来增强原始GAN,对生成器和判别器都使用标签数据进行训练,从而实现模型具备产生特定条件数据的能力。SGAN的结构来利用辅助标签信息(少量标签),利用判别器或者分类器的末端重建标签信息。 ACGAN则是结合以上两种思路对GAN进行优化。ACGAN目标函数:对于生成器来说有两个输入,一个是标签的分类数据c,另一个是随机数据z,得到生成数据为 ; 对于判别器分别要判断数据源是否为真实数据的概率分布 ,以及数据源对于分类标签的概率分布ACGAN的目标函数包含两部分: 第一部分 是面向数据真实与否的代价函数 第二部分 则是数据分类准确性的代价函数。在优化过程中希望判别器D能否使得 + 尽可能最大,而生成器G使得 - 尽可能最大; 简而言之是希望判别器能够尽可能区分真实数据和生成数据并且能有效对数据进行分类,对生成器来说希望生成数据被尽可能认为是真实数据且数据都能够被有效分类。1.本案例使用框架:TensorFlow 1.13.12.本案例使用硬件:GPU: 1*NVIDIA-V100NV32(32GB) | CPU: 8 核 64GB3.运行代码方法: 点击本页面顶部菜单栏的三角形运行按钮或按Ctrl+Enter键 运行每个方块中的代码4.JupyterLab的详细用法: 请参考《ModelAtrs JupyterLab使用指导》5.碰到问题的解决办法: 请参考《ModelAtrs JupyterLab常见问题解决办法》1.下载模型和代码import os!wget https://obs-aigallery-zc.obs.cn-north-4.myhuaweicloud.com/algorithm/ACGAN.zip# 解压缩os.system('unzip ACGAN.zip -d ./')2.模型训练2.1加载依赖库root_path = './ACGAN/'os.chdir(root_path)import osfrom main import mainfrom ACGAN import ACGANfrom tools import checkFolderimport tensorflow as tfimport argparseimport numpy as np2.2设置参数def parse_args(): note = "ACGAN Frame Constructed With Tensorflow" parser = argparse.ArgumentParser(description=note) parser.add_argument("--epoch",type=int,default=251,help="训练轮数") parser.add_argument("--batchSize",type=int,default=64,help="batch的大小") parser.add_argument("--codeSize",type=int,default=62,help="输入编码向量的维度") parser.add_argument("--checkpointDir",type=str,default="./checkpoint",help="检查点保存目录") parser.add_argument("--resultDir",type=str,default="./result",help="训练过程中,中间生成结果的目录") parser.add_argument("--logDir",type=str,default="./log",help="训练日志目录") parser.add_argument("--mode",type=str,default="train",help="模式: train / infer") parser.add_argument("--hairStyle",type=str,default="orange hair",help="你想要生成的动漫头像的头发颜色") parser.add_argument("--eyeStyle",type=str,default="gray eyes",help="你想要生成的动漫头像的眼睛颜色") parser.add_argument("--dataSource",type=str,default='./extra_data/images/',help="训练集路径") args, unknown= parser.parse_known_args() checkFolder(args.checkpointDir) checkFolder(args.resultDir) checkFolder(args.logDir) assert args.epoch>=1 assert args.batchSize>=1 assert args.codeSize>=1 return argsargs =parse_args()2.3开始训练with tf.Session() as sess : myGAN = ACGAN(sess,args.epoch,args.batchSize,args.codeSize,\ args.dataSource,args.checkpointDir,args.resultDir,args.logDir,args.mode,\ 64,64,3) if myGAN is None: print("创建GAN网络失败") exit(0) if args.mode=='train' : myGAN.buildNet() print("进入训练模式") myGAN.train() print("Done")开始加载数据集!images.shape: (3000, 64, 64, 3)labels.shape: (3000, 23)Loading images to numpy array...Random shuffling images and labels...[Tip 1] Normalize the images between -1 and 1.数据集加载成功!numOfBatches : 46网络实例化:WARNING:tensorflow:From /home/ma-user/anaconda3/envs/TensorFlow-1.13.1/lib/python3.6/site-packages/tensorflow/python/ops/tensor_array_ops.py:162: colocate_with (from tensorflow.python.framework.ops) is deprecated and will be removed in a future version.Instructions for updating:Colocations handled automatically by placer.WARNING:tensorflow:From /home/ma-user/anaconda3/envs/TensorFlow-1.13.1/lib/python3.6/site-packages/tensorflow/contrib/layers/python/layers/layers.py:1624: flatten (from tensorflow.python.layers.core) is deprecated and will be removed in a future version.Instructions for updating:Use keras.layers.flatten instead.WARNING:tensorflow:From /home/ma-user/work/ACGAN/ACGAN.py:167: batch_normalization (from tensorflow.python.layers.normalization) is deprecated and will be removed in a future version.Instructions for updating:Use keras.layers.batch_normalization instead.已构建 Loss for Discriminator已构建 Loss for Generator# size of dVars : 55# size of gVars : 148WARNING:tensorflow:From /home/ma-user/anaconda3/envs/TensorFlow-1.13.1/lib/python3.6/site-packages/tensorflow/python/ops/math_ops.py:3066: to_int32 (from tensorflow.python.ops.math_ops) is deprecated and will be removed in a future version.Instructions for updating:Use tf.cast instead.已构建优化器已构造预测器网络实例化成功!进入训练模式开始配置训练环境!模型将会被加载 : ./checkpoint/ACGANWARNING:tensorflow:From /home/ma-user/anaconda3/envs/TensorFlow-1.13.1/lib/python3.6/site-packages/tensorflow/python/training/saver.py:1266: checkpoint_exists (from tensorflow.python.training.checkpoint_management) is deprecated and will be removed in a future version.Instructions for updating:Use standard file APIs to check for files with this prefix.INFO:tensorflow:Restoring parameters from ./checkpoint/ACGAN/ACGAN.model-251MODEL NAME : ACGAN.model-251模型加载成功 : ACGAN.model-251加载成功生成模型结果预览训练开始!~~~~~~~~~~~~~~~~~~~~~~~~251 251Done3.测试模型修改参数从训练模式为推理模式args.mode ='infer'从标签里选择你想要生成的头像的头发和眼睛,只能从这两个列表里选择hair_dict = ['orange hair', 'white hair', 'aqua hair', 'gray hair', 'green hair', 'red hair', 'purple hair', 'pink hair', 'blue hair', 'black hair', 'brown hair', 'blonde hair']eye_dict = [ 'gray eyes', 'black eyes', 'orange eyes', 'pink eyes', 'yellow eyes', 'aqua eyes', 'purple eyes', 'green eyes', 'brown eyes', 'red eyes', 'blue eyes']# 选择了黄头发和灰眼睛args.hairStyle = 'orange hair'args.eyeStyle = 'gray eyes'构造预测器tf.reset_default_graph()with tf.Session() as sess : myGAN1 = ACGAN(sess,args.epoch,args.batchSize,args.codeSize,\ args.dataSource,args.checkpointDir,args.resultDir,args.logDir,args.mode,\ 64,64,3) if myGAN1 is None: print("创建GAN网络失败") exit(0) if args.mode=='infer' : myGAN1.buildForInfer() tag_dict = ['orange hair', 'white hair', 'aqua hair', 'gray hair', 'green hair', 'red hair', 'purple hair', 'pink hair', 'blue hair', 'black hair', 'brown hair', 'blonde hair','gray eyes', 'black eyes', 'orange eyes', 'pink eyes', 'yellow eyes','aqua eyes', 'purple eyes', 'green eyes', 'brown eyes', 'red eyes','blue eyes'] tag = np.zeros((64,23)) feature = args.hairStyle+" AND "+ args.eyeStyle for j in range(25): for i in range(len(tag_dict)): if tag_dict[i] in feature: tag[j][i] = 1 myGAN1.infer(tag,feature) print("Generate : "+feature)模型将会被加载 : ./checkpoint/ACGANINFO:tensorflow:Restoring parameters from ./checkpoint/ACGAN/ACGAN.model-251MODEL NAME : ACGAN.model-251模型加载成功 : ACGAN.model-251已构造预测器Generate : orange hair AND gray eyes开始生成黄色头发,灰色眼睛的动漫头像存在生成不了正确头像的情况import matplotlib.pyplot as pltfrom PIL import Imagefeature = args.hairStyle+" AND "+ args.eyeStyleresultPath = './samples/' + feature + '.png' #确定保存路径img = Image.open(resultPath).convert('RGB')plt.figure(1)plt.imshow(img)plt.show()
  • [技术干货] 使用FasterRCNN预置算法训练人车检测模型
    案例内容介绍在自动驾驶方案实现的过程中,物体检测是其中一个重要的技术。本案例基于ModelArts AI Gallery中官方发布的物体检测算法FasterRCNN,训练一个人车检测模型,并部署成在线服务,生成一个人车检测AI应用。ModelArts的AI Gallery有丰富的算法,使用这些算法,无需自己开发训练代码和推理代码,只要准备并标注好数据,就可以轻松快速训练并部署模型。准备工作参考此文档,完成ModelArts准备工作,包括注册华为云账号、ModelArts全局配置和OBS相关操作。准备数据下载训练数据集本案例采用自动驾驶场景的数据集,数据集中有两种物体,人和车。本案例的数据集已经发布在AI Gallery,我们从华为云AI Gallery订阅数据集至ModelArts,然后就可以在ModelArts中使用了。点击此链接进入下载详情页,下载详情页示例如下:下载方式:选择ModelArts数据集目标区域:华北-北京四目标位置:选择一个OBS路径,作为数据集的存储位置。名称:自定义。填写好参数后,点击“下一步”按钮,然后点击“确定”按钮。等待数据集状态变为推送成功,即可在ModelArts数据集列表中查看到下载的数据集。发布数据集点击进入ModelArts数据集列表,找到刚订阅的数据集,点击“发布”按钮,填写训练集比例为0.8,发布数据集。数据集发布之后,才可在训练中使用。等待数据集发布成功。订阅算法本实验中,我们从AI Gallery订阅ModelArts官方发布的物体检测算法FasterRCNN来训练模型。点击进入AI GalleryFasterRCNN算法主页,点击页面右上方的“订阅”按钮。然后点击页面下方的“继续订阅”按钮,再点击“前往控制台”按钮,选择华北-北京四区域,最后点击“确定”按钮进入算法管理页面,可以看到刚刚订阅的算法。点击“同步”按钮,同步算法,可以点击按钮,刷新状态。当状态变成就绪时,表示同步成功。模型训练我们使用创建的人车检测数据集,提交一个人车检测训练作业,训练会生成一个人车检测模型。创建训练作业回到ModelArts训练管理页面,在【训练管理】选择训练作业,点击【创建】,如下图所示:在创建训练作业页面中选择算法:选择算法,(算法列表是按订阅时间显示的,找到名称为物体检测-FasterRCNN_ResNet50的算法,选中它)按照如下提示,填写创建训练作业的参数。计费模式:按需计费名称:自定义算法来源:算法管理算法名称:物体检测-FasterRCNN_ResNet50数据来源:数据集选择数据集和版本:选择刚刚发布的人车数据集及其版本训练输出:选择OBS路径/lftiny/car_and_person_detection/output/(此OBS路径如果不存在,可以使用OBS客户端创建)。训练输出位置用来保存训练生成的模型。调优参数:用于设置算法中的超参。算法会加载默认参数,但是可以更改和添加参数。设置learning_rate_strategy=20:0.001,表示训练20轮,学习率固定为0.001。其他调优参数保持默认。作业日志路径:选择OBS路径/lftiny/car_and_person_detection/log/(此OBS路径如果不存在,可以使用OBS客户端创建)。资源池:公共资源池。规格: [限时免费]GPU: 1*NVIDIA-V100-pcie-32gb(32GB) | CPU: 8 核 64GB,如图所示。计算节点个数:选择1,表示我们运行一个单机训练任务。所有字段填写好之后,确认参数无误,点击“下一步”按钮,然后点击“提交”按钮,开始训练。使用V100 GPU资源,训练时长预计30分钟左右。查看训练结果训练作业完成后,可以查看训练作业的运行结果。在训练作业页面,点击作业名称,进入配置信息页面。可以查看到训练作业的详情。切换到“日志”页签,查看训练作业的训练日志,还可以下载日志到本地查看。训练日志中会打印一些训练的精度和训练速度等信息。训练生成的模型会放到训练输出位置OBS路径下,可以直接下载到本地使用。模型部署导入模型点击“创建模型”按钮,创建模型。按照如下提示,填写导入模型的字段。名称:自定义版本:0.0.1元模型来源:从训练中选择选择训练作业及版本:刚刚的训练作业及版本,会自动加载部署类型:默认推理代码:自动加载其他保持默认。点击“立即创建”按钮,开始导入模型,等待模型导入成功。部署上线等待模型状态为正常,然后点击部署下拉框中的“在线服务”,如下图所示:按照如下指导填写参数:计费模式:按需计费名称:自定义是否自动停止:开启,一小时后。会在1小时后自动停止该在线服务。资源池:公共资源池。如果您购买了专属资源池,也可以选择专属资源池部署。模型来源:我的模型模型:选择刚刚导入美食人车检测的模型和版本,会自动加载。计算节点规格:选择[限时免费]CPU:1 核 4 GiB。计算节点个数:1。如果想要更高的并发数,可以增加计算节点个数,会以多实例的方式部署。填写好所有参数,点击“下一步”按钮,然后点击“提交”按钮,最后点击查看服务详情。状态栏会显示部署进度,大概3分钟左右会部署完成。在线服务测试在线服务的本质是RESTful API,可以通过HTTP请求访问,在本案例中,我们直接在网页上访问在线服务。等待在线服务的状态变成运行中。先点此链接下载测试集,解压,再切换到预测标签,点击上传按钮,进行测试预测结果会出现在右边的输出框:预测结果中的detection_classes字段,表示识别的分类(人与车)预测结果中的detection_boxes字段,表示识别框的四个角坐标预测结果中的detection_scores字段,表示图片为每种类别的置信度关闭在线服务为了避免持续扣费,案例完成后,需要关闭在线服务,点击“停止”按钮即可:当需要使用该在线服务的时候,可以重新启动该在线服务。确认关闭所有计费项点击此链接,进入ModelArts总览页面,如果所有计费中的数字都是0,表示所有计费项都关闭了。案例完成。
  • ModelBox开发案例 - 使用YOLO v3做口罩检测
    ModelBox开发案例 - 使用YOLO v3做口罩检测本案例将使用YOLO v3模型,实现一个简单的口罩检测应用,最终效果如下所示: 本案例所需资源(代码、模型、测试数据等)已做成模板放到华为云上,查看和下载模板可以使用如下命令:Windows PC版本请使用solution.bat工具:PS ███\modelbox>: .\solution.bat -l ... Solutions name: mask_det_yolo3 ...结果中的mask_det_yolo3即为口罩检测模板,可使用如下命令下载模板:PS ███\modelbox>: .\solution.bat -s mask_det_yolo3 ...Linux开发板版本请使用solution.py脚本:rock@rock-3a:~/███/modelbox$ ./solution.py -l ... Solutions name: mask_det_yolo3 ...结果中的mask_det_yolo3即为口罩检测模板,可使用如下命令下载模板:rock@rock-3a:~/███/modelbox$ ./solution.py -s mask_det_yolo3 ...solution.bat/solution.py工具的参数中,-l 代表list,即列出当前已有的模板名称;-s 代表solution-name,即下载对应名称的模板。下载下来的模板资源,将存放在ModelBox核心库的solution目录下。如果对ModelBox AI应用开发还不熟悉,请先阅读ModelBox 端云协同AI开发套件(RK3568)上手指南,或者ModelBox 端云协同AI开发套件(博时特EC02)上手指南。模型准备本案例使用的是YOLOv3_ResNet18模型,在下载的资源包中,已经包含了转换好的rknn模型或者onnx模型,可以在对应的平台上直接使用。 原始模型是通过TensorFlow框架训练得到的,我们可以用AI Gallery中的物体检测YOLOv3_ResNet18算法和口罩检测小数据集,自行训练出该模型。 得到TensorFlow Frozen Graph格式的模型后,如果想体验rknn模型的转换过程,rknpu版本可参考RK1808模型转换验证案例,rknpu2版本可参考RK3568模型转换验证案例。应用开发打开VS Code,连接到ModelBox sdk所在目录或者远程开发板,开始进行口罩检测应用开发。下面以RK3568版本为例进行说明,其他版本与之类似。1)创建工程使用create.py创建mask_det工程(Windows PC版本请使用create.bat):rock@rock-3a:~/███/modelbox$ ./create.py -t server -n mask_det -s mask_det_yolo3 sdk version is modelbox-rk-aarch64 success: create mask_det in /home/rock/███/modelbox/workspace将会用口罩检测模板创建出一个mask_det工程。2)查看推理功能单元AI应用的核心是模型推理部分,mask_det工程的推理功能单元在工程目录下的model/mask_infer文件夹中,目录结构如下(以RK3568开发板版本为例): 其中yolo3_resnet18_mask_det_288x512-rknpu2.rknn是转换好的rknn模型,mask_infer.toml是该模型的ModelBox功能单元配置文件,其内容如下:# Copyright (c) Huawei Technologies Co., Ltd. 2022. All rights reserved. [base] name = "mask_infer" # 功能单元名称 device = "rknpu" # 功能单元运行的设备类型 version = "1.0.0" # 功能单元版本号 type = "inference" # 功能单元类型,推理功能单元此处为固定值inference virtual_type = "rknpu" # 推理引擎类型,RK3399pro/RK1808设备为rknpu,RK3568设备为rknpu2 group_type = "Inference" # 功能单元分组信息, 推理功能单元默认为Inference is_input_contiguous = "false" # rk芯片推理时的固定属性 description = "yolo3 model for mask detection" # 功能单元的描述信息 entry = "./yolo3_resnet18_mask_det_288x512_rknpu.rknn" # 模型文件路径,默认在当前路径下 # 模型输入节点描述:yolo3模型有1个输入,uint8格式的图片数据 [input] [input.input1] name = "data" type = "uint8" device = "rknpu" # 输入数据位于哪种设备 # 模型输出节点描述:yolo3模型有3个输出,不同大小的float类型特征向量 [output] [output.output1] name = "yolo/output1" type = "float" [output.output2] name = "yolo/output2" type = "float" [output.output3] name = "yolo/output3" type = "float"可以看到该模型有3个输出节点,即YOLO v3模型输出的3个feature map,需要从中解码出检测框。3)其他逻辑功能单元后处理功能单元负责从模型推理结果中解码出检测框,在工程目录下的etc/flowunit/yolo3_post文件夹中: 解码过程的核心逻辑在yolo3_utils.py文件中,可以查阅YOLO v3模型细节阅读代码。画图功能单元在工程目录下的etc/flowunit/draw_mask_bbox文件夹中: 画图的核心逻辑在draw_mask_bbox.py文件的draw_mask_info函数中: def draw_mask_info(self, image, bboxes): '''在图中画出口罩佩戴信息''' thickness = 2 font_scale = 1 text_font = cv2.FONT_HERSHEY_SIMPLEX for bbox in bboxes: label_index = int(bbox[5]) # 以头肩部为处理对象 if self.labels[label_index] != 'head': continue x_min, y_min, x_max, y_max = bbox[0], bbox[1], bbox[2], bbox[3] # 根据头肩部找到匹配的人脸框 face_bbox = self.find_max_cover_bbox( bbox, bboxes, 'face', self.face_cover_ratio) if not face_bbox: # 没找到对应的人脸,输出'unknown' yellow = (255, 255, 0) cv2.rectangle(image, (x_min, y_min), (x_max, y_max), yellow, thickness) cv2.putText(image, 'unknown', (x_min, y_min-20), text_font, font_scale, yellow, thickness) continue # 根据人脸框找到匹配的口罩框 mask_bbox = self.find_max_cover_bbox( face_bbox, bboxes, 'mask', self.mask_cover_ratio) if not mask_bbox: # 没找到对应的口罩框,输出'no mask' red = (0, 0, 255) cv2.putText(image, 'no mask', (x_min, y_min-20), text_font, font_scale, red, thickness) cv2.rectangle(image, (x_min, y_min), (x_max, y_max), red, thickness) else: # 找到对应的口罩框,输出'has mask' green = (0, 255, 0) cv2.putText(image, 'has mask', (x_min, y_min-20), text_font, font_scale, green, thickness) cv2.rectangle(image, (x_min, y_min), (x_max, y_max), green, thickness) cv2.rectangle(image, (mask_bbox[0], mask_bbox[1]), (mask_bbox[2], mask_bbox[3]), green, thickness) return image可以看到,针对每个人,该模型会尝试检测出head(头肩部)、face和mask三个检测框。如果face检测框与mask检测框的重合度大于某个阈值,就判为佩戴口罩;否则,就判为没有佩戴口罩;如果没有检测到face检测框,就会显示Unknown,表示未知。4)查看流程图模型推理和配套的功能单元准备好后,我们就可以串联出流程图进行测试了,口罩检测工程的默认流程图为graph/mask_det.toml(以RK3568开发板版本为例):# Copyright (c) Huawei Technologies Co., Ltd. 2022. All rights reserved. [driver] # 功能单元的扫描路径,包含在[]中,多个路径使用,分隔 # ${HILENS_APP_ROOT} 表示当前应用的实际路径 # ${HILENS_MB_SDK_PATH} 表示ModelBox核心库的实际路径 dir = [ "${HILENS_APP_ROOT}/etc/flowunit", "${HILENS_APP_ROOT}/etc/flowunit/cpp", "${HILENS_APP_ROOT}/model", "${HILENS_MB_SDK_PATH}/flowunit", ] skip-default = true [profile] # 通过配置profile和trace开关启用应用的性能统计 profile = false # 是否记录profile信息,每隔60s记录一次统计信息 trace = false # 是否记录trace信息,在任务执行过程中和结束时,输出统计信息 dir = "${HILENS_DATA_DIR}/mb_profile" # profile/trace信息的保存位置 [flow] desc = "mask detection example using yolo3 for local video or rtsp video stream" # 应用的简单描述 [graph] format = "graphviz" # 流程图的格式,当前仅支持graphviz graphconf = """digraph mask_det { node [shape=Mrecord] queue_size = 4 batch_size = 1 # 定义节点,即功能单元及其属性 input1[type=input, flowunit=input, device=cpu, deviceid=0] 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] mask_detection[type=flowunit, flowunit=mask_infer, device=rknpu, deviceid=0] yolo3_post[type=flowunit, flowunit=yolo3_post, device=cpu, deviceid=0] draw_mask_bbox[type=flowunit, flowunit=draw_mask_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 -> mask_detection:data mask_detection:"yolo/output1" -> yolo3_post:in_feat3 mask_detection:"yolo/output2" -> yolo3_post:in_feat2 mask_detection:"yolo/output3" -> yolo3_post:in_feat1 video_decoder:out_video_frame -> draw_mask_bbox:in_image yolo3_post:out_data -> draw_mask_bbox:in_bbox draw_mask_bbox:out_image -> video_out:in_video_frame }"""该流程图对于某个视频流,经过视频解码、图像缩放、口罩检测推理、检测框后处理、画图等一系列操作后,将结果保存下来。口罩检测工程的任务配置文件bin/mock_task.toml中设置了输入输出源,内容为:# 任务输入配置,当前支持以下几种输入方式: # 1. rtsp摄像头或rtsp视频流:type="rtsp", url="rtsp://xxx.xxx" # 2. 设备自带摄像头或者USB摄像头:type="url",url="${摄像头编号}" (需配合local_camera功能单元使用) # 3. 本地视频文件:type="url",url="${视频文件路径}" (请使用${HILENS_APP_ROOT}宏,表示当前应用的实际路径) # 4. http服务:type="url", url="http://xxx.xxx"(指的是任务作为http服务启动,此处需填写对外暴露的http服务地址,需配合httpserver类的功能单元使用) [input] type = "url" # url = "0" url = "${HILENS_APP_ROOT}/data/mask_test.mp4" # 任务输出配置,当前支持以下几种输出方式: # 1. rtsp视频流:type="local", url="rtsp://xxx.xxx" # 2. 本地屏幕:type="local", url="0:xxx" (设备需要接显示器,系统需要带桌面) # 3. 本地视频文件:type="local",url="${视频文件路径}"(请使用${HILENS_APP_ROOT}宏,表示当前应用的实际路径) # 4. http服务:type="webhook", url="http://xxx.xxx"(指的是任务产生的数据上报给某个http服务,此处需填写上传的http服务地址) [output] type = "local" # url = "0:mask_det" # "rtsp://192.168.2.2:8554/outstream" url = "${HILENS_APP_ROOT}/hilens_data_dir/mask_test_result.mp4"测试视频为data/mask_test.mp4,该流程图使用这一视频进行口罩检测,检测结果绘制后保存为hilens_data_dir/mask_test_result.mp4文件。5)运行应用在mask_det工程路径下执行build_project.sh进行工程构建(以RK3568开发板版本为例):rock@rock-3a:~/███/modelbox/workspace/mask_det$ ./build_project.sh build success: you can run main.sh in ./bin folder rock@rock-3a:~/███/modelbox/workspace/mask_det$然后执行bin/main.sh(Windows PC版本请使用bin\main.bat)运行应用,运行结束后在hilens_data_dir目录下生成了mask_test_result.mp4文件,可以下载到PC端查看。