新書推薦:
《
深度学习详解
》
售價:HK$
114.8
《
李白传(20世纪文史学家李长之经典传记)
》
售價:HK$
45.8
《
津轻:日本无赖派文学代表太宰治自传性随笔集
》
售價:HK$
66.7
《
河流之齿
》
售價:HK$
59.8
《
新经济史革命:计量学派与新制度学派
》
售價:HK$
89.7
《
盗墓笔记之秦岭神树4
》
售價:HK$
57.3
《
战胜人格障碍
》
售價:HK$
66.7
《
逃不开的科技创新战争
》
售價:HK$
103.3
|
編輯推薦: |
《PyTorch自动驾驶视觉感知算法实战》融合了资深开发工程师多年一线工作经验,对自动驾驶涉及的主要视觉任务进行了深入讲解;对自动驾驶工程实践中很重要,但经常被忽略的知识进行了全面总结;附带一个中等规模的自动驾驶数据集便于读者上手实践。内容循序渐进、由浅入深,详尽的代码、图文讲解。书中操作部分配有二维码视频,使读者身临其境,迅速、深入地掌握各种经验和技巧。
|
內容簡介: |
《PyTorch自动驾驶视觉感知算法实战》全面介绍了自动驾驶系统中深度学习视觉感知的相关知识,包括深度神经网络和深度卷积神经网络的基本理论,深入讲解了自动驾驶中常用的目标检测、语义、实例分割和单目深度估计四种视觉感知任务。《PyTorch自动驾驶视觉感知算法实战》对自动驾驶工程实践中很重要但经常被忽略的知识进行了全面总结,包括多任务模型的损失平衡、Ubuntu操作系统、Anaconda和Docker等环境配置工具、C++开发环境搭建、神经网络压缩、模型导出和量化、TensorRT推理引擎等和部署相关的技术。《PyTorch自动驾驶视觉感知算法实战》各个任务都由PyTorch实现,模型部署的代码则提供C++实现,并附带一个中等规模的自动驾驶数据集用于示例。所有代码都公开在Github公开源码仓库上,很多代码可以直接用于生产环境,且提供了商业友好的代码许可证。《PyTorch自动驾驶视觉感知算法实战》适用于具备基本机器学习知识,有志于从事自动驾驶算法工作的学生,也适用于刚迈入职场,面对各种陌生技术无所适从的初级工程师。同时,本书也可供中高级算法工程师作为案头常备书籍,以便查阅。
|
關於作者: |
刘斯坦,本科毕业于上海交通大学,硕士毕业于德国慕尼黑工业大学。深度学习资深工程师,从事无人驾驶智能感知系统的研发工作。在德国相关领域从业超过十年,负责无人驾驶系统中多个神经网络模型在量产车的落地以及中国地区的本地化。刘斯坦对深度学习的各个领域不但有着全景式的理解,还具备从数学理论到部署产品线的知识纵深。这种即广又深全面覆盖的知识面,相信能为读者带来更开阔的视野。
|
目錄:
|
前言第1章 卷积神经网络的理论基础1.1神经网络回顾1.1.1神经网络模型1.1.2神经网络的训练——反向传播算法1.1.3神经网络的拟合能力和泛化能力1.2什么是卷积神经网络1.2.1什么是卷积运算1.2.2通道(Channel)和三维卷积1.2.3为什么需要深度网络1.2.4什么是批次(Batch)1.3卷积神经网络的组成细节1.3.1卷积神经网络的输入层1.3.2神经网络的输出层1.3.3卷积层和转置卷积层1.3.4激活层1.3.5归一化层1.3.6上采样层和下采样层1.3.7池化层1.3.8跳跃、空间注意力等特殊的连接方式1.3.9构建一个复杂的卷积神经网络1.4卷积神经网络的训练1.4.1常用损失函数1.4.2常用的正则化方法1.4.3常用的优化器1.4.4常用的训练学习率调整方法第2章 深度学习开发环境及常用工具库2.1硬件和操作系统2.1.1显卡2.1.2操作系统2.2Python开发环境管理2.2.1Anaconda虚拟环境的管理2.2.2Python的包管理器pip2.3常用的Python包2.3.1NumPy——Python科学计算库2.3.2OpenCV——Python图像处理库2.4GPU加速的深度学习和科学计算库PyTorch2.4.1GPU加速的科学计算功能2.4.2PyTorch的自动求导功能2.4.3PyTorch的优化器2.4.4PyTorch的数据加载2.4.5用PyTorch搭建神经网络2.4.6常用的辅助工具2.4.7搭建一个神经网络并进行训练第3章 神经网络的特征编码器——主干网络3.1什么是神经网络的主干网络3.1.1神经网络的元结构3.1.2神经网络的主干网络及有监督预训练3.1.3主干网络的自监督预训练3.2流行的主干网络3.2.1简单直白的主干网络——类VGG网络3.2.2最流行的主干网络——ResNet系列网络3.2.3速度更快的轻量级主干网络——MobileNet系列3.2.4自由缩放的主干网络——RegNet系列3.3使用TorchVision模型库提供的主干网络3.3.1构建和加载模型3.3.2修改主干网络获取多尺度特征图3.3.3不同主干网络和预训练模型的训练对比第4章 目标检测网络——识别车辆4.1目标检测基本概念4.1.1Anchor4.1.2NMS4.1.3目标检测网络的类别4.2以Faster RCNN为代表的两阶段检测方法4.2.1RPN网络4.2.2ROI网络4.2.3使用TorchVision模型库中的Faster RCNN4.3以Yolo为代表的一阶段检测方法4.3.1YoloV3的整体结构4.3.2Yolo的训练4.3.3类Yolo的一阶段检测网络4.4以CenterNet为代表的Anchor-Free方法4.4.1CenterNet的整体结构4.4.2用高斯模糊和Focal Loss训练CenterNet4.4.3YoloX网络4.5Yolo的PyTorch实现4.5.1样本选择算法的实现4.5.2Yolo层的实现4.5.3构造损失函数4.5.4NMS的实现第5章 语义分割与实例分割——逐像素分类5.1语义分割5.1.1语义分割的网络构架和损失函数5.1.2评价语义分割质量的指标5.1.3使用OHEM和类别权重解决样本不均衡问题5.1.4语义分割的关键——信息融合5.2使用PyTorch训练一个语义分割模型5.2.1语义分割的数据加载5.2.2加载Lite R-ASPP语义分割模型进行训练5.2.3计算混淆矩阵5.2.4计算mIoU5.3实例分割——分辨行人和车辆5.3.1以Mask-RCNN为代表的两阶段实例分割方法5.3.2以SOLO为代表的单阶段实例分割方法5.3.3基于CondInst的半监督实例分割方法BoxInst5.4安装及使用OpenMMLab——以MMDetection为例5.4.1安装和配置MMDetection5.4.2MMDetection介绍5.4.3SOLO代码解析第6章 单目深度估计——重建三维世界6.1计算机三维视觉基础知识6.1.1相机模型6.1.2什么是深度图6.1.3相机运动模型6.2单目深度估计的网络构架6.2.1深度图预测网络6.2.2基于相对视差的深度图输出编码6.2.3基于有序回归的深度图输出编码6.2.4相机运动估计网络6.3无监督学习的机制6.3.1无监督学习系统构架6.3.2将深度图反投影为点云的PyTorch实现6.3.3从相邻帧采集RGB值并重投影的PyTorch实现6.3.4无监督单目深度推断的损失函数6.4可能存在的问题及解决方案6.4.1用图像梯度图解决边缘模糊问题6.4.2用图像一致性掩膜解决移动物体问题6.4.3用速度损失解决尺度问题第7章 通过控制网络结构提高速度和精度7.1使用多任务网络构架提高速度和精度7.1.1多任务网络的设计7.1.2多任务网络的任务平衡问题7.2用PyTorch搭建一个语义分割和目标检测双任务网络7.2.1多任务数据加载7.2.2多任务网络的搭建7.2.3多任务损失的平衡7.3压缩神经网络提高推理速度7.3.1什么是神经网络压缩7.3.2几种常见的通道剪枝方法7.3.3在训练中使用L1正则化压缩权重7.3.4使用可微通道加权进行通道剪枝7.3.5网络压缩的流程7.4用PyTorch实现可微网络压缩7.4.1用PyTorch构造可微通道选择层7.4.2利用通道选择层确定压缩方案7.4.3对PyTorch模型进行压缩并对比运行速度第8章 导出和部署神经网络模型8.1配置开发环境8.1.1Docker的使用8.1.2配置C++开发环境8.2使用LibTorch部署PyTorch模型8.2.1导出TorchScript模型8.2.2将LibTorch加入CMake项目8.2.3将输入图像转换为Tensor8.2.4加载TorchScript模型并进行推理8.3用TensorRT部署模型
|
內容試閱:
|
2012年,多伦多大学Geoffrey Hinton教授指导的学生Alex Krizhevsky发表了AlexNet深度卷积神经网络模型,在ImageNet图像识别任务上大幅超越第二名,开启了深度学习的新纪元。同年,笔者于慕尼黑工业大学毕业,彼时,笔者选修了Daniel Cremers教授开设的多门课程,醉心于学习凸优化、微分几何等经典计算机视觉的理论知识,对卷积神经网络一无所知,丝毫感觉不到一个人工智能的伟大时代就此揭开帷幕。25年前,也是在慕尼黑工业大学计算机系,Jürgen Schmidhuber教授指导的学生Sepp Hochreiter发表了论文LSTM(Long Short-Term Memory),他们也决然无法预料,被SVM等机器学习方法打败的仿生人工智能,居然会在几十年后忽然起死回生,迎来爆发式发展。从2012年AlexNet的发表到今天,不过10年有余,卷积神经网络和相关硬件的发展可谓一日千里。笔者在自动驾驶视觉感知领域从业五年,深感这个领域教育资源的发展远远跟不上学术界和工业界的发展。该领域涉及的知识庞杂,既广又深:知识广度方面,从最优化理论,常用模型的特点,到使用C++编写高性能、高可靠性的程序和对各种神经网络加速芯片的了解,都属于自动驾驶感知算法工程师技术栈的覆盖范围;知识深度方面,工程师要对卷积神经网络的数学理论有足够深入的理解,而不应止步于调参的范围。也就是说,一个自动驾驶算法工程师,不但要有深厚的数学基础,掌握凸优化和统计学,还要熟悉高性能嵌入式软件的编写,这是一个横跨学术界和工业界的多面手职业。尤其是自动驾驶行业一日千里,很多工程师只能在工作中边干边学,一路走来可谓磕磕绊绊,如果能有一本书全面覆盖自动驾驶感知算法工程师的能力圈,那职业之路走起来就会顺畅很多。笔者就是出于这个目的,根据自己的职业经验和理论知识,编写了本书。本书特点考虑到上文提及的自动驾驶感知算法工程师的种种职业特点,本书的内容将会兼顾计算机视觉学术界的最新研究成果和自动驾驶的工程实践。兼顾细节与理论深度学习的很多算法用公式或语言来描述会困难重重,用示意图来表现则是一目了然。对算法和模型的细节,笔者绘制了大量的三维示意图进行讲解,争取让读者一看就懂。但光有细节是不够的,深度学习算法工程师常被取笑为“调参侠”“炼丹师”。这是因为卷积神经网络被认为是一个巨大的黑盒(Black Box),其运作规律难以为人类所理解。诚然,深度学习的理论仍在构建之中,尚不完善,但学术界从未停止过对深度学习的理解。已经有大量学术成果能加深人们对卷积神经网络各种现象的理解,本书将吸收这些成果对神经网络的运作进行解释。例如,ResNet的有效性,除了原论文中的解释,还有其他学者也对其进行了研究,产生了新的理解,这些研究也被纳入到本书中来。总之,笔者争取让读者知其然,也知其所以然,超越“调参侠”的职业定位。注重动手实践本书除了对理论进行深入浅出的讲解,也注重将理论落到实处。深度学习一个很大的特点是“一看就懂,一做就懵”。理论很熟悉了,但实际操作起来会遇到各种各样的小问题。这是因为算法工程师应能将数学符号和代码中的数据结构连接起来,这是这个职业所需要的独特能力。本书对重要的模型细节都展示了代码示例,对代码中各个张量的维度,各维度的含义都有详细的注释和讲解。对于复杂的模型,笔者直接在公式下方展示代码,尽量做到让读者从公式中的符号轻松地落实到代码中的变量中。提供迷你数据集自动驾驶视觉感知任务的另一个特点是任务多而杂,每个任务往往都有一些通用的数据集。例如,深度估计有KITTI数据集,语义分割有Cityscape,目标检测有nuScenes等。学习的时候往往会遇到的一个问题是每一个任务都要下载一个巨大无比的数据集,并专门写接口。如果要进行多任务训练,往往需要nuScenes等巨型数据集,而且标注还不全面。如果只用于学习的目的,杂乱而庞大的数据集无疑大大增加了学习的时间和经济成本。为此笔者特意自制了一个方便学习的迷你数据集。数据集采集于德国慕尼黑一片安静的城区,场景类似于KITTI,仅包含7000多帧图像。笔者使用当时精度最高的目标检测和语义分割网络对这个迷你数据集进行标注,并逐帧对标注的伪真值进行后期处理,尽量获得高质量的标注数据。数据集是一个连续的视频,笔者还对相机进行了标定,故可以用于无监督深度估计任务。强调模型部署落地正如上文所说,要成为一个优秀的算法工程师,其工作内容不仅是调参那么简单,另一块重要的工作内容就是将模型部署到生产环境。对于互联网行业的算法工程师来说,模型部署可能相对简单,有成熟的工具链支持,但自动驾驶的模型部署就复杂得多了。首先自动驾驶系统运行的硬件平台往往不是常见的x86平台,自动驾驶系统的模型部署,其实已经属于嵌入式软件开发了。其次,自动驾驶系统实时性高,吞吐率需要达到10FPS(Frame-Per-Second)或更高,同时需要运行的神经网络模型很多,而硬件平台上的神经网络加速器往往算力有限。因此,为了将神经网络模型部署到算力有限的硬件平台,并达到实时性要求,需要结合硬件的特点对模型进行设计和压缩。模型的部署涉及模型压缩、模型导出、Nvidia芯片的模型量化和模型推理、C++的开发等知识,都是深度学习课堂上不会涉及的工程实践内容。这些工程实践知识是非常重要的,但超出了很多长期在Ubuntu和Python开发环境下的读者的“舒适区”。本书将全面覆盖相关知识,帮助读者更轻松地扩大自己的“舒适区”,为将来的工作做好准备。 本书内容第1章讲解卷积神经网络的理论基础,用简洁的篇幅介绍了神经网络和卷积神经网络的基础知识。包括反向传播的推导、神经网络的各种网络层、常用的损失函数、正则化、优化器和学习率调整方法等。第2章介绍深度学习开发的常用工具,从显卡和操作系统的概念,到Python开发中用到的常用工具。例如,pip包管理器、Anaconda虚拟环境以及NumPy和OpenCV 两个常用的库。最后配合示例代码着重讲解PyTorch的使用,示例代码将实现一个简单的卷积神经网络并进行训练。第3章讲解卷积神经网络中主干网络的概念。本章首先介绍主干网络在卷积神经网络中的位置和作用,以及对比学习等主干网络预训练技术。之后会对最常用的几种主干网络的特点和使用场景进行讲解。最后通过示例代码展示如何加载TorchVision中的主干网络模型。第4章介绍自动驾驶系统中最经典的一个任务——目标检测。本章首先讲解目标检测算法中的几个基本概念,如锚框、极大值抑制、一阶段和两阶段算法等。随后以FasterRCNN为例介绍两阶段网络,以Yolo为例讲解一阶段网络,以CenterNet为例讲解无锚框网络。最后讲解Yolo的PyTorch示例代码。第5章聚焦于自动驾驶系统中和图像分割有关的两个任务:语义分割和实例分割。本章讲解语义分割的网络结构、损失函数、常用精度指标等基础知识。也会涉及实际工作中需要解决的问题,尤其会介绍语义分割模型的几种信息融合方法和设计思路。本章5.3节介绍三个实例分割算法,特别是会介绍一种半监督的实例分割算法。最后介绍计算机视觉领域最常用的框架OpenMMLab的系统结构和使用方法。第6章的内容是近几年来新出现的自动驾驶感知任务——单目深度估计。本章首先介绍多视图三维几何理论,然后讲解单目深度估计的无监督训练方法,最后结合实际工作中会遇到的若干难点提出一些解决方案。第7章分为两部分,第一部分介绍多任务网络的结构和设计思路,着重介绍多任务网络训练时的损失平衡问题及其基于不确定度的损失平衡方案;第二部分介绍神经网络的压缩,以通道剪枝为例介绍L1正则化增加网络稀疏度和可微通道剪枝的网络压缩方法。最后通过示例代码讲解如何用PyTorch实现网络压缩。第8章讲解神经网络模型的部署,包括C++开发环境的搭建,LibTorch和TensorRT这两个神经网络推理库。最后介绍模型量化的相关理论知识和工程实践,并对FP32精度模型和INT8精度模型进行精度与推理速度对比。本书代码资源本书强调动手实践,笔者为本书的出版制作了一个迷你数据集,并为大部分内容编写了代码。代码均以MIT许可证开源,既可用于学习,也可直接应用于日常工作中。开源代码托管于代码库https://github.com/vision-adas/code。开源代码的具体内容详见代码库的README页面,迷你数据集的下载链接也公布于此。代码库中代码包括:1)目标检测和语义分割多任务网络模型的全套训练代码。2)无监督单目深度估计的全套训练代码。3)多任务模型的网络压缩代码。4)将模型导出为onnx、pt和TensorRT格式的模型导出代码。5)在目标硬件上使用LibTorch和TensorRT部署模型的C++示例代码。6)配置代码环境所需的Dockerfile。 致谢笔者长年在知乎论坛的深度学习社区参与讨论,很多对深度学习的理解都来自于社区讨论。网友的批评指正和提问都是对笔者的鞭策,而关注者的认可也在激励笔者不断进步,特此对网友们表示感谢。本书成书于疫情期间,父母对笔者长年不回国探亲报以极大的宽容和理解,长时间的专注让本书得以完成。笔者的小伙伴杨丹青对本书的第1章进行了审阅,对行文提出了很多有价值的建议,更要感谢她对笔者疏于陪伴的谅解。
|
|