-
在2012年AlexNet取得突破性成果时,深度学习领域尚未形成如今成熟的框架生态(如PyTorch或TensorFlow)。AlexNet的作者Alex Krizhevsky等人实际上是基于CUDA和C++自行开发了一套高效的GPU加速卷积神经网络库,并在NVIDIA GPU上实现了模型训练。这一工作可以视为“前框架时代”的代表——研究者往往需要编写大量底层代码,包括手动实现卷积层、全连接层、反向传播算法,以及内存管理和GPU并行计算优化。有趣的是,这种自定义实现恰恰推动了后续框架的发展。AlexNet的成功证明了GPU在深度学习中的巨大潜力,促使学术界和工业界开始重视底层工具链的标准化。例如,AlexNet使用的CUDA加速库直接影响了后续Caffe框架的设计(Caffe的作者贾扬清曾提到AlexNet的代码对其启发很大)。而Theano和Torch(当时基于Lua)虽在2012年已存在,但AlexNet并未直接使用它们,部分原因在于现有工具无法充分满足其大规模GPU训练的定制化需求。从历史视角看,AlexNet更像是一个“框架的催化剂”:它既展示了手工编写高性能代码的可能性,也暴露了重复造轮子的低效问题,从而加速了PyTorch/TensorFlow等现代框架的演进。如今,我们通过几行框架代码即可实现的AlexNet结构,背后正是当年这些突破性工作所奠定的工程范式。
-
视觉多模态模型切分检测和边缘推理一、NanoOWL + SAHINanoOWL(边缘实时开放词汇目标检测模型)基于Vision Transformer架构,结合CLIP的图文对齐能力,可通过文本查询在图像中检测任意类别目标。我们可以结合SAHI框架使用“文本提示+图像切分”在Jetson Orin等嵌入式设备上实现低空目标的多模态检测和TensorRT推理。二、代码实现首先我们拉取官方代码仓库https://github.com/dusty-nv/jetson-containers并运行安装命令install.sh:git clone https://github.com/dusty-nv/jetson-containers bash jetson-containers/install.sh之后使用jetson-containers run和autotag命令自动提取并构建兼容的容器:jetson-containers run --workdir /opt/nanoowl $(autotag nanoowl) 我们在终端中查看容器的ID并将容器中nanoowl拷贝到自定义目录下/home/vsuav/workspace/vit:sudo docker ps -asudo docker cp af063d738879:/opt/nanoowl /home/vsuav/workspace/vit将/home/vsuav/workspace/vit/nanoowl目录及其内部所有文件和子目录的所有者和所属组都设置为当前登录用户,从而确保我们可以正常访问和修改这些文件。sudo chown -R $(whoami):$(whoami) /home/vsuav/workspace/vit/nanoowl运行jetson-containers run命令并指定--workdir参数,将nanoowl目录挂载到容器中,设置容器的名称为NanoOWL:jetson-containers run -v /home/vsuav/workspace/vit/nanoowl:/opt/nanoowl --name NanoOWL --workdir /opt/nanoowl $(autotag nanoowl) 运行docker start NanoOWL启动容器并进入容器的终端:sudo docker start NanoOWL sudo docker exec -it NanoOWL bash 我们在容器内部使用pip3安装python库sahi并创建main.pypip3 install sahi -i https://pypi.tuna.tsinghua.edu.cn/simple我们在examples/owl_predict.py基础上添加SAHI切分检测的逻辑,将无人机拍摄的高清大图切分为640x640和1280x1280的子图并叠加原图和类别名称的编码信息送入模型进行预测,最后把推理结果映射到原图上使用GreedyNMM进行合并后处理,完整代码如下:import os import cv2 import PIL.Image import numpy as np from sahi.slicing import get_slice_bboxes from nanoowl.owl_predictor import OwlPredictor from sahi.postprocess.utils import ObjectPrediction from sahi.postprocess.combine import GreedyNMMPostprocess class OWL_SAHI: def __init__(self, model_path, label_list, OBJ_THRESH, NMS_THRESH, overlap_ratio, slice, slice_scales): self.model_path = model_path if label_list != []: self.label_list = label_list else: self.label_list = [""] self.OBJ_THRESH = OBJ_THRESH self.NMS_THRESH = NMS_THRESH self.overlap_ratio = overlap_ratio self.slice = slice self.slice_scales = slice_scales self.predictor = OwlPredictor( "google/owlvit-base-patch32", image_encoder_engine = self.model_path ) self.text_encodings = self.predictor.encode_text(self.label_list) self.postprocess = GreedyNMMPostprocess( match_threshold = self.NMS_THRESH, match_metric = "IOS", class_agnostic = False, ) def getImageSlices(self, image): img_height, img_width = image.shape[:2] slice_bboxes = [] if self.slice: for slice_scale in self.slice_scales: slice_bboxe = get_slice_bboxes( image_height = img_height, image_width = img_width, auto_slice_resolution = True, slice_height = slice_scale[1], slice_width = slice_scale[0], overlap_height_ratio = self.overlap_ratio, overlap_width_ratio = self.overlap_ratio, ) slice_bboxes.extend(slice_bboxe) slice_bboxes.append([0, 0, img_width, img_height]) else: slice_bboxes = [[0, 0, img_width, img_height]] img_batch = [] for bbox in slice_bboxes: l, t, r, b = bbox img_batch.append(image[t:b, l:r]) return img_batch, slice_bboxes def predict(self, image_path): image = cv2.imread(image_path) image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) img_batch, slice_bboxes = self.getImageSlices(image) all_boxes = [] for img, slice_bbox in zip(img_batch, slice_bboxes): img_pil = PIL.Image.fromarray(img) output = self.predictor.predict( image = img_pil, text = self.label_list, text_encodings = self.text_encodings, threshold = self.OBJ_THRESH, pad_square = True ) boxes = output.boxes.cpu().numpy() if boxes.shape[0] > 0: boxes[:, 0] = boxes[:, 0] + slice_bbox[0] boxes[:, 1] = boxes[:, 1] + slice_bbox[1] boxes[:, 2] = boxes[:, 2] + slice_bbox[0] boxes[:, 3] = boxes[:, 3] + slice_bbox[1] boxes = boxes.astype(np.int32).tolist() for i in range(len(boxes)): obj_item = ObjectPrediction( bbox = boxes[i], score = float(output.scores[i]), category_id = int(output.labels[i]) ) all_boxes.append(obj_item) if len(all_boxes) > 0: all_boxes = self.postprocess(all_boxes) return all_boxes if __name__ == "__main__": model_path = "./data/owl_image_encoder_patch32.engine" label_list = ["car", "tower"] OBJ_THRESH = 0.1 NMS_THRESH = 0.5 overlap_ratio = 0.25 slice = True slice_scales = [[640, 640], [1280, 1280]] owl_sahi = OWL_SAHI(model_path, label_list, OBJ_THRESH, NMS_THRESH, overlap_ratio, slice, slice_scales) images = os.listdir("images") for image_file in images: print(image_file) image_path = os.path.join("images", image_file) all_boxes_processed = owl_sahi.predict(image_path) image = cv2.imread(image_path) for box in all_boxes_processed: xmin, ymin, xmax, ymax = box.bbox.to_xyxy() score = box.score.value clsse = box.category.id cv2.rectangle(image, (xmin, ymin), (xmax, ymax), (0, 255, 0), 4) cv2.putText(image, '{0} {1:.2f}'.format(label_list[clsse], score), (xmin, ymin - 10), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 4, cv2.LINE_AA) cv2.imwrite(f"output/{image_file}", image) 三、小结本文介绍了基于NanoOWL和SAHI框架的视觉多模态模型切分检测方案,通过结合文本提示与图像切分技术,在Jetson Orin等边缘设备上实现开放词汇目标检测。该方案利用Vision Transformer架构和CLIP图文对齐能力,支持任意类别目标检测,并通过SAHI进行图像切片处理与后处理合并,提升检测精度与效率,适用于低空无人机目标检测等边缘推理场景。
-
CIFAR-10数据集共有60000张32*32的彩色图像,分为10个类别,初看到这些图像,都会对低分辨率而形成的超级模糊效果感到困惑——毕竟,现代手机随便一张照片都是千万像素级别。但这里隐藏着计算机视觉发展史上的关键权衡:CIFAR-10诞生于2009年,其设计初衷并非追求视觉保真度,而是为了解决当时AI研究的核心瓶颈——计算效率与实验迭代速度。在深度学习黎明期(GPU算力仅相当于现在的千分之一),研究者需要能在合理时间内完成训练的数据集。32x32的分辨率意味着单张图像仅需3KB内存(32x32x3通道),整个数据集不到200MB,这使得研究者能在普通显卡上几分钟内跑完一轮实验,快速验证新算法。若采用更高分辨率,不仅存储需求呈平方级增长(128x128图像体积扩大16倍),卷积计算量更会爆炸性增加,直接阻碍研究进程。更重要的是,CIFAR-10的“低清”特性反而强化了其学术价值。由于图像模糊细节缺失,模型必须学会捕捉本质特征(如物体轮廓、色块分布)而非依赖纹理细节,这迫使AI发展更鲁棒的特征提取能力。事实上,ResNet、VGG等里程碑架构都是先在CIFAR-10上验证基础设计,再迁移到更高分辨率数据集的。可以说,正是这个“简陋”的数据集,加速了深度学习黄金时代的到来。如今我们仍保留使用CIFAR-10,因为它已成为模型性能的试金石——在如此困难的低分辨率数据上能达到95%+准确率的模型,往往具备更强的表征学习能力。当然,随着算力提升,我们也发展出了ImageNet(224x224)、COCO等更高分辨率数据集,但CIFAR-10作为轻量级基准的地位始终不可撼动——毕竟,科学进步不仅需要挑战极限,更需要高效迭代的智慧。
-
开源人工智能强调代码、数据、算法及模型权重的开放,可以说,人工智能时代的特征之一就是开放共享。在这样的背景下,应当如何界定AI创作的保护边界?
-
2025-09-5 16:38 基于DeepSeek+Cherry Studio构建模拟面试助手有一说一,操作手册很详细,容易上手,但是华为云开发者空间的云主机的复制粘贴功能太傻了,需要优化,很难用,尤其 mac
-
【朝推夜训】松材线虫病高清图片切分检测我们以 Jetson Orin Nano 为例,介绍如何使用Python在资源受限的嵌入式设备上实现高清大图切分检测。一、模型导出1. 安装 Cmake,创建 24G swap 空间模型导出时依赖更高版本的Cmake,这里我们直接编译安装:sudo apt update sudo apt install libssl-dev git clone -b v3.25.1 https://github.com/Kitware/CMake.git cd CMake ./bootstrap && make && sudo make install cmake --version交换空间是操作系统用来拓展可用内存的一种机制,可以在内存不足的情况下继续运行,避免程序崩溃或者系统卡死,但是交换空间的访问速度远低于物理内存!禁用Jetson设备上的ZRAM交换配置:ZRAM会将内存页面压缩并存储在内存中,以减少对磁盘的依赖。sudo systemctl disable nvzramconfig使用fallocate创建一个24GB大小的文件,位于/var/24GB.swap路径。sudo fallocate -l 24G /var/24GB.swap设置交换空间格式sudo mkswap /var/24GB.swap启用交换空间sudo swapon /var/24GB.swap永久自启交换空间echo "/var/24GB.swap none swap sw 0 0" | sudo tee -a /etc/fstab重启系统后,系统交换空间增加至24GB:sudo reboot 2. 安装 ultralytics,创建 TensorRT 软连接pip install ultralytics pip install tqdm pandas pip install onnx==1.12.0 onnxslim==0.1.65 protobuf==3.20.1 pip install onnx-simplifier==0.3.10 pip install /home/vsuav/Downloads/onnxruntime_gpu-1.12.1-cp38-cp38-linux_aarch64.whl导出TensorRT模型时依赖其Python安装包,一般在系统Python目录下,以Jetson Orin Nano为例,我们可以建立软连接指向TensorRT安装路径:sudo ln -s /usr/lib/python3.8/dist-packages/tensorrt* /home/vsuav/miniconda3/envs/py38/lib/python3.8/site-packages3. 导出 TensorRT FP16 精度的模型from ultralytics import YOLO model = YOLO("yolov8-1_640x640_amd64_fp32.pt") model.export( format="engine", workspace=4, imgsz=640, half=True, device=0, batch=1 ) 二、切分检测1. 安装 SAHI 库pip install sahi==0.11.18这里我们使用0.11.18版本,修改/home/vsuav/miniconda3/envs/py38/lib/python3.8/site-packages/sahi/models/yolov8.py文件,注释掉第33行代码使其能够加载导出的Engine模型。class Yolov8DetectionModel(DetectionModel): def check_dependencies(self) -> None: check_requirements(["ultralytics"]) def load_model(self): """ Detection model is initialized and set to self.model. """ from ultralytics import YOLO try: model = YOLO(self.model_path) # model.to(self.device) self.set_model(model) except Exception as e: raise TypeError("model_path is not a valid yolov8 model path: ", e) 2. 运行检测代码加载模型import cv2 import numpy as np import matplotlib.pyplot as plt from sahi import AutoDetectionModel from sahi.predict import get_sliced_prediction detection_model = AutoDetectionModel.from_pretrained( model_type='yolov8', model_path="yolov8-1_640x640_amd64_fp16.engine", confidence_threshold=0.45 ) WARNING ⚠️ Unable to automatically guess model task, assuming 'task=detect'. Explicitly define task for your model, i.e. 'task=detect', 'segment', 'classify','pose' or 'obb'. Loading yolov8-1_640x640_amd64_fp16.engine for TensorRT inference... [09/04/2025-11:27:15] [TRT] [I] Loaded engine size: 51 MiB [09/04/2025-11:27:17] [TRT] [I] [MemUsageChange] Init cuDNN: CPU +616, GPU +757, now: CPU 1052, GPU 5537 (MiB) [09/04/2025-11:27:17] [TRT] [I] [MemUsageChange] TensorRT-managed allocation in engine deserialization: CPU +0, GPU +49, now: CPU 0, GPU 49 (MiB) [09/04/2025-11:27:17] [TRT] [I] [MemUsageChange] Init cuDNN: CPU +0, GPU +29, now: CPU 1001, GPU 5519 (MiB) [09/04/2025-11:27:18] [TRT] [I] [MemUsageChange] TensorRT-managed allocation in IExecutionContext creation: CPU +0, GPU +27, now: CPU 0, GPU 76 (MiB) 图片切分检测image_path = "28c56c0b-3ff7-4997-88b3-5a8330f7ea88.jpeg" result = get_sliced_prediction( image_path, detection_model, slice_height = 640, slice_width = 640, overlap_height_ratio = 0.2, overlap_width_ratio = 0.2, perform_standard_pred = True, postprocess_class_agnostic = True, postprocess_match_threshold = 0.55, ) Performing prediction on 6 slices. Loading yolov8-1_640x640_amd64_fp16.engine for TensorRT inference... [09/04/2025-11:27:20] [TRT] [I] The logger passed into createInferRuntime differs from one already provided for an existing builder, runtime, or refitter. Uses of the global logger, returned by nvinfer1::getLogger(), will return the existing value. [09/04/2025-11:27:20] [TRT] [I] Loaded engine size: 51 MiB [09/04/2025-11:27:20] [TRT] [I] [MemUsageChange] Init cuDNN: CPU +0, GPU +32, now: CPU 1581, GPU 6577 (MiB) [09/04/2025-11:27:20] [TRT] [I] [MemUsageChange] TensorRT-managed allocation in engine deserialization: CPU +0, GPU +50, now: CPU 0, GPU 126 (MiB) [09/04/2025-11:27:20] [TRT] [I] [MemUsageChange] Init cuDNN: CPU +0, GPU +6, now: CPU 1530, GPU 6537 (MiB) [09/04/2025-11:27:20] [TRT] [I] [MemUsageChange] TensorRT-managed allocation in IExecutionContext creation: CPU +1, GPU +27, now: CPU 1, GPU 153 (MiB) 导出检测结果result.export_visuals(export_dir="output/", file_name="sliced_result") result_img_split = cv2.imread("output/sliced_result.png") plt.imshow(result_img_split[:, :, ::-1]) plt.axis('off') plt.show() 三、小结该方案成功在Jetson Orin Nano设备上运行,能够有效处理高清大图的松材线虫病检测任务,在保证检测精度的同时充分利用了嵌入式设备的硬件资源,为林业病虫害防治提供了实用的技术方案。
-
人工智能具有广泛的应用性、深刻的变革性和强大的溢出带动性,正深刻改变人们的生产生活方式,为经济社会发展注入了强大的新动能,如何正确看待和理解人工智能?
-
模型验证可以说是模型部署前保证其“身心健康”的体检报告。首先,我们来看看Benchmark工具用于精度验证的核心逻辑。当我们将一个训练好的模型(例如在PyTorch或TensorFlow中训练)转换为部署框架格式(如ONNX、TensorRT、TFLite)时,由于运算符实现、计算精度(FP32到FP16/INT8)、优化策略等的不同,理论上必然会在数值上引入微小的误差。Benchmark工具的工作就是定量地测量这种误差,确保其处于可接受的范围内,防止模型“带病上岗”。它的工作原理是一个严谨的闭环:固定输入 -> 转换后模型推理 -> 输出与标杆对比 -> 生成精度报告。这里的“标杆数据”(Golden Data)特指由原始未转换的、我们认为正确的模型在相同输入下产生的输出,它作为我们比较的基准真理(Ground Truth)。接下来,我们聚焦到两种核心的相似度度量指标,它们从不同维度告诉我们新模型和标杆模型有多“像”。1. 余弦相似度(Cosine Similarity):衡量“方向”的一致性您可以想象一下高维空间中的两个向量(即模型的输出数据),我们并不直接关心它们的绝对长度或大小,而是更关心它们所指的方向是否一致。余弦相似度就是计算这两个向量之间夹角余弦值。它的取值范围在[-1, 1]之间,值越接近1,代表两个向量的方向越一致,意味着模型在“判断”上是一致的。例如,在一个分类模型中,输出可能是一个概率向量[0.85, 0.1, 0.05](表示85%概率是类别1)和标杆[0.82, 0.12, 0.06]。它们的绝对值有微小差异,但指向的最大概率类别相同,整体分布形态相似,这时余弦相似度会非常高。这个指标非常擅长捕捉输出模式的整体结构性相似,对绝对数值的微小差异不敏感。2. 平均相对误差(Mean Relative Error, MRE):衡量“数值”的精确性与余弦相似度互补,平均相对误差则深入到每个数值点,进行逐元素的、精准的误差测量。它的计算方式是:先计算标杆值与实际值之间绝对差的绝对值,然后用这个绝对值除以标杆值的绝对值(目的是进行归一化,消除数值本身大小的影响),最后对所有数据点求平均。公式大致为:MRE = mean( |(Y_benchmark - Y_infer)| / |Y_benchmark| )。MRE得到一个百分比形式的数值,值越接近0%,说明数值精度越高。它非常敏感于数值的微小波动,能够发现那些余弦相似度可能忽略掉的细微数值偏差。一个高的余弦相似度配上一个低的MRE,才是模型转换成功的黄金标准。综上,一个专业的Benchmark工具会同时使用这两项指标来给我们呈现一份全面的“体检报告”。余弦相似度确保模型“没犯原则性错误”(思路是对的),而平均相对误差则确保它“细节处理到位”(计算是准的)。在实际的模型部署流程中,我们会为这两项指标设定阈值(例如,余弦相似度 > 0.99 且 MRE < 1%),只有通过测试的模型才会被放心地部署到生产环境中,从而保证算法应用的效果与研发阶段的预期高度一致。
-
Netron 是一个专门用于神经网络模型可视化和分析的免费工具,它通过直观的图形界面帮助用户理解和调试模型结构。这个网站(netron.app)提供了在线版本,同时也支持离线桌面端应用,覆盖了Windows、macOS和Linux系统。它的核心功能是解析并可视化各种主流深度学习框架的模型文件,让你无需深入代码即可窥探模型内部架构。Netron 支持绝大多数常见的模型格式,包括但不限于 ONNX、TensorFlow(SavedModel、.pb)、PyTorch(.pt、.pth)、Keras(.h5)、Caffe、Core ML,以及 TensorFlow Lite 等。如果你有一个训练好的AI模型文件,直接拖拽到 Netron 中,它会自动解析并生成结构图,显示每一层的类型(如卷积层、全连接层、激活函数等)、输入输出维度、参数数量等关键信息。这对于模型调试、转换优化或知识共享非常有用。Netron 的突出优势在于它的轻量化和交互性。你无需配置任何环境,打开网页或应用即可加载模型,通过点击节点展开细节,甚至支持模型运算符的逐层查看。例如,你可以快速验证模型是否正确剪枝、量化,或检查中间层的通道数是否符合预期。不过需要注意的是,在线版对文件大小有限制(通常建议小于1GB),超大模型建议使用桌面端处理。总之,Netron 是深度学习工程师、研究者甚至学生的“瑞士军刀”,它降低了理解复杂模型的门槛,让黑盒变得透明。如果你有一个AI模型文件,不妨直接打开 netron.app 试一下——拖拽文件,瞬间就能看到整个计算图的脉络,非常直观!
-
传统的图像识别流程:繁琐且脆弱的“特征工程”在深度学习崛起之前,主流的图像识别方法(如支持向量机SVM)严重依赖于手工设计的特征提取器(Hand-crafted Features)。这个过程可以概括为:预处理:对原始图像进行灰度化、归一化、滤波去噪、图像增强等操作,旨在减少无关变量的干扰。特征提取:这是最核心、最复杂也最需要专家知识的环节。算法工程师需要设计各种复杂的算子,从图像中抽取出“被认为”对分类有用的信息。例如:SIFT (尺度不变特征变换):提取图像中的关键点,并计算其方向梯度直方图作为特征描述符。对旋转、尺度缩放有一定的不变性。HOG (方向梯度直方图):通过计算和统计图像局部区域的梯度方向直方图来构成特征,常用于行人检测。SURF、ORB等等。分类:将上一步提取出的特征向量(一串数字)输入到分类器(如SVM)中进行训练或预测。这种方法的问题在于:脆弱性:这些手工特征往往是针对特定任务设计的(比如HOG对行人有效,但对猫脸可能就无效),泛化能力极差。换一个场景或任务,整个特征提取流程可能就要推倒重来。信息损失:特征提取过程是一个高度压缩和筛选的过程,它很可能在早期就丢弃了大量对后续分类看似无关、实则关键的信息。复杂度高:严重依赖专家的先验知识,试错成本高昂。CNN的革命:端到端的“表示学习”CNN的出现完全颠覆了上述范式。它的强大之处在于,它将特征提取和分类这两个原本分离的步骤融合到了一个统一的、端到端(End-to-End)的神经网络中。“直接输入”的真相:所谓“直接输入原始图像”,更准确的理解是,CNN将原本需要人工设计的特征提取器,替换成了一系列可以通过数据自动学习到的卷积核(Filters)。输入的是图像的原始像素值,但第一层卷积层就开始自动进行特征提取了。分层递进的特征抽象:浅层卷积层:学习到的是非常底层的、局部的特征,如边缘、角点、颜色、纹理等。这类似于传统算法中的SIFT或HOG所做的事情,但它是自动学出来的。中层卷积层:将底层的特征组合成更复杂的模式,如眼睛、鼻子、轮子、窗户等部件。深层卷积层:进一步组合中层特征,形成更加抽象和全局的表示,如一张脸、一辆车、一栋房子的轮廓。全连接层:最终利用这些高度抽象的特征进行分类决策。自动化的优势:通过反向传播算法和梯度下降,整个网络的所有卷积核参数都朝着最终任务(如图像分类)的目标进行优化。网络自己学会了一套从原始像素到最终类别的最优特征提取方案。这套方案最大限度地保留了有用信息,并且因为是从海量数据中学得的,其泛化能力远超任何手工设计的特征。总结来说:CNN并非不需要“处理”,而是它将最复杂的“特征提取”这种预处理工作,从依靠人类专家的“手工设计”变成了依靠数据和算力的“自动学习”。我们依然会做一些如图像尺寸归一化、数据标准化等基础预处理,但彻底告别了那个需要绞尽脑汁设计SIFT、HOG特征描述子的时代。这正是CNN能够广泛应用的根本原因——它极大地降低了开发高效图像识别系统的技术门槛,并将性能提升到了前所未有的高度。
-
从最根本的拓扑结构定义上来说,神经网络可以分为前馈神经网络(Feedforward Neural Network) 和反馈/循环神经网络(Recurrent Neural Network, RNN) 两大类。比如,介绍CNN时强调其“前馈”特性,并非废话,而是一个重要的区分性定义。前馈神经网络(如CNN、标准DNN):信号从输入层到输出层单向流动,没有环路。数据像流水线一样一层传向下一层,处理完毕后即得到结果。这类网络主要用于处理空间信息(如图像、结构化的数据),关注“是什么”(What)。反馈/循环神经网络(如RNN、LSTM):网络内部存在环路,使得信息可以持久化,即上一时刻的隐藏状态可以作为输入影响到下一时刻的输出。这类网络主要用于处理序列信息(如语言、语音、时间序列),关注“接下来是什么”(What’s next)。
-
回归和分类是机器学习让计算机从数据中学习“预测”的两种最基本、最不同的范式。 它们的核心区别在于“我们想要模型输出什么”。回归问题:预测一个“量”想象一下,你是一位经验丰富的房地产估价师。给你一套房子的信息(面积、地段、房间数、房龄等),你的任务是估计出这套房子合理的市场价格。问题的本质:你预测的目标——房价——是一个连续的数值。它可以是180万,也可以是180.5万,甚至是180.52万。这个数字在理论上可以有无限多的可能取值(在一定范围内)。AI模型的任务:机器学习模型在这里的任务就是学习房屋特征(如面积)与这个连续目标值(房价)之间的映射关系或数学函数。它试图画出一条最符合所有历史数据点的“趋势线”。生活中的其他例子:预测天气:明天的气温会是多少度?预测趋势:未来三个月某只股票的股价走势如何?评估效果:根据广告投入预算,预测产品销量会增长多少?为什么用均方误差?因为均方误差完美地衡量了“预测值”和“真实值”这两个数字之间的差距。它的计算方式是 (预测值 - 真实值)^2。如果模型预测房价是181万,而真实成交价是180万,那么这个误差就是 (1)^2 = 1。这个误差值本身也是一个连续的量,非常适合用来指导模型通过梯度下降等算法,一点点地修正自身的参数,让预测的数值越来越接近真实值。它的目标就是“对准那个准确的数字”。分类问题:预测一个“标签”现在,换一个场景。你是一位医生,正在查看一位患者的医学影像(比如X光片)。你的任务是判断这张影像是否显示有肿瘤,即做出“是”或“否”的诊断。问题的本质:你预测的目标不是一个数值,而是一个离散的类别或标签。在这个例子中,标签是有限的、互斥的选项:{“有肿瘤”, “无肿瘤”}。这叫做二分类。当然,类别也可以更多,比如识别手写数字(0-9共10个类别)、判断一幅图像是猫、狗还是汽车等。AI模型的任务:模型的任务不再是拟合一个函数输出具体数值,而是计算输入数据属于各个可能类别的“概率”。比如,模型可能会输出:有肿瘤的概率是90%,无肿瘤的概率是10%。最终,我们选择概率最高的那个类别作为最终的预测结果(“有肿瘤”)。生活中的其他例子:垃圾邮件过滤:判断一封邮件是“垃圾邮件”还是“正常邮件”。图像识别:识别一张照片中的物体是“猫”还是“狗”。情感分析:判断一条商品评论是“正面”、“负面”还是“中性”。为什么用交叉熵误差?因为交叉熵衡量的是两个概率分布之间的差异。在分类任务中,模型的输出是一个概率分布(如[0.9, 0.1]),而真实标签我们可以用一个“one-hot”编码表示(如[1, 0],代表100%是“有肿瘤”)。交叉熵误差会重点关注“模型赋予正确类别的概率”有多大。如果模型给正确类别的概率很低(比如只有0.1),交叉熵会给出一个非常巨大的惩罚(误差值很大),强烈地告诉模型:“你错得太离谱了,赶紧调整参数!”。如果模型给出的概率很高(0.9),交叉熵会给出一个很小的惩罚,说:“嗯,差不多对了,再微调一下就好”。相比之下,均方误差在这里就显得“力不从心”且不直接。它会对所有输出值都进行平方差计算,反应不够灵敏,可能导致模型优化缓慢甚至陷入局部最优。交叉熵的目标是“拉高正确标签的概率,压低错误标签的概率”,这与分类任务的目标完全一致。最后一言以蔽之:回归是 “是多少?” 的问题,输出是连续数值,用均方误差衡量“数值差”。分类是 “是啥?” 的问题,输出是离散标签,用交叉熵误差衡量“概率分布差”。为不同任务选择合适的误差函数(或称损失函数),确保模型能够最高效、最准确地进行学习。
-
人工智能神经网络的核心思想源于对生物大脑中神经元的仿生学启发。生物神经元通过树突接收信号,在细胞体内进行整合,当电位超过某个阈值时便通过轴突产生输出。为了在数学和计算机上实现这一抽象概念,科学家于1958年提出了感知机模型,它成为了第一个人工神经元的数学模型。感知机模拟了这一过程:它对多个输入信号进行加权求和,并将结果馈入一个简单的阈值函数(如输出0/1或-1/1的阶跃/符号函数),从而产生一个清晰的二元决策。为了衡量这个决策的好坏并引导其学习,损失函数被引入,它量化了模型预测与真实答案之间的差距,为优化提供了明确的方向。然而,单层感知机有一个致命的缺陷:它只能学习一条直线(或一个超平面)来划分世界,无法解决诸如“异或”问题等简单的线性不可分问题。这一局限性几乎一度让整个神经网络研究领域陷入寒冬。为了突破这一根本性瓶颈,研究者们在感知机的基础上进行了深度的架构革新,从而诞生了现代神经网络的概念。这项革新主要体现在三个维度。首先,也是最重要的,是引入了隐藏层。在输入与输出之间加入一层或多层“隐藏”的神经元,使得网络能够学习输入特征的层次化组合。第一层隐藏层可能学习一些基础特征,而后继层则将这些基础特征组合成更复杂、更抽象的高级概念,极大地增强了模型的表达能力和理解水平。其次,输出层发生了演变,不再局限于单个神经元。一个神经网络可以拥有多个输出神经元,使其能够同时解决更多样化的任务。例如,在识别手写数字时,输出层可以有10个神经元,分别对应数字0到9的概率,从而直接解决多分类问题。这种扩展使神经网络从单一的二元判决器演变为一个通用的多功能预测机器。最后,为了能够训练这种多层结构,激活函数发生了根本性的进化。简单、不可微的阶跃函数被一系列复杂、平滑的非线性函数(如Sigmoid、Tanh,以及后来更有效的ReLU)所取代。这一变革是至关重要的技术前提,它使得基于链式法则的反向传播算法得以应用,误差梯度可以顺畅地穿过隐藏层反向流动,从而高效地更新所有层中的权重参数。
-
NO.2 篇 知识库/RAG能力详解 <ModelArts Versatile-AI原生应用引擎 体验入口>华为开发者空间 -- 开发平台 --Versatile Agent ( 请在PC端打开 ) 什么是AI AgentAI Agent人工智能体,是一种能够自主感知环境、制定目标、规划行动、执行任务并持续学习的智能程序或系统。比如,告诉AI Agent帮忙下单一份外卖,它就可以直接调用 APP选择外卖,再调用支付程序下单支付,无需人类去指定每一步的操作。从本质上来讲,大模型作为大脑发号施令,推理能力决定它的决策能力上限,工具模块决定他行动能力的上限、可完成任务的横向宽度、操作场域。而记忆(Memory)模块作为信息存储库,将多次交互的短期和长期信息保存与共享,决定了它规划和决策的准确度与速度,从而实现更个性化的响应。 · AI Agent之ModelArts VersatileModelArts Versatile-AI原生应用引擎是一站式企业级全生命周期的智能体平台,为企业专属大模型应用开发的工具链,提供灵活的画布式AI Agent开发能力,让Agent能够准确解决复杂的业务场景问题。提供从Agent开发,使用,运营和运维的全生命周期管理能力。 快速了解 AI Agent—知识库/RAG · 知识库——信息的“蓄水池”知识库是组织、存储及管理知识的系统,涵盖文档、图片、视频等信息的分类整理,可以帮助用户高效管理大量的信息。在Agent中添加知识库,使其与用户提供的专业知识库进行交互,可以显著提升Agent的准确度和专业度。知识库的数据来源分为直接接入源数据和选择知识数据集两种。 专业领域的知识库已不再是简单的数据堆砌,需要智能化、高效率的知识管理和利用。知识库具体指的是存储过往交互、知识片段和任务状态(可能利用向量数据库)。知识库本身是静态的存储,要让其中的知识,尤其是海量非结构化知识,能够被大模型或RAG系统高效地理解和利用,就需要更智能的检索技术——这正是向量数据库大显身手之处。 --结构化知识库:通常指关系型数据库(如 MySQL、PostgreSQL),数据以表格形式组织,具有严格的模式和关系定义,擅长存储交易,记录、用户信息等高度规整的数据。--非结构化知识库:存储文档、PDF、PPT、网页、图片、音视频等原始形态的数据。文件系统、文档管理系统、对象存储等都属于此类。它们容量巨大,但信息组织相对松散,直接利用效率较低。 · 知识数据集知识数据集是组成知识库的重要元素,其核心是将零散知识(如文档、图片、视频等)加工成结构化知识单元:通过本地上传或OBS接入数据,经预处理后切片拆分为更小的知识单元,并配置索引以便Agent快速定位所需知识。完成知识数据集创建后,将其关联至知识库,形成可调用的知识体系。 · RAG——为模型注入精准信息RAG(Retrieval-Augmented Generation)即检索增强生成,是一种结合信息检索与文本生成的人工智能技术框架,通过动态引入外部知识库来增强大语言模型的输出质量,旨在解决大语言模型在回答问题时,因知识更新不及时、缺乏特定领域知识或事实性错误等问题,通过在生成回答之前检索相关外部知识源来增强回答的准确性和可靠性。RAG可以在 AI 接收到问题时,动态地从外部知识库中查找相关信息,然后把这些信息加到提示词里一起交给 AI 处理,从而提高回答质量。RAG本质上是通过工程化手段,解决LLM知识更新困难的问题。其核心手段是利用外挂于LLM的知识数据库(通常使用向量数据库)存储未在训练数据集中出现的新数据、领域数据等。通常而言,RAG将知识问答分成三个阶段:索引、知识检索、基于内容的问答。其应用优势在于解决大模型幻觉问题,提升专业领域回答准确性;支持私有化知识库与通用模型的融合应用;相比微调更具成本效益和灵活性。 RAG类型:VectorRAG(向量RAG)、GraphRAG(知识图谱RAG)--VectorRAG(向量检索增强生成)向量RAG,是一种结合了向量化和大语言模型的RAG技术。VectorRAG将非结构化的数据转化为结构化的向量空间,利用向量库实现高效的信息检索。技术原理:通过向量数据库将文本数据转换为高维向量,基于语义相似度检索相关片段核心优势:处理非结构化文本效率高(如文档问答、FAQ系统);实现简单且计算资源需求较低 -- GraphRAG(基于图谱的检索增强生成)知识图谱RAG,是一种结合了知识图谱和大语言模型的RAG技术。GraphRAG能够处理各种类型的文档,从中提取实体(文档中具体的对象或概念)、关系以及文本内容构建知识图谱(一种结构化的知识表示方式),从而增强大语言模型对复杂信息的理解和推理能力。技术原理:构建知识图谱存储实体关系,通过图数据库(如Neo4j)执行多跳推理检索核心优势:擅长处理结构化/半结构化数据(如知识图谱问答);支持复杂逻辑推理和全局语义理解 · RAG(检索增强生成)与知识库的关系——通过技术互补实现协同增效功能定位的差异与互补:知识库作为静态信息存储系统,主要承担结构化数据的精确检索功能(如企业文档查询),而RAG则通过动态检索外部知识库内容,结合大语言模型生成自然语言回答。这种组合既保留了知识库的检索效率,又解决了大模型的幻觉问题。 技术实现的依赖关系:RAG通常以知识库为数据基础,通过知识库文档分块及向量化存储、用户查询时进行语义相似度检索、将检索结果作为上下文输入大模型生成最终答案等流程实现知识增强,这种架构使得知识库成为RAG的“数据基础设施”。 在智能体架构中,知识库是静态的知识载体,而RAG是动态的知识调用机制。两者的结合实现了“存储-检索-生成”的闭环,既扩展了大模型的能力边界,又保障了输出的准确性与可追溯性。未来随着多模态知识库的发展,RAG的应用场景将进一步扩展。 ModelArts Versatile--AI原生应用引擎 知识库/RAG的竞争力优势Versatile Agent沉淀行业Know-How(专长),通过知识工程提升大模型的表现,进一步支撑行业应用创新。行业/企业经验提取,持续积累企业场景经验模板,动态经验知识库迭代。知识库RAG 技术优势01超高效率:企业知识库持续学习,天级迭代;场景学习,周级迭代;领域学习,季度级迭代。 02 RAG: 领域知识库&检索引擎,让大模型输出结果更可靠。RAG检索增强实践成效:准确率从50%提升到83%。输出结果准确率提升明显;行业知识动态持续更新;检索生成结果速度更快。 03 接入多类实时知识库,更实时、更准确的生成式答案ModelArts Versatile-AI原生应用引擎接入多类型知识库,充分获取企业最新知识,增强实时性和准确性;灵活可配置的融合检索策略。 04 行业知识赋能大模型ModelArts Versatile-AI原生应用引擎通过RAG赋能增强大模型行业知识,提升行业理解能力和业务准确性。融入企业业务场景,从企业业务场景经验提取,“经验模板” 迭代优化,形成企业经验模板库(专属知识库)。 相关特性知识数据集管理:接入源数据、数据加工、知识数据集基础操作知识库管理:接入源数据或选择知识数据集、知识库的基础操作、索引字段配置、检索方式、能力开放。三方知识库接入:三方知识库API接入- 适配第三方图数据库。 --选择知识数据集-创建知识库:在“选择知识数据集”面板,勾选目标数据集,并选择数据集版本及索引配置。当知识库RAG类型为“VectorRAG”时,按照混合检索、语义检索、全文检索多模式开展。当知识库RAG类型为“GraphRAG”时,默认为“语义检索”方式。--接入数据源-创建知识库:选择数据源的接入方式,支持以下两种方式,01 本地上传:数据文件在本地,从本地选择文件进行上传;02 OBS接入:数据文件存放在华为云OBS桶,从OBS桶接入数据。 知识飞轮 技术优势超高效率,知识飞轮帮助企业知识库周级创建、天级迭代。--数据积累与回流:采集增量业务数据和用户反馈数据,提炼知识,提供给大模型,支撑大模型能力持续增强。--多轮迭代机制:支持天级持续学习(自动)、周级场景学习、季度级领域学习三轮循环迭代机制,持续提升模型能力、应用效果。 针对反馈数据的提炼和学习,ModelArts Versatile-AI原生应用引擎通过多工具预集成、主流模型集成、业务应用信息抽取插件、智能应用反馈插件、自动化调度等能力构建知识飞轮,将业务人员在日常作业过程中积累的增量数据和用户反馈提炼为企业知识,不断供给大模型开展多轮循环学习实现天级迭代,持续提升智能应用体验与效果。 Versatile--AI原生应用引擎 知识库/RAG 主要解决什么问题(知识中心) 结构化知识存储领域知识库(如医疗术语库、法律条款)提供专业认知基础企业知识库(产品手册、业务流程)支撑特定场景服务用户画像知识库(偏好记录、行为模式)实现个性化交互动态知识演进短期记忆沉淀为长期知识(如对话摘要转为用户特征向量)通过知识图谱自动更新实体关系(如新增"用户-宠物-用品"关联) 功能边界突破突破LLM原生知识限制(通过企业私域知识库回答内部流程问题)支持多模态知识融合(图文知识库+语音交互记忆)持续学习基础为模型微调提供高质量训练数据(清洗后的用户交互记录)构建可解释的知识溯源链条(决策依据可关联到具体知识条目) ModelArts Versatile-AI原生应用引擎知识中心,内置知识库+RAG技术突破大模型的知识局限和幻觉问题。它的核心思想并非让模型死记硬背所有知识,而是赋予它"按需查找"的能力,极大地提升了大模型在特定领域或依赖精确事实场景下的表现力和可靠性,巧妙地将大模型的强大语言生成能力与结构化/非结构化外部知识源的丰富性结合起来,实现了"1+1>2"的效果。同时提升了 AI 的交互能力,还为其在各种复杂场景中的应用提供了可能性,包括上下文连续性、复杂任务处理、长期项目管理、认知能力增强等能力。 结语ModelArts Versatile-AI原生应用引擎,以知识库融合RAG技术,担当智能体大脑的“第二存储”,搭建与业务场景融合的知识库,融会贯通行业特有经验沉淀,实现快速检索访问获取信息,增强Agent自主执行能力与结果可靠性。通过知识工程提升大模型的表现,进一步支撑行业应用创新。同时,Versatile助力广大开发者将Agent开发简化并内化成基础技能,快速搭建各领域智能应用,辐射千行万业,变革智能生产力。 点击可前往>>华为云ModelArts Versatile-AI原生应用 引擎官网 系列文章推荐:AI Agent智能体系列解读 | ModelArts Versatile插件类——MCP/工具能力详解
-
在对maptr模型进行导出并部署到mdc610平台时,在onnx到om时出现非常多警告,如下:转换命令:atc --model=maptr_tiny_r50_24e_bevformer.onnx --framework=5 --output=maptr_tiny_r50_24e_bevformer --input_shape="0:1,1,6,3,480,800;2:1,6,4,4" --soc_version=Ascend610我们可以拿到om权重,但是这个om权重在netron中无法可视化,如下:对于onnx文件,可以通过check并正常推理(能得到精度相当高的推理结果)log文件见附件请问大佬们,这里的警告需要在意(修改)吗?(我应该怎么检查错误和进行修改?) (或者,这里的警告会对后续在mdc610上的部署产生问题吗?如果不会,或许我们可以不在意?)
上滑加载中
推荐直播
-
华为云码道Agent集成与鸿蒙实战2026/08/11 周二 19:00-21:00
王一男-华为云码道产品规划专家;李炎-华为云码道产品专家;彭江敏-华为云鸿蒙端云一体化开发专家
本次直播带你解读华为云码道7月份产品新特性、新功能。更有专家演示码道Agent Space × 钉钉机器集成实战,从0到1打通消息通道;码道鸿蒙端云一体化实战,快速搭建员工签到系统。
回顾中 -
华为云开发者AI素养直播课·第三期2026/08/21 周五 16:00-18:00
林华鼎-华为云AI开发者运营负责人;念擎-华为云AI开发者运营案例开发专家
本期直播内容:AI六层能力首次详细解读 + 新一代华为云开发者空间亮相 + 校园案例直播带练
回顾中
热门标签