《深度学习与图像处理(PaddlePaddle版)》写完这本书我解脱了
目录
一、心路历程
二、案例精选
2.1 基于OpenCV的自动驾驶
2.2 基于深度学习的自动驾驶
2.3 图像分类(智能垃圾分拣器)
2.4 目标检测(二维码扫码枪)
2.5 语义分割(证件照制作工具)
2.6 实例分割(肾小球影像分析仪)
2.7 关键点检测(身份证识读APP)
2.8 风格迁移(照片动漫化在线转换网站)
三、后记
一、心路历程
距离第一本书《Python Web开发从入门到实战(Django+Bootstrap)》出版已经4年了,写第一本书时很痛苦,既要考虑内容新颖实用,又要考虑排版细致无错,所幸当时刚毕业,生活和工作都没有那么忙碌,硬着头皮写完了。最终这本书也取得了不错的反响,评为2021年度清华出版社畅销书,这也算是对我这段经历的一个认可。但自此之后,一直不敢再写第二本,只是偶尔在CSDN上发点零散的博客文章。主要原因有两方面,一是缺干货。要写一本IT技术类书籍,首先自己要掌握这门技术,这里的掌握不是简单的从网上找代码来拼拼凑凑,而是真正的用这门技术扎扎实实的做几个项目,只有这样经过了实战历练,写出来的东西才有价值,才经得起检验。现在有很多书籍,仅仅只是为了蹭热度,所有内容都从网上拼拼凑凑,自己压根不去实践,甚至有作者大量翻译官网的英文说明文档,滥竽充数。这些都是我不认可的。我的理念一向是实战为王,我的书一般都以一个个真实的项目为主线,在做项目过程中去讲解每个蕴藏在其中的知识点,让读者未来可以依葫芦画瓢进行学习和使用。第一本书写完以后,我觉得我当时的技术储备达不到写第二本书的目的,干货太少。二是忙碌。随着周围事务越来越多,写作时间越来越少。所幸,日常大部分工作还是以技术为主,因此,也就一头扎到无穷无尽的项目中去锻炼了。
忙碌了1年以后,也就是2022年,由于长时间从事深度学习项目,隐隐约约觉得手上有点能拿的出手的东西了,下意识的想写一本关于深度学习的书。但当时面临两个问题,一是部署问题。我本意是以项目为主线,讲解深度学习产品的全流程开发过程,但是发现当时最流行的Pytorch框架缺乏统一而完善的部署套件,很多算法的部署代码繁杂凌乱,如果写到书里面会显得异常零碎冗余。二是平台问题。很多学生缺乏GPU电脑,而国内网上也没有免费的GPU编程平台,那么对于那些想学习人工智能/深度学习的学生来说,这就成了一个象牙塔里的技术,只可远观,不可实践。由于上述问题,我暂时搁置了写第二本书的想法,继续回去做我的项目去了。契机也发生在这一年里,由于项目上的一些问题,我遇到了朱老师(上海交大博士后),受他的启发,我开始深入研究国产PaddlePaddle框架。PaddlePaddle有很多算法套件,从数据集处理、算法训练到部署,全流程都打通了,非常适合工业级项目应用。这里不吹不黑,PaddlePaddle有很大的优势,但是也有它自身的问题,最大的问题就是兼容性。很多套件代码一直在变,甚至连PaddlePaddle底层API算子也在一直变,也正是因为这个问题,我觉得用PaddlePaddle开发项目可以,但是写书还不行,很有可能我刚写完,它的大部分代码已经变了。尽管如此,由于PaddlePaddle开发项目的高效性,从这一年开始我大部分时间都在研究和使用PaddlePaddle。
到2023年初,PaddlePaddle的统一部署套件FastDeploy出来了。我使用了一阵以后,觉得时机成熟了。这个时候,PaddlePaddle各算法套件也已经基本稳定下来,并且PaddlePaddle提供了线上GPU编程平台AI Studio(新注册用户会获得大量赠送的免费时长,用这些时长足够支撑学习),我和朱老师一商量,决定一起写一本关于深度学习和图像处理的书,使用PaddlePaddle框架。
当然,写书的过程依然是痛苦的,尤其是这样一本专业性很强的书籍。这本书前后一共写了1年半,中间删改了多次,但好歹坚持了下来,并且秉持我一贯的理念:实战为王。我尽可能的将这些年的深度学习项目经验写出来,力求读者能够学完本书直接就会上手做项目,能自己完成整个项目的研发,其中涉及深度学习与图像处理领域经典的图像分类、目标检测、语义分割、实例分割、关键点检测、GAN风格迁移。这本书的一大特色在于部署的完备性,具体包括Jetson Nano边缘端部署、树莓派部署、桌面客户端部署、工控程序部署、安卓部署、微服务部署,涉及语言包括python、c++、c#、java。刚开始朱老师产生过疑问,他认为这本书部署语言这么多,学生怎么可能学的明白呢?但是经验告诉我,这是可行的。原因在于这本书里的案例和步骤都是提炼过的,只需要按照书上的代码跟着实践出来就可以掌握个七七八八,在这样一个模仿实践的过程中学生自己就会慢慢明白每个步骤这样处理的意义,这种靶向性的教学方式更有针对性,并且可以快速让学生掌握核心知识。通过这样一种方式,学生才能真正具备产业级深度学习模型开发和部署的能力。
最终,这本书在2024年6月份全部完工,然后校稿了3个月,在这最后3个月期间,配合清华出版社录制了这本书的微课视频,主要是把书中的代码全部实践演示了一遍,进一步方便读者参考和复现,具体可以扫描书中二维码观看微课视频。另外,为了教学需要,也同步提供了书本配套的PPT、教学大纲、教学进度表、教案、期末试卷等资料,方便各位老师授课。
到这里,我终于解脱了。至于第三本书,呃呃呃呃呃呃呃呃呃呃呃呃,几年后再说吧。
书籍Shopping链接(Github或Gitee)。
二、案例精选
2.1 基于OpenCV的自动驾驶
主要讲解图像处理基础知识,并且运用传统图像处理方法以及OpenCV库,在模拟器中完成小车自动驾驶。
2.2 基于深度学习的自动驾驶
采用深度学习回归模型,实现端到端的小车自动驾驶控制,提升小车自动驾驶平滑性。
2.3 图像分类(智能垃圾分拣器)
以垃圾分类任务为主线,使用图像分类套件PaddleClas实现高精度垃圾分类,并最终脱离训练环境,通过FastDeploy部署工具,在Jetson Nano智能边缘设备上实现算法集成。
2.4 目标检测(二维码扫码枪)
从深度学习方法切入,使用目标检测方法实现非规范场景下的二维码高精度识别,具体的,将使用飞桨PaddleDetection套件中的PicoDet单阶段检测算法来完成研发任务,最终部署到树莓派上。
2.5 语义分割(证件照制作工具)
基于语义分割技术开发一款用于PC桌面应用的证件照制作工具,可以让用户方便的制作出不同颜色背景的标准证件照片。最终使用QT完成集成部署。
2.6 实例分割(肾小球影像分析仪)
病理切片中肾小球的精确识别是诊断肾脏病变程度的关键。这里的精确识别不止是要定位出每个肾小球的位置,还需要对肾小球区域进行精细化分割,从而可以最大程度的为病理科医师提供病变类型依据。使用PaddleDetection套件中的实例分割算法Mask RCNN来完成肾小球影像分析任务。最终使用C#程序完成部署。
2.7 关键点检测(身份证识读APP)
以手机端身份证识读项目为主线,从图像矫正角度切入,利用深度学习关键点检测算法,在安卓手机上实现身份证图像的姿态矫正。最终研发一款安卓APP,实现任意角度的身份证信息识读,提升移动端场景下的识读性能。
2.8 风格迁移(照片动漫化在线转换网站)
使用飞桨的PaddleGAN套件,学习一种图像风格化的AnimeGAN算法,最终研发一款能够将风景照片实现动漫化的在线转换网站,并且通过微服务架构设计,支持多GPU高并发访问。
三、后记
由于水平有限,书中难免有错误或疏漏之处,请各位读者批评指正。
各位读者如果觉得本书还算有点价值,请在购书平台上不吝点个赞哈。