-
基于药物相关数据进行分子的生成与评估是新药设计的关键任务。在药物设计早期,药物研发通常依靠药物化学家的经验进行药物分子的设计与验证。药物化学家会合成一组化合物并对其进行生物活性测试,查看测试产生的数据,并利用对基础学科的理解来决定下一步要合成哪些分子。他们将以上步骤进行迭代,最终得到所需的目标分子。20世纪30年代,定量结构-活性关系(Quantitative Structure-Activity Relationship,QSAR)的发展,为化学结构与各种理化性质之间建立了一个数学模型。这些用于性质预测的QSAR模型奠定了许多虚拟筛选策略的基础。虚拟筛选使用大量候选分子数据集得到更小的数据集用于后续的合成或者购买。之后许多研究团队产生了新的想法。他们编写了计算机程序来进行从头分子设计进而生成新分子。这些程序通常在蛋白质结合位点上添加原子或官能团来“生长”现有的分子,然后使用各种打分函数来评估这些分子,并将更优分子用于合成。虽然这些全新的设计方法取得了一些成功,但它们并没有被广泛采用。在近几年深度学习发展的推动下,分子生成和分子性质预测领域开始复苏。深度学习应用于分子性质预测,包括预测生物活性、ADME(Absorption, Distribution, Metabolism, and Excretion)和与毒性靶标(eg: hERG——thehumanEther-à-go-go-RelatedGene)的相互作用等。其不依赖于专家定义的分子特征集,而是使用可调整到特定任务的学习特征。相关性质预测模型的性能优于更传统的QSAR方法。当应用于分子生成领域时,深度学习并不是随机扩展现有的分子,也不是使用一套规则来连接现有的分子片段,而是从现有的分子训练集中学习规则生成分子。通过将这些生成方法与预测模型相结合,研究人员能够设计出满足特定生物活性的分子。
-
# MindX SDK -- YOLOX推理应用参考设计案例 ## 1 案例概述 ### 1.1 概要描述 YOLOX 推理应用是对图片中的不同类目标进行检测,将检测得到的不同类的目标用不同颜色的矩形框标记。输入一幅图像,可以检测得到图像中大部分类别目标的位置。本方案使用在 COCO2017 数据集上训练得到的 YOLOX-Nano 模型进行目标检测,数据集中共包含 80 个目标类,包括行人、自行车、公共汽车、手机、沙发、猫、狗等,可以对不同类别、不同角度、不同密集程度的目标进行检测,并在COCO VAL 2017数据集达到25.3%的准确度。 ### 1.2 模型介绍 YOLOX模型于2021年由开发者Zheng Ge,Songtao Liu,Feng Wang,Zeming Li,Jian Sun在《YOLOX: Exceeding YOLO Series in 2021》首次提出。YOLOX对YOLO系列的进行一些改进,形成了一种新的高性能探测器。配备了一些新的先进检测技术,即解耦头、无锚点和先进的标签分配策略,YOLOX在速度和精度之间实现了更好的平衡,比所有型号尺寸的其他同类产品都好。 ### 1.3 实现流程 YOLOX 的后处理插件接收模型推理插件输出的特征图,该特征图为三张不同分辨率的特征图拼接而成,形状大小为1 x n x 85,其中 n 为三张网络模型输出特征图的像素点数总和,85 为 80 (数据集分类数)+ 4 (目标框回归坐标点)+ 1 (正类置信度)。本项目方案技术流程图如下。  ### 1.4 代码地址 本项目的代码地址为:https://gitee.com/ascend/mindxsdk-referenceapps/tree/master/contrib/YOLOX ## 2 软件方案介绍 ### 2.1 项目方案架构介绍 本系统设计了不同的功能模块。主要流程为:图片经过预处理之后传入流中,利用YOLOX的检测模型初步检测出目标,检测结果输入到后处理插件中,经过阈值筛选,非极大值抑制后得到最终预测结果,最终在原图上进行可视化操作。各模块功能描述如表2.1所示: 表2.1 系统方案中各模块功能: | 序号 | 子系统 | 功能描述 | | ---- | ------ | ------------ | | 1 | 图像输入 | 调用MindX SDK的appsrc输入图片 | | 2 | 模型推理 | 利用yolox的检测模型对原图进行预测 | | 3 | 模型后处理 | 利用yolox后处理插件对推理结果进行处理,得到最终预测结果 | | 4 | 结果输出 | 将目标的位置信息,识别置信度输出 | ### 2.2 代码目录结构与说明 本工程名称为YOLOX,工程目录如下图所示: ``` . ├── build.sh ├── images │ ├── DetectionPipeline.png │ ├── EvaluateInfo.png │ ├── EvaluateInfoPrevious.png │ ├── warning.png │ └── VersionError.png ├── postprocess │ ├── build.sh │ ├── CMakeLists.txt │ ├── YoloxPostProcess.cpp │ └── YoloxPostProcess.h ├── python │ ├── Main │ │ ├── eval_nopre_post.py │ │ ├── eval_pre_post.py │ │ ├── nopre_post.py │ │ ├── pre_post.py │ │ ├── pre_post.py │ │ └── preprocess.py │ ├── models │ │ ├── aipp-configs │ │ │ └── yolox_bgr.cfg │ │ ├── conversion-scripts # 下载的onnx模型存放在该文件夹下 │ │ ├── yolox_eval.cfg │ │ └── coco.names #需要下载,下载链接在下方 │ ├── test │ │ ├── data # 下载的数据集存放在此文件下 │ │ ├── map_calculate.py │ │ └── parse_coco.py #需要下载,下载链接在下方 │ ├── test_img │ │ └── test.jpg # 需要用户自行添加测试数据 │ └── pipeline │ ├── nopre_post.pipeline │ └── pre_post.pipeline └── README.md ``` 注:coco.names文件与parse_coco.py文件分别源于[链接](https://gitee.com/ascend/ModelZoo-PyTorch/tree/master/ACL_PyTorch/built-in/cv/Yolov3_for_Pytorch)的coco2014.names文件和[项目](https://gitee.com/ascend/mindxsdk-referenceapps/tree/master/contrib/FireDetection)中test文件夹下的parse_COCO.py文件,将这两个文件下载之后,分别放到python/models目录下和python/test目录下。 ## 3 开发环境准备 ### 3.1 环境依赖说明 推荐系统为ubuntu 18.04,环境依赖软件和版本如下表: | 软件名称 | 版本 | | -------- | ------ | | cmake | 3.5+ | | mxVision | 2.0.4 | | python | 3.9.2 | 确保环境中正确安装mxVision SDK。 在编译运行项目前,需要设置环境变量: MindSDK 环境变量: ``` . ${SDK-path}/set_env.sh ``` CANN 环境变量: ``` . ${ascend-toolkit-path}/set_env.sh ``` - 环境变量介绍 ``` SDK-path: mxVision SDK 安装路径 ascend-toolkit-path: CANN 安装路径。 ``` ### 3.3 模型转换 本项目中采用的模型是 YOLOX 模型,参考实现代码:https://github.com/Megvii-BaseDetection/YOLOX , 选用的模型是该 pytorch 项目中提供的模型 yolox-Nano.onnx,模型下载链接:https://mindx.sdk.obs.cn-north-4.myhuaweicloud.com/mindxsdk-referenceapps%20/contrib/YOLOX/yolox_nano.onnx 。本项目使用模型转换工具 ATC 将 onnx 模型转换为 om 模型,模型转换工具相关介绍参考链接:https://support.huaweicloud.com/tg-cannApplicationDev330/atlasatc_16_0005.html 。 1. 从上述项目链接中下载 onnx 模型 yolox_nano.onnx 至 ``python/models/conversion-scripts`` 文件夹下。 2. 将该模型转换为om模型,具体操作为: ``python/models/conversion-scripts`` 文件夹下,执行atc指令: ``` atc --model=yolox_nano.onnx --framework=5 --output=./yolox_nopre_nopost --output_type=FP32 --soc_version=Ascend310 --input_shape="images:1, 3, 416, 416" ``` 若终端输出为: ``` ATC start working now, please wait for a moment. ATC run success, welcome to the next use. W11001: Op [Slice_29] does not hit the high-priority operator information library, which might result in compromised performance. W11001: Op [Slice_9] does not hit the high-priority operator information library, which might result in compromised performance. W11001: Op [Slice_39] does not hit the high-priority operator information library, which might result in compromised performance. W11001: Op [Slice_19] does not hit the high-priority operator information library, which might result in compromised performance. ``` 表示命令执行成功。 ## 4 编译与运行 **步骤1** 在项目根目录执行命令: ``` bash build.sh chmod 640 postprocess/build/libYoloxPostProcess.so cp postprocess/build/libYoloxPostProcess.so ${MX_SDK_HOME}/lib/modelpostprocessors/ ``` **步骤2** 放入待测图片。将一张图片放在路径``python/test_img``下,命名为 test.jpg。 **步骤3** 图片检测。在项目路径``python/Main``下运行命令: ``` python3 nopre_post.py ``` 命令执行成功后在目录``python/test_img``下生成检测结果文件 nopre_post.jpg,查看结果文件验证检测结果。 ## 5 精度测试 **步骤1** 在项目根目录执行命令: ``` bash build.sh cp postprocess/build/libYoloxpostprocess.so ${MX_SDK_HOME}/lib/modelpostprocessors/ ``` **步骤2** 更改``python/Main``路径下的 shell 文件 run.sh 的运行指令为: ``` python nopre_post.py ``` **步骤3** 图片检测。将一张图片放在路径``python/test_img``下,命名为 test.jpg,在该图片上进行检测,**从 ```python/Main/nopre_post.py``` 中找到使用的 pipeline 文件路径,将其中 mxpi_objectpostprocessor0 插件的 postProcessLibPath 属性值中的 ${MX_SDK_HOME} 值改为具体路径值**,然后执行命令: ``` cd python/Main bash run.sh ``` 命令执行成功后在目录``python/test_img``下生成检测结果文件 test_nopre_post.jpg,查看结果文件验证检测结果。 **步骤4** 精度测试。下载COCO VAL 2017数据集和标注文件。 1. 下载COCO VAL 2017[验证数据集](http://images.cocodataset.org/zips/val2017.zip )和[标注文件](http://images.cocodataset.org/annotations/stuff_annotations_trainval2017.zip),并保存在项目目录``python/test/data``下,此文件夹下的组织形式应如下图所示: ``` . ├── annotations │ └── instances_val2017.json └── val2017 ``` 其中:val2017文件夹下应存放有5000张待测图片。 2. 修改``python/models``下的文件 yolox_eval.cfg 的参数 OBJECTNESS_THRESH=0.01 IOU_THRESH=0.65 3. 使用以下指令运行路径``python/test``下的文件 parse_coco.py: ``` python3 parse_coco.py --json_file=data/annotations/instances_val2017.json --img_path=data/val2017 ``` 若运行成功,会在该目录下生成文件夹ground_truth,其中包含每张图像上提取的目标框真实位置与类别的txt文件。 接下来将每张图的预测结果转为txt文件,并保存在同一文件夹下,其步骤如下: 4. 进入``python/Main``路径,运行命令: ``` python3 eval_nopre_post.py ``` 若运行成功,会在``python/test`` 路径下生成 test_nopre_post 文件夹,该目录下包含有每张图像上的检测结果的 txt 文件。 5. 在``python/test``路径下,运行命令: ``` python3 map_calculate.py --npu_txt_path="./test_nopre_post" ``` 若运行成功则得到最终检测精度,结果如下:  注:在pipeline中加图像预处理与不加预处理的验证结果不同的原因为:YOLOX的图像预处理中,Resize方式为按长边缩放,而Mindx SDK默认使用dvpp的图像解码方式,没有按长边缩放的方法,因此本项目将"resizeType"属性设置为 "Resizer_KeepAspectRatio_Fit",这样会导致精度下降。 ## 6 常见问题 ### 5.1 源项目的测试精度为24.3,达不到本项目的精度25.3 源项目的后处理默认使用类间 nms, 而本项目的 nms 调用 MxBase::NmsSort 方法,该方法为类内 nms,若要对齐源项目精度,只需将 源项目代码中的方法 multiclass_nms 的参数 class_agnostic 改为 False 即可。 ### 5.2 未修改 pipeline 文件中的 ${MX_SDK_HOME} 值为具体值 运行demo前需要正确导入环境变量,否则会报错,如下图所示:  **解决方案:** 检查Mindx SDK安装包的位置,并使用第二章介绍的指令正确导入环境变量。 ### 5.3 后处理插件权限问题 运行检测 demo 和评测时都需要将生成的YOLOX后处理动态链接库的权限修改,否则将会报权限错误,如下图所示:  **解决方案:** 在YOLOX后处理的动态链接库的路径下运行命令: ``` chmod 640 libYoloxPostProcess.so ``` ### 5.4 模型转换时会警告缺slice算子 YOLOX在图像输入到模型前会进行slice操作,而ATC工具缺少这样的算子,因此会报出如图所示的警告:  **解决方案:** 常规的做法是修改slice算子,具体操作可参考[安全帽检测](https://gitee.com/booyan/mindxsdk-referenceapps/tree/master/contrib/HelmetIdentification)的开源项目。 由于在本项目下是否修改算子并不影响检测结果,因此默认不做处理。
-
SVM是一类按监督学习(supervised learning)方式对数据进行二元分类的广义线性分类器(generalized linear classifier),其决策边界是对学习样本求解的最大边距超平面(maximum-margin hyperplane)。SVM使用铰链损失函数(hinge loss)计算经验风险(empirical risk)并在求解系统中加入了正则化项以优化结构风险(structural risk),是一个具有稀疏性和稳健性的分类器 。SVM可以通过核方法(kernel method)进行非线性分类,是常见的核学习(kernel learning)方法之一 。SVM被提出于1964年,在二十世纪90年代后得到快速发展并衍生出一系列改进和扩展算法,在人像识别、文本分类等模式识别(pattern recognition)问题中有得到应用 。SVM是由模式识别中广义肖像算法(generalized portrait algorithm)发展而来的分类器 ,其早期工作来自前苏联学者Vladimir N. Vapnik和Alexander Y. Lerner在1963年发表的研究 。1964年,Vapnik和Alexey Y. Chervonenkis对广义肖像算法进行了进一步讨论并建立了硬边距的线性SVM 。此后在二十世纪70-80年代,随着模式识别中最大边距决策边界的理论研究 、基于松弛变量(slack variable)的规划问题求解技术的出现 ,和VC维(Vapnik-Chervonenkis dimension, VC dimension)的提出,SVM被逐步理论化并成为统计学习理论的一部分。1992年,Bernhard E. Boser、Isabelle M. Guyon和Vapnik通过核方法得到了非线性SVM 。1995年,Corinna Cortes和Vapnik提出了软边距的非线性SVM并将其应用于手写字符识别问题 ,这份研究在发表后得到了关注和引用,为SVM在各领域的应用提供了参考。svm中的最优分类面是对所有样本的几何裕量最大(为什么要选择最大间隔分类器,请从数学角度上说明?网易深度学习岗位面试过程中有被问到。答案就是几何间隔与样本的误分次数间存在关系:,其中的分母就是样本到分类间隔距离,分子中的R是所有样本中的最长向量值),即: 经过一系列推导可得为优化下面原始目标: 2. 下面来看看拉格朗日理论: 可以将1中的优化目标转换为拉格朗日的形式(通过各种对偶优化,KKD条件),最后目标函数为: 我们只需要最小化上述目标函数,其中的α为原始优化问题中的不等式约束拉格朗日系数。3. 对2中最后的式子分别w和b求导可得: 由上面第1式子可以知道,如果我们优化出了α,则直接可以求出w了,即模型的参数搞定。而上面第2个式子可以作为后续优化的一个约束条件。4. 对2中最后一个目标函数用对偶优化理论可以转换为优化下面的目标函数: 而这个函数可以用常用的优化方法求得α,进而求得w和b。5. 按照道理,svm简单理论应该到此结束。不过还是要补充一点,即在预测时有: 那个尖括号我们可以用核函数代替,这也是svm经常和核函数扯在一起的原因。6. 最后是关于松弛变量的引入,因此原始的目标优化公式为: 此时对应的对偶优化公式为: 与前面的相比只是α多了个上界。SVM算法优点:1. 可用于线性/非线性分类,也可以用于回归;2. 低泛化误差;3. 容易解释;4. 计算复杂度较低;SVM算法缺点:1. 对参数和核函数的选择比较敏感;2. 原始的SVM只比较擅长处理二分类问题;资料来源:https://mp.weixin.qq.com/s/v5HG9v30BCsZkNXKobX5hA
-
基于深度学习的大规模MIMO信道状态信息反馈陈慕涵, 郭佳佳, 李潇, 金石,东南大学移动通信国家重点实验室,江苏 南京 210096摘要大规模多输入多输出(MIMO,multiple-input multiple output)技术被认为是下一代移动通信的核心技术之一,其系统增益建立在基站能够精确获知信道状态信息(CSI,channel state information)的基础上。由于天线数量显著增长,传统基于码本或矢量量化的反馈方案面临较大的技术挑战,而深度学习(DL,deep learning)为解决大规模MIMO系统的CSI反馈问题提供了新思路。围绕大规模MIMO系统CSI反馈关键技术展开调研,首先阐述了CSI反馈的研究背景和意义,接着构建大规模MIMO系统模型并分析CSI的稀疏特性,然后详细介绍和比较了国内外将DL技术引入CSI反馈机制中的方案,最后对基于DL的CSI反馈的未来发展趋势做了进一步展望。关键词: 大规模MIMO ; 深度学习 ; CSI反馈1 引言自20世纪80年代1G移动通信系统被提出后,移动通信技术以 10 年一代的速度迅速发展,广泛渗透到社会的方方面面,对各行各业都产生了深远影响。随着智能终端的普及以及物联网、车联网、虚拟现实等无线新业务的不断涌现,对未来移动通信系统的性能指标提出了更高的要求,由此推动全球学术界和工业界投入到 5G 移动通信系统标准化研究的工作中。现如今,5G 的标准化研究已经基本完成,大规模多输入多输出(MIMO,multiple-input multiple output)技术、超密集异构小蜂窝网络以及毫米波通信被认为是 5G 的三大核心关键技术[1]。随着5G商用时代的到来,6G移动通信系统[2]的研发工作也已经正式启动,6G移动通信系统将具备全覆盖、全应用、全频谱、强安全等显著特征,而作为6G潜在使能技术的大规模MIMO技术仍有较大的发展空间。大规模MIMO技术具备空间复用增益、分集增益以及波束成形能力,通过在发射端和接收端配置多根天线实现多收多发,能够充分利用空间资源,在不增加频谱资源和发射功率的前提下,成倍提高信道容量并减少多用户干扰,展现出显著的性能优势,但这些增益建立在基站能够精确获知上行链路和下行链路信道状态信息(CSI,channel state information)的前提下。上行链路的CSI获取较容易,只需用户端发送训练导频,再由基站根据接收到的信号估计每个用户终端的信道响应;下行链路的CSI获取则较困难,也是当前大规模MIMO技术中需要重点解决的难题。在时分双工(TDD,time division duplex)制式下,基站可通过上行链路发送的训练导频进行信道估计,再利用信道互易性获取下行链路的 CSI;在频分双工(FDD,frequency division duplex)制式下,上行链路和下行链路工作在不同的频点上,信道互易性很弱,因此,下行链路的CSI需要先由用户端通过下行导频估计获得,再通过反馈链路传送回基站端。完整的CSI回传需要消耗大量的链路开销,所以通常采用矢量量化(VQ,vector quantization)或基于码本的方法[3]来减少反馈开销,但这些方法在一定程度上损失了信道信息,且其产生的反馈量会随着发射天线数量线性缩放。大规模 MIMO 系统中基站端使用大量天线,使得码本设计复杂度和相应的反馈量显著增长,因此,传统反馈方案在大规模MIMO系统中是不可取的。鉴于 FDD 是目前蜂窝系统中应用最广泛的双工制式,如何在FDD大规模MIMO系统中精确获取下行链路CSI成为研究的热点和难点。实验表明,随着基站天线数量增加,用户端在空频域的信道矩阵因基站有限的局部散射体可被表示成一种稀疏形式[6,7]被提出,这也是目前较先进的信道反馈方案。理论上,具有相关性的 CSI在某些基底上可以变换为不相关的稀疏向量,然后利用 CS 方法对其进行随机投影来获得降维的测量值;该测量值在占用少量资源开销的情况下通过反馈链路传送回基站,基站再根据 CS 算法从低维压缩测量值中恢复出原始的稀疏信道向量。通过利用CSI的空时相关性,CS方法不依赖于统计数据,简化了压缩过程且在一定程度上减少了反馈开销。然而,传统基于CS的方法仍然存在以下3个问题:1) CS 方法严重依赖于信道结构的先验假设,即信道在某些变换基上满足稀疏性,而实际信道在任何基底上都不是完全稀疏的,甚至可能没有可解释的结构;2) CS 方法使用随机投影来获得低维压缩信号,并没有充分利用信道的结构特征;3) 现有的用于CSI恢复的CS算法多为迭代算法,具有较大的计算开销和较慢的运行速度,不满足实际系统的实时性要求。因此,一种可以从低压缩率的反馈信息中快速、准确地恢复CSI的大规模MIMO反馈机制亟待提出,突破性新技术的引入迫在眉睫。近年来,以深度学习(DL,deep learning)技术为代表的人工智能发展迅速,与计算机视觉、自然语言处理、语音识别等领域深度融合,取得了突破性进展,被认为是6G强有力的潜在使能技术。DL算法可根据大量训练数据有效逼近或拟合任意复杂的函数,提取并处理隐含的特征,所以融入了DL 的智能通信有望打破传统通信系统的设计瓶颈,降低建模难度,在物理层基础理论与关键技术上有所突破,得到整体性能最优的新架构,因此,智能通信也被 3GPP、ITU 等国际化标准组织作为通信技术演进的主流方向。鉴于DL在通信系统各个领域中的成功应用[8,9,10,11],国内外研究者试图将DL技术引入大规模 MIMO 反馈方案中,为解决 FDD制式下CSI反馈难题提供新的设计思路,并取得了一些成果。2 结束语本文首先介绍了大规模MIMO系统下CSI反馈的研究背景和研究现状,分析了传统基于码本和矢量量化方法以及CS方法在FDD大规模MIMO系统中进行CSI反馈时存在的问题和局限性,然后详细阐述了国内外研究者将DL技术引入CSI反馈机制中的方案,包括基于自动编码器的信道反馈网络、引入LSTM的时变信道反馈网络、利用双向信道互易性的信道反馈网络以及基于可学习测量矩阵的CS网络。这4种基于DL的CSI反馈方案从不同角度对传统方法进行了改进,仿真结果表明,上述方法在一定程度上解决了传统方法存在的问题,能够在保证CSI重建精度的同时,显著减少大规模 MIMO 系统的反馈开销。目前,基于 DL 的CSI 反馈设计的相关研究仍然处于初步探索阶段,还面临着许多问题与挑战,但其表现出的性能优势与发展潜力使之成为FDD大规模MIMO系统的主流研究方向之一。The authors have declared that no competing interests exist.作者已声明无竞争性利益关系。3 原文链接http://www.infocomm-journal.com/wlw/article/2020/2096-3750/2096-3750-4-1-00033.shtml
-
# MindX SDK -- 路面分割参考设计案例 ## 1 案例概述 ### 1.1 概要描述 [路面分割案例](https://gitee.com/ascend/mindxsdk-referenceapps/tree/master/contrib/RoadSegmentation),本案例主要对含有路面的图片进行语义分割,其主要实现了对输入图片能够正确的标识出路面部分。 ### 1.2 特性及适用场景 本案例可以满足路面的语义分割内容,但同时对输入的图像有以下限制: 1.对于输入的图像是灰度图像时,会影响分割效果。 2.当路面上的障碍物(如车辆)较为密集时,会降低模型的分割效果。 3.当输入图片中的路面有阴影或颜色不一致时,会影响分割效果。 4.当输入图片中不含路面,也会有少量的标识。 5.适用于单张图片的输入。 6.适应于形状规则且与周围环境色差较大的路面图片。 ### 1.3 模型介绍 本案例采用U-net模型,Unet提出的初衷是为了解决医学图像分割的问题,由于效果确实很好后来也被广泛的应用在语义分割的各个方向,比如卫星图像分割,工业瑕疵检测等,下图为U-net模型框架。  通过下采样提取目标特征,再通过上采样,最后逐个对其像素点进行分类, ### 1.4 实现流程 基于MindX SDK的路面分割业务流程:待检测图片通过 appsrc 插件输入,然后使用图像解码插件mxpi_imagedecoder对图片进行解码,再通过图像缩放插件mxpi_imageresize将图像缩放至满足检测模型要求的输入图像大小要求,缩放后的图像输入模型推理插件mxpi_tensorinfer得到检测结果,本项目开发的路面分割后处理插件处理推理结果,从中获取掩膜mask,然后与原始图片进行融合,之后通过图像编码插件mxpi_imageencoder将后处理插件的融合后的数据进行编码,最后使用输出插件appsink输出可视化的结果  注:红色字体为本项目开发的后处理插件,其他为SDK内置插件 ## 2 软件方案介绍 ### 2.1 技术原理 主要对U-net模型推理出的二分类结果,使用阈值标识出路面的部分,并采用opencv中的图片融合方法将结果与原图进行融合。 ### 2.2 项目方案架构介绍 表1 系统方案各子系统功能描述: | 序号 | 子系统 | 功能描述 | | ---- | ------ | ------------ | | 1 | 图片输入 | Gstreamer原生插件。配合SendData接口与SendDataWithUniqueId接口使用,向Stream中发送数据,appsrc将数据发给下游元件,当且仅当Stream中存在appsrc插件时以上两个接口有效。 | | 2 | 图像解码 | 用于图像解码,只支持JPG/JPEG/BMP格式。说明:JPG/JPEG输入图片格式约束:只支持Huffman编码,码流的subsample为444/422/420/400/440。不支持算术编码。不支持渐进JPEG格式。不支持JPEG2000格式。 | | 3 | 图像缩放 | 对解码后的YUV格式的图像进行指定宽高的缩放,暂时只支持YUV格式的图像。 | | 4 | 模型推理 | 对输入的张量进行推理。 | | 5 | 模型后处理插件 | 将模型推理的结果mask 与原图融合| | 6 | 图像编码 | 用于图片编码。 | | 7 | 图像输出 | Gstreamer原生插件。配合GetResult接口与GetResultWithUniqueId接口使用,从stream中获取数据,当且仅当stream中存在appsink插件时,以上两个接口有效。 | ## 3 开发环境准备 ### 3.1 环境依赖说明 推荐系统为ubuntu 18.04,环境依赖软件和版本如下表: | 软件名称 | 版本 | 说明 | 获取方式 | | ------------------- | ----------- | ----------------------------- | ------------------------------------------------------------ | | MindX SDK | 2.0.4 | mxVision软件包 | [链接](https://gitee.com/link?target=https%3A%2F%2Fwww.hiascend.com%2Fsoftware%2FMindx-sdk) | | ubuntu | 18.04.1 LTS | 操作系统 | Ubuntu官网获取 | | Ascend-CANN-toolkit | 5.0.4 | Ascend-cann-toolkit开发套件包 | [链接](https://gitee.com/link?target=https%3A%2F%2Fwww.hiascend.com%2Fsoftware%2Fcann%2Fcommercial) | ### 3.2 环境搭建 #### 3.2.1 工程创建 ##### 3.2.1.1 导出onnx文件 获取[路面分割文件](https://github.com/tunafatih/Road-Free-Space-Segmentation-Internship-Project),在本地使用pt2onnx.py文件,将pt权重文件转换成onnx文件,或可[点击此处](https://mindx.sdk.obs.cn-north-4.myhuaweicloud.com/mindxsdk-referenceapps%20/contrib/RoadSegmentation/model.zip)下载转换好的onnx文件。 ##### 3.2.1.2 使用Ascend atc工具将onnx模型转换为om模型 在使用[atc工具](https://www.hiascend.com/document/detail/zh/canncommercial/504/inferapplicationdev/atctool)之前**需按第2节环境依赖章节**事先配置好CANN环境,之后将3.1节中导出的onnx文件上传至```model```目录下,在该目录下执行 ``` atc --framework=5 --model=Road.onnx --output=road_segmentation --input_format=NCHW --insert_op_conf=../config/aipp_road_segmentation.config --input_shape="image:1,3,224,224" --log=debug --soc_version=Ascend310 ``` 若出现以下信息,则转换成功 ``` ATC run success ``` #### 3.2.3 开发环境搭建 - 配置MindSDK 环境变量 ``` . ${SDK-path}/set_env.sh ``` - 配置CANN 环境变量 ``` . ${ascend-toolkit-path}/set_env.sh ``` ## 4 编译与运行 示例步骤如下: **步骤1** 修改相应文件 根据所需场景,配置pipeline文件,调整路径参数。 ``` #配置mxpi_tensorinfer插件的模型加载路径: modelPath "mxpi_tensorinfer0": { "props": { "dataSource": "mxpi_imageresize0", "modelPath": "${road_segmentation.om模型路径}" }, "factory": "mxpi_tensorinfer", "next": "appsink0" }, #配置可视化结果输出路径:location "appsink0": { "props": { "blocksize": "4096000", "location":"${输出结果文件名}" }, "factory": "filesink" } ``` **步骤2** 设置环境变量 按**第3.2.3节环境搭建**中设置环境变量 **步骤3** 执行编译的步骤 在样例目录下,执行 ``` bash build.sh ``` **步骤4** 运行及输出结果 在样例目录下,执行 ``` python3.9 main.py test.jpg #测试图片地址 ``` ## 5 常见问题 ### 5.1 图片解码问题 **问题描述:**  **解决方案:** 更换图片,详情[imagedecoder插件介绍](https://www.hiascend.com/document/detail/zh/mind-sdk/204/vision/mxvisionug/mxvisionug_0115.html)
-
我在训练MAE模型,GitHub上有有人实现好的代码https://github.com/yangyucheng000/mae,他是在Asecnd上多卡训练的,但是我只有单卡GPU,因此我把其中的代码都改成单卡GPU训练的模式了,在进行finetune的时候竟然报NCCL的错,但是在代码中我并没有配置分布式训练。请问这是怎么回事呢?应该怎么解决呢?是不是我在改单卡的时候漏掉了哪里呢,还是说我需要再配其他的东西?求指教!!!
-
MindX SDK -- 车辆碰撞识别参考设计案例1 案例概述项目代码:contrib/Collision · Ascend/mindxsdk-referenceapps - 码云 - 开源中国 (gitee.com)1.1 概要描述此项目的碰撞插件基于MindXSDK开发,在昇腾芯片上进行目标检测和跟踪,可以对车辆进行画框和编号,检测到车辆碰撞后,可将追踪编号提示为“Collision”并将检测结果可视化并保存。项目主要流程为:通过live555服务器进行拉流输入视频,然后进行视频解码将264格式的视频解码为YUV格式的图片,图片缩放后经过模型推理进行车辆识别,识别结果经过yolov3后处理后得到识别框,对识别框进行跟踪并编号,用编号覆盖原有的类别信息,如检测到车辆发生碰撞,碰撞的车辆的编号将会被“Collision”所替换,再将识别框和类别信息分别转绘到图片上,最后将图片编码成视频进行输出。1.2 特性及适用场景本案例可以满足对视频的检测,对检测到的碰撞的车辆在碰撞时刻,输出“Collision”的字样进行提醒。经过测试我们可以知道有以下限制条件:1.对一个正常清晰的路面,我们可以完成绝大多数正常的一个车辆碰撞检测。2.当视频清晰度不够,或者车辆速度过快,yolov3并不能很好的识别目标,或者当大车与小车发生碰撞,导致小车被遮挡,或者碰撞事故严重,导致受损车辆无法被检测出来,那么我们对碰撞就会检测失败。3.当车辆很密集时,障碍物很多时,就会导致物体画框增多,画框不同角度的重叠就可能导致碰撞误判。1.3 模型介绍本案例使用的时yolov3模型,在目标检测后处理插件mxpi_objectpostprocessor中使用内置的后处理库libyolov3postprocess.so。1.4 实现流程基于MindX SDK的车辆碰撞识别业务流程为:待检测视频存放在live555服务器上经mxpi_rtspsrc拉流插件输入,然后使用视频解码插件mxpi_videodecoder将视频解码成图片,再通过图像缩放插件mxpi_imageresize将图像缩放至满足检测模型要求的输入图像大小要求,缩放后的图像输入模型推理插件mxpi_tensorinfer得到检测结果,再经yolov3后处理插件处理推理结果,得到识别框。再接入跟踪插件中识别框进行目标跟踪,得到目标的跟踪编号,然后在使用mxpi_trackidreplaceclassname插件将跟踪编号覆盖类名信息,再接入本项目开发的碰撞检测插件mxpi_collisionclassname,使用mxpi_object2osdinstances和mxpi_opencvosd分别将识别框和类名(更替写入跟踪编号或者“Collison”碰撞提醒)绘制到原图片,再通过mxpi_videoencoder将图片合成视频注:红色为本项目开发插件 蓝色为沿用其他项目开发插件 其余为SDK内置插件2 软件方案介绍2.1 技术原理首先对我们需要检测的视频进行拉流解码,经yolov3模型检测后,得到所有检测物体的画框,然后使用跟踪插件对每个物体进行跟踪,再经过碰撞插件,根据图例的比例,两个画框之间的距离小于某一阈值时,即认为发生碰撞,然后遍历所有的物体。对发生碰撞的物体画框类名替换为“Collision”,对检测完成的图片进行编码输出可视化视频。2.2 项目方案架构介绍表1.1 系统方案各子系统功能描述:序号子系统功能描述1视频输入接收外部调用接口的输入视频路径,对视频进行拉流,并将拉取的裸流存储到缓冲区(buffer)中,并发送到下游插件。2视频解码用于视频解码,当前只支持H264/H265格式。3数据分发对单个输入数据分发多次。4数据缓存输出时为后续处理过程另创建一个线程,用于将输入数据与输出数据解耦,并创建缓存队列,存储尚未输出到下流插件的数据。5图像处理对解码后的YUV格式的图像进行指定宽高的缩放,暂时只支持YUV格式 的图像。6模型推理插件目标分类或检测,目前只支持单tensor输入(图像数据)的推理模型。7模型后处理插件采用yolov3后处理插件输出的tensor解析,获取目标检测框以及对应的ReID向量,传输到跟踪模块。8跟踪插件实现多目标(包括机非人、人脸)路径记录功能。9跟踪编号取代类名插件用跟踪插件产生的编号信息取代后处理插件产生的类名信息,再将数据传入数据流中。10碰撞检测插件检测到车辆碰撞后,碰撞车辆的编号将会被“Clooision”所替换,再将数据传入数据流中。11目标框转绘插件将流中传进的MxpiObjectList数据类型转换可用于OSD插件绘图所使用的的 MxpiOsdInstancesList数据类型。12OSD可视化插件主要实现对每帧图像标注跟踪结果。13视频编码插件用于将OSD可视化插件输出的图片进行视频编码,输出视频。3 开发环境准备3.1 环境依赖说明推荐系统为ubuntu 18.04,环境依赖软件和版本如下表:软件名称版本说明获取方式MindX SDK2.0.4mxVision软件包链接ubuntu18.04.1 LTS操作系统Ubuntu官网获取Ascend-CANN-toolkit5.0.4Ascend-cann-toolkit开发套件包链接3.2 环境搭建3.2.1 依赖安装推理中涉及到第三方软件依赖如下表所示。依赖软件版本说明使用教程live5551.09实现视频转rstp进行推流链接ffmpeg2021-07-21实现mp4格式视频转为264格式视频链接python3.9.2与SDK配套链接3.2.2 工程创建本案例是基于众智开放实验室环境下创新工程开发。4 编译与运行步骤1 设置环境变量。export MX_SDK_HOME=${SDK安装路径}/mxVisionexport install_path=/usr/local/Ascend/ascend-toolkit/latestexport PATH=/usr/local/python3.9.2/bin:${install_path}/atc/ccec_compiler/bin:${install_path}/atc/bin:$PATHexport ASCEND_OPP_PATH=${install_path}/oppexport ASCEND_AICPU_PATH=${install_path}export LD_LIBRARY_PATH=${install_path}/atc/lib64:${MX_SDK_HOME}/lib:${MX_SDK_HOME}/opensource/lib:$LD_LIBRARY_PATHexport GST_PLUGIN_SCANNER=${MX_SDK_HOME}/opensource/libexec/gstreamer-1.0/gst-plugin-scannerexport GST_PLUGIN_PATH=${MX_SDK_HOME}/opensource/lib/gstreamer-1.0:${MX_SDK_HOME}/lib/plugins注:其中SDK安装路径${MX_SDK_HOME}替换为用户的SDK安装路径;install_path替换为开发套件包所在路径。LD_LIBRARY_PATH用以加载开发套件包中lib库。步骤2 模型转换。本项目中适用的模型是yolov3模型,yolov3模型可以在昇腾官网ModelZoo直接下载:YOLOv3-昇腾社区 (hiascend.com)。下载后使用模型转换工具 ATC 将 pb 模型转换为 om 模型,模型转换工具相关介绍参考链接:https://support.huaweicloud.com/tg-cannApplicationDev330/atlasatc_16_0005.html 。模型转换,步骤如下:从上述下载链接中下载yolov3模型解压缩文件yolov3_tf.pb至 ./model 文件夹下,进入 ./models 文件夹下执行命令:atc --model=./yolov3_tf.pb --framework=3 --output=./yolov3 --soc_version=Ascend310 --insert_op_conf=./aipp_yolov3_416_416.aippconfig --input_shape="input:1,416,416,3" --out_nodes="yolov3/yolov3_head/Conv_6/BiasAdd:0;yolov3/yolov3_head/Conv_14/BiasAdd:0;yolov3/yolov3_head/Conv_22/BiasAdd:0"执行该命令后会在当前文件夹下生成项目需要的模型文件 yolov3.om。执行后终端输出为:ATC start working now, please wait for a moment.ATC run success, welcome to the next use.表示命令执行成功。步骤3 修改./plugins/MxpiTrackIdReplaceClassName 和./plugins/MxpiTrackIdReplaceClassName文件夹下的CMakeLists.txt文件。将其中的"$ENV{MX_SDK_HOME}"修改成自己的SDK目录。步骤4 编译。进入 Collision 主目录,在 Collision 主目录下执行命令:bash build.sh命令执行成功后会在./plugins/MxpiCollisionClassName和./plugins/MxpiTrackIdReplaceClassName目录下分别生成build文件夹。将MxpiTrackIdReplaceClassName/build目录下生成的的libmxpi_trackidreplaceclassname.so下载后上传到${SDK安装路径}/mxVision/lib/plugins目录下,同时将MxpiCollisionClassName/build目录下生成的libmxpi_collisionclassname.so下载后上传到${SDK安装路径}/mxVision/lib/plugins目录下。步骤5 运行。回到主目录下,在主目录下执行命令:python3.9.2 collision.py命令执行成功后会在当前目录下生成检测结果视频文件collision.h264,查看文件验证目标跟踪结果。5 结果展示生成的out_collision.h264文件在本地我们可以用适配.h264文件格式的视频播放软件进行播放。也可以使用ffmpeg转换成.mp4格式进行本地播放。ffmpeg -i out_collision.h264 -vcodec h264 out_collision.mp46 常见问题视频编码参数配置错误1.问题描述:Collision/collision.pipeline中视频编码分辨率参数已经手动指定imageHeight 和 imageWidth 属性,需要和视频输入分配率相同,否则会包如下类型的错:解决方案:确保Collision/collision.pipeline中 mxpi_videoencoder0 插件的 imageHeight 和 imageWidth 属性值是输入.h264视频的高和宽。此时我们可以在用ffmpeg进行视频拉流时找到设置.h264视频的高和宽。2.问题描述:Collision/collision.py中视频帧数参数目前未确定,系统则会对缺省的视频拉流帧数进行识别并输出,所以会造成输出长视频不完整和短视频重复的结果。解决方案:确保Collision/collision.py中第52行if t > 'xxx'的属性值是输入.h264视频帧数。此时我们可以在用ffmpeg进行视频拉流时找到设置.h264视频的帧数。
-
1.3 降低计算复杂的网络结构 也有很多工作致力于降低语义分割网络的计算复杂度。一些简化深度网络结构的方法:张量分解;通道/网络剪枝;稀疏化连接。还有一些利用NAS(神经架构搜索)取代人工设计来搜索模块或整个网络的结构,当然AutoDL所需的GPU资源会劝退一大批人。因此,也有一些人使用随机搜索来搜索小的多的ASPP模块,然后基于小模块来搭建整个网络模型。 网络轻量化设计是业内共识,移动端部署不可能每台机器配一张2080ti,另外耗电量、存储等问题也会限制模型的推广应用。不过5G如果能普及的话,数据就可以全部在云端处理,会很有意思。当然,短期内(十年),5G全方位部署不知道是否可行。 1.4 基于注意力机制的网络结构 注意力机制可以定义为:使用后续层/特征图信息来选择和定位输入特征图中最具判断力(或显著性)的部分。简单地可以认为是给特征图加权的一种方式(权值通过网络计算得到),按照权值的作用方式的不同,可以分为通道注意力机制(CA)和空间注意力机制(PA)。FPA(Feature Pyramid Attention,特征金字塔注意力)网络是一种基于注意力机制的语义分割网络,它将注意力机制和空间金字塔相结合,以提取用于像素级标记的精密特征,而没有采用膨胀卷积和人为设计的解码器网络。 1.5 基于对抗学习的网络结构 Goodfellow等人在2014年提出了一种对抗的方法来学习深度生成模型, 生成对抗网络(GANs)中需要同时训练两个模型:捕获数据分布的生成模型G,和估计样本来自训练数据的概率的判别模型D。 ● G是一个生成式的网络,它接收一个随机的噪声z(随机数),通过这个噪声生成图像 ● D是一个判别网络,判别一张图片是不是“真实的”。它的输入参数是x(一张图片),输出D(x)代表x为真实图片的概率,如果为1,就代表100%是真实的图片,而输出为0,就代表不可能是真实的图片。 G的训练程序是将D错误的概率最大化。可以证明在任意函数G和D的空间中,存在唯一的解决方案,使得G重现训练数据分布,而D=0.5。训练过程中,生成网络G的目标就是尽量生成真实的图片去欺骗判别网络D。而D的目标就是尽量辨别出G生成的假图像和真实的图像。这样,G和D构成了一个动态的“博弈过程”,最终的平衡点即纳什均衡点.。在G和D由神经网络定义的情况下,整个系统可以用反向传播进行训练。
-
PSPNet(pyramid scene parsing network)通过对不同区域的上下文信息进行聚合,提升了网络利用全局上下文信息的能力。在SPPNet,金字塔池化生成的不同层次的特征图最终被flatten并concate起来,再送入全连接层以进行分类,消除了CNN要求图像分类输入大小固定的限制。而在PSPNet中,使用的策略是:poolling-conv-upsample,然后拼接得到特征图,然后进行标签预测。创新点:多尺度池化,更好地利用全局图像级别的先验知识来理解复杂场景RefineNet通过细化中间激活映射并分层地将其连接到结合多尺度激活,同时防止锐度损失。网络由独立的Refine模块组成,每个Refine模块由三个主要模块组成,即:剩余卷积单元(RCU),多分辨率融合(MRF)和链剩余池(CRP)。整体结构有点类似U-Net,但在跳跃连接处设计了新的组合方式(不是简单的concat)。个人认为,这种结构其实非常适合作为自己网络设计的思路,可以加入许多其他CV问题中使用的CNN module,而且以U-Net为整体框架,效果不会太差。创新点:Refine模块
-
V-Net网络结构与U-Net类似,不同在于该架构增加了跳跃连接,并用3D操作物替换了2D操作以处理3D图像(volumetric image)。并且针对广泛使用的细分指标(如Dice)进行优化。创新点:相当于U-Net网络的3D版本FC-DenseNet (百层提拉米苏网络)(paper title: The One Hundred Layers Tiramisu: Fully Convolutional DenseNets for Semantic Segmentation)该网络结构是由用密集连接块(Dense Block)和UNet架构组建的。该网络最简单的版本是由向下过渡的两个下采样路径和向上过渡的两个上采样路径组成。且同样包含两个水平跳跃连接,将来自下采样路径的特征图与上采样路径中的相应特征图拼接在一起。上采样路径和下采样路径中的连接模式不完全同:下采样路径中,每个密集块外有一条跳跃拼接通路,从而导致特征图数量的线性增长,而在上采样路径中没有此操作。(多说一句,这个网络的简称可以是Dense Unet,但是有一篇论文叫Fully Dense UNet for 2D Sparse Photoacoustic Tomography Artifact Removal, 是一个光声成像去伪影的论文,我看到过好多博客引用这篇论文里面的插图来谈语义分割,根本就不是一码事好么 =_=||,自己能分清即可。)创新点:融合DenseNet与U-Net网络(从信息交流的角度看,密集连接确实要比残差结构更强大)Deeplab系列网络是在编解码结构的基础上提出的改进版本,2018年DeeplabV3+网络在VOC2012和Cityscapes数据集上的表现优异,达到SOTA水平。DeepLab系列共有V1、V2、V3和V3+共四篇论文。简要总结一些各篇论文的核心内容:1) DeepLabV1:融合卷积神经网络和概率图模型:CNN+CRF,提高了分割定位精度; 2) DeepLabV2:ASPP(扩张空间金字塔池化);CNN+CRF 3) DeepLabV3:改进ASPP,多了1*1卷积和全局平均池化(global avg pool);对比了级联和并联空洞卷积的效果。 4) DeepLabV3+:加入编解码架构思想,添加一个解码器模块来扩展DeepLabv3;将深度可分离卷积应用于ASPP和解码器模块;将改进的Xception作为Backbone。 总的来说,DeepLab系列的核心贡献: 空洞卷积;ASPP;CNN+CRF(仅V1和V2使用CRF,应该是V3和V3+通过深度网络解决了分割边界模糊的问题,效果要比加了CRF更好)
-
本文总结了利用CNNs进行图像语义分割时,针对网络结构的创新,这些创新点主要包括新神经架构的设计(不同深度、宽度、连接和拓扑结构)和新组件或层的设计。前者是利用已有的组件组装复杂的大型网络,后者是更偏向于设计底层组件。首先介绍一些经典的语义分割网络及其创新点,然后介绍网络结构设计在医学图像分割领域内的一些应用。1. 图像语义分割网络结构创新1.1 FCN网络 单独将FCN网络列出来是因为FCN网络是第一个从全新的角度来解决语义分割问题的网络。此前的基于神经网络的图像语义分割网络是利用以待分类像素点为中心的图像块来预测中心像素的标签,一般用CNN+FC的策略构建网络,显然这种方式无法利用图像的全局上下文信息,而且逐像素推理速度很低;而FCN网络舍弃全连接层FC,全部用卷积层构建网络,通过转置卷积以及不同层特征融合的策略,使得网络输出直接是输入图像的预测mask,效率和精度得到大幅度提升。 创新点:全卷积网络(不含fc层);转置卷积deconv(反卷积);不同层特征图跳跃连接(相加) 1.2 编解码结构(Enconder-decoder)SegNet和FCN网络的思路基本一致。编码器部分使用VGG16的前13层卷积,不同点在于Decoder部分Upsampling的方式。FCN通过将特征图deconv得到的结果与编码器对应大小的特征图相加得到上采样结果;而SegNet用Encoder部分maxpool的索引进行Decoder部分的上采样(原文描述:the decoder upsamples the lower resolution input feature maps. Specifically, the decoder uses pooling indices computed in the max-pooling step of the corresponding encoder to perform non-linear upsampling.)。创新点:Encoder-Decoder结构;Pooling indices。 U-Net网络最初是针对生物医学图像设计的,但由于其初四的性能,现如今UNet及其变体已经广泛应用到CV各个子领域。UNet网络由U通道和短接通道(skip-connection)组成,U通道类似于SegNet的编解码结构,其中编码部分(contracting path)进行特征提取和捕获上下文信息,解码部分(expanding path)用解码特征图来预测像素标签。短接通道提高了模型精度并解决了梯度消失问题,特别要注意的是短接通道特征图与上采用特征图是拼接而不是相加(不同于FCN)。创新点:U型结构;短接通道(skip-connection)
-
本文转载自机器之心。在本节中,我们将简要概述一些主要的技术,用于正则化和优化深度神经网络 (DNN)。7.1 DropoutSrivastava 等人 (2014) 提出 Dropout,以防止神经网络过拟合。Dropout 是一种神经网络模型平均正则化方法,通过增加噪声到其隐藏单元。在训练过程中,它会从神经网络中随机抽取出单元和连接。Dropout 可以用于像 RBM (Srivastava et al.,2014) 这样的图形模型中,也可以用于任何类型的神经网络。最近提出的一个关于 Dropout 的改进是 Fraternal Dropout,用于循环神经网络 (RNN)。7.2 MaxoutGoodfellow 等人 (2013) 提出 Maxout,一种新的激活函数,用于 Dropout。Maxout 的输出是一组输入的最大值,有利于 Dropout 的模型平均。7.3 ZoneoutKrueger 等人 (2016) 提出了循环神经网络 (RNN) 的正则化方法 Zoneout。Zoneout 在训练中随机使用噪音,类似于 Dropout,但保留了隐藏的单元而不是丢弃。7.4 深度残差学习He 等人 (2015) 提出了深度残差学习框架,该框架被称为低训练误差的 ResNet。7.5 批归一化Ioffe 和 Szegedy(2015) 提出了批归一化,通过减少内部协变量移位来加速深度神经网络训练的方法。Ioffe(2017) 提出批重归一化,扩展了以前的方法。7.6 DistillationHinton 等人 (2015) 提出了将知识从高度正则化模型的集合 (即神经网络) 转化为压缩小模型的方法。7.7 层归一化Ba 等人 (2016) 提出了层归一化,特别是针对 RNN 的深度神经网络加速训练,解决了批归一化的局限性。
-
本文转载自机器之心。在本节中,我们将简要讨论其他深度架构,它们使用与深度神经网络类似的多个抽象层和表示层,也称为深度生成模型 (deep generate Models, DGM)。Bengio(2009) 解释了深层架构,例如 Boltzmann machine (BM) 和 Restricted Boltzmann Machines (RBM) 等及其变体。Goodfellow 等人 (2016) 详细解释了深度生成模型,如受限和非受限的玻尔兹曼机及其变种、深度玻尔兹曼机、深度信念网络 (DBN)、定向生成网络和生成随机网络等。Maaløe 等人(2016)提出了辅助的深层生成模型(Auxiliary Deep Generative Models),在这些模型中,他们扩展了具有辅助变量的深层生成模型。辅助变量利用随机层和跳过连接生成变分分布。Rezende 等人 (2016) 开发了一种深度生成模型的单次泛化。6.1 玻尔兹曼机玻尔兹曼机是学习任意概率分布的连接主义方法,使用最大似然原则进行学习。6.2 受限玻尔兹曼机受限玻尔兹曼机 (Restricted Boltzmann Machines, RBM) 是马尔可夫随机场的一种特殊类型,包含一层随机隐藏单元,即潜变量和一层可观测变量。Hinton 和 Salakhutdinov(2011) 提出了一种利用受限玻尔兹曼机 (RBM) 进行文档处理的深度生成模型。6.3 深度信念网络深度信念网络 (Deep Belief Networks, DBN) 是具有多个潜在二元或真实变量层的生成模型。Ranzato 等人 (2011) 利用深度信念网络 (deep Belief Network, DBN) 建立了深度生成模型进行图像识别。6.4 深度朗伯网络Tang 等人 (2012) 提出了深度朗伯网络 (Deep Lambertian Networks,DLN),它是一个多层次的生成模型,其中潜在的变量是反照率、表面法线和光源。DLNis 是朗伯反射率与高斯受限玻尔兹曼机和深度信念网络的结合。6.5 生成对抗网络Goodfellow 等人 (2014) 提出了生成对抗网络 (generate Adversarial Nets, GAN),用于通过对抗过程来评估生成模型。GAN 架构是由一个针对对手(即一个学习模型或数据分布的判别模型)的生成模型组成。Mao 等人 (2016)、Kim 等人 (2017) 对 GAN 提出了更多的改进。Salimans 等人 (2016) 提出了几种训练 GANs 的方法。6.5.1 拉普拉斯生成对抗网络Denton 等人 (2015) 提出了一种深度生成模型 (DGM),叫做拉普拉斯生成对抗网络 (LAPGAN),使用生成对抗网络 (GAN) 方法。该模型还在拉普拉斯金字塔框架中使用卷积网络。6.6 循环支持向量机Shi 等人 (2016a) 提出了循环支持向量机 (RSVM),利用循环神经网络 (RNN) 从输入序列中提取特征,用标准支持向量机 (SVM) 进行序列级目标识别。
-
在本节中,我们将简要地讨论深度神经网络 (DNN),以及它们最近的改进和突破。神经网络的功能与人脑相似。它们主要由神经元和连接组成。当我们说深度神经网络时,我们可以假设有相当多的隐藏层,可以用来从输入中提取特征和计算复杂的函数。Bengio(2009) 解释了深度结构的神经网络,如卷积神经网络 (CNN)、自编码器 (AE) 等及其变体。Deng 和 Yu(2014) 详细介绍了一些神经网络架构,如 AE 及其变体。Goodfellow 等 (2016) 对深度前馈网络、卷积网络、递归网络及其改进进行了介绍和技巧性讲解。Schmidhuber(2014) 提到了神经网络从早期神经网络到最近成功技术的完整历史。5.1 深度自编码器自编码器 (AE) 是神经网络 (NN),其中输出即输入。AE 采用原始输入,编码为压缩表示,然后解码以重建输入。在深度 AE 中,低隐藏层用于编码,高隐藏层用于解码,误差反向传播用于训练.。5.1.1 变分自编码器变分自动编码器 (VAE) 可以算作解码器。VAE 建立在标准神经网络上,可以通过随机梯度下降训练 (Doersch,2016)。5.1.2 多层降噪自编码器在早期的自编码器 (AE) 中,编码层的维度比输入层小(窄)。在多层降噪自编码器 (SDAE) 中,编码层比输入层宽 (Deng and Yu, 2014)。5.1.3 变换自编码器深度自动编码器 (DAE) 可以是转换可变的,也就是从多层非线性处理中提取的特征可以根据学习者的需要而改变。变换自编码器 (TAE) 既可以使用输入向量,也可以使用目标输出向量来应用转换不变性属性,将代码引导到期望的方向 (Deng and Yu,2014)。5.2 深度卷积神经网络四种基本思想构成了卷积神经网络 (CNN),即:局部连接、共享权重、池化和多层使用。CNN 的第一部分由卷积层和池化层组成,后一部分主要是全连接层。卷积层检测特征的局部连接,池层将相似的特征合并为一个。CNN 在卷积层中使用卷积而不是矩阵乘法。Krizhevsky 等人 (2012) 提出了一种深度卷积神经网络 (CNN) 架构,也称为 AlexNet,这是深度学习 (Deep Learning, DL) 的一个重大突破。网络由 5 个卷积层和 3 个全连接层组成。该架构采用图形处理单元 (GPU) 进行卷积运算,采用线性整流函数 (ReLU) 作为激活函数,用 Dropout 来减少过拟合。Iandola 等人 (2016) 提出了一个小型的 CNN 架构,叫做「SqueezeNet」。Szegedy 等人 (2014) 提出了一种深度 CNN 架构,名为 Inception。Dai 等人 (2017) 提出了对 Inception-ResNet 的改进。Redmon 等人 (2015) 提出了一个名为 YOLO (You Only Look Once) 的 CNN 架构,用于均匀和实时的目标检测。Zeiler 和 Fergus (2013) 提出了一种将 CNN 内部激活可视化的方法。Gehring 等人 (2017) 提出了一种用于序列到序列学习的 CNN 架构。Bansal 等人 (2017) 提出了 PixelNet,使用像素来表示。Goodfellow 等人 (2016) 解释了 CNN 的基本架构和思想。Gu 等人 (2015) 对 CNN 的最新进展、CNN 的多种变体、CNN 的架构、正则化方法和功能以及在各个领域的应用进行了很好的概述。5.2.1 深度最大池化卷积神经网络最大池化卷积神经网络 (MPCNN) 主要对卷积和最大池化进行操作,特别是在数字图像处理中。MPCNN 通常由输入层以外的三种层组成。卷积层获取输入图像并生成特征图,然后应用非线性激活函数。最大池层向下采样图像,并保持子区域的最大值。全连接层进行线性乘法。在深度 MPCNN 中,在输入层之后周期性地使用卷积和混合池化,然后是全连接层。5.2.2 极深的卷积神经网络Simonyan 和 Zisserman(2014) 提出了非常深层的卷积神经网络 (VDCNN) 架构,也称为 VGG Net。VGG Net 使用非常小的卷积滤波器,深度达到 16-19 层。Conneau 等人 (2016) 提出了另一种文本分类的 VDCNN 架构,使用小卷积和池化。他们声称这个 VDCNN 架构是第一个在文本处理中使用的,它在字符级别上起作用。该架构由 29 个卷积层组成。5.3 网络中的网络Lin 等人 (2013) 提出了网络中的网络 (Network In Network,NIN)。NIN 以具有复杂结构的微神经网络代替传统卷积神经网络 (CNN) 的卷积层。它使用多层感知器 (MLPConv) 处理微神经网络和全局平均池化层,而不是全连接层。深度 NIN 架构可以由 NIN 结构的多重叠加组成。5.4 基于区域的卷积神经网络Girshick 等人 (2014) 提出了基于区域的卷积神经网络 (R-CNN),使用区域进行识别。R-CNN 使用区域来定位和分割目标。该架构由三个模块组成:定义了候选区域的集合的类别独立区域建议,从区域中提取特征的大型卷积神经网络 (CNN),以及一组类特定的线性支持向量机 (SVM)。5.4.1 Fast R-CNNGirshick(2015) 提出了快速的基于区域的卷积网络 (Fast R-CNN)。这种方法利用 R-CNN 架构能快速地生成结果。Fast R-CNN 由卷积层和池化层、区域建议层和一系列全连接层组成。5.4.2 Faster R-CNNRen 等人 (2015) 提出了更快的基于区域的卷积神经网络 (Faster R-CNN),它使用区域建议网络 (Region Proposal Network, RPN) 进行实时目标检测。RPN 是一个全卷积网络,能够准确、高效地生成区域建议 (Ren et al.,2015)。5.4.3 Mask R-CNN何恺明等人 (2017) 提出了基于区域的掩模卷积网络 (Mask R-CNN) 实例目标分割。Mask R-CNN 扩展了 R-CNN 的架构,并使用一个额外的分支用于预测目标掩模。5.4.4 Multi-Expert R-CNNLee 等人 (2017) 提出了基于区域的多专家卷积神经网络 (ME R-CNN),利用了 Fast R-CNN 架构。ME R-CNN 从选择性和详尽的搜索中生成兴趣区域 (RoI)。它也使用 per-RoI 多专家网络而不是单一的 per-RoI 网络。每个专家都是来自 Fast R-CNN 的全连接层的相同架构。5.5 深度残差网络He 等人 (2015) 提出的残差网络 (ResNet) 由 152 层组成。ResNet 具有较低的误差,并且容易通过残差学习进行训练。更深层次的 ResNet 可以获得更好的性能。在深度学习领域,人们认为 ResNet 是一个重要的进步。5.5.1 Resnet in ResnetTarg 等人 (2016) 在 Resnet in Resnet (RiR) 中提出将 ResNets 和标准卷积神经网络 (CNN) 结合到深层双流架构中。5.5.2 ResNeXtXie 等人 (2016) 提出了 ResNeXt 架构。ResNext 利用 ResNets 来重复使用分割-转换-合并策略。5.6 胶囊网络Sabour 等人 (2017) 提出了胶囊网络 (CapsNet),即一个包含两个卷积层和一个全连接层的架构。CapsNet 通常包含多个卷积层,胶囊层位于末端。CapsNet 被认为是深度学习的最新突破之一,因为据说这是基于卷积神经网络的局限性而提出的。它使用的是一层又一层的胶囊,而不是神经元。激活的较低级胶囊做出预测,在同意多个预测后,更高级的胶囊变得活跃。在这些胶囊层中使用了一种协议路由机制。Hinton 之后提出 EM 路由,利用期望最大化 (EM) 算法对 CapsNet 进行了改进。5.7 循环神经网络循环神经网络 (RNN) 更适合于序列输入,如语音、文本和生成序列。一个重复的隐藏单元在时间展开时可以被认为是具有相同权重的非常深的前馈网络。由于梯度消失和维度爆炸问题,RNN 曾经很难训练。为了解决这个问题,后来许多人提出了改进意见。Goodfellow 等人 (2016) 详细分析了循环和递归神经网络和架构的细节,以及相关的门控和记忆网络。Karpathy 等人 (2015) 使用字符级语言模型来分析和可视化预测、表征训练动态、RNN 及其变体 (如 LSTM) 的错误类型等。J´ozefowicz 等人 (2016) 探讨了 RNN 模型和语言模型的局限性。5.7.1 RNN-EMPeng 和 Yao(2015) 提出了利用外部记忆 (RNN-EM) 来改善 RNN 的记忆能力。他们声称在语言理解方面达到了最先进的水平,比其他 RNN 更好。5.7.2 GF-RNNChung 等 (2015) 提出了门控反馈递归神经网络 (GF-RNN),它通过将多个递归层与全局门控单元叠加来扩展标准的 RNN。5.7.3 CRF-RNNZheng 等人 (2015) 提出条件随机场作为循环神经网络 (CRF-RNN),其将卷积神经网络 (CNN) 和条件随机场 (CRF) 结合起来进行概率图形建模。5.7.4 Quasi-RNNBradbury 等人 (2016) 提出了用于神经序列建模和沿时间步的并行应用的准循环神经网络 (QRNN)。5.8 记忆网络Weston 等人 (2014) 提出了问答记忆网络 (QA)。记忆网络由记忆、输入特征映射、泛化、输出特征映射和响应组成。5.8.1 动态记忆网络Kumar 等人 (2015) 提出了用于 QA 任务的动态记忆网络 (DMN)。DMN 有四个模块:输入、问题、情景记忆、输出。5.9 增强神经网络Olah 和 Carter(2016) 很好地展示了注意力和增强循环神经网络,即神经图灵机 (NTM)、注意力接口、神经编码器和自适应计算时间。增强神经网络通常是使用额外的属性,如逻辑函数以及标准的神经网络架构。5.9.1 神经图灵机Graves 等人 (2014) 提出了神经图灵机 (NTM) 架构,由神经网络控制器和记忆库组成。NTM 通常将 RNN 与外部记忆库结合。5.9.2 神经 GPUKaiser 和 Sutskever(2015) 提出了神经 GPU,解决了 NTM 的并行问题。5.9.3 神经随机存取机Kurach 等人 (2015) 提出了神经随机存取机,它使用外部的可变大小的随机存取存储器。5.9.4 神经编程器Neelakantan 等人 (2015) 提出了神经编程器,一种具有算术和逻辑功能的增强神经网络。5.9.5 神经编程器-解释器Reed 和 de Freitas(2015) 提出了可以学习的神经编程器-解释器 (NPI)。NPI 包括周期性内核、程序内存和特定于领域的编码器。5.10 长短期记忆网络Hochreiter 和 Schmidhuber(1997) 提出了长短期记忆 (Long short - Short-Term Memory, LSTM),克服了循环神经网络 (RNN) 的误差回流问题。LSTM 是基于循环网络和基于梯度的学习算法,LSTM 引入自循环产生路径,使得梯度能够流动。Greff 等人 (2017) 对标准 LSTM 和 8 个 LSTM 变体进行了大规模分析,分别用于语音识别、手写识别和复调音乐建模。他们声称 LSTM 的 8 个变种没有显著改善,而只有标准 LSTM 表现良好。Shi 等人 (2016b) 提出了深度长短期记忆网络 (DLSTM),它是一个 LSTM 单元的堆栈,用于特征映射学习表示。5.10.1 批-归一化 LSTMCooijmans 等人 (2016) 提出了批-归一化 LSTM (BN-LSTM),它对递归神经网络的隐藏状态使用批-归一化。5.10.2 Pixel RNNvan den Oord 等人 (2016b) 提出像素递归神经网络 (Pixel-RNN),由 12 个二维 LSTM 层组成。5.10.3 双向 LSTMW¨ollmer 等人 (2010) 提出了双向 LSTM(BLSTM) 的循环网络与动态贝叶斯网络 (DBN) 一起用于上下文敏感关键字检测。5.10.4 Variational Bi-LSTMShabanian 等人 (2017) 提出了变分双向 LSTM(Variational Bi-LSTM),它是双向 LSTM 体系结构的变体。Variational Bi-LSTM 使用变分自编码器 (VAE) 在 LSTM 之间创建一个信息交换通道,以学习更好的表征。5.11 谷歌神经机器翻译Wu 等人 (2016) 提出了名为谷歌神经机器翻译 (GNMT) 的自动翻译系统,该系统结合了编码器网络、解码器网络和注意力网络,遵循共同的序列对序列 (sequence-to-sequence) 的学习框架。5.12 Fader NetworkLample 等人 (2017) 提出了 Fader 网络,这是一种新型的编码器-解码器架构,通过改变属性值来生成真实的输入图像变化。5.13 超网络Ha 等人 (2016) 提出的超网络(Hyper Networks)为其他神经网络生成权值,如静态超网络卷积网络、用于循环网络的动态超网络。Deutsch(2018) 使用超网络生成神经网络。5.14 Highway NetworksSrivastava 等人 (2015) 提出了高速路网络(Highway Networks),通过使用门控单元来学习管理信息。跨多个层次的信息流称为信息高速路。5.14.1 Recurrent Highway NetworksZilly 等人 (2017) 提出了循环高速路网络 (Recurrent Highway Networks,RHN),它扩展了长短期记忆 (LSTM) 架构。RHN 在周期性过渡中使用了 Highway 层。5.15 Highway LSTM RNNZhang 等人 (2016) 提出了高速路长短期记忆 (high - Long short Memory, HLSTM) RNN,它在相邻层的内存单元之间扩展了具有封闭方向连接 (即 Highway) 的深度 LSTM 网络。5.16 长期循环 CNNDonahue 等人 (2014) 提出了长期循环卷积网络 (LRCN),它使用 CNN 进行输入,然后使用 LSTM 进行递归序列建模并生成预测。5.17 深度神经 SVMZhang 等人 (2015) 提出了深度神经 SVM(DNSVM),它以支持向量机 (Support Vector Machine, SVM) 作为深度神经网络 (Deep Neural Network, DNN) 分类的顶层。5.18 卷积残差记忆网络Moniz 和 Pal(2016) 提出了卷积残差记忆网络,将记忆机制并入卷积神经网络 (CNN)。它用一个长短期记忆机制来增强卷积残差网络。5.19 分形网络Larsson 等人 (2016) 提出分形网络即 FractalNet 作为残差网络的替代方案。他们声称可以训练超深度的神经网络而不需要残差学习。分形是简单扩展规则生成的重复架构。5.20 WaveNetvan den Oord 等人 (2016) 提出了用于产生原始音频的深度神经网络 WaveNet。WaveNet 由一堆卷积层和 softmax 分布层组成,用于输出。Rethage 等人 (2017) 提出了一个 WaveNet 模型用于语音去噪。5.21 指针网络Vinyals 等人 (2017) 提出了指针网络 (Ptr-Nets),通过使用一种称为「指针」的 softmax 概率分布来解决表征变量字典的问题。
-
本文转载自机器之心。深度神经网络在监督学习中取得了巨大的成功。此外,深度学习模型在无监督、混合和强化学习方面也非常成功。4.1 深度监督学习监督学习应用在当数据标记、分类器分类或数值预测的情况。LeCun 等人 (2015) 对监督学习方法以及深层结构的形成给出了一个精简的解释。Deng 和 Yu(2014) 提到了许多用于监督和混合学习的深度网络,并做出解释,例如深度堆栈网络 (DSN) 及其变体。Schmidthuber(2014) 的研究涵盖了所有神经网络,从早期神经网络到最近成功的卷积神经网络 (CNN)、循环神经网络 (RNN)、长短期记忆 (LSTM) 及其改进。4.2 深度无监督学习当输入数据没有标记时,可应用无监督学习方法从数据中提取特征并对其进行分类或标记。LeCun 等人 (2015) 预测了无监督学习在深度学习中的未来。Schmidthuber(2014) 也描述了无监督学习的神经网络。Deng 和 Yu(2014) 简要介绍了无监督学习的深度架构,并详细解释了深度自编码器。4.3 深度强化学习强化学习使用奖惩系统预测学习模型的下一步。这主要用于游戏和机器人,解决平常的决策问题。Schmidthuber(2014) 描述了强化学习 (RL) 中深度学习的进展,以及深度前馈神经网络 (FNN) 和循环神经网络 (RNN) 在 RL 中的应用。Li(2017) 讨论了深度强化学习 (Deep Reinforcement Learning, DRL)、它的架构 (例如 Deep Q-Network, DQN) 以及在各个领域的应用。Mnih 等人 (2016) 提出了一种利用异步梯度下降进行 DNN 优化的 DRL 框架。van Hasselt 等人 (2015) 提出了一种使用深度神经网络 (deep neural network, DNN) 的 DRL 架构。
推荐直播
-
HDC深度解读系列 - Serverless与MCP融合创新,构建AI应用全新智能中枢2025/08/20 周三 16:30-18:00
张昆鹏 HCDG北京核心组代表
HDC2025期间,华为云展示了Serverless与MCP融合创新的解决方案,本期访谈直播,由华为云开发者专家(HCDE)兼华为云开发者社区组织HCDG北京核心组代表张鹏先生主持,华为云PaaS服务产品部 Serverless总监Ewen为大家深度解读华为云Serverless与MCP如何融合构建AI应用全新智能中枢
回顾中 -
关于RISC-V生态发展的思考2025/09/02 周二 17:00-18:00
中国科学院计算技术研究所副所长包云岗教授
中科院包云岗老师将在本次直播中,探讨处理器生态的关键要素及其联系,分享过去几年推动RISC-V生态建设实践过程中的经验与教训。
回顾中 -
一键搞定华为云万级资源,3步轻松管理企业成本2025/09/09 周二 15:00-16:00
阿言 华为云交易产品经理
本直播重点介绍如何一键续费万级资源,3步轻松管理成本,帮助提升日常管理效率!
回顾中
热门标签