• [问题求助] facescrub数据集是有什么特点吗?
    facescrub数据集是有什么特点吗?为什么用它训练的模型逆向攻击的图像重建准确率很低?
  • [活动分享] 华为开发者布道师技术沙龙·西安站,11月16日重磅来袭!
    11月16日,华为开发者布道师技术沙龙·西安站将在西安交通大学创新港校区举办,将由华为云、鸿蒙和AI领域的技术专家做产业前沿规划的宣讲,同时,来自西安6所高校11位教师开发者布道师将分别从产学合作课程建设、融合产业新技术的创新项目和大赛获奖作品案例三个方向分享他们与华为合作的经验、收获。这是一场知识和经验交融的盛会,是高校师生深入了解华为生态技术,探寻合作机会的绝佳平台,精彩不容错过。诚邀西安区域和周边高校师生报名参与,期待在西安与您相遇!报名链接:cid:link_0
  • [技术干货] 计算机眼中的图像:理解与处理【CV入门级保姆教程】
    计算机眼中的图像:理解与处理在计算机视觉领域,图像是计算机感知世界的窗口。计算机通过图像处理算法将图像转化为可以理解和分析的信息。这一过程涉及多个阶段,包括图像预处理、特征提取、对象检测和图像分析等。OpenCV(Open Source Computer Vision Library)是一个强大的开源库,广泛用于计算机视觉和图像处理任务。本文将探讨计算机如何“看到”图像,并通过OpenCV代码示例展示如何实现这些技术。1. 图像预处理在计算机处理图像之前,通常需要对图像进行预处理,以提高后续处理的准确性。常见的预处理操作包括灰度化、图像平滑和去噪。1.1 灰度化灰度化是将彩色图像转换为灰度图像的过程。灰度图像包含的信息较少,但处理速度更快,适合进行后续分析。import cv2 # 读取彩色图像 color_image = cv2.imread('color_image.jpg') # 转换为灰度图像 gray_image = cv2.cvtColor(color_image, cv2.COLOR_BGR2GRAY) # 显示灰度图像 cv2.imshow('Gray Image', gray_image) cv2.waitKey(0) cv2.destroyAllWindows()1.2 图像平滑与去噪图像平滑可以去除图像中的噪声。常用的平滑方法包括高斯模糊和中值滤波。# 高斯模糊 smooth_image = cv2.GaussianBlur(gray_image, (5, 5), 0) # 中值滤波 median_image = cv2.medianBlur(gray_image, 5) # 显示结果 cv2.imshow('Gaussian Blur', smooth_image) cv2.imshow('Median Blur', median_image) cv2.waitKey(0) cv2.destroyAllWindows()2. 特征提取特征提取是从图像中提取有用信息的过程。这些特征可以用于图像分类、目标检测等任务。常见的特征提取方法包括边缘检测和角点检测。2.1 边缘检测边缘检测用于识别图像中物体的边界。常用的边缘检测算法是Canny边缘检测。# Canny边缘检测 edges = cv2.Canny(gray_image, 100, 200) # 显示边缘检测结果 cv2.imshow('Edges', edges) cv2.waitKey(0) cv2.destroyAllWindows()2.2 角点检测角点检测用于检测图像中角点的位置。Harris角点检测是常用的方法之一。# Harris角点检测 harris_corners = cv2.cornerHarris(gray_image, 2, 3, 0.04) # 归一化和显示结果 harris_corners = cv2.dilate(harris_corners, None) color_image[harris_corners > 0.01 * harris_corners.max()] = [0, 0, 255] cv2.imshow('Harris Corners', color_image) cv2.waitKey(0) cv2.destroyAllWindows()3. 对象检测对象检测旨在识别和定位图像中的对象。常见的对象检测技术包括基于模板匹配和基于机器学习的方法。3.1 模板匹配模板匹配是一种简单的对象检测方法,通过与模板图像的匹配来识别目标。# 读取模板图像和待检测图像 template = cv2.imread('template.jpg', 0) w, h = template.shape[::-1] # 使用模板匹配 res = cv2.matchTemplate(gray_image, template, cv2.TM_CCOEFF_NORMED) threshold = 0.8 loc = np.where(res >= threshold) # 绘制矩形框 for pt in zip(*loc[::-1]): cv2.rectangle(color_image, pt, (pt[0] + w, pt[1] + h), (0, 255, 0), 2) cv2.imshow('Template Matching', color_image) cv2.waitKey(0) cv2.destroyAllWindows()3.2 基于机器学习的检测更复杂的对象检测方法包括基于卷积神经网络(CNN)的检测算法,如YOLO和SSD。这些方法能够处理复杂的检测任务,但在这里我们将不详细介绍这些方法的实现。好的,我们继续深入探讨计算机如何理解和处理图像,从对象检测开始。4. 对象检测4.1 模板匹配模板匹配是一种经典的对象检测技术,通过在图像中滑动模板并计算匹配度来识别目标。尽管简单,但在某些应用中仍然有效,特别是当目标在图像中变化不大时。以下是模板匹配的详细代码示例:import cv2 import numpy as np # 读取待检测图像和模板图像 image = cv2.imread('image.jpg') gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) template = cv2.imread('template.jpg', 0) w, h = template.shape[::-1] # 模板匹配 res = cv2.matchTemplate(gray_image, template, cv2.TM_CCOEFF_NORMED) threshold = 0.8 loc = np.where(res >= threshold) # 绘制矩形框标记匹配结果 for pt in zip(*loc[::-1]): cv2.rectangle(image, pt, (pt[0] + w, pt[1] + h), (0, 255, 0), 2) cv2.imshow('Template Matching', image) cv2.waitKey(0) cv2.destroyAllWindows()4.2 基于机器学习的检测在实际应用中,模板匹配方法的局限性很明显,特别是在目标形状、大小或旋转角度发生变化时。为了处理这些复杂的情况,计算机视觉领域引入了基于机器学习的方法。以下是一些主流的对象检测技术:4.2.1 YOLO(You Only Look Once)YOLO是一种高效的对象检测方法,通过将整个图像划分为网格,并在每个网格中预测边界框和类别。YOLO的关键特点是其端到端的训练方式,使其在实时检测中表现出色。OpenCV库支持YOLO模型的加载和推理。以下是如何使用YOLO进行对象检测的示例代码:import cv2 # 加载YOLO模型 net = cv2.dnn.readNet('yolov3.weights', 'yolov3.cfg') layer_names = net.getLayerNames() output_layers = [layer_names[i[0] - 1] for i in net.getUnconnectedOutLayers()] # 读取图像 image = cv2.imread('image.jpg') height, width, channels = image.shape # 预处理图像 blob = cv2.dnn.blobFromImage(image, 0.00392, (416, 416), (0, 0, 0), True, crop=False) net.setInput(blob) outs = net.forward(output_layers) # 解析检测结果 class_ids = [] confidences = [] boxes = [] for out in outs: for detection in out: for obj in detection: scores = obj[5:] class_id = np.argmax(scores) confidence = scores[class_id] if confidence > 0.5: center_x = int(obj[0] * width) center_y = int(obj[1] * height) w = int(obj[2] * width) h = int(obj[3] * height) x = int(center_x - w / 2) y = int(center_y - h / 2) boxes.append([x, y, w, h]) confidences.append(float(confidence)) class_ids.append(class_id) # 应用非极大值抑制 indices = cv2.dnn.NMSBoxes(boxes, confidences, 0.5, 0.4) for i in indices: i = i[0] box = boxes[i] x, y, w, h = box cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2) cv2.imshow('YOLO Detection', image) cv2.waitKey(0) cv2.destroyAllWindows()4.2.2 SSD(Single Shot MultiBox Detector)SSD是一种基于卷积神经网络(CNN)的对象检测算法,通过在不同尺度的特征图上进行检测来处理多尺度的目标。以下是如何使用SSD进行对象检测的示例代码:import cv2 # 加载SSD模型 net = cv2.dnn.readNet('deploy.prototxt', 'ssd.caffemodel') layer_names = net.getLayerNames() output_layers = [layer_names[i[0] - 1] for i in net.getUnconnectedOutLayers()] # 读取图像 image = cv2.imread('image.jpg') height, width, channels = image.shape # 预处理图像 blob = cv2.dnn.blobFromImage(image, 1.0, (300, 300), (127.5, 127.5, 127.5), swapRB=True, crop=False) net.setInput(blob) outs = net.forward(output_layers) # 解析检测结果 for detection in outs[0][0]: for obj in detection: confidence = obj[2] if confidence > 0.5: box = obj[3:7] * np.array([width, height, width, height]) (x, y, x2, y2) = box.astype('int') cv2.rectangle(image, (x, y), (x2, y2), (0, 255, 0), 2) cv2.imshow('SSD Detection', image) cv2.waitKey(0) cv2.destroyAllWindows()5. 图像分割图像分割是将图像分解为多个区域,以便进行更细致的分析。常用的分割方法包括阈值分割、轮廓检测和基于深度学习的方法。5.1 阈值分割阈值分割是一种简单而有效的图像分割技术,通过设置阈值将图像分成前景和背景。# 二值化处理 _, binary_image = cv2.threshold(gray_image, 127, 255, cv2.THRESH_BINARY) # 显示结果 cv2.imshow('Binary Image', binary_image) cv2.waitKey(0) cv2.destroyAllWindows()5.2 轮廓检测轮廓检测用于提取图像中的边界信息,常用于对象的形状分析。# 查找轮廓 contours, _ = cv2.findContours(binary_image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) # 绘制轮廓 cv2.drawContours(image, contours, -1, (0, 255, 0), 2) cv2.imshow('Contours', image) cv2.waitKey(0) cv2.destroyAllWindows()5.3 基于深度学习的分割深度学习方法,如U-Net和Mask R-CNN,提供了强大的图像分割能力,特别是在复杂场景下表现优异。6. 目标跟踪目标跟踪是指在视频序列中持续跟踪特定对象。常见的跟踪算法包括KLT跟踪、Meanshift和Camshift。6.1 KLT跟踪KLT(Kanade-Lucas-Tomasi)跟踪是一种基于角点的跟踪方法,适用于短期跟踪任务。# 初始化视频捕捉 cap = cv2.VideoCapture('video.mp4') # 读取第一帧 ret, frame = cap.read() gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 检测角点 p0 = cv2.goodFeaturesToTrack(gray_frame, mask=None, **feature_params) # 创建掩码图像用于绘制 mask = np.zeros_like(frame) while True: ret, frame = cap.read() if not ret: break gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) p1, st, err = cv2.calcOpticalFlowPyrLK(gray_frame, gray_frame, p0, None) if p1 is not None: for i, (new, old) in enumerate(zip(p1, p0)): a, b = new.ravel() c, d = old.ravel() mask = cv2.line(mask, (a, b), (c, d), color[i].tolist(), 2) frame = cv2.circle(frame, (a, b), 5, color[i].tolist(), -1) img = cv2.add(frame, mask) cv2.imshow('KLT Tracking', img) if cv2.waitKey(30) & 0xFF == 27: break cap.release() cv2.destroyAllWindows()6.2 Meanshift和CamshiftMeanshift和Camshift算法用于对象跟踪,通过跟踪目标的颜色直方图来实现跟踪。# 读取第一帧并初始化ROI ret, frame = cap.read() roi = cv2.selectROI(frame, False) hsv_roi = cv2.cvtColor(frame , cv2.COLOR_BGR2HSV) roi_hist = cv2.calcHist([hsv_roi], [0, 1], roi, [16, 16], [0, 180, 0, 256]) # 归一化直方图 roi_hist /= roi_hist.sum() # Meanshift初始化 term_crit = (cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_COUNT, 10, 1) while True: ret, frame = cap.read() if not ret: break hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) back_proj = cv2.calcBackProject([hsv], [0, 1], roi_hist, [0, 180, 0, 256], 1) ret, roi = cv2.meanShift(back_proj, roi, term_crit) x, y, w, h = roi frame = cv2.rectangle(frame, (x, y), (x+w, y+h), 255, 2) cv2.imshow('Meanshift Tracking', frame) if cv2.waitKey(30) & 0xFF == 27: break cap.release() cv2.destroyAllWindows()7. 图像恢复图像恢复技术用于修复图像中的缺陷,例如去除噪声、修复丢失的区域等。常见的图像恢复技术包括去噪、图像修复和超分辨率重建。7.1 去噪去噪技术包括多种滤波器,如高斯滤波器、双边滤波器等。# 双边滤波 denoised_image = cv2.bilateralFilter(color_image, 9, 75, 75) cv2.imshow('Denoised Image', denoised_image) cv2.waitKey(0) cv2.destroyAllWindows()7.2 图像修复图像修复用于修补图像中的缺陷区域。OpenCV提供了inpaint函数来实现这一功能。# 读取图像和掩模 image = cv2.imread('damaged_image.jpg') mask = cv2.imread('mask.jpg', 0) # 图像修复 restored_image = cv2.inpaint(image, mask, 3, cv2.INPAINT_TELEA) cv2.imshow('Restored Image', restored_image) cv2.waitKey(0) cv2.destroyAllWindows()7.3 超分辨率重建超分辨率技术通过重建更高分辨率的图像来提升图像质量。OpenCV提供了实现超分辨率的工具。# 创建超分辨率重建对象 sr = cv2.dnn_superres.DnnSuperResImpl_create() sr.readModel('EDSR_x3.pb') sr.setModel('edsr', 3) # 读取图像并应用超分辨率 image = cv2.imread('low_res_image.jpg') result = sr.upsample(image) cv2.imshow('Super Resolution', result) cv2.waitKey(0) cv2.destroyAllWindows()8. 结论计算机眼中的图像处理技术涵盖了从图像预处理到目标检测、图像分割、目标跟踪和图像恢复的广泛领域。OpenCV提供了强大的工具和函数来实现这些技术,使得计算机视觉应用得以实现和优化。在实际应用中,结合这些技术可以构建出功能强大且高效的图像处理系统。
  • [技术干货] OpenCV开发环境的选择:Notebook与IDE环境的比较【CV入门级保姆教程】
    文章标题: OpenCV开发环境的选择:Notebook与IDE环境的比较在计算机视觉领域,OpenCV(开源计算机视觉库)是一款强大的工具。无论是进行基础图像处理还是复杂的深度学习任务,OpenCV都能提供丰富的功能。然而,开发环境的选择对开发效率和代码的可维护性有着至关重要的影响。本文将对比Notebook与IDE环境在OpenCV开发中的优缺点,并提供实际的代码示例,以帮助读者做出明智的选择。1. 引言OpenCV的开发通常依赖于Python等高级编程语言。Python不仅因其丰富的库和简洁的语法受到欢迎,还因为其强大的数据处理能力。开发环境的选择会影响到代码的编写、调试和测试过程。Notebook(如Jupyter Notebook)和集成开发环境(IDE,如PyCharm或Visual Studio Code)是两种常用的开发环境,各有其优缺点。2. Notebook环境2.1 优点交互性: Notebook环境提供了交互式编程体验,允许逐步执行代码块并查看即时结果。对于图像处理和机器学习实验,这种实时反馈是非常有帮助的。可视化支持: Notebook可以直接嵌入图像和图表,使得图像处理结果的可视化更加直观。文档和代码结合: 在Notebook中,可以将代码、图像和文档结合在一起,创建详细的实验记录和报告。2.2 缺点项目管理不便: Notebook适合进行实验和数据分析,但在大型项目中,管理和组织代码可能会变得复杂。缺乏强大的调试功能: 虽然Notebook可以调试代码,但其调试功能不如IDE强大。2.3 代码示例以下是一个使用Jupyter Notebook进行OpenCV图像处理的示例:# 导入库 import cv2 from matplotlib import pyplot as plt # 读取图像 image = cv2.imread('example.jpg') gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 显示图像 plt.subplot(1, 2, 1) plt.title('Original Image') plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB)) plt.subplot(1, 2, 2) plt.title('Grayscale Image') plt.imshow(gray_image, cmap='gray') plt.show()在Jupyter Notebook中运行上述代码,你将看到原始图像和灰度图像并排显示,帮助你快速进行图像处理实验。3. IDE环境3.1 优点项目组织和管理: IDE提供了强大的项目管理功能,包括代码组织、版本控制、依赖管理等。对于大型OpenCV项目,这些功能可以显著提升开发效率。调试功能: 大多数IDE(如PyCharm或Visual Studio Code)提供了高级调试功能,包括断点、步进执行和变量监视。这使得代码的调试和问题排查变得更加高效。代码补全和静态分析: IDE通常具有智能代码补全和静态分析功能,帮助开发者编写更高质量的代码。3.2 缺点学习曲线: 对于新手而言,IDE的学习曲线可能比较陡峭,需要时间熟悉其各种功能和设置。交互性较差: 相较于Notebook,IDE的交互性较差,不便于逐步执行和即时查看结果。3.3 代码示例在IDE中编写OpenCV代码,通常将整个项目组织为一个Python脚本或模块。以下是一个简单的OpenCV图像处理示例:import cv2 def process_image(image_path): # 读取图像 image = cv2.imread(image_path) gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 保存结果 cv2.imwrite('grayscale_image.jpg', gray_image) if __name__ == "__main__": process_image('example.jpg')在IDE中,你可以方便地使用调试功能和项目结构来管理和运行这个脚本。4. Notebook与IDE环境的选择4.1 适用场景Notebook环境: 适合于数据分析、实验和学习阶段。其强大的可视化和文档功能使得它在快速原型开发和数据探索中非常有用。IDE环境: 适合于实际开发和大型项目。其强大的调试和项目管理功能可以显著提高开发效率和代码质量。4.2 综合考虑对于OpenCV的开发,Notebook和IDE环境可以根据实际需求进行选择。如果你的工作重心是快速实验和数据分析,Notebook将是一个合适的选择。而如果你需要进行系统化的开发和维护大型项目,IDE将为你提供更强的支持。5. 实际开发中的环境选择在实际开发中,选择Notebook还是IDE环境往往取决于项目的具体需求、团队的工作方式以及个人的开发习惯。以下是一些具体的使用场景和选择建议:5.1 Notebook环境的高级使用Notebook环境特别适合进行数据探索和算法验证。在进行图像处理实验时,你可以利用Notebook的交互特性进行实时的调试和调整。以下是一些进阶用法:动态参数调整: 使用交互式控件(如ipywidgets)来调整图像处理参数。这样可以在Notebook中动态修改参数并立即查看结果。import ipywidgets as widgets from IPython.display import display def update_image(blurring_kernel_size): blurred_image = cv2.GaussianBlur(image, (blurring_kernel_size, blurring_kernel_size), 0) plt.imshow(cv2.cvtColor(blurred_image, cv2.COLOR_BGR2RGB)) plt.show() kernel_size_slider = widgets.IntSlider(value=5, min=1, max=15, step=2, description='Kernel Size:') widgets.interact(update_image, blurring_kernel_size=kernel_size_slider)数据可视化: 利用matplotlib、seaborn等库创建数据可视化,帮助理解图像处理结果的效果。import seaborn as sns # 假设我们要可视化图像的灰度直方图 gray_image_hist = cv2.calcHist([gray_image], [0], None, [256], [0, 256]) plt.figure(figsize=(10, 5)) plt.plot(gray_image_hist, color='gray') plt.title('Histogram of Grayscale Image') plt.xlabel('Pixel Intensity') plt.ylabel('Frequency') plt.show()5.2 IDE环境的高级使用在IDE环境中,你可以利用更多的开发工具和功能来增强开发体验。以下是一些IDE环境中的高级使用技巧:自动化测试: 利用IDE的测试框架(如unittest或pytest)自动化测试你的图像处理函数,确保代码的稳定性和可靠性。import unittest import cv2 class TestImageProcessing(unittest.TestCase): def test_grayscale_conversion(self): image = cv2.imread('example.jpg') gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) self.assertEqual(len(gray_image.shape), 2, "Image should be grayscale") if __name__ == '__main__': unittest.main()代码重构与版本控制: 利用IDE的重构功能和版本控制工具(如Git)管理你的代码,保证代码质量并追踪修改记录。# 使用Git命令行进行版本控制 git init git add . git commit -m "Initial commit"集成工具: 在IDE中配置和集成工具(如Docker、CI/CD管道)以提升开发和部署效率。# Dockerfile 示例 FROM python:3.9 RUN pip install opencv-python matplotlib ipywidgets COPY . /app WORKDIR /app CMD ["python", "main.py"]6. Notebook与IDE的结合使用在实际工作中,Notebook和IDE并不是非此即彼的选择。许多开发者会将两者结合使用,以便充分利用各自的优点:开发与实验: 在Notebook中进行初步的实验和算法验证,利用其交互性和可视化功能快速迭代和调整。系统化开发: 在IDE中进行项目的系统化开发和维护,使用IDE的调试功能和项目管理工具来处理更复杂的代码结构和需求。文档生成: 将Notebook中的实验记录和结果转换为报告,集成到IDE的项目中作为文档和参考。# 在Notebook中生成报告 from nbconvert import HTMLExporter notebook_filename = 'experiment_notebook.ipynb' html_exporter = HTMLExporter() html_data, resources = html_exporter.from_filename(notebook_filename) with open('experiment_report.html', 'w') as f: f.write(html_data)7. 实践中的选择案例为了更好地理解Notebook和IDE环境的实际应用,我们可以参考一些具体的案例:7.1 数据科学项目在数据科学项目中,Notebook通常被用来进行数据清洗、可视化和建模。由于Notebook的交互性和可视化功能,它能帮助数据科学家快速验证假设和调整模型参数。案例: 假设你正在进行一个图像分类任务,你可以在Notebook中逐步探索数据,调整图像预处理步骤,并即时查看效果。7.2 工业级应用对于工业级应用或大型系统开发,IDE的项目管理和调试功能显得尤为重要。IDE环境能够支持复杂的项目结构和多人协作,并且提供了强大的代码分析和重构工具。案例: 在开发一个自动化监控系统时,你可以在IDE中组织和管理大量的代码模块,并利用调试工具解决复杂的问题。8. 结论与建议8.1 实际应用中的选择策略在选择Notebook或IDE环境时,可以考虑以下策略来确保你获得最佳的开发体验和成果:项目阶段: 在项目的不同阶段,可能会优先使用不同的环境。例如,初期阶段可能更多地使用Notebook来探索和验证算法,而开发和部署阶段则使用IDE来系统化地管理和维护代码。团队协作: 如果你在一个团队中工作,IDE环境通常会更适合团队协作和代码管理。它支持版本控制和代码审查,有助于团队成员之间的协作。个人偏好: 对于个人开发者,选择合适的环境可以显著提升工作效率。Notebook适合进行交互式实验,而IDE则适合进行长期开发和维护。根据个人工作风格和项目需求做出选择。8.2 环境设置和最佳实践Notebook环境设置安装与配置:安装Jupyter Notebook:pip install notebook启动Jupyter Notebook:jupyter notebook扩展和插件:安装ipywidgets以实现交互式控件。使用jupyterlab进行更强大的开发和可视化支持。优化性能:定期清理Notebook的输出,避免文件变得过于庞大。使用内存优化工具(如memory_profiler)来监测和优化代码性能。IDE环境设置选择IDE:常见IDE:PyCharm、Visual Studio Code、Spyder。根据个人喜好和项目需求选择合适的IDE。插件和工具:安装Python插件(如PyCharm的Python插件或VS Code的Python扩展)以增强IDE功能。配置版本控制工具(如Git)和调试工具,以便进行高效的代码管理和调试。项目结构:组织项目文件和目录结构,确保代码易于维护和扩展。使用虚拟环境(如venv或conda)来管理项目依赖,避免环境冲突。8.3 综合示例:Notebook与IDE的结合以下是一个实际开发中如何结合Notebook和IDE的示例流程:算法验证与实验:在Notebook中编写代码以验证图像处理算法。利用Notebook的可视化功能展示图像处理效果,并通过交互式控件调节算法参数。# Notebook代码示例 import cv2 import matplotlib.pyplot as plt from ipywidgets import interact def apply_filter(kernel_size): image = cv2.imread('example.jpg') filtered_image = cv2.GaussianBlur(image, (kernel_size, kernel_size), 0) plt.imshow(cv2.cvtColor(filtered_image, cv2.COLOR_BGR2RGB)) plt.title(f'Gaussian Blur with Kernel Size {kernel_size}') plt.axis('off') plt.show() interact(apply_filter, kernel_size=(1, 31, 2))系统化开发与测试:在IDE中将经过验证的算法代码迁移并组织为模块或脚本。编写测试用例以验证代码的正确性,并使用IDE的调试功能进行详细调试。# IDE代码示例 import cv2 import unittest def apply_filter(image_path, kernel_size): image = cv2.imread(image_path) return cv2.GaussianBlur(image, (kernel_size, kernel_size), 0) class TestImageProcessing(unittest.TestCase): def test_apply_filter(self): result_image = apply_filter('example.jpg', 5) self.assertIsNotNone(result_image) if __name__ == '__main__': unittest.main()文档生成与报告:将Notebook中的实验结果和代码记录生成报告,作为项目的一部分。在IDE中组织和维护项目文档,确保项目的完整性和可追溯性。# 生成HTML报告 from nbconvert import HTMLExporter notebook_filename = 'experiment_notebook.ipynb' html_exporter = HTMLExporter() html_data, resources = html_exporter.from_filename(notebook_filename) with open('experiment_report.html', 'w') as f: f.write(html_data)总结在OpenCV开发中,选择合适的开发环境对于提高开发效率和代码质量至关重要。以下是对Notebook和IDE环境的总结和建议:Notebook环境优点:交互性强:支持逐步执行代码,实时查看结果。便于可视化:可以直接嵌入图像和图表,直观展示数据处理结果。文档与代码结合:方便创建实验记录和报告,适合数据分析和实验。缺点:项目管理难:不适合复杂项目的系统化管理。调试功能弱:调试能力不如IDE强大。适用场景:数据探索和算法验证。实验和报告的生成。IDE环境优点:项目管理强:支持复杂的项目结构和代码管理,适合长期开发。调试功能全面:提供高级调试工具和功能,方便解决复杂问题。代码分析与重构:支持智能代码补全和静态分析,提高代码质量。缺点:学习曲线陡:新手可能需要时间适应IDE的功能。交互性较弱:不如Notebook那样适合实时实验和调整。适用场景:系统化的开发和维护大型项目。团队协作和代码管理。结合使用在实际工作中,将Notebook和IDE环境结合使用可以最大化两者的优点:初期实验:使用Notebook进行快速实验和数据可视化。系统开发:在IDE中进行项目的系统化开发、调试和维护。文档生成:利用Notebook生成实验报告,并在IDE中组织项目文档。建议选择环境:根据项目阶段、团队需求和个人偏好选择适合的环境。配置优化:为Notebook安装扩展和插件,优化IDE的项目结构和工具配置。持续更新:关注环境和工具的最新发展,保持竞争力。通过合理选择和结合Notebook与IDE环境,你可以提高OpenCV开发的效率和质量,取得更好的成果。
  • [技术干货] 【DTSE Tech Talk 精选问答】NO.63丨边云协同新场景,KubeEdge架构设计与边缘AI实践探索
    展望未来科技前沿,探索云原生边缘计算与边缘AI的无限可能!本期直播我们将解读业界首个云原生边缘计算框架KubeEdge的架构设计,如何实现边云协同AI,将AI能力无缝下沉至边缘,让AI赋能边侧各行各业,构建智能、高效、自治的边缘计算新时代,共同探索智能边缘的新篇章!直播链接:cid:link_0Q:云边协同推理是在云和边各一个模型吗?是通过什么指标将任务卸载到云端呢?A:sedna案例中云边协同推理是将一个大模型部署在云端,并将一个小模型部署在边缘端,对于简单的推理任务可以直接在边端推理,针对较难的任务可以由云端大模型推理。我们可以设置一个置信度阈值指标判断推理任务是否是难例,将难例使用云端大模型推理。Q:k8s 调用 kubeEdge 服务兼容性不匹配,如何解决?A:可能是因为版本的原因,一个kubeedge的版本能够兼容3个k8s的版本,需要安装合适版本的k8s。Q:边缘节点的故障恢复,KubeEdge是如何处理的?A:KubeEdge利用边缘侧轻量级数据库实现了云边消息元数据的持久化,这是其故障恢复能力的重要基础。通过将Pod、ConfigMap等基础元数据持久化在边缘节点上,确保即使在边缘节点离线或重启后,这些元数据也能被保留下来。这样,当边缘节点重新上线时,它可以直接从本地获取这些元数据,快速恢复应用的状态。Q:现在安装KubeEdge最简单的方式有推荐吗?A:社区推荐大家使用官方安装组件keadm进行安装,使用keadm安装时在云端节点只需执行keadm init命令进行初始化,获取秘钥后在边缘节点上执行keadm join命令即可。详细的安装教程可以参考官方文档https://kubeedge.io/docs/setup/install-with-keadm。此外,对于想试用KubeEdge功能的初学者,还可以使用keink工具自动创建一个KubeEdge集群,可以参考https://github.com/kubeedge/keinkQ:KubeEdge在边缘AI场景下如何提升模型的推理效率?A:kubeedge一方面借助Kubernetes的容器编排能力,实现了边缘AI应用的自动化部署和管理。另一方面还提出边缘AI智能框架sedna,其边云协同的理念能借助云端充足的资源提升边缘模型的性能,也可以使用边云协同推理提升系统推理效率。Q:kubeedge是否在边缘异常断电文件系统损坏做了相关优化, 边缘侧电力稳定性有可能较差,会存在异常断电场景A:kubeedge主要是对云边消息传递的可靠性做了增强,使用一个轻量级数据库存储云边控制命令的元数据,对于边缘节点的文件系统没有做相关的功能增强。Q:介绍一下边缘节点和kubeEdge的部署A:我们目前有三种方式部署kubeedge,分别是采用keadm、二进制部署以及keink自动部署,相关文档可以参考https://kubeedge.io/docs/category/setupQ:边缘AI在哪些行业有应用前景?A:边缘AI在智慧城市、智能家居、智慧医疗、AR/VR技术等方面有着广阔的应用前景。Q:边缘计算环境中,KubeEdge如何保障数据的安全性和隐私性?A:KubeEdge在节点安全方面,采用了容器隔离、CNI网络安全、节点入侵检测和容器自愈等技术。在访问控制方面,利用Kubernetes的RBAC(基于角色的访问控制)权限管理功能,能够对集群资源进行细粒度的访问控制。Q:云边之间的数据传输是否支持视频格式的传输?A:这里我们主要考虑到视频一般的传输数据量是很大的,如果使用云边通道进行传递会导致严重的通信负荷,使用目前在kubeedge 1.17版本的特性中我们只实现将摄像头采集到的视频流转化成帧文件或者视频片段存在边缘节点上,暂时不支持向云端传输。Q:CDN部署过程中,怎么保证节点容器有序和可控的升级? 是否支持版本的A/B 测试? 怎么对升级过程进行校验?A:可以通过分批升级与组内升级并发控制、细粒度版本设置、升级校验等方式解决以上问题,可以参考https://kubeedge.io/zh/case-studies/ctyun/Q:对于数据孤岛问题。对于需要对设备调节参数的场景,同一租户在不同楼宇中的控制系统,甚至电力系统部互通。那么对于这种需要预测的参数怎么去调整?同样的情况下,基于安全原因,不支持打洞,那edgemesh是不是就不能用了?A:可以采用sedna中提供的联邦学习能力,在边缘侧直接进行模型训练,只把训练得到的模型参数上传云端。Edgemesh核心的特点就是使用中继和P2P打洞技术联通边缘节点。Q:云边协同推理是根据哪些指标将任务卸载到云端呢?A:在sedna有关云边协同推理的案例中,是通过设置一个阈值指标用于衡量推理任务是否是难例,可以将难例放置在云端进行推理。Q:Sedna的推算准确率高吗?达到了什么样的程度?A:sedna的定位主要是为了将用户已有的AI应用下沉至边缘侧,能够让用户部署更便捷,推算的准确度一般是和用户的训练得到的模型相关。Q:云端训练后的结果如何通过局域网推送到边缘端设备?A:可以通过云边通道、edgemesh来进行通信。Q:对比其他边缘计算框架,KubeEdge有哪些独到之处?A:KubeEdge的核心理念是基于Kubernetes提供的云原生能力,在边缘计算场景下进行了增强,所以一方面有云原生的基础能力支持,比如利用容器化技术屏蔽边缘复杂的底层硬件环境、利用云原生管理技术能够让故障的用户应用迅速回滚;另一方面做了组件轻量化、云边消息可靠性增强以及边缘设备管理能力增强,更加适合云原生边缘计算场景。Q:因docker的问题边端安装时基础环境镜像无法下载的问题怎么处理,官方是否有备用镜像库A:可以在能够下载镜像的节点上下载镜像,再打包至边缘节点。Q:分集群部署K8s的控制面和集群太多,怎么构建统一的CDN调度平台又不会过度占用机器资源?A:案例中CDN管理平台是在大区的区域中心、数据中心上部署k8s集群,通过kubeedge纳管边缘节点,具体的技术实现可以参考kubeedge官网的案例解读https://kubeedge.io/zh/case-studies/ctyun/Q:如何评估一个应用场景是否适合采用KubeEdge进行边缘AI部署?A:可以看具体的应用场景是否有云边协同的需求Q:Sendna的模型管理中,模型文件量化是如何处理的?模型work是独立运行在容器里面的还是需要和业务相结合的,例如视频的解码、推理、编码不放在一个容器里面的话延时是否会有问题?A:需要根据实际的使用场景判断,比如解码、推理、编码容器是部署在一个节点上、或者部署在多个节点上的时延是不同的。Q:脸检测模型最多同时检测到多少张脸啊?A:需要针对模型的性能、节点资源等角度具体分析。Q:karmada和KubeEdge有哪些区别?A:karmada是面向多云原生集群编排的,kubeedge主要面向云原生边缘计算场景。Q:如何解决边缘节点样本数量少的问题?A:kubeedge sedna支持多种训练和推理模式,其中终身学习主要用于解决小样本与边缘数据异构问题。Sedna会在云节点上部署一个知识库,能够辅助边缘端完成推理,并不断学习未知任务更新知识库。Q:KubeEdge最大支持管理多少规模边缘节点?A:目前有案例表明kubeedge接入的边缘节点规模突破10万,可以参考https://kubeedge.io/zh/blog/scalability-test-reportQ:KubeEdge如何处理多租户环境下的资源隔离?A:kubeedge依然保留了k8s的原生能力,因此可以通过创建命名空间、创建资源配额等的方式完成多租户环境下的资源隔离。Q:KubeEdge如何与云服务集成?A:KubeEdge核心理念是在原有Kubernetes云原生能力的基础上,面向边缘场景做了功能的增强,例如云边传递消息可靠性的增强、组件的轻量化,能够依托目前成为事实标准的Kubernetes api完成边缘与云上一致的使用体验,因此云服务依然可以参考传统Kubernetes中的部署方式进行部署。Q:云端可以批量升级边缘吗?A:在KubeEdge 1.16版本中,我们对边缘节点的批量升级这一特性做了功能增强,NodeUpgradeJob 的 Kubernetes API 进行边缘节点的一键化、批量升级。API 支持边缘节点的升级预检查、并发升级、失败阈值、超时处理等功能。对此,KubeEdge 支持了云边任务框架。社区开发者将无需关注任务控制、状态上报等逻辑实现,只需聚焦云边任务功能本身。 具体信息可参考https://kubeedge.io/blog/release-v1.16#support-cloud-and-edge-components-upgradeQ:EdgeMesh对边缘站点有哪些要求?A:运行EdgeMesh的边缘节点需要满足正常kubeedge对于边缘节点的要求,例如需要部署容器运行时、还需要满足硬件资源的一些限制。Q:KubeEdge如何处理边缘计算中的网络不稳定问题?A:KubeEdge针对边云连接不稳定、时常断连的情况,做了消息可靠性的增强,也是KubeEdge的核心特性之一。云上向边缘端下发控制命令时会检查边缘是否回传了ack应答,以此验证消息是否下发成功,并且云端会将消息进行编号,记录消息的下发。当边缘端长期断链后再次连接时,就不需要将消息全部重新发送,避免造成带宽冲击。另一方面,我们还实现了边缘自治的能力,在边缘节点上部署了一个轻量级的数据库,云上发送到边缘的元数据会保存在这个数据库中进行持久化,在边云连接长时断开或者边缘节点宕机重启后,能从边缘数据库中恢复用户应用。Q:EdgeMesh Agent之间打洞失败时怎么判断流量是否中转成功?A:当EdgeMesh打洞失败时可以使用EdgeMesh-server来中继流量,确保流量中转成功。Q:如果对安全要求很高的情况,那edgemesh的打洞不被允许,那这个特性是不是也用不了了。A:Edgemesh需要在边缘节点跨局域网时通过P2P打洞和中转技术才能完成边缘节点间的通信。Q:怎么降低两个边缘节点上的流量经过 EdgeMesh中转的网络时延?A:可以将EdgeMesh中继节点部署在地理位置适中的位置,以缩短数据传输的物理距离;也可以使用负载均衡技术将流量均匀分配到多个中继节点上,避免单个节点过载,从而提高整体的网络性能和降低时延。Q:1.12.7版本边端启动一段时间后云端可正常获取到边端的cpu,内存等状态信息,但运行一段时间后(一天或两天不固定)会出现边端状态信息上报失败连接超时,但除状态信息外其他都正常。边端重启后即恢复正常,这种情况可能有哪些原因造成的A:可以查看日志中是否有其他报错,例如channel已满,也可以使用go pprof等工具查看是否有内存泄露或者goroutine泄露的情况。Q:边缘设备开发有无官方开发板?A:目前我们已经内置了一些典型边缘设备协议的mapper插件,例如modbus、onvif等,用户可以直接使用我们提供的mapper对边缘设备进行管理,也可以仿照内置的mapper,自行通过mapper-framework开发框架实现其他协议mapper。内置的mapper地址为https://github.com/kubeedge/mappers-goQ:kubeEdge连入k8s如何防止抖动(经常断了又连接上)呢,毕竟数量太多的话会对集群造成影响A:kubeedge针对边云连接不稳定、时常断连的情况,做了消息可靠性的增强,也是kubeedge的核心特性之一。云上向边缘端下发控制命令时会检查边缘是否回传了ack应答,以此验证消息是否下发成功,并且云端会将消息进行编号,记录消息的下发。当边缘端长期断链后再次连接时,就不需要将消息全部重新发送,避免造成带宽冲击。另一方面,我们还实现了边缘自治的能力,在边缘节点上部署了一个轻量级的数据库,云上发送到边缘的元数据会保存在这个数据库中进行持久化,在边云连接长时断开或者边缘节点宕机重启后,能从边缘数据库中恢复用户应用。Q:KubeEdge对于跨地域的边缘计算部署有哪些支持?A:KubeEdge 1.11版本引入了“边缘节点分组管理”新特性,该特性允许将边缘节点按地区划分为节点组,使得应用所需资源可以打包成一个整体在节点组上进行部署。这种分组方式有效降低了边缘应用生命周期管理的复杂度,并减少了运维成本。Q:边缘设备的数量有限制吗?A:目前已经有案例表明kubeedge能够支持上万边缘设备的管理Q:KubeEdge支持哪些类型的工作负载?A:由于kubeedge的核心理念是基于k8s云原生能力,在边缘场景下做了一些功能的增强,因此传统k8s中工作负载的类型在kubeedge中都能够支持,例如deployment、job等。Q:云原生边缘计算与传统云计算相比有哪些优势?A:第一,云原生边缘计算拥有低延迟与高实时性,能够更快地响应用户请求,提供更高的实时性服务。第二,云原生边缘计算能够保障数据隐私与安全,能够在本地或靠近数据产生的地方处理数据,减少了数据传输的中间环节,从而提高了数据的安全性。第三,云原生边缘计算能带来带宽与成本优化。数据在边缘端处理能够减少数据传输的距离,降低了对带宽的需求,从而有助于降低网络成本。Q:KubeEdge对于边缘设备的异构性是如何处理的?A:kubeedge通过mapper插件对边缘设备进行管理,mapper中集成了设备驱动,可以按照对应的协议访问物理设备、获取边缘设备的数据或者状态。Mapper通过实现edgecore中DMI这个设备管理统一接口完成自身向集群的注册,最终完成设备的纳管。DMI采用grpc+uds的机制,定义了通用的接口,能够屏蔽设备之间的差异。Q:在KubeEdge的sedna中,实现边云协同AI的具体步骤是怎么样的A:由于sedna定位并不是tensorflow pytorch这类的深度学习框架,而是提供把用户已有的AI应用能力下沉至边缘端,减少用户构建部署的成本。因此第一,用户需要根据典型的框架实现自己的AI应用,并根据sedna中的要求对代码做一些修改,主要是导入sedna边云协同推理库,设置推理阈值等,修改完成后可以打包为一个镜像;第二,需要实现sedna中定义的部分crd文件,例如model crd定义的用户模型参数;第三,提交AI任务。用户可以定义sedna中JointInferenceService之类的任务crd,提交至集群,由sedna完成部署。Q:KubeEdge中边缘端和云端是如何高效同步状态和配置信息A:kubeedge中需要用到多个组件共同协作,完成云边同步状态和配置信息。在云端主要是依靠cloudhub和synccontroller,synccontroller中一方面会对云端下发的消息进行记录并编号,保证消息下发的连续性,另一方面也会定期同步云边状态,cloudhub则是实际执行消息传递的。在边缘端有edgehub,metamanager等组件来辅助云边通信,edghehub和cloudhub对应,接收cloudhub下发的消息并转发,metamanager一方面实现边缘自治,把核心元数据保存在边缘数据库中,一方面会把edgehub中的消息转发到边缘其他模块。Q:在边云协同过程中,如何处理数据的实时性与一致性?A:可以依赖kubeedge提供的云边消息同步机制。云端下发消息时会监测边端是否回传ACK应答,确保消息下发成功,另一方面云端使用synccontroller对云端下发的消息进行记录并编号,保证消息下发的连续性,也能定期同步云边状态。Q:KubeEdge在管理边缘设备必须通过mapper吗A:kubeedge是需要mapper来管理边缘设备的,mapper是kubeedge中的设备管理插件,其中集成了对应协议设备的驱动程序,能够实际连接到物理设备,并且获取设备状态与数据。Mapper实现了edgecore中DMI的相关接口,能将自身注册入kubeedge集群,并且将管理的设备状态数据通过DMI接口上报到edgecore,edgecore会对这些消息进行处理封装,通过云边通道上传到云端cloudcore,cloudcore中的devicecontroller就是edgecore中上报的设备信息与k8s apiserver通信的桥梁,完成对边缘设备的管理。Q:基于KubeEdge云原生边缘计算如何保障数据处理的实时性呢?A:kubeedge整合了云计算的优势和边缘计算的优势,能在靠近物或数据源头的网络边缘侧就近处理海量数据,具有毫秒级的实时响应。Q:KubeEdge安装部署有什么要求A:KubeEdge是依赖Kubernetes的,在部署前需要先拥有一个Kubernetes集群,同时KubeEdge也是以容器化的形式管理用户边缘应用的,所以也需要下载相应的容器运行时,比如containerd。Docker等,当然因为目前Kubernetes已经不在使用docker作为默认的容器运行时,所以使用高于1.14版本的KubeEdge时需要使用cri-dockerd,相关容器运行时的安装以及注意事项在我们的官网文档中也有介绍https://kubeedge.io/docs/setup/prerequisites/runtime/,大家可以参考。Q:KubeEdge如何将AI能力下沉至边缘?有哪些具体的技术实现和优化措施?A:kubeedge提出了边缘智能框架sedna,基于KubeEdge提供的边云协同能力,支持用户现有AI类应用无缝下沉到边缘,降低用户构建与部署成本、提升模型性能、保护数据隐私。Sedna能够提供基础的边云协同数据集管理、模型管理功能,具有协同推理、增量学习、联邦学习和终身学习的能力,能够更好的实现边云协同AI。Q:是否依赖边缘节点算力大小?A:kubeedge从部署的角度来说实现了组件的轻量化,目前已经能将内存占用降低至70M左右,减少了边缘节点的资源要求。除安装需求外,边缘节点算力的需求主要与用户部署的边缘应用相关,需要根据用户应用的大小评测具体的算力消耗。Q:KubeEdge的架构设计主要关注哪些关键组件?A:kubeedge云端和边端都运行了众多组件,其中云端组件包括EdgeController、deviceController、Synccontroller、cloudhub等,边端组件包括edgehub、MetaManager、edged、devicetwin、EventBus、ServiceBus等,每个组件都有重要的功能,具体的介绍可以访问我们的官方文档 https://kubeedge.io/docs/category/architectureQ:对于KubeEdge的边缘节点应该怎么配置?A:目前官方推荐大家使用keadm这个安装管理工具来部署kubeedge集群,可以在获得云端kubeedge集群的token后,使用keadm join命令加入kubeedge集群,并且自动部署edgecore组件。Q:KubeEdge与K8s有什么关系,与k8s的兼容性如何,是否支持最新版本的k8s?A:Kubeedge核心理念是基于k8s原生能力,在边缘计算场景下做了一些增强,因此与k8s的兼容性是kubeedge的核心特点之一。一般来说一个Kubeedge版本可以兼容3个版本的k8s,在每三个月kubeedge发布版本时,都会升级k8s的依赖,我们近期刚发布的1.18版本已经能够兼容1.29 1.28 1.27三个版本的k8s,欢迎大家使用。Q:边缘计算\边缘AI\云计算有什么区别?A:云是中心化、按需获取的大规模计算资源共享池,服务于广大的区域,能够提供几乎无限的算力;边缘计算是靠近数据产生源头的计算能力,服务于广小的区域,提供受限的算力。边缘AI是指在边缘计算环境中实现的人工智能。Q:KubeEdge在边云协同中如何处理数据安全与隐私保护?A:KubeEdge在数据传输过程中采用了全链路加密技术,确保数据在云端和边缘端之间的传输过程中不被窃取或篡改。这种加密方式涵盖了数据的整个传输路径,从源头到目的地都保持数据的安全性。Q:KubeEdge如何应对边缘设备的动态性和不确定性?A:kubeedge采用mapper设备管理插件来实际管理物理设备。在mapper中承载了DMI数据面能力,能够按照用户设置的周期定时采集设备状态与数据,并进行数据推送。Q:KubeEdge是否支持边缘设备的本地自治?网络中断时,边缘节点能否独立运行和做出决策?可以中断多久?A:kubeedge针对边云经常断连的情况,在边缘节点上部署了轻量级的数据库,可以存储云端命令的核心元数据,在边缘节点断开连接时能够依靠数据库维持边缘应用和设备稳定运行。在证书未过期的情况下理论上可以保持断连状态,随时重新连接。Q:KubeEdge是否对边缘侧异常断电场景有优化?边缘侧电力稳定性比较弱 经常断电A:kubeedge主要是对云边消息传递的可靠性做了增强,在边缘节点上部署一个轻量级数据库存储云边控制命令的元数据,在边缘节点断电重启时可以依据数据库的数据进行恢复想要了解更多云原生相关知识,欢迎观看DTSE Tech Talk 系列技术直播
  • 盘古大模型与人工智能产品的NLP/CV技术对比分析
    盘古大模型与人工智能产品的NLP/CV技术对比分析盘古大模型简介盘古大模型是由华为云推出的一个全面的AI大模型,它涵盖了自然语言处理(NLP)、计算机视觉(CV)等多个领域,旨在为各行各业提供AI赋能。盘古大模型采用了分层解耦的设计,包括L0、L1、L2三层架构,分别对应不同的应用场景和能力。盘古大模型与人工智能产品的NLP技术对比盘古NLP大模型是业界首个超千亿参数的中文预训练大模型,它在权威的中文语言理解评测基准CLUE榜单中排名第一,显示出其卓越的语言理解能力。相比之下,其他人工智能产品如GPT-3等虽然也有强大的语言处理能力,但在中文语境下的表现不如盘古大模型。盘古大模型在多任务学习、多模态交互以及代码生成等方面表现出色,能够更好地适应不同场景的需求。盘古大模型与人工智能产品的CV技术对比在计算机视觉领域,盘古CV大模型首次兼顾了图像判别与生成能力,能够同时满足底层图像处理与高层语义的理解需求。它不仅可以应用于传统的图像分类、目标检测等任务,还可以生成符合物理规律的多模态内容,如自动驾驶合成数据生成。相比其他AI产品,盘古CV大模型在多模态数据处理能力上有明显优势,特别是在处理复杂视觉任务如视觉问答、常识推理等方面。盘古大模型适用场景详解盘古大模型适用于多个行业和场景,包括但不限于政务、金融、医疗、矿业、气象、汽车等领域。例如,在医疗健康领域,盘古大模型助力医疗服务平台构建智慧医疗场景能力,提升医疗服务水平。在矿业领域,盘古采矿模型已在中国多个煤矿得到应用,提高了矿山的智能化水平。在气象领域,盘古气象模型超过了传统的数值天气预报方法,提高了预测速度和准确性。结论综合来看,盘古大模型在NLP和CV技术方面展现出的能力超越了市场上同类的人工智能产品,其多模态、多任务的处理能力以及在多个行业中的应用证明了其在实际场景中的有效性和商业价值。随着技术的不断发展和完善,盘古大模型有望在未来的人工智能领域扮演更加重要的角色。
  • [技术干货] AI创作之旅:探索提示工程的奇妙世界 -转载
     在当今信息爆炸的时代,人工智能的发展为创作者们提供了全新的可能性。本文将引导你从零开始,利用提示工程(Prompt Engineering)学习并应用大语言模型,创作一篇超过2000字的文章。我们将深入探讨提示工程的基本概念,并通过实际代码演示如何发挥大语言模型的创作潜力。 1. 引言 随着数字化时代的来临,人工智能已经不再仅仅是科技的进步,更成为创作领域中不可或缺的有力助手。在这个信息爆炸的时代,创作者们面临着巨大的文本创作挑战,而人工智能通过其强大的语言生成能力,为他们提供了一种前所未有的创作思维方式。  提示工程作为人工智能技术的一种应用,通过给定简短的提示,能够生成丰富、连贯的文本内容。这种方法的兴起标志着创作者们在创作过程中迎来了一场革命,不再局限于传统的创作手段,而是可以借助机器智能的力量进行创意的探索和表达。  在以往,创作者们可能需要花费大量时间和精力进行调研、构思和编辑,但有了提示工程这一工具,他们可以更加聚焦于创作的核心思想,将人工智能作为创意的延伸。这种全新的思维方式使得创作者们能够更加高效地表达他们的想法,同时也为他们带来了更多样化的创作可能性。  2. 什么是提示工程? 提示工程是指通过给定一个简短的提示(prompt),利用大语言模型生成相应的文本。这种方法在自然语言处理领域取得了巨大的成功,尤其是近年来GPT等大型语言模型的崛起,使得提示工程成为创作者们不可忽视的工具。  3. 准备工作 在进入实际的提示工程应用之前,我们需要进行一些准备工作,确保环境和依赖库都已经正确安装。以下是一些基本的准备步骤,以确保我们能够顺利地利用提示工程学习和应用大语言模型。  3.1 安装必要的库 首先,我们需要安装与提示工程相关的 Python 库。在终端或命令提示符中执行以下命令:  pip install openai 这将安装 OpenAI 的 Python 客户端库,它是与 OpenAI GPT-3 大语言模型进行交互的必要工具。  3.2 获取 OpenAI API 密钥 在使用提示工程之前,您需要获得 OpenAI API 密钥。访问 OpenAI 官方网站 注册并获取您的 API 密钥。将密钥保存在安全的地方,我们将在后续的代码中使用它。 4 设置 OpenAI API 密钥 在您的 Python 项目中,设置 OpenAI API 密钥是非常重要的。您可以使用以下代码将 API 密钥设置为环境变量:  import openai  # 设置 OpenAI API 密钥 openai.api_key = '您的API密钥' 请确保替换 '您的API密钥' 为您真实的 API 密钥。 通过这些准备工作,我们将为接下来的提示工程学习和代码实现打下基础。在此之后,我们将能够使用提示工程生成丰富的文本内容,展开更多有趣的主题。 5. 提示工程实战 在这一部分,我们将展示一个简单的提示工程实例,通过向 OpenAI GPT 模型提供一个提示来生成一段文章。  import openai  # 设置 OpenAI API 密钥 openai.api_key = '您的API密钥'  # 提示工程示例 prompt = "人工智能在创作领域的应用" response = openai.Completion.create(   engine="text-davinci-002",   prompt=prompt,   max_tokens=300 )  # 提取生成的文本 generated_text = response.choices[0].text.strip() print(generated_text) 这段代码使用 OpenAI GPT 模型,通过给定的提示生成一段与“人工智能在创作领域的应用”相关的文本。你可以根据自己的兴趣和需求修改提示内容,以探索不同主题和创作风格。这个简单的示例演示了如何利用提示工程与 GPT 模型进行互动,为创作者提供了一个强大而灵活的创作工具。在接下来的部分,我们将进一步探讨如何优化和扩展这种方法,以满足更复杂的创作需求。  6. 探索更多可能性 提示工程是一个充满创造性和灵活性的领域,你可以通过尝试不同的提示、调整参数以及结合多个模型来探索更多的创作可能性。以下是一些探索的方法和建议:  6.1 尝试不同的提示 改变提示内容可以显著影响生成文本的风格和内容。尝试使用不同主题、问题或情境,观察生成的文本如何变化。通过多次尝试,你可以找到最适合你需求的提示方式。  prompt = "探索不同的提示工程内容" # 其他代码... 6.2 调整参数 提示工程 API 允许你调整一些参数,例如 temperature(温度),它控制生成文本的创造性程度。尝试不同的温度值,看看文本生成的变化。  response = openai.Completion.create(   engine="text-davinci-002",   prompt=prompt,   max_tokens=300,   temperature=0.7  # 尝试不同的温度值 ) 6.3 结合多个模型 OpenAI 提供了多个预训练模型,你可以结合它们来获取更多的创作可能性。通过在不同模型间切换,你可以体验到不同的文本生成风格。  response = openai.Completion.create(   engine="text-codex-002",  # 切换到另一个模型   prompt=prompt,   max_tokens=300 ) 1 2 3 4 5 通过不断实践和探索,你将更好地理解如何利用提示工程,发挥大语言模型的创作潜力。这个过程也是一个自我发现的过程,帮助你更好地运用人工智能助手进行创作。  结语 通过本文的介绍,相信你对如何利用提示工程学习应用大语言模型有了更清晰的认识。在人工智能的引领下,创作者们可以更轻松地进行创作,拓展思维边界。愿你在这个AI创作之旅中有所收获,不断探索文学的奇妙世界。  ⭐️ 好书推荐 《AI提示工程实战:从零开始利用提示工程学习应用大语言模型》   【内容简介】  随着大语言模型的快速发展,语言AI已经进入了新的阶段。这种新型的语言AI模型具有强大的自然语言处理能力,能够理解和生成人类语言,从而在许多领域中都有广泛的应用前景。大语言模型的出现将深刻影响人类的生产和生活方式。本书将介绍提示工程的基本概念和实践,旨在帮助读者了解如何构建高质量的提示内容,以便更高效地利用大语言模型进行工作和学习。  本书内容通俗易懂,案例丰富,适合所有对大语言模型和提示工程感兴趣的读者。无论是初学者还是进阶读者,都可以从本书中获得有价值的信息和实用技巧,帮助他们更好地应对各种挑战和问题。  📚 京东购买链接:《AI提示工程实战:从零开始利用提示工程学习应用大语言模型》 ————————————————                              版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。                          原文链接:https://blog.csdn.net/qq_44273429/article/details/135770338 
  • [技术干货] 【人工智能】-- 受限玻尔兹曼机-转载
     🍉引言         在当今科技飞速发展的时代,人工智能的研究不断取得突破性的进展。其中,受限玻尔兹曼机作为一种重要的模型,正逐渐引起人们的广泛关注。它独特的结构和强大的学习能力,为解决各种复杂的问题提供了新的思路和方法。受限玻尔兹曼机不仅在理论研究上具有深刻的意义,在实际应用中也展现出了巨大的潜力,例如图像识别、语音处理、自然语言处理等领域。  🍉受限玻尔兹曼机         受限玻尔兹曼机(Restricted Boltzmann Machine,RBM)是一种生成性随机人工神经网络,也是一种无向概率图模型,并且受限为二分图。          整个模型有两层,即可见层(包含可见单元)和隐藏层(包含隐单元),满足层内无连接,层间全连接。这种限制使得它在神经元之间的连接上有特定的规则,来自两组单元中的每一组的一对节点(通常称为“可见”和“隐藏”单元)可以在它们之间具有对称连接,而组内的节点之间没有连接。相比一般的玻尔兹曼机,这种限制允许使用更有效的训练算法。  RBM 通常由二值隐单元和可见单元组成,其中权重矩阵  中的每个元素指定了隐单元  和可见层单元  之间边的权重。          此外,对于每个可见层单元  有偏置项 ,对每个隐层单元  有偏置项 。具体来说,需满足以下条件   其能量函数对于一组给定的状态  定义为:   由能量函数可以给出状态  的联合概率分布:   其中, 是归一化常数,计算式为 ,其计算复杂度为 。可见层的边缘分布:  ;隐藏层的边缘分布:  。          RBM 的一个重要性质是,由于它是一个二分图,层内没有边相连,因而隐藏层的激活状态在给定可见层节点取值的情况下是条件独立的,类似地,可见层节点的激活状态在给定隐藏层节点取值的情况下也条件独立,用数学公式表示为:   由此可以推导得出在给定可视层  的基础上,隐层第  个节点为 1 或者为 0 的概率为:   在给定隐层  的基础上,可视层第  个节点为 1 或者为 0 的概率为:           在训练 RBM 时,关键是计算模型中的参数  。通常采用对数损失函数,并考虑最大化对数似然函数。但直接按梯度公式计算梯度的复杂度很高,因为其中涉及到归一化常数  的计算,而  的计算复杂度为  。          为解决这个问题,一般使用基于马尔可夫链蒙特卡罗(MCMC)的方法来模拟计算梯度,如 Geoffrey Hinton 提出的对比散度(contrastive divergence,CD)算法。该算法给定样本  后,取初始值  ,然后执行  步 Gibbs 采样,先后采样得到  和  。Gibbs 采样得到的样本服从联合分布  ,利用采样得到的  可以估算梯度公式中期望项的近似值,从而得到梯度的近似值,之后在每一步利用梯度上升法进行参数更新。          RBM 可用于降维、分类、协同过滤、特征学习、生成模型等任务。根据任务的不同,它可以使用监督学习或无监督学习的方法进行训练。例如在推荐系统中,可以把每个用户对各个物品的评分作为可见层神经元的输入,从而进行训练。          RBM 在深度学习中有重要应用,它可以通过“堆叠”形成深层信念网络等更复杂的结构。但 RBM 也存在一些局限性,例如在处理大规模数据时可能效率不高,对初始值敏感等。不过,研究人员仍在不断探索和改进 RBM 及其相关算法,以拓展其应用领域和提高性能。  🍈RBM的结构 🍍RBM的架构图  🍍RBM的经典实现  🍍代码实现 import numpy as np import matplotlib.pyplot as plt from sklearn import preprocessing from sklearn.datasets import fetch_openml from sklearn.model_selection import train_test_split   # 加载 MNIST 数据集 mnist = fetch_openml('mnist_784', version=1, cache=True) X = mnist.data y = mnist.target   # 数据预处理 X = preprocessing.MinMaxScaler().fit_transform(X) X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)   class RBM:     def __init__(self, n_visible, n_hidden, learning_rate=0.1, n_epochs=100):         """         初始化 RBM 模型         参数:         n_visible:可见层神经元数量(输入数据的维度)         n_hidden:隐藏层神经元数量         learning_rate:学习率         n_epochs:训练轮数         """         self.n_visible = n_visible         self.n_hidden = n_hidden         self.learning_rate = learning_rate         self.n_epochs = n_epochs           # 随机初始化权重矩阵 W,偏置向量 bv(可见层)和 bh(隐藏层)         self.W = np.random.randn(n_visible, n_hidden) * 0.1         self.bv = np.zeros(n_visible)         self.bh = np.zeros(n_hidden)       def sigmoid(self, x):         """         Sigmoid 激活函数         参数:         x:输入值         返回:         Sigmoid 函数的输出         """         return 1 / (1 + np.exp(-x))       def sample_hidden(self, v):         """         根据给定的可见层状态 v 采样隐藏层         参数:         v:可见层状态         返回:         隐藏层的激活概率 p_hidden 和采样后的隐藏层状态 h         """         hidden_activation = np.dot(v, self.W) + self.bh         p_hidden = self.sigmoid(hidden_activation)         return p_hidden, np.random.binomial(1, p_hidden)       def sample_visible(self, h):         """         根据给定的隐藏层状态 h 采样可见层         参数:         h:隐藏层状态         返回:         可见层的激活概率 p_visible 和采样后的可见层状态 v_prime         """         visible_activation = np.dot(h, self.W.T) + self.bv         p_visible = self.sigmoid(visible_activation)         return p_visible, np.random.binomial(1, p_visible)       def train(self, X):         """         训练 RBM 模型         参数:         X:训练数据         """         for epoch in range(self.n_epochs):             for v in X:                 # 正向传播:根据输入的可见层状态 v 计算隐藏层的激活概率和采样后的隐藏层状态                 p_hidden, h = self.sample_hidden(v)                   # 反向传播:根据采样得到的隐藏层状态 h 计算可见层的激活概率和采样后的可见层状态 v_prime                 p_visible, v_prime = self.sample_visible(h)                   # 更新参数                 # 计算权重更新量 dW                 dW = np.outer(v, p_hidden) - np.outer(v_prime, p_hidden)                 # 更新权重 W                 self.W += self.learning_rate * dW                 # 更新可见层偏置 bv                 self.bv += self.learning_rate * (v - v_prime)                 # 更新隐藏层偏置 bh                 self.bh += self.learning_rate * (p_hidden - np.mean(p_hidden))       def reconstruct(self, X):         """         对输入数据进行重建         参数:         X:输入数据         返回:         重建后的可见层状态         """         h = np.zeros((X.shape[0], self.n_hidden))         for i, v in enumerate(X):             _, h[i] = self.sample_hidden(v)         _, v_prime = self.sample_visible(h)         return v_prime   # 初始化 RBM 模型,设置可见层神经元数量为 784(MNIST 图像的维度),隐藏层神经元数量为 128 rbm = RBM(n_visible=784, n_hidden=128, learning_rate=0.1, n_epochs=50)   # 训练模型 rbm.train(X_train)   # 重建测试集图像 reconstructed_images = rbm.reconstruct(X_test)   # 展示原始图像和重建图像 n_images = 5 for i in range(n_images):     original_image = X_test[i].reshape(28, 28)     reconstructed_image = reconstructed_images[i].reshape(28, 28)       plt.subplot(2, n_images, i + 1)     plt.imshow(original_image, cmap='gray')     plt.axis('off')       plt.subplot(2, n_images, i + 1 + n_images)     plt.imshow(reconstructed_image, cmap='gray')     plt.axis('off')   plt.show()  🍍代码分析 RBM 类的 __init__ 方法:  初始化模型的参数,包括可见层和隐藏层的神经元数量、学习率和训练轮数。 随机初始化权重矩阵 W 、可见层偏置 bv 和隐藏层偏置 bh 。 sigmoid 方法:定义了 Sigmoid 激活函数,用于计算神经元的激活概率。  sample_hidden 方法:  计算给定可见层状态下隐藏层的激活值。 通过激活值计算隐藏层的激活概率。 基于激活概率进行二项分布采样得到隐藏层的状态。 sample_visible 方法:与 sample_hidden 类似,用于根据隐藏层状态采样可见层状态。  train 方法:  在每一轮训练中,遍历训练数据中的每个样本。 进行正向传播,从可见层到隐藏层的采样。 进行反向传播,从隐藏层到可见层的采样。 根据采样结果计算权重和偏置的更新量,并进行更新。 reconstruct 方法:  首先对输入数据采样得到隐藏层状态。 然后根据隐藏层状态采样重建可见层状态。 在主程序中:  加载 MNIST 数据集并进行预处理和划分。 初始化 RBM 模型并进行训练。 对测试集数据进行重建,并展示原始图像和重建图像的对比。         这段代码主要实现了一个受限玻尔兹曼机(RBM)模型,并将其应用于 MNIST 数据集的图像重建任务。          首先,代码从开放数据集中加载 MNIST 数据,进行预处理和划分。然后定义了 RBM 类,在类的初始化方法中,设定了模型的关键参数,包括可见层和隐藏层的神经元数量、学习率以及训练轮数,并随机初始化了权重和偏置。     RBM 类中包含了 sigmoid 激活函数,以及用于正向和反向传播的 sample_hidden 和 sample_visible 方法。训练方法 train 通过不断的正向和反向传播,并基于采样结果更新权重和偏置来优化模型。reconstruct 方法用于对输入数据进行重建。          在主程序中,初始化并训练 RBM 模型,最后对测试集数据进行重建,并通过图像展示原始图像和重建图像的对比,以直观评估模型的重建效果。  🍉总结         受限玻尔兹曼机(RBM)是一种具有独特结构和强大学习能力的概率图模型。          在结构上,RBM 由两层神经元组成,即可见层和隐藏层。层内神经元无连接,层间神经元全连接。这种结构简化了计算,同时也使得模型能够有效地学习数据中的特征和模式。          在学习过程中,RBM 通过不断调整参数(包括权重、可见层偏置和隐藏层偏置)来优化模型。常见的学习算法如对比散度(CD)算法,通过采样和近似计算梯度来更新参数。          RBM 具有多种应用,例如在数据降维方面,它能够将高维数据映射到低维的隐藏层表示;在特征学习中,能够自动从原始数据中提取有意义的特征;在生成模型中,可以生成新的数据样本。          然而,RBM 也存在一些局限性。例如,训练时间可能较长,尤其是在处理大规模数据时;对初始参数的设置较为敏感;模型的解释性相对较复杂等。          尽管如此,RBM 在深度学习领域仍然具有重要地位,其思想和方法为后续更复杂的深度模型的发展提供了基础和启发。 ————————————————                              版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。                          原文链接:https://blog.csdn.net/2302_76516899/article/details/140363690 
  • [问题求助] yolov8移植到昇腾平台的问题,求助
    我已经写了这2句了,但是出错,可否帮忙解决import torch_npu from torch_npu.contrib import transfer_to_npu  -------------------------------import torch import torch_npu from torch_npu.contrib import transfer_to_npu  from ultralytics import YOLO  # 加载模型 model = YOLO("yolov8n.pt")  # 加载预训练模型(建议用于训练)  # 使用模型 model.train(data="yolov8_pcb.yaml", epochs=10, imgsz=640)  # 训练模型 metrics = model.val()  # 在验证集上评估模型性 _______出现了错误的输出,如下__________________________________________/home/ma-user/anaconda3/envs/MindSpore/lib/python3.7/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html from .autonotebook import tqdm as notebook_tqdm[W OperatorEntry.cpp:121] Warning: Overriding a previously registered kernel for the same operator and the same dispatch key operator: aten::_has_compatible_shallow_copy_type(Tensor self, Tensor from) -> (bool) registered at /usr1/v1.8.1/pytorch/build/aten/src/ATen/RegisterSchema.cpp:20 dispatch key: Math previous kernel: registered at /usr1/v1.8.1/pytorch/build/aten/src/ATen/RegisterMath.cpp:5686 new kernel: registered at /usr1/workspace/FPTA_Daily_Plugin_open_date/Plugin/torch_npu/csrc/aten/ops/HasCompatibleShallowCopyType.cpp:37 (function registerKernel)/home/ma-user/anaconda3/envs/MindSpore/lib/python3.7/site-packages/torch_npu/contrib/transfer_to_npu.py:99: ImportWarning: ************************************************************************************************************* The torch.Tensor.cuda and torch.nn.Module.cuda are replaced with torch.Tensor.npu and torch.nn.Module.npu now.. The torch.cuda.DoubleTensor is replaced with torch.npu.FloatTensor cause the double type is not supported now.. The backend in torch.distributed.init_process_group set to hccl now.. The torch.cuda.* and torch.cuda.amp.* are replaced with torch.npu.* and torch.npu.amp.* now.. The device parameters have been replaced with npu in the function below: torch.logspace, torch.randint, torch.hann_window, torch.rand, torch.full_like, torch.ones_like, torch.rand_like, torch.randperm, torch.arange, torch.frombuffer, torch.normal, torch._empty_per_channel_affine_quantized, torch.empty_strided, torch.empty_like, torch.scalar_tensor, torch.tril_indices, torch.bartlett_window, torch.ones, torch.sparse_coo_tensor, torch.randn, torch.kaiser_window, torch.tensor, torch.triu_indices, torch.as_tensor, torch.zeros, torch.randint_like, torch.full, torch.eye, torch._sparse_csr_tensor_unsafe, torch.empty, torch._sparse_coo_tensor_unsafe, torch.blackman_window, torch.zeros_like, torch.range, torch.sparse_csr_tensor, torch.randn_like, torch.from_file, torch._cudnn_init_dropout_state, torch._empty_affine_quantized, torch.linspace, torch.hamming_window, torch.empty_quantized, torch._pin_memory, torch.device, torch.Tensor.new_empty, torch.Tensor.new_empty_strided, torch.Tensor.new_full, torch.Tensor.new_ones, torch.Tensor.new_tensor, torch.Tensor.new_zeros, torch.Tensor.to, torch.nn.Module.to, torch.nn.Module.to_empty ************************************************************************************************************* warnings.warn(msg, ImportWarning)/home/ma-user/anaconda3/envs/MindSpore/lib/python3.7/site-packages/torchvision/transforms/functional_pil.py:207: DeprecationWarning: BILINEAR is deprecated and will be removed in Pillow 10 (2023-07-01). Use Resampling.BILINEAR instead. def resize(img, size, interpolation=Image.BILINEAR):/home/ma-user/anaconda3/envs/MindSpore/lib/python3.7/site-packages/torchvision/transforms/functional_pil.py:280: DeprecationWarning: BICUBIC is deprecated and will be removed in Pillow 10 (2023-07-01). Use Resampling.BICUBIC instead. def perspective(img, perspective_coeffs, interpolation=Image.BICUBIC, fill=None):/home/ma-user/anaconda3/envs/MindSpore/lib/python3.7/site-packages/thop/profile.py:12: DeprecationWarning: distutils Version classes are deprecated. Use packaging.version instead. if LooseVersion(torch.__version__) < LooseVersion("1.0.0"):Ultralytics YOLOv8.0.145 🚀 Python-3.7.10 torch-1.8.0a0+56b43f4 CUDA:0 (Ascend910A, 32768MiB)WARNING ⚠️ Upgrade to torch>=2.0.0 for deterministic training.engine/trainer: task=detect, mode=train, model=yolov8n.pt, data=yolov8_pcb.yaml, epochs=10, patience=50, batch=16, imgsz=640, save=True, save_period=-1, cache=False, device=None, workers=8, project=None, name=None, exist_ok=False, pretrained=True, optimizer=auto, verbose=True, seed=0, deterministic=True, single_cls=False, rect=False, cos_lr=False, close_mosaic=10, resume=False, amp=True, fraction=1.0, profile=False, overlap_mask=True, mask_ratio=4, dropout=0.0, val=True, split=val, save_json=False, save_hybrid=False, conf=None, iou=0.7, max_det=300, half=False, dnn=False, plots=True, source=None, show=False, save_txt=False, save_conf=False, save_crop=False, show_labels=True, show_conf=True, vid_stride=1, line_width=None, visualize=False, augment=False, agnostic_nms=False, classes=None, retina_masks=False, boxes=True, format=torchscript, keras=False, optimize=False, int8=False, dynamic=False, simplify=False, opset=None, workspace=4, nms=False, lr0=0.01, lrf=0.01, momentum=0.937, weight_decay=0.0005, warmup_epochs=3.0, warmup_momentum=0.8, warmup_bias_lr=0.1, box=7.5, cls=0.5, dfl=1.5, pose=12.0, kobj=1.0, label_smoothing=0.0, nbs=64, hsv_h=0.015, hsv_s=0.7, hsv_v=0.4, degrees=0.0, translate=0.1, scale=0.5, shear=0.0, perspective=0.0, flipud=0.0, fliplr=0.5, mosaic=1.0, mixup=0.0, copy_paste=0.0, cfg=None, tracker=botsort.yaml, save_dir=runs/detect/trainOverriding model.yaml nc=80 with nc=6 from n params module arguments 0 -1 1 464 ultralytics.nn.modules.conv.Conv [3, 16, 3, 2] 1 -1 1 4672 ultralytics.nn.modules.conv.Conv [16, 32, 3, 2] 2 -1 1 7360 ultralytics.nn.modules.block.C2f [32, 32, 1, True] 3 -1 1 18560 ultralytics.nn.modules.conv.Conv [32, 64, 3, 2] 4 -1 2 49664 ultralytics.nn.modules.block.C2f [64, 64, 2, True] 5 -1 1 73984 ultralytics.nn.modules.conv.Conv [64, 128, 3, 2] 6 -1 2 197632 ultralytics.nn.modules.block.C2f [128, 128, 2, True] 7 -1 1 295424 ultralytics.nn.modules.conv.Conv [128, 256, 3, 2] 8 -1 1 460288 ultralytics.nn.modules.block.C2f [256, 256, 1, True] 9 -1 1 164608 ultralytics.nn.modules.block.SPPF [256, 256, 5] 10 -1 1 0 torch.nn.modules.upsampling.Upsample [None, 2, 'nearest'] 11 [-1, 6] 1 0 ultralytics.nn.modules.conv.Concat [1] 12 -1 1 148224 ultralytics.nn.modules.block.C2f [384, 128, 1] 13 -1 1 0 torch.nn.modules.upsampling.Upsample [None, 2, 'nearest'] 14 [-1, 4] 1 0 ultralytics.nn.modules.conv.Concat [1] 15 -1 1 37248 ultralytics.nn.modules.block.C2f [192, 64, 1] 16 -1 1 36992 ultralytics.nn.modules.conv.Conv [64, 64, 3, 2] 17 [-1, 12] 1 0 ultralytics.nn.modules.conv.Concat [1] 18 -1 1 123648 ultralytics.nn.modules.block.C2f [192, 128, 1] 19 -1 1 147712 ultralytics.nn.modules.conv.Conv [128, 128, 3, 2] 20 [-1, 9] 1 0 ultralytics.nn.modules.conv.Concat [1] 21 -1 1 493056 ultralytics.nn.modules.block.C2f [384, 256, 1] 22 [15, 18, 21] 1 752482 ultralytics.nn.modules.head.Detect [6, [64, 128, 256]] Model summary: 225 layers, 3012018 parameters, 3012002 gradients, 8.2 GFLOPsTransferred 319/355 items from pretrained weightsAMP: running Automatic Mixed Precision (AMP) checks with YOLOv8n...Ultralytics YOLOv8.0.145 🚀 Python-3.7.10 torch-1.8.0a0+56b43f4 ---------------------------------------------------------------------------ValueError Traceback (most recent call last)/tmp/ipykernel_118047/2329360287.py in <module> 13 14 # 使用模型---> 15 model.train(data="yolov8_pcb.yaml", epochs=10, imgsz=640) # 训练模型 16 metrics = model.val() # 在验证集上评估模型性~/anaconda3/envs/MindSpore/lib/python3.7/site-packages/ultralytics/engine/model.py in train(self, trainer, **kwargs) 375 self.model = self.trainer.model 376 self.trainer.hub_session = self.session # attach optional HUB session--> 377 self.trainer.train() 378 # Update model and cfg after training 379 if RANK in (-1, 0):~/anaconda3/envs/MindSpore/lib/python3.7/site-packages/ultralytics/engine/trainer.py in train(self) 190 ddp_cleanup(self, str(file)) 191 else:--> 192 self._do_train(world_size) 193 194 def _setup_ddp(self, world_size):~/anaconda3/envs/MindSpore/lib/python3.7/site-packages/ultralytics/engine/trainer.py in _do_train(self, world_size) 274 self._setup_ddp(world_size) 275 --> 276 self._setup_train(world_size) 277 278 self.epoch_time = None~/anaconda3/envs/MindSpore/lib/python3.7/site-packages/ultralytics/engine/trainer.py in _setup_train(self, world_size) 217 if self.amp and RANK in (-1, 0): # Single-GPU and DDP 218 callbacks_backup = callbacks.default_callbacks.copy() # backup callbacks as check_amp() resets them--> 219 self.amp = torch.tensor(check_amp(self.model), device=self.device) 220 callbacks.default_callbacks = callbacks_backup # restore callbacks 221 if RANK > -1 and world_size > 1: # DDP~/anaconda3/envs/MindSpore/lib/python3.7/site-packages/ultralytics/utils/checks.py in check_amp(model) 414 try: 415 from ultralytics import YOLO--> 416 assert amp_allclose(YOLO('yolov8n.pt'), im) 417 LOGGER.info(f'{prefix}checks passed ✅') 418 except ConnectionError:~/anaconda3/envs/MindSpore/lib/python3.7/site-packages/ultralytics/utils/checks.py in amp_allclose(m, im) 401 def amp_allclose(m, im): 402 """All close FP32 vs AMP results."""--> 403 a = m(im, device=device, verbose=False)[0].boxes.data # FP32 inference 404 with torch.cuda.amp.autocast(True): 405 b = m(im, device=device, verbose=False)[0].boxes.data # AMP inference~/anaconda3/envs/MindSpore/lib/python3.7/site-packages/ultralytics/engine/model.py in __call__(self, source, stream, **kwargs) 96 def __call__(self, source=None, stream=False, **kwargs): 97 """Calls the 'predict' function with given arguments to perform object detection."""---> 98 return self.predict(source, stream, **kwargs) 99 100 @staticmethod~/anaconda3/envs/MindSpore/lib/python3.7/site-packages/torch/autograd/grad_mode.py in decorate_context(*args, **kwargs) 25 def decorate_context(*args, **kwargs): 26 with self.__class__():---> 27 return func(*args, **kwargs) 28 return cast(F, decorate_context) 29 ~/anaconda3/envs/MindSpore/lib/python3.7/site-packages/ultralytics/engine/model.py in predict(self, source, stream, predictor, **kwargs) 236 predictor = predictor or self.smart_load('predictor') 237 self.predictor = predictor(overrides=overrides, _callbacks=self.callbacks)--> 238 self.predictor.setup_model(model=self.model, verbose=is_cli) 239 else: # only update args if predictor is already setup 240 self.predictor.args = get_cfg(self.predictor.args, overrides)~/anaconda3/envs/MindSpore/lib/python3.7/site-packages/ultralytics/engine/predictor.py in setup_model(self, model, verbose) 304 """Initialize YOLO model with given parameters and set it to evaluation mode.""" 305 self.model = AutoBackend(model or self.args.model,--> 306 device=select_device(self.args.device, verbose=verbose), 307 dnn=self.args.dnn, 308 data=self.args.data,~/anaconda3/envs/MindSpore/lib/python3.7/site-packages/ultralytics/utils/torch_utils.py in select_device(device, batch, newline, verbose) 82 install = 'See cid:link_0 for up-to-date torch install instructions if no ' \ 83 'CUDA devices are seen by torch.\n' if torch.cuda.device_count() == 0 else ''---> 84 raise ValueError(f"Invalid CUDA 'device={device}' requested." 85 f" Use 'device=cpu' or pass valid CUDA device(s) if available," 86 f" i.e. 'device=0' or 'device=0,1,2,3' for Multi-GPU.\n"ValueError: Invalid CUDA 'device=devicetype=npu,index=0' requested. Use 'device=cpu' or pass valid CUDA device(s) if available, i.e. 'device=0' or 'device=0,1,2,3' for Multi-GPU.torch.cuda.is_available(): Truetorch.cuda.device_count(): 1os.environ['CUDA_VISIBLE_DEVICES']: None--------------------------------------------------------------------
  • [问题求助] 基于 ModelArts 自定义算法实现图片识别, 指导手册过期了,现在上传图片多了个参数,应该填什么呀?
    创建服务后进行图片预测,可是这个界面和指导手册不一致啊,应该填什么?
  • [教程] 星塔链StarTowerchain介绍
    解析星塔链startowerchain是什么?它们要做什么?首先我们先来了解一下星塔链的背景,经资料查证它是一个由法国人发起联合7个国家17名技术人员共同协作开发的DePin赛道的公链。1.Depin是什么?  Depin,全称为“Decentralized Physical Infrastructure Networks”,是一种新型的去中心化物理基础设施网络。该网络的目标在于整合和激活分散的物理资源,如硬盘和计算能力,以构建庞大的基础设施网络。这个网络主要分为两个部分:物理资源网络(PRN)和数字资源网络(DRN)。PRN致力于提供独特的商品和服务,而DRN则专注于数字资源的供给。了解完DePin我们在回到星塔链。2.星塔链在做什么?  根据网上查询到的资料显示,星塔链是区块链DePin赛道Layer1创新公链项目,传统区块链网络工作原理是基于有限的固定中心化节点去处理维护链上各种形式的转账.交易。而星塔链是把RIP(资源交互证明)融入到星塔链里面利用RIP的跳数工作原理形成自己独有的链上数据交换方式,实现低能耗、低延迟、高安全性和跨链资产互联等问题。当然要完成这个目标不是一项简单的任务,它需要大量的设备协同工作。2.RIP钱包RIP 是星塔链的核心共识机制,它允许智能设备通过共享计算、存储和网络资源来参与区块链采矿和交易处理。RIP 采用了一种分布式准线性网络,由运行在众多智能设备上的节点组成。这些节点相互通信和交换信息,共同维护整个区块链网络。RIP 的工作原理 当多用户在移动智能设备上安装运行了RIP协议钱包以后这个智能设备就会变成一个移动节点,节点和节点之间通过RIP技术完成自动同步,协同处理链上交易转账。同时节点与节点之间利用跳数原理智能匹配附近的节点去处理相关的交易,处理交易的同时还会以同样的方式进行链上数据同步,以保证数据的完整性。3.智能设备过剩的资源怎么处理  RIP在让设备进行挖矿和交易的同时,会把设备过剩的网络,存储,算力资源进行打包整合然后出售给第三方中小企业,去降低中小企业的发展成本。4.钱包用户能得到什么    每一个安装运行RIP钱包的智能设备在做节点贡献自己智能设备资源维护公链网络运行的同时还在进行采矿任务,挖出来的数字资产在公链正式上线以后会映射到星塔链,走向二级市场进行交易。星塔链的目标是解决传统公链环境中的高能耗、高延迟、安全性差和跨链资产互联等问题,构建智能计算网络,促进资源共享,增强数据安全性,推动智能计算和区块链的应用,为学术研究和知识贡献做出贡献。
  • [问题求助] 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 
  • [公告] 【获奖公示】DTSE Tech Talk丨NO.63:边云协同新场景,KubeEdge架构设计与边缘AI实践探索
    中奖结果公示感谢各位小伙伴参与本次活动,欢迎关注华为云DTSE Tech Talk 技术直播更多活动~本次活动获奖名单如下(部分视频号抽奖用户无账号名):账号名 奖项名称 奖品名称 linghz666 口令抽奖 华为云定制T恤hw_008618020934589_01 口令抽奖 华为云定制T恤xj120141121 优质提问  华为云定制双肩包视频号抽奖 华为云定制Polo衫视频号抽奖 华为云定制Polo衫视频号抽奖 华为云定制Polo衫
  • [行业前沿] 【分享交流】中美无人驾驶的两种技术方向,你更看好哪一个?
    中美无人驾驶的两种技术方向,你更看好哪一个?中国现在比较火的是:萝卜快跑老美则是只需要升级软件就能用的:特斯拉
  • [问题求助] 运行样例总会遇到model_path这样的报错
    在昇腾的环境上跑了两个样例(lenet_mindspore和google_mindspore),都遇到model_path这样的报错,还请帮忙看下,谢谢。
总条数:6603 到第
上滑加载中