Python 3反爬虫原理与绕过实战
上QQ阅读APP看书,第一时间看更新

1.5 深度学习环境配置

本书将介绍深度学习在验证码校验方面的应用并动手实现几个案例。深度学习领域的库或框架非常多,有PyTorch、Caffe、TensorFlow、Darknet等,我们可以利用它们快速实现需求。

下面我们就来了解深度学习所需的环境配置。

1.5.1 NVIDIA显卡驱动安装

GPU(Graphics Processing Unit,图形处理器)是显卡的核心组成部分,能够执行复杂的计算,所以成为进行深度学习的首选处理器。深度学习的计算量非常大,以一张像素大小为200×40的彩色图片为例,它的输入数据量为200×40×3=24000,其中3代表RGB通道数量。假如训练样本的数量为20000,那么计算量就是480000000(4.8亿)。面对如此大的计算量,人们在深度学习的过程中通常会选择计算能力更强的GPU,而不是CPU。

GPU的计算能力称为算力,可以在NVIDIA官网查看(详见https://developer.nvidia.com/cuda-gpus)。NVIDIA GeForce系列部分产品的算力,如图1-46所示。

图1-46 NVIDIA GeForce系列部分产品的算力

在驱动安装开始前,你需要确认你的计算机搭载了一张GPU算力超过3.5的独立显卡。如果没有,那么可以跳过1.5.1节、1.5.2节和1.5.3节的介绍。

首先,我们需要将显卡驱动加入PPA源PPA是Personal Package Archives的缩写,表示个人软件包文档。并且更新软件列表,相关命令如下:

$ sudo add-apt-repository ppa:graphics-drivers
$ sudo apt-get update

然后使用命令查找NVIDIA显卡驱动的最新版本号:

$ sudo apt-cache search nvidia

此时控制台将输出如下内容:

nvidia-dkms-410 - NVIDIA DKMS package
nvidia-driver-410 - NVIDIA driver metapackage
nvidia-headless-410 - NVIDIA headless metapackage
nvidia-headless-no-dkms-410 - NVIDIA headless metapackage - no DKMS
nvidia-kernel-common-410 - Shared files used with the kernel module
nvidia-kernel-source-410 - NVIDIA kernel source package
nvidia-utils-410 - NVIDIA driver support binaries
xserver-xorg-video-nvidia-410 - NVIDIA binary Xorg driver
...

接着使用如下命令查看系统推荐的显卡驱动:

$ ubuntu-drivers devices

此时控制台将输出如下内容:

== /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0 ==
modalias : pci:v000010DEd00001D01sv00007377sd00000000bc03sc00i00
vendor    : NVIDIA Corporation
model     : GP108 [GeForce GT 1030]
driver    : nvidia-driver-418 - third-party free
driver    : nvidia-driver-415 - third-party free
driver    : nvidia-driver-410 - third-party free
driver    : nvidia-driver-396 - third-party free
driver    : nvidia-driver-430 - third-party free recommended
driver    : nvidia-driver-390 - distro non-free
driver    : xserver-xorg-video-nouveau - distro free builtin

显卡驱动版本与后续安装的CUDA版本需要对应,NVIDIA官网给出的对照表如图1-47所示。

图1-47 CUDA与显卡驱动的版本对照

当前CUDA版本号为10.1(详见https://developer.nvidia.com/cuda-toolkit),这里我们需要选择版本号大于等于418.39的显卡驱动。打开系统中的“软件和更新”,切换到“附加驱动”选项卡,并在驱动列表中选择合适的显卡驱动,如图1-48所示。

图1-48 “附加驱动”选项卡

然后点击右下角的“应用更改”按钮,此时系统会根据我们的选择安装对应的驱动,待驱动安装完毕后,重新启动计算机即可。

重启计算机后,在应用列表中找到“设置”选项,并选择“详细信息”选项,点击“About”,可以看到如图1-49所示的硬件信息。

图1-49 硬件信息

如果“图形”对应的信息与计算机中的GPU信息一致,则表示显卡驱动安装成功。

1.5.2 CUDA Toolkit 的安装

CUDA Toolkit为创建高性能GPU加速应用程序提供了开发环境。

相关链接

❑ NVIDIA 开发者中心:https://developer.nvidia.com

❑ CUDA Toolkit 下载地址:https://developer.nvidia.com/cuda-downloads

打开CUDA Toolkit下载地址并根据系统选择下载的版本。这里以Ubuntu 18.04为例,下载选项的选择如图1-50所示。

图1-50 CUDA Toolkit下载页面

然后点击Download按钮下载CUDA Toolokit的安装文件。文件下载完成后,使用如下命令运行安装文件:

$ sudo sh cuda_10.1.105_418.39_linux.run

在安装过程中需要做一些选择,例如是否接受协议,命令如下:

Do you accept the above EULA? (accept/decline/quit):

此时输入accept选项代表同意协议。接着需要选择如图1-51所示的安装内容。

图1-51 选择安装内容

按下回车键可以选择或取消选择。由于之前安装过显卡驱动,所以这里不选择驱动选项,其他选项不变。接着选择下方的Install选项即可进入安装流程。安装完毕后,还需要在环境变量中配置CUDA。打开环境变量配置文件的命令如下:

$ sudo nano ~/.bashrc

然后将以下内容写入配置文件末尾:

export PATH=/usr/local/cuda-10.1/bin${PATH:+:${PATH}}
export
LD_LIBRARY_PATH=/usr/local/cuda-10.1/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

其中cuda-10.1为实际安装版本。如果计算机安装的是其他版本,则需要修改路径。

保存配置文件后,使用如下命令启用新的环境变量:

$ source ~/.bashrc

然后执行nvidia-smi命令就可以看到如图1-52所示的显卡信息。如果右上角显示的CUDA Version值与刚才安装的版本号相同,代表CUDA Toolkit安装成功。

图1-52 显卡相关信息

1.5.3 cuDNN 的安装

cuDNN(深度神经网络库)用于给深度神经网络的GPU加速,让深度学习研究人员和框架开发人员专注于训练和开发,而不是将时间花在GPU性能调优上。cuDNN加速被广泛应用在深度学习领域,支持它的框架有Caffe、Caffe2、Chainer、Keras、MATLAB、MXNet、TensorFlow和PyTorch等。

相关链接

在下载cuDNN之前,我们需要在NVIDIA开发者平台进行注册,完成注册并登录后才能访问下载页面。下载时必须根据CUDA Toolkit版本下载cuDNN压缩包,本书使用的CUDA Toolkit的版本号为10.1,对应的cuDNN版本号为v7.5.1。cuDNN下载页面如图1-53所示。

图1-53 cuDNN下载页面

下载时选择cuDNN Library for Linux即可。下载完成后,根据cuDNN安装说明进行安装。首先使用如下命令解压cuDNN压缩包:

$ tar -xzvf cudnn-10.1-linux-x64-v7.5.1.10.tgz

然后将以下文件复制到CUDA Toolkit目录中,并更改文件权限,对应命令如下:

$ sudo cp cuda/include/cudnn.h /usr/local/cuda/include
$ sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
$ sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*

此时cuDNN安装完毕。

接着我们使用如下命令验证cuDNN是否安装成功:

$ nvcc -V

如果此时终端输出如下内容:

nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2019 NVIDIA Corporation
Built on Fri_Feb__8_19:08:17_PST_2019
Cuda compilation tools, release 10.1, V10.1.105

就说明cuDNN已成功安装。

1.5.4 深度学习库 PyTorch

PyTorch是使用GPU和CPU优化的深度学习张量库,我们将会在本书中使用它来实现验证码字符识别。

相关链接

❑ PyTorch 官网:https://pytorch.org/

❑ PyTorch 安装指南:https://pytorch.org/get-started/locally

打开PyTorch安装指南对应的网址,根据系统和环境选择对应的PyTorch版本。如果没有显卡驱动和CUDA Toolkit,在CUDA一栏中选择None。本书所用的版本如图1-54所示。

图1-54 PyTorch版本

根据要求选择后,PyTorch会给出对应的安装命令。图1-54中给出的命令如下:

$ pip3 install
https://download.pytorch.org/whl/cu100/torch-1.1.0-cp37-cp37m-linux_x86_64.whl
$ pip3 install torchvision

执行该命令,就可以安装PyTorch。

对应的库安装完毕后,可以使用Python代码验证PyTorch是否安装成功。Python代码及输出如下:

>>> import torch
>>> torch.cuda.is_available()
True

要注意的是,输出结果为True或False仅代表GPU是否可用,如无报错,均说明PyTorch库已成功安装。

1.5.5 深度学习框架 Darknet

Darknet是一个用C语言编写的开源神经网络框架,易于安装且运行速度非常快,同时支持CPU和GPU计算。在本书中,我们将使用它来实现验证码目标检测。

相关链接

❑ Darknet 官网:https://pjreddie.com/darknet/

❑ Darknet GitHub:https://github.com/pjreddie/darknet

首先从Darknet的GitHub仓库克隆Darknet项目,克隆命令如下:

$ git clone https://github.com/pjreddie/darknet.git

克隆完成后,进入Darkent项目目录darknet,并打开makefile文件,将第一行的GPU=0修改为GPU=1。这里更改GPU选项是为了让Darknet在训练时使用GPU进行加速计算。接着使用make命令编译安装:

$ make

在编译过程中,终端会输出如下信息:

mkdir -p obj
gcc -I/usr/local/cuda/include/   -Wall -Wfatal-errors   -Ofast...
gcc -I/usr/local/cuda/include/   -Wall -Wfatal-errors   -Ofast...
gcc -I/usr/local/cuda/include/   -Wall -Wfatal-errors   -Ofast...
...
gcc -I/usr/local/cuda/include/   -Wall -Wfatal-errors   -Ofast -lm...

如果没有出现报错信息,就代表顺利完成编译。接着我们可以使用如下命令验证Darknet是否安装成功:

$ ./darknet

如果终端输出如下内容:

usage: ./darknet <function>

那么说明Darknet已成功安装。

1.5.6 图片标注工具 LabelImg

LabelImg是一个用Python语言编写的图像标注工具,其图像和标注结果可以用于对目标检测模型进行训练。标注信息如图1-55所示,标注结果会以PASCAL VOC格式保存为XML文件。

图1-55 标注信息

相关链接

LabelImg的GitHub 仓库地址:https://github.com/tzutalin/labelImg

由于LabelImg是基于Qt 5实现的图形界面,所以我们要先安装它,命令如下:

$ sudo apt-get install pyqt5-dev-tools

然后使用如下命令将LabelImg项目克隆到本地:

$ git clone https://github.com/tzutalin/labelImg

接着进入labelImg项目,并安装依赖:

$ cd labelImg
$ pip install -r requirements/requirements-linux-python3.txt

最后就可以使用如下命令编译labelImg了:

$ make qt5py3

此时如果终端输出如下内容:

pyrcc5 -o resources.py resources.qrc

就说明编译成功。

编译成功后,我们就可以使用LabelImg了。使用如下命令启动LabelImg:

$ python labelImg.py

此时会弹出如图1-56所示的界面,这说明LabelImg已安装成功。

图1-56 LabelImg界面