图书前言

PREFACE

前言

2018年度的ACM(美国计算机协会)图灵奖授予深度学习领域三

巨头(Yoshua Bengio、Yann LeCun、Geoffrey Hinton),这是学术界与工业界对深度学习最大的认可。深度学习具有强大的学习能力,为人工智能技术插上了翅膀。各国相继把发展人工智能确立为国家战略。我国国务院于2017年7月8日重磅发布《新一代人工智能发展规划》,人工智能课程已经相继走入中小学课堂。人工智能将是未来全面支撑科技、经济、社会发展和信息安全的重要支柱!

深度学习已经在许多领域影响深远,但它对算力的要求极高。华为公司应时而动,打造出基于达芬奇架构的昇腾AI

系列处理器,并进一步为全场景应用提供统一、协同的硬件和软件架构。其中有面向云端提供强大训练算力的硬件产品(如昇腾910处理器),也有面向边缘端和移动端提供推理加速算力的硬件产品(如昇腾310处理器)。与硬件同样重要的是昇腾AI处理器的软件生态建设。友好、丰富的软件生态会真正释放昇腾AI处理器的能量,走入千家万户,助力我国的新一代人工智能发展。

全书共分七篇计20章,重点剖析若干重要领域的典型案例,内容涵盖目标检测、图像分割、图像生成、图像增强、模式分类、智能机器人以及序列模式分析等领域,涉及各种典型的深度学习网络模型。

第一篇目标检测,包含三个案例,分别涉及手写汉字拍照检测与识别、

人类蛋白质图谱分类和遥感图像目标检测,提供了基于联通成分分析搭配ResNet、选择性搜索算法搭配 ResNet和YOLOv3等方法的应用。

第二篇图像分割,分别涉及人像的语义分割、人像分割与背景替换(抠图)、眼底视网膜血管图像的分割和边缘检测四个不同领域的任务,展示了如何利用DeepLab V3+、U形语义分割网络、全卷积网络以及更丰富卷积特征(RCF)网络模型进行特定分割任务。

第三篇图像生成,包含两个案例,分别涉及AR(增强现实)阴影以及卡通图像生成,集中展示了如何使用对抗生成网络(GAN)生成逼真图像。

第四篇图像增强,包含四个案例,涵盖图像去雾、去雨、HDR

(高动态范围渲染)

和图像的超分辨率四个基本问题,分别从对抗生成网络、渐进式引导图像去雨网络(PGDN)、多尺度网络、

超分辨率网络(SRCNN、FSRCNN和ESPC)设计算法,扩宽了原有处理思路。

第五篇模式分类,包含三个案例,介绍来自人体动作识别、人脸识别和手势识别的实践。这些与人类本身具有的能力

相关,常常是我们特别期望赋予计算机的。本篇提供了基于图卷积网络(GCN)、朴素卷积网络和三维卷积网络等经典模型的分类应用。

第六篇机器人,给出机器人领域的一个案例,让智能小车自动感知环境并自动规划路线,基于ROS框架,综合利用了雷达传感信号感知、基于DenseNet的深度图预测、SLAM和PID控制等技术。

第七篇序列分析,集中介绍了序列分析领域的三个典型案例,包含中文语音识别、手写文本行识别以及意见挖掘与情感分析,给出了如何综合利用VGGNet网络、LSTM网络、注意力网络、BERT网络、CTC算法来解决序列分析问题。

本书的案例素材征集自国内20位知名

教授,

包括清华大学胡事民、刘永进、张松海,南开大学程明明、李涛,浙江大学许威威、朱秋国,上海交通大学杨旸、陈立,武汉大学肖春霞,华中科技大学颜露新,吉林大学徐昊,华东师范大学张新宇,西安电子科技大学苗启广、侯彪,哈尔滨工业大学张盛平、苏统华,深圳大学邱国平,苏州大学张民、付国宏。

苏统华和杜鹏对全书进行统稿。

在本书的编写过程中得到清华大学出版社盛东亮主任及钟志芳编辑的专业指导,他们的编辑和审校工作明显提高了本书的质量,特别向他们致以敬意。

在本书统稿过程中,刘姝辰、张明月和文荟俨等人做了大量辅助工作,特此感谢!

在本书的编写过程中同时受到多个基金(新一代人工智能重大项目2020AAA0108003、重点研发计划课题2017YFB1400604、国家自然科学基金项目61673140和81671771)的资助。

苏统华杜鹏

2021年6月

第3章

遥感图像目标检测

3.1案例简介

随着遥感卫星成像技术的发展,遥感卫星的成像分辨率得到了大幅度的提高,大量遥感卫星的成功发射,产生了海量的遥感数据,这些数据很难依靠人工去判读。遥感图像目标检测,是为了在难以判读的海量遥感图像中找到目标的位置。

遥感图像目标检测的主要过程包括: 对输入的

目标(这里是飞机)图像进行数据预处理

以及特征提取,然后通过目标检测模型对目标对象的特征进行推理,最后对推理结果进行解析并标记输出,其流程如图31所示。

图31遥感图像目标检测过程

本章主要介绍基于华为Atlas开发者套件构建的遥感图像系统。借助Atlas开发者套件提供的

AscendCL API接口完成案例的设计与实现。本案例涉及Darknet模型向Caffe模型的转换,开发板OpenCV、ffmpeg等科学计算依赖库

的安装,根据YOLOv3构建目标检测模型等过程。本案例主要为读者提供一个遥感图像目标检测相关应用在华为Atlas开发者套件上部署的参考。

3.2系统总体设计

系统首先构建Caffe框架的目标检测模型并训练,之后利用模型转换工具将Caffe模型转换为om模型,接下来通过om模型对输入张量进行推理,对推理结果进行处理,最终输出目标检测结果以及目标检测的最终图像。

3.2.1功能结构

遥感图像目标检测系统可分为遥感图片预处理、模型推理和目标检测结果输出这几部分。系统的整体结构如图32所示。

图32系统整体结构

3.2.2系统设计流程

该系统设计流程可分为模型训练阶段和模型推理阶段,如图33所示。前者主要在服务器端完成构建,后者主要在华为Atlas开发者套件上完成构建。

模型训练阶段首先构建目标检测模型,本案例中的目标检测模型采用深度学习框架Darknet中的神经网络Darknet53进行模型训练,然后

将Darknet53训练所得的模型转换为Caffe模型,以此来满足MindStudio平台模型转换要求,最后对转换后的Caffe格式模型进行验证和评估。

模型推理阶段首先对输入图片进行图片预处理以及特征提取,并将结果作为目标检测模型的输入张量,利用华为MindStudio平台将Caffe格式的目标检测模型转换为华为Atlas开发者套件支持的om格式模型,接下来通过目标检测模型对输入张量进行推理,对推理结果进行处理,最终输出目标检测结果以及目标检测的最终图像。

图33系统流程

3.3系统设计与实现

本节将详细介绍系统各部分功能的设计与实现过程,该系统利用华为Atlas开发者套件提供的AscendCL API接口[2]实现系统搭建。

3.3.1目标检测模型定义

该系统的检测模型基于Caffe框架构建YOLOv3神经网络模型。在基本的图像特征提取方面,YOLOv3采用

Darknet53网络(含有53个卷积层)作为骨干网络。Darknet本身是专门为YOLOv3开发的网络结构,借鉴了残差网络(

Residual Network)的做法,在一些层之间设置了捷径连接(Shortcut Connections),且不采用最大池化(maxpool),而是通过步长(Stride)为2的卷积层实现特征图的尺寸变换。YOLOv3神经网络模型会在Darknet53骨干网络的基础上添加检测相关的网络模块。

3.3.2目标检测模型训练

此目标检测训练模型参考YOLOv3的模型训练方法进行训练,最后获得YOLOv3的模型文件。本次采用的模型训练数据从RSODDataset、NWPU VHR10数据集中分别选取446张大小为1044×915的遥感图像和80张大小约为958×808的遥感图像; 

通过旋转,mixup(一种线性插值的数据增强方法)等方式对数据集扩增,提升模型泛化能力。

将所有数据的80%作为训练样本,剩余的20%作为测试样本。

模型训练代码请参见程序清单31的具体参数定义。

程序清单31yolov3.cfg文件的部分参数定义

batch=64#仅表示网络积累多少个样本后进行一次反向传播(BP)

subdivisions=16#表示将一批(batch)图片分16次完成网络的前向传播

width=416#网络输入的宽

height=416#网络输入的高

channels=3#网络输入的通道数

momentum=0.9#动量DeepLearning1中最优化方法中的动量参数,这个值影响梯度

#下降到最优值的速度

decay=0.0005#权重衰减正则项,防止过拟合

angle=5#数据增强参数,通过旋转角度来生成更多训练样本

saturation = 1.5   #数据增强参数,通过调整饱和度来生成更多训练样本

exposure = 1.5    #数据增强参数,通过调整曝光量来生成更多训练样本

hue=.1         #数据增强参数,通过调整色调来生成更多训练样本

learning_rate=0.001 #学习率 

burn_in=1000     #迭代次数大于1000时,才采用policy变量定义的更新方式

max_batches = 2000 #训练次数达到最大批(max_batches)后停止学习,一次为跑完一个批

policy=steps     #学习率调整的策略

steps=1600,1800

scales=.1,.1#变量steps和scale是设置学习率的变化,比如迭代到1600次时,

#学习率衰减为1/10,迭代到1800次时,学习率又会在前一个学习

#率的基础上衰减1/10

利用YOLO官网的原始YOLOv3网络模型,配合自己的数据集,根据实际情况通过修改部分参数进行训练,经过多次迭代实现模型的训练。

3.3.3模型转换

该系统中原始的目标检测模型为使用Darknet53网络训练的模型,其网络模型文件

为cfg文件及权重(weights)文件,这需要进行模型转换。华为MindStudio平台模型转换工具目前只支持Caffe和TensorFlow的pb格式模型的转换,所以首先需要将Darknet格式的模型转换为Caffe格式的模型。此处使用了由ChenYingpeng (https://github.com/ChenYingpeng/caffeyolov3)提供的darknet2caffe转换工具,具体的转化操作可参考网址: https://blog.csdn.net/avideointerfaces/article/details/89111955。

模型转换成功后获得Caffe格式的模型文件。om格式文件的转换方式有两种: 一是通过MindStudio平台进行转换,二是通过命令行命令进行转换。此处采用的方法是使用命令行命令进行转换。具体的转换操作如下所述。

首先将yolov3.caffemodel、yolov3.prototxt、aipp_nv12.cfg三个文件放入同一文件夹下,例如yolov3

文件夹,此处aipp_nv12.cfg已在代码文档中提供,C7x对.prototxt文件有修改要求,可根据个人需要按照https://support.huaweicloud.com/tiatcA200dk_3000/altasatc_16_024.html网址中的文档介绍对其进行修改。接着进入yolov3文件夹,进行环境变量设置,具体代码如下: 

cd $HOME/yolov3

export install_path=$HOME/Ascend/ascend-toolkit/20.0.RC1/x86_64-linux_gcc7.3.0

export PATH=/usr/local/python3.7.5/bin:${install_path}/atc/ccec_compiler/bin:${install_path}/atc/bin:$PATH

export PYTHONPATH=${install_path}/atc/python/site-packages/te:${install_path}/atc/python/site-packages/topi:$PYTHONPATH

export LD_LIBRARY_PATH=${install_path}/atc/lib64:$LD_LIBRARY_PATH

export ASCEND_OPP_PATH=${install_path}/opp

执行以下命令转换模型:

atc --model=yolov3.prototxt --weight=yolov3.caffemodel --framework=0 --output=yolov3 --soc_version=Ascend310 --insert_op_conf=aipp_nv12.cfg

完成此项操作后即可得到对应的om模型。

3.3.4模型推理

系统模型推理阶段在华为Atlas开发者套件上实现。需要安装ffmpeg和OpenCV的原因是适配多样性的数据预处理和后处理

。本案例也是基于ffmpeg和OpenCV做的处理,此处依赖库的安装十分重要,将会影响后面绝大部分代码的运行。

系统推理部分利用华为Atlas开发者套件提供的pyACL API和

数字视觉预处理(Digital Vision PreProcessing,DVPP)

模块中的相关功能。模型推理部分主要包括以下子模块。

(1) 图像读取函数(acl_image类中相关函数): 负责读取文件夹下的所有遥感图片,并对图片信息进行获取。

(2) 预处理函数(ObjectDetect类中的Preprocess函数): 该函数完成的功能是对读取的遥感图片进行预处理,首先将图片从

JPEG格式转换为YUV格式,然后对该转换后的YUV格式的图片进行缩放。

(3) 推理处理函数(ObjectDetect类中的Inference相关函数): 该函数完成的功能是将图片信息送入模型进行模型推理,其中主要使用pyACL API中的模型推理API。

(4) 后处理函数(ObjectDetect类中的Postprocess函数): 处理推理结果,对输入图片的推理结果进行获取,解析推理结果,对其进行处理,然后输出检测结果,并将目标检测结果在原始图片中进行标记,作为检测结果进行输出,同时将检测结果信息存储为json文件。

特别地,针对宽和高均大于1000像素的图像,先裁剪(crop)后再对分块图像单独推理,最后将推理结果拼接起来。

3.3.5系统运行界面设计

系统运行界面在用户主机上运行。该系统运行界面依托图PyQt5进行简易的窗口设计,在主机上运行后,即可通过相关接口,完成对遥感图片中目标检测(飞机)以及检测结果的查看。通过该界面,用户无须其他操作,即可上传待检测图片至开发板端,并对该图像的检测结果进行查看。

3.4系统部署与运行结果

该案例系统运行在华为Atlas开发者套件上。系统基于pyACL API接口实现遥感图像飞机目标检测功能,Python程序负责完成图片的预处理和模型推理、图片裁剪与拼接、图片检测结果输出。

在运行前,将工程文件上传至开发者套件,将待检测图片放入data文件夹。之后在主机端的AtlasUI文件夹下运行uiHuawei.py,打开系统运行界面,如图34所示。

图34遥感图像飞机检测系统运行界面

该界面上有4个按钮,

实现不同功能。单击“选择图片”按钮,即可加载用户所要检测的遥感图像,此处

为选择图片的示意图,如图35所示。单击“显示原图”即可查看该图片原图。单击“飞机检测”按钮后,开始对选中的图片进行目标检测,同时检测结果的示意图也会展示在上方,如图36所示。在实际的检测中,较大图片检测结果可能在图片显示区进行展示时不是很清晰,因此可单击“显示检测结果”按钮可查看最后的检测结果原图。

图35选中图片

图36完成该图片的目标检测

3.5本章小结

本章提供了一个基于华为Atlas开发者套件的遥感图像目标(飞机)的检测案例,本案例基于华为Atlas开发者套件提供的

pyACL API接口,通过对目标图片进行预处理、特征提取及模型推理,最终实现了遥感图像目标检测的功能。

本章提供了从目标检测模型的构建,原始Darknet模型向Caffe模型的转换,以及相关环境配置到最终实现遥感图像目标检测全过程讲解,希望为读者提供一个基于华为Atlas开发者套件的遥感图像目标检测应用的参考,以及一些基础技术的支持。