• [技术干货] 华为布道师中国人民大学站ICT及华为云技术布道
    2024年11月22日,华为开发者布道师于人民大学站开展布道师华为ICT创新赛和编程赛技术案例分享技术布道案例分享,并在分享中对相关疑问分析解答。首先介绍了基于鸿蒙生态的低光照增强安全辅助驾驶系统:低光照增强安全辅助驾驶系统以华为云作为训练的平台,以MindSpore作为框架,通过整合红外相机与可见光相机的特征,利用特征互补模型在软件平台控制下进行数据处理。系统采用Hispark IPC通讯协议实现各设备间的通信,包括红外相机、可见光相机、深度相机以及车辆显示屏等,这些设备采集的数据会上传到华为云进行进一步的处理和存储。在华为云的平台上,智能决策单元和传感器单元协同工作,收集并分析环境信息,同时应用云端算力对算法模型进行部署以优化系统性能。系统还具备低光照工作能力,能够实时显示感知数据,并在必要时进行决策预警,确保驾驶安全。此外,系统还展示了与Harmony OS生态的兼容,如手表等设备的联动提醒,以及红外点阵投影等高级功能,为驾驶者提供全面的安全辅助。并介绍了技术方案所涉及的关键技术:(1)传感器标定与图像配准技术:应用传感器标定与图像配准技术,对传感器采集到的图像数据进行进一步的配准以及标定。其中,本技术包括了双目视觉系统、交通目标识别方法、深度迭代配准算法来实现图像标定以及配准。其中,双目视觉系统基于深度迭代的配准方法主要使用CNN进行特征的提取或者代替传统配准算法中相似性度量的计算函数。使用深度学习网络对输入的图像对进行特征提取与相似性测度,能够实现配准图像的生成与图像配准精度的判别。在实际检测中,大大降低了系统的计算时间,提高了图像配准以及标定的精度。(2)图像特征融合感知技术在图像处理过程中还应用到了图像特征融合感知技术。在对标定以及配准好的图像进行特征融合的过程中,项目团队通过Mindspore训练的AI神经运算专用芯片,运用多源数据融合感知技术与交通安全隐患的智能检测从而识别不同模型,实现多源数据的精确融合。最终,在这些技术的应用下,通过不同类型相机采集到的图像特征进行融合感知,在低光照等不同恶劣环境(3)辅助决策预警与风险评估技术在辅助决策以及预警层面应用HiSpark-WiFi-IoT套件为主的智能决策模块来进行实现。通过紧急避障系统中搭建的感知层、规划层、决策层实现安全隐患智能评定与决策预警的相关功能,为显示交互单元提供安全数据信息。在辅助决策预警与风险评估的功能中,终端显示给用户也是十分关键的。所以在显示与交互的单元中开发了搭载Harmony OS的显示终端、多频报警音响等显示报警装置,运行配套开发的鸿蒙APP,实时显示感知数据与决策预警判定结果,可以在低光照、雨雪雾霾等全天候全场景工况下辅助驾驶人员进行判断,提升驾驶安全性与可靠性。接着介绍了基于华为云的制造业咨询服务微调问答助手案例:构建了私有的工业中文知识库问答系统,旨在为用户提供自定义友好、离线可运行的全面解决方案。​我们的系统的亮点包括:多模态交互。支持文本输入、语音输入和文件上传等多种输入方式,实现了多模态交互。用户可以根据实际需求选择最方便的交互方式,提高了系统的灵活性和适用性。同时,多模态交互也考虑到了用户的个体差异,满足了不同用户的使用习惯和需求。多功能对话界面。对话界面不仅支持基本的文本对话,还提供了多会话管理、对话模式切换和语音输入等功能。用户可以方便地切换不同对话会话,选择不同对话模式,以及通过语音输入进行自然交互。这种多功能对话界面提升了用户体验,使得系统更易于使用和操作。权限管理与安全性。系统引入了权限管理功能,通过登录注册和权限认证,确保只有经过授权的用户才能访问和操作知识库。这一功能提高了系统的安全性,防止未经授权的访问和操作,保护敏感信息免受泄露和篡改。知识库管理。系统提供了完整的知识库管理功能,包括知识库创建、文件上传、向量数据库构建、文件检索等。用户可以方便地管理知识库中的信息,通过文件对话和知识库问答等方式进行信息检索,满足不同场景和需求。检索增强的大模型。系统整合了检索增强的大模型,包括文件对话、知识库问答、搜索引擎问答和自定义Agent问答等功能。通过这些功能,系统可以更全面、准确地回答用户的问题,提供更丰富的信息服务。同时,用户可以选择不同的检索方式,根据实际需求获取最合适的答案。基于华为云ModelArts、企业级华为云主机的详细解决方案如下所示:首先介绍使用智能问答助手连接企业知识库实时获取信息。在权限管理方面,智能问答助手上运行着基于用户认证机制,利用安全框架,对用户进行身份验证,确保只有授权用户才能访问知识库;使用加密协议上传用户信息到云端服务中;使用专用SDK与API能够方便地对用户权限进行控制与管理。在系统实现方面,我们使用了微服务架构通过streamlit-authenticator模块对用户进行身份验证;并将认证结果通过后端服务传输到前端界面进行展示;前端界面使用HTML、CSS和JavaScript技术,通过发送请求获得认证结果,使用WebSocket技术实时更新用户界面。其次,介绍整合多模态对话输入技术,实现了与用户的高效交互。它支持传统的文本输入方式,同时引入了先进的语音输入识别技术,能够准确捕捉并实时转换用户的语音指令为文字,以便进行后续处理。这一语音输入功能的实现,依托于Streamlit和Bokeh库,通过在用户界面上设置一个专门的按钮,用户点击后即可激活语音识别。系统内部,js_on_event事件监听器与webkitSpeechRecognition对象协同工作,确保语音识别的准确性和实时性。此外,Omniind还提供了多种对话模板供用户选择,以适应不同咨询场景的需求,从而提升企业咨询服务的质量和效率。最后说明问答助手在知识库构建方面,预先构建了一个事实对应的知识库,用于存储和组织信息。当用户提出问题时,系统会进行问题解析,然后通过知识检索在知识库中寻找相关信息,最终生成答案。在实现过程中,助手采用了知识库构建、问题解析、知识检索和答案生成等一系列步骤,避免推理跳跃问题,确保了回答的准确性和相关性。为了验证系统的有效性,进行了功能测试。测试中,基于自定义数据集创建了Digital Twin领域的知识库,并提出了一系列问题,观察系统是否能够正确检索知识库并给出相关答案。此外,系统还提供了一个用户界面,用户可以通过这个界面与知识库进行交互,提出问题并获取答案。这个界面设计直观,易于使用,使得用户能够方便地获取所需的信息。通过这种方式,Omniind智能问答助手不仅提高了信息检索的效率,也提升了用户获取知识的体验。本次项目展示是华为开发者布道师​首次对ICT实战技术案例及华为云企业级边云部署行业解决方案进行高校技术布道,希望后续能够带给大家更多具有行业价值和实践意义的布道案例 。欢迎大家加入华为开发者布道师的大家庭,成为优秀的华为云开发者!
  • [技术干货] ModelArts_AI开发平台之交通信号标志检测与识别
    【任务背景】近年来,随着人工智能和传感器技术的快速进步,自动驾驶汽车技术也取得了长足发展。从最初的辅助驾驶系统到如今可实现完全自主驾驶的汽车,自动驾驶技术正在改变我们的出行方式。其中,交通信号识别技术作为自动驾驶系统的核心功能之一,能够准确感知和识别道路上的各类交通标志、信号灯等,为车辆提供精准的行驶决策依据,确保行车安全性和效率。基于视觉的交通信号标志检测与识别任务旨在开发出精准高效的识别算法,助力自动驾驶汽车技术的进步。任务包含步行、非机动车行驶、环岛行驶、机动车行驶等多种交通信号标志类别,开发者会利用到计算机视觉领域的目标检测、关键点检测、图像分类等基础技术,为提升识别效率,也可以拓展使用剪枝、量化、蒸馏等模型方面的优化技术。ModelArts云平台提供任务相关的数据处理、模型训练、应用部署等技术文档及学习课程材料,助力开发者学习相关技术,了解实践操作。【数据说明】本次任务需要识别以下16种类别的交通标识,类别编号与定义如下表:i1i2i3i4Walk步行Non_motorized vehicles非机动车行驶Round the island 环岛行驶Motor vehicle 机动车行驶i5i6i7i8Keep on the right side of the road靠右侧道路行驶Keep on the left side of the road 靠左侧道路行驶Drive straight and turn right at the grade separation 立体交叉直行和右转弯行驶Drive straight and turn left 立体交叉直行和左转弯行驶i9i10i11i12Honk 鸣喇叭Turn right 向右转弯Turn left and right 向左向右转弯Turn left 向左转弯i13i14i15il50One way, straight 直行Go straight and turn right 直行和向右转弯Go straight and turn left 直行和向左转弯Minimum Speed Limit 最低限速50【任务说明】本任务的测试集为200张图片,这些图片为中国多个城市街景的高分辨率图像,每张图片包含1种交通信号标识。数据集图片示例检测结果以图片为单位输出其中包括交通信号标识的类别、坐标与置信度,每张图片输出一个结果,格式为json字符串,字段说明如下: { "detection_classes": ["i1"], "detection_boxes": [[576, 423, 669, 967]], "detection_scores": [0.4796633720397949] }• detection_classes:指图片中目标的类别,参见上面的数据说明。• detection_boxes:指图片中目标位置的水平矩形框坐标,坐标表示为[ymin,xmin,ymax,xmax]。• detection_scores:指检测结果的置信度。【案例教学】【准备数据集】# 步骤1:从OBS迁移数据集 import moxing as mox mox.file.copy_parallel("obs://trafficbuckets/dataset/update_traffic_sign.zip", "/home/ma-user/work/dataset/update_traffic_sign.zip") # 形参:源文件->指定位置# 步骤2:解压数据集并更改名称为update_traffic_sign import os os.system('unzip /home/ma-user/work/download/update_traffic_sign.zip -d /home/ma-user/work/dataset') os.system('mv /home/ma-user/work/dataset/"update traffic sign" /home/ma-user/work/dataset/update_traffic_sign')# 生成train和val图片名文本文件 from glob import glob import random # hyper parameter train_pic_rate = 0.7 # you can change! # 该目录存储图片数据 patch_fn_list = glob('/home/ma-user/work/dataset/update_traffic_sign/images/*.jpg') # you can change! # 返回存储图片名的列表,不包含图片的后缀 patch_fn_list = [fn for fn in patch_fn_list] # 将图片打乱顺序 random.shuffle(patch_fn_list) # 按照7:3比例划分train和val train_num = int(train_pic_rate * len(patch_fn_list)) train_patch_list = patch_fn_list[:train_num] valid_patch_list = patch_fn_list[train_num:] # produce train/valid/trainval txt file split = ['train', 'val', 'trainval'] # produce train/valid/trainval txt file split = ['train2017', 'val2017', 'trainval2017'] for s in split: # 存储文本文件的地址 save_path = '/home/ma-user/work/dataset/update_traffic_sign/' + s + '.txt' # you can change! if s == 'train2017': with open(save_path, 'w') as f: for fn in train_patch_list: # 将训练图像的地址写入train.txt文件 f.write('%s\n' % fn) elif s == 'val2017': with open(save_path, 'w') as f: for fn in valid_patch_list: # 将验证图像的地址写入val.txt文件 f.write('%s\n' % fn) elif s == 'trainval2017': with open(save_path, 'w') as f: for fn in patch_fn_list: # 将所有图像名的编号写入trainval.txt文件 f.write('%s\n' % fn) print('Finish Producing %s txt file to %s' % (s, save_path))# 按照train.txt和val.txt将images分类 import shutil import os def my_move(trainlistdir,vallistdir,traindir,valdir): # 打开train.txt文件 fopen = open(trainlistdir, 'r') # 读取图片名称 file_names = fopen.readlines() for file_name in file_names: file_name=file_name.strip('\n') # 图片的路径 traindata = file_name # 把图片复制至traindir路径下 # 如果目标文件夹不存在,则创建它 if not os.path.exists(traindir): os.makedirs(traindir) shutil.move(traindata, traindir) # 同上 fopen = open(vallistdir, 'r') file_names = fopen.readlines() for file_name in file_names: file_name=file_name.strip('\n') valdata = file_name # 如果目标文件夹不存在,则创建它 if not os.path.exists(valdir): os.makedirs(valdir) shutil.move(valdata, valdir) # 存储训练图片名的txt文件地址 trainlistdir=r'/home/ma-user/work/dataset/update_traffic_sign/train2017.txt' # 存储验证图片名的txt文件地址 vallistdir=r'/home/ma-user/work/dataset/update_traffic_sign/val2017.txt' # coco格式数据集的train2017目录 traindir=r'/home/ma-user/work/dataset/update_traffic_sign/images/train2017' # coco格式数据集的val2017目录 valdir=r'/home/ma-user/work/dataset/update_traffic_sign/images/val2017' my_move(trainlistdir,vallistdir,traindir,valdir)# 按照train.txt和val.txt将labels分类 import shutil import os def my_move(datadir, trainlistdir,vallistdir,traindir,valdir): # 打开train.txt文件 fopen = open(trainlistdir, 'r') # 读取图片名称 file_names = fopen.readlines() for file_name in file_names: file_name=file_name.strip('\n') # 图片的路径 tmp_list = file_name.split('/') tmp_list[-2] = 'labels' train_sp = os.path.join('/', *tmp_list) traindata = train_sp.split('.jpg')[-2] + '.txt' # 把图片复制至traindir路径下 # 如果目标文件夹不存在,则创建它 if not os.path.exists(traindir): os.makedirs(traindir) shutil.move(traindata, traindir) # 同上 fopen = open(vallistdir, 'r') file_names = fopen.readlines() for file_name in file_names: file_name=file_name.strip('\n') tmp_list_v = file_name.split('/') tmp_list_v[-2] = 'labels' val_sp = os.path.join('/', *tmp_list_v) valdata = val_sp.split('.jpg')[-2] + '.txt' # 如果目标文件夹不存在,则创建它 if not os.path.exists(valdir): os.makedirs(valdir) shutil.move(valdata, valdir) # labels存储地址 datadir=r'/home/ma-user/work/dataset/update_traffic_sign/labels/' # 存储训练图片名的txt文件地址 trainlistdir=r'/home/ma-user/work/dataset/update_traffic_sign/train2017.txt' # 存储验证图片名的txt文件地址 vallistdir=r'/home/ma-user/work/dataset/update_traffic_sign/val2017.txt' # coco格式数据集的train2017目录 traindir=r'/home/ma-user/work/dataset/update_traffic_sign/labels/train2017' # coco格式数据集的val2017目录 valdir=r'/home/ma-user/work/dataset/update_traffic_sign/labels/val2017' my_move(datadir, trainlistdir,vallistdir,traindir,valdir)# 对images和labels重命名 import os def rename_img_label(images_folder, labels_folder): # 获取文件夹中的文件列表 images = sorted(os.listdir(images_folder)) labels = sorted(os.listdir(labels_folder)) # 重新命名文件 for i, (image_file, label_file) in enumerate(zip(images, labels)): # 生成新的文件名 new_name = f"{i + 1:03d}" # 格式化为三位数 image_ext = os.path.splitext(image_file)[1] # 获取图片扩展名 label_ext = os.path.splitext(label_file)[1] # 获取标签扩展名 # 构建新的完整路径 new_image_path = os.path.join(images_folder, f"{new_name}{image_ext}") new_label_path = os.path.join(labels_folder, f"{new_name}{label_ext}") # 重命名文件 os.rename(os.path.join(images_folder, image_file), new_image_path) os.rename(os.path.join(labels_folder, label_file), new_label_path) print("文件重命名完成。") # 设置train文件夹路径 train_images_folder = '/home/ma-user/work/dataset/update_traffic_sign/images/train2017' train_labels_folder = '/home/ma-user/work/dataset/update_traffic_sign/labels/train2017' # 设置val文件夹路径 val_images_folder = '/home/ma-user/work/dataset/update_traffic_sign/images/val2017' val_labels_folder = '/home/ma-user/work/dataset/update_traffic_sign/labels/val2017' rename_img_label(train_images_folder, train_labels_folder) rename_img_label(val_images_folder, val_labels_folder)import os # 设置文件夹路径 folder_train = '/home/ma-user/work/dataset/update_traffic_sign/images/train2017' folder_val = '/home/ma-user/work/dataset/update_traffic_sign/images/val2017' output_file_train = '/home/ma-user/work/dataset/update_traffic_sign/train2017.txt' # 输出的 TXT 文件名 output_file_val = '/home/ma-user/work/dataset/update_traffic_sign/val2017.txt' # 输出的 TXT 文件名 def writetxt(floder_path, outputfilename): # 获取文件夹中的文件列表 file_names = os.listdir(floder_path) file_names.sort() # 将文件名写入 TXT 文件 with open(outputfilename, 'w') as f: for file_name in file_names: f.write(os.path.join(floder_path, file_name) + '\n') print(f"文件名已写入 {outputfilename}。") writetxt(folder_train, output_file_train) writetxt(folder_val, output_file_val)# 生成json文件(可选) import glob import json import os from PIL import Image def yolo_to_coco_for_subset(yolo_images_folder, yolo_labels_folder, categories): # Initialize COCO dataset structure for the subset coco_format = { "images": [], "annotations": [], "categories": [] } # Add category information for i, category in enumerate(categories): coco_format["categories"].append({ "id": i + 1, "name": category, "supercategory": "none" }) image_id = 0 annotation_id = 0 # image_id = -1 # annotation_id = -1 for image_file in glob.glob(f"{yolo_images_folder}/*.jpg"): print(image_file) # Read image to get width and height with Image.open(image_file) as img: width, height = img.size # Add image information with size coco_format["images"].append({ "id": image_id + 1, "file_name": os.path.basename(image_file), "width": width, "height": height }) # Corresponding annotation file yolo_annotation_file = os.path.join(yolo_labels_folder, os.path.basename(image_file).replace(".jpg", ".txt")) if os.path.exists(yolo_annotation_file): with open(yolo_annotation_file, "r") as file: for line in file: category_id, x_center, y_center, bbox_width, bbox_height = map(float, line.split()) # Convert YOLO format to COCO format x_min = (x_center - bbox_width / 2) * width y_min = (y_center - bbox_height / 2) * height coco_bbox_width = bbox_width * width coco_bbox_height = bbox_height * height # change image_id img_id = int(image_file.split('/')[-1].split('.')[-2]) print(img_id) # Add annotation information coco_format["annotations"].append({ "id": annotation_id + 1, "image_id": img_id, # image_id + 1, "category_id": int(category_id) + 1, "bbox": [x_min, y_min, coco_bbox_width, coco_bbox_height], "area": coco_bbox_width * coco_bbox_height, "segmentation": [], # Optional "iscrowd": 0 }) annotation_id += 1 image_id += 1 return coco_format def save_coco_format(coco_format, output_file): with open(output_file, "w") as file: json.dump(coco_format, file, indent=4) # Example usage yolo_base_folder = "/home/ma-user/work/dataset/update_traffic_sign/" # 父级文件夹 file_path = '/home/ma-user/work/dataset/update_traffic_sign/classes.txt' # 替换为你的txt文件路径 train_json_save_path = '/home/ma-user/work/dataset/update_traffic_sign/annotations/instances_train2017.json' # train json保存路径 val_json_save_path = '/home/ma-user/work/dataset/update_traffic_sign/annotations/instances_val2017.json' # val json保存路径 # 判断文件夹是否存在,若不存在则创建 # 判断文件夹是否存在,若不存在则创建 list_name_train = train_json_save_path.split('/')[:-1] if not os.path.exists(os.path.join(*list_name_train)): os.mkdir(os.path.join('/', *list_name_train)) # 读取txt文件并将每一行转换为列表 categories = [] with open(file_path, 'r') as file: lines = file.readlines() # 读取文件的所有行 for line in lines: categories.append(line.strip()) # 输出结果 print(categories) # Convert train set train_coco_format = yolo_to_coco_for_subset( os.path.join(yolo_base_folder, "images/train2017"), os.path.join(yolo_base_folder, "labels/train2017"), categories ) save_coco_format(train_coco_format, train_json_save_path) # Convert val set val_coco_format = yolo_to_coco_for_subset( os.path.join(yolo_base_folder, "images/val2017"), os.path.join(yolo_base_folder, "labels/val2017"), categories ) save_coco_format(val_coco_format, val_json_save_path)# 查看数据集 import os import random import cv2 import numpy as np from matplotlib import pyplot as plt %matplotlib inline # classes = ["open", "short","mousebite","spur","copper",'pin-hole'] # 类别 classes = ['i1', 'i10', 'i11', 'i12', 'i13', 'i14', 'i15', 'i2', 'i3', 'i4', 'i5', 'i6', 'i7', 'i8', 'i9', 'i50'] file_path = "/home/ma-user/work/dataset/update_traffic_sign/images/train2017" file_list = os.listdir(file_path) img_paths = random.sample(file_list, 4) img_lists = [] for img_path in img_paths: img_path = os.path.join(file_path, img_path) img = cv2.imread(img_path) h, w, _ = img.shape tl = round(0.002 * (h + w) / 2) + 1 color = [random.randint(0, 255) for _ in range(3)] if img_path.endswith('.png'): with open(img_path.replace("images", "labels").replace(".png", ".txt")) as f: labels = f.readlines() if img_path.endswith('.jpg'): with open(img_path.replace("images", "labels").replace(".jpg", ".txt")) as f: labels = f.readlines() for label in labels: l, x, y, wc, hc = [float(x) for x in label.strip().split()] x1 = int((x - wc / 2) * w) y1 = int((y - hc / 2) * h) x2 = int((x + wc / 2) * w) y2 = int((y + hc / 2) * h) cv2.rectangle(img, (x1, y1), (x2, y2), color, thickness=tl, lineType=cv2.LINE_AA) cv2.putText(img,classes[int(l)],(x1,y1-2), cv2.FONT_HERSHEY_SIMPLEX, 1, (0,111,222), 3, cv2.LINE_AA) img_lists.append(cv2.resize(img, (1280, 720))) image = np.concatenate([np.concatenate(img_lists[:2], axis=1), np.concatenate(img_lists[2:], axis=1)], axis=0) plt.rcParams["figure.figsize"] = (20, 10) plt.imshow(image[:,:,::-1]) plt.axis('off') plt.show()【准备mindyolo模型】链接:mindyolo# 步骤1:从OBS迁移数据集 import moxing as mox mox.file.copy_parallel("obs://trafficbuckets/source_code/mindyolo.zip", "/home/ma-user/work/mindyolo.zip") # 形参:源文件->指定位置【修改配置文件】1.yolov8n.yaml以及其继承的coco.yaml,hyp.scratch.low.yaml,yolov8-base.yaml的配置信息coco.yamldata: dataset_name: update_traffic_sign # you can change! train_set: /home/ma-user/work/dataset/update_traffic_sign/train2017.txt # ./coco/train2017.txt # 118287 images # you can change! val_set: /home/ma-user/work/dataset/update_traffic_sign/val2017.txt # ./coco/val2017.txt # 5000 images # you can change! test_set: /home/ma-user/work/dataset/update_traffic_sign/test2017.txt # 20288 of 40670 images, submit to https://competitions.codalab.org/competitions/20794 # you can change! nc: 16 # class names names: ['i1', 'i10', 'i11', 'i12', 'i13', 'i14', 'i15', 'i2', 'i3', 'i4', 'i5', 'i6', 'i7', 'i8', 'i9', 'i50'] # you can change! train_transforms: [] test_transforms: []yolov8-base.yamlepochs: 500 # total train epochs # you can change! per_batch_size: 2 # 16 * 8 = 128 img_size: 2048 iou_thres: 0.7 conf_free: True sync_bn: True opencv_threads_num: 0 # opencv: disable threading optimizations network: model_name: yolov8 nc: 16 # number of classes # you can change! reg_max: 16 stride: [8, 16, 32] ...【执行训练】python train.py --config ./configs/yolov8/yolov8n.yaml --run_eval True
  • [活动分享] 桂林电子科技大学布道师活动——香橙派实践与大模型分享
    【活动总结】2024 年 11月 1日-2024年11月15日,华为开发者布道师、桂林电子科技大学李明辉同学在线下组织了围绕mindspore框架和昇腾边缘设备的两次布道活动,本次参与活动的同学来自数学与计算机科学学院与人工智能学院共两百余名学生。活动开始,李明辉同学以通俗易懂的语言为大家详细介绍了MindSpore框架的优势。他强调,MindSpore作为一款面向AI应用的全场景深度学习框架,具有易用、高效、安全等特点,为广大开发者提供了极大的便利。在场的大一同学们纷纷表示对MindSpore框架产生了浓厚兴趣。针对大一新生,李明辉同学贴心地为他们规划了学习昇思框架的路线,并手把手教会了同学们如何利用ATC(Ascend Tensor Compiler)转换自己的模型。这一环节让在场的同学们对人工智能技术的实际应用有了更深刻的认识。NPU案例分享在NPU案例分享环节,李明辉同学向大家展示了魔乐社区的体验空间,并详细讲解了如何离线部署属于自己的模型。这一环节让同学们感受到了人工智能技术的魅力,也为他们今后的学术研究和项目实践奠定了基础。案例分享紧接着,李明辉同学为本科生们介绍了华为云最新云主机,让同学们亲身体验到了云开发的便捷与高效。他通过实际操作演示,让同学们对华为云的技术实力有了更直观的了解。活动照片1活动照片2活动照片3此次活动的成功举办,不仅提高了同学们对人工智能技术的认识,还为他们提供了一个交流学习的平台。相信在未来的学习和实践中,同学们将不断探索,为我国人工智能领域的发展贡献自己的力量。
  • 桂林电子科技大学布道师活动——香橙派实践与大模型分享
    【活动总结】2024 年 11月 1日-2024年11月10日,华为开发者布道师、桂林电子科技大学李明辉同学在线下组织了围绕mindspore框架和昇腾边缘设备的两次布道活动,本次参与活动的同学来自数学与计算机科学学院与人工智能学院共两百余名学生。活动开始,李明辉同学以通俗易懂的语言为大家详细介绍了MindSpore框架的优势。他强调,MindSpore作为一款面向AI应用的全场景深度学习框架,具有易用、高效、安全等特点,为广大开发者提供了极大的便利。在场的大一同学们纷纷表示对MindSpore框架产生了浓厚兴趣。针对大一新生,李明辉同学贴心地为他们规划了学习昇思框架的路线,并手把手教会了同学们如何利用ATC(Ascend Tensor Compiler)转换自己的模型。这一环节让在场的同学们对人工智能技术的实际应用有了更深刻的认识。NPU案例分享在NPU案例分享环节,李明辉同学向大家展示了魔乐社区的体验空间,并详细讲解了如何离线部署属于自己的模型。这一环节让同学们感受到了人工智能技术的魅力,也为他们今后的学术研究和项目实践奠定了基础。案例分享紧接着,李明辉同学为本科生们介绍了华为云最新云主机,让同学们亲身体验到了云开发的便捷与高效。他通过实际操作演示,让同学们对华为云的技术实力有了更直观的了解。活动照片1活动照片2活动照片3此次活动的成功举办,不仅提高了同学们对人工智能技术的认识,还为他们提供了一个交流学习的平台。相信在未来的学习和实践中,同学们将不断探索,为我国人工智能领域的发展贡献自己的力量。
  • [分享交流] 🎉重大消息!10 月 21 日华为开发者布道师第三场直播来袭!🎉
    活动信息【活动主题】:昇思MindSpore:AI 领域的创新力量与跨平台之路【报名链接】:https://developer.huawei.com/home/activity/60b58a1735f24db681a1641429a6932c【直播时间】:2024/10/21 19:00-20:30【直播嘉宾】:华为开发者布道师、郑州轻工业大学梅科尔工作室核心成员陈新杰【直播链接】:待定【直播简介】:深度探索昇思 MindSpore 在 AI 领域的精彩应用,剖析技术精髓,通过医疗创新案例展示实际应用与技术突破,涵盖问题识别到解决方案全过程,重点介绍算法关键步骤,还简述 PyTorch 到 MindSpore 框架转换技巧,为开发者提供跨平台开发指南。【直播福利】:福利一:互动有礼1.礼品列表:定制开发者布道师Polo杉,抽华为定制充电宝2.拟定互动口令,便于官网直播间发口令“华为开发者布道师”抽 华为精美礼品福利二:有奖提问1.礼品列表:定制开发者布道师保温杯福利三:连续打卡1.后续会上线一系列的开发者布道师线上直播活动,连续参加活动并签到的开发者,会获得连续签到激励,奖品多多,敬请期待!
  • [问题求助] mindspore 在动态图设置下,进行推理的时候(model.set_train(False)),报错Illegal AnfNode for evaluating
    mindspore1.10版本,在推理阶段,当我将model(x)放入 dataset.create_dict_iterator() 的遍历里的时候,就会报错,如图RuntimeError: Illegal AnfNode for evaluating, node: @BatchNorm.16:фdout(type:Parameter), fg: BatchNorm.16 conf: Node: 0x1fef5d48e10/@BatchNorm.16:фdout-uid(1695), Context: 0x1fef5ca0ab0/{FuncGraph: BatchNorm.16 Args: [0]: AbstractTensor(shape: (1, 32, 40, 99), element: AbstractScalar(Type: Float32, Value: AnyValue, Shape: NoShape), value_ptr: 0x1feec42ef90, value: AnyValue), [1]: AbstractTensor(shape: (32), element: AbstractScalar(Type: Float32, Value: AnyValue, Shape: NoShape), value_ptr: 0x1feec42ef90, value: AnyValue), [2]: AbstractTensor(shape: (32), element: AbstractScalar(Type: Float32, Value: AnyValue, Shape: NoShape), value_ptr: 0x1feec42ef90, value: AnyValue), [3]: AbstractTensor(shape: (32), element: AbstractScalar(Type: Float32, Value: AnyValue, Shape: NoShape), value_ptr: 0x1feec42ef90, value: AnyValue), [4]: AbstractTensor(shape: (32), element: AbstractScalar(Type: Float32, Value: AnyValue, Shape: NoShape), value_ptr: 0x1feec42ef90, value: AnyValue), [5]: AbstractTuple{element[0]: AbstractTensor(shape: (1, 32, 40, 99), element: AbstractScalar(Type: Float32, Value: AnyValue, Shape: NoShape), value_ptr: 0x1feec42ef90, value: AnyValue), element[1]: AbstractTensor(shape: (32), element: AbstractScalar(Type: Float32, Value: AnyValue, Shape: NoShape), value_ptr: 0x1feec42ef90, value: AnyValue), element[2]: AbstractTensor(shape: (32), element: AbstractScalar(Type: Float32, Value: AnyValue, Shape: NoShape), value_ptr: 0x1feec42ef90, value: AnyValue), element[3]: AbstractTensor(shape: (32), element: AbstractScalar(Type: Float32, Value: AnyValue, Shape: NoShape), value_ptr: 0x1feec42ef90, value: AnyValue), element[4]: AbstractTensor(shape: (32), element: AbstractScalar(Type: Float32, Value: AnyValue, Shape: NoShape), value_ptr: 0x1feec42ef90, value: AnyValue)}, [6]: AbstractTuple{element[0]: AbstractTensor(shape: (1, 32, 40, 99), element: AbstractScalar(Type: Float32, Value: AnyValue, Shape: NoShape), value_ptr: 0x1feec42ef90, value: AnyValue), element[1]: AbstractTensor(shape: (32), element: AbstractScalar(Type: Float32, Value: AnyValue, Shape: NoShape), value_ptr: 0x1feec42ef90, value: AnyValue), element[2]: AbstractTensor(shape: (32), element: AbstractScalar(Type: Float32, Value: AnyValue, Shape: NoShape), value_ptr: 0x1feec42ef90, value: AnyValue), element[3]: AbstractTensor(shape: (32), element: AbstractScalar(Type: Float32, Value: AnyValue, Shape: NoShape), value_ptr: 0x1feec42ef90, value: AnyValue), element[4]: AbstractTensor(shape: (32), element: AbstractScalar(Type: Float32, Value: AnyValue, Shape: NoShape), value_ptr: 0x1feec42ef90, value: AnyValue)}, Parent: { Args: }}, FuncGraph: 0x1fef5d07210/BatchNorm.16。但是如果直接把model(x)放在遍历外面就没有问题,如图
  • [活动分享] 【华为开发者布道师桂林电子科技大学专场】Mindspore启蒙与开发实践圆满举行
    2024年9月28日,在布道师李明辉的自发组织,桂林电子科技大学数学与计算机科学学院“最美燕亭”系列报告会暨华为开发者布道师活动“香橙派AIPro实践活动”顺利开展,本次活动主要覆盖了Mindspore框架的介绍以及如何利用香橙派AIpro进行目标检测任务。活动宣传照片活动现场照片本次活动布道师李明辉向学院研一的同学们从浅到深的介绍了Mindspore开源社区,并且详细的介绍了各个Mindspore的套件。活动现场照片同时还向大家介绍了搭载NPU的边缘设备——香橙派AIPro并进行了实际的案例分享。改进后的模型本次活动向大家展现了如何改进轻量化的yolov5模型,摘除Focus层,避免多次采用slice操作。避免多次使用C3 Leyer以及高通道的C3 Layer减少噪音。摘除shufflenetv2 backbone的1024 conv 和 5×5 pooling数据增强通过调用Mindspore接口,在训练前对数据进行增强,提高了模型的鲁棒性。模型推理同时通过现场演示,向大家展示了香橙派AIpro如何利用NPU进行模型推理。避障方案演示
  • [问题求助] 自定义数据集训练时遇到错误ValueError: The data pipeline is not a tree
    def process_dataset(dataset, processor, max_seq_len=128, batch_size=16, shuffle=False): def process_image(image): image = Image.fromarray(image.astype('uint8'), 'L') image = image.convert("RGB") pixel_values = processor(image, return_tensors="ms").pixel_values return pixel_values dataset = dataset.map(operations=process_image, input_columns="image", output_columns='image') dataset = dataset.map(operations=text_tokenizer, input_columns="text", output_columns="text") dataset = dataset.batch(batch_size) return dataset train_dataset = process_dataset(iam["train"],processor=processor) for batch in train_dataset1.create_dict_iterator(): print(batch['image'].dtype)iam["train"]为mindspore.dataset.engine.datasets_user_defined.GeneratorDataset运行时报错ValueError Traceback (most recent call last) in <cell line: 1>() ----> 1 for batch in train_dataset1.create_dict_iterator(): 2 print(batch['image'].dtype) 3 break/usr/local/lib/python3.10/dist-packages/mindspore/dataset/engine/datasets.py in parse_tree(self, getter_mode) 422 """ 423 if len(self.parent) > 1: --> 424 raise ValueError("The data pipeline is not a tree (i.e., one node has 2 consumers)") 425 ir_children = [d.parse_tree(getter_mode) for d in self.children] 426 # Bootstrap can only be performed on a copy of the original dataset node.ValueError: The data pipeline is not a tree (i.e., one node has 2 consumers)
  • [问题求助] atc转模型时报错AttributeError: module 'sys' has no attribute 'argv'
    转换命令:(MindSpore) [ma-user work]$atc --model=./resnet50_v1.onnx --framework=5 --output=./onnx_resnet50 --soc_version=Ascend910A报错:ATC start working now, please wait for a moment. Traceback (most recent call last):   File "/usr/local/Ascend/ascend-toolkit/latest/python/site-packages/te_fusion/fusion_util.py", line 2357, in multi_process_check     if not fix_forkserver():   File "/usr/local/Ascend/ascend-toolkit/latest/python/site-packages/te_fusion/fusion_util.py", line 2334, in fix_forkserver     fs.ensure_running()   File "/usr/lib64/python3.7/multiprocessing/forkserver.py", line 111, in ensure_running     data = spawn.get_preparation_data('ignore')   File "/usr/lib64/python3.7/multiprocessing/spawn.py", line 163, in get_preparation_data     sys_argv=sys.argv, AttributeError: module 'sys' has no attribute 'argv' ATC run failed, Please check the detail log, Try 'atc --help' for more information E29999: Inner Error! E29999  [GraphOpt][InitializeInner][InitTbeFunc] Failed to init tbe.[FUNC:InitializeInner][FILE:tbe_op_store_adapter.cc][LINE:1338]         [SubGraphOpt][PreCompileOp][InitAdapter] InitializeAdapter adapter [tbe_op_adapter] failed! Ret [4294967295][FUNC:InitializeAdapter][FILE:op_store_adapter_manager.cc][LINE:67]         [SubGraphOpt][PreCompileOp][Init] Initialize op store adapter failed, OpsStoreName[tbe-custom].[FUNC:Initialize][FILE:op_store_adapter_manager.cc][LINE:114]         [FusionMngr][Init] Op store adapter manager init failed.[FUNC:Initialize][FILE:fusion_manager.cc][LINE:326]         PluginManager InvokeAll failed.[FUNC:Initialize][FILE:ops_kernel_manager.cc][LINE:99]         OpsManager initialize failed.[FUNC:InnerInitialize][FILE:gelib.cc][LINE:167]         GELib::InnerInitialize failed.[FUNC:Initialize][FILE:gelib.cc][LINE:119] PYTHONPATH是:(MindSpore) [ma-user work]$echo $PYTHONPATH/home/ma-user/anaconda3/envs/MindSpore/lib/python3.7/site-packages/:/home/ma-user/anaconda3/envs/MindSpore/lib:/usr/local/Ascend/tfplugin/latest/python/site-packages:/usr/local/Ascend/ascend-toolkit/latest/python/site-packages:/usr/local/Ascend/ascend-toolkit/latest/opp/op_impl/built-in/ai_core/tbe:/usr/local/seccomponent/lib:/home/ma-user/infer/model/1 
  • [问题求助] mindspore中的图算融合跟算子融合有什么区别
    最近在看mindspore中的特性有关于图算融合的介绍,关于图算融合,社区教程里介绍的更多是算子融合,如何理解图算融合里的图呢,图算融合跟算子融合具体又有什么区别呢
  • [问题求助] mindspore如何使用优化器进行参数更新和梯度清零
    mindspore如何使用优化器进行参数更新和梯度清零,Adam和optimizer都找不到相关功能和范例
  • [问题求助] 求助:为什么这个华为的车牌识别的api无法调用?其他几个开通了以后都可以使用,
    其他几个开通了以后都可以使用,但是这个显示好像没有和环境配置上,但是其他的身份证识别护照识别发票识别我都是用同样的方式进行调用的为什么会这样呢???
  • [问题求助] mindspore DQN reward设计
    存入buffer的reward作用是什么?
  • [AI类] 使用MindSpore报错RuntimeError: For 'MatMul', encountered an exception: cuBLAS Error
    我的环境Python 3.9.19 软件mindspore 2.2.0 库cuda11.6 cudnn8.32或者7.65 运行报错:RuntimeError: For 'MatMul', encountered an exception:  ---------------------------------------------------- - cuBLAS Error: ---------------------------------------------------- cublasGemmEx failed. Possible reasons: the GPU is occupied by other processes. | Error Number: 7 CUBLAS_STATUS_INVALID_VALUE: An unsupported value or parameter was passed to the function (a negative vector size, for example).  ---------------------------------------------------- - C++ Call Stack: (For framework developers) ---------------------------------------------------- mindspore/ccsrc/plugin/device/gpu/kernel/math/matmul_gpu_kernel.cc:174 LaunchKernel mindspore/ccsrc/plugin/device/gpu/kernel/math/matmul_gpu_kernel.cc:162 LaunchKernel  when invoke cublas cublasGemmEx [WARNING] MD(4169705,153339026680,python):2024-05-18-12:51:20.395.751 [mindspore/ccsrc/minddata/dataset/engine/datasetops/data_queue_op.cc:163] ~DataQueueOp]  preprocess_batch: 4; batch_queue: 0, 0, 0, 0, 0, 0, 4, 3, 10;             push_start_time -> push_end_time 2024-05-18-12:51:07.013.040 -> 2024-05-18-12:51:07.013.522 2024-05-18-12:51:07.721.456 -> 2024-05-18-12:51:07.721.914 2024-05-18-12:51:08.688.257 -> 2024-05-18-12:51:15.828.695 2024-05-18-12:51:15.828.722 -> 2024-05-18-12:51:20.381.705 For more details, please refer to the FAQ at https://www.mindspore.cn/docs/en/master/faq/data_processing.html. 我看有四个->进程,尝试1,2,4卡均该报错,看论坛解决方法有:有一样的报错,说看被其他进程占了,我脚本加上nvidia-smi 初始化后看没有任何进程有人说cuda和cublas不匹配,我看cuda11.6,cublasLt.so.11.8.1.74和其他机器上cuda11.6和cublas版本一模一样的,故cuda排除还有人说是cudnn8不能初始显卡,脚本写的832我换成765就依然是Error Number: 7目前没有头绪,cuda,cudnn这些都是管理员装的,应该也不存在问题
  • [MindSpore框] 求助大佬,打开mindspore显示file save Error,Invalid response:500 Internal Server Error 怎么办
    如图所示,初始化完成后就显示这个,然后无法上传文件,无法选择kernel,甚至无法删除文件夹,这可咋办呀…………