深度学习 - 图像识别 - 入门回忆录

Posted Chorgy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深度学习 - 图像识别 - 入门回忆录相关的知识,希望对你有一定的参考价值。

深度学习 - 图像识别 - 入门回忆录

今年有幸参与了恩智浦智能车竞赛,AI视觉组,我负责完成深度学习实现图像识别的任务。这是我的深度学习入门之路,现在打算将一路上所有的学习经历分享出来。

学习途中从网络寻求了很多帮助,如果还能找到来源,一定会尽力找到附上原网址。

这篇文章内容较多,目前只打好了架构,近几日会持续更新。



〇、前言

关于本次竞赛的规则、需要做识别的任务场景、所采用的数据集,请查看卓老师的博文

第十六届智能汽车竞赛AI视觉组分赛区数据集发布
第十六届全国大学智能汽车竞赛竞速比赛规则





一、机器学习基础

在开始做软件之前,我通过阅读周志华教授的西瓜书大致了解了一些机器学习的基础概念。

西瓜书的前3章是公共基础。后面4~10章讲解的是不同的机器学习方法,我所涉及的是神经网络相关的知识,于是我从中选读了第5章神经网络

本文最后决定还是以操作为主,而不引入过多的数学内容,毕竟,每多一个数学表达式,读者就会减少一半。如有需要自行研读这4章,着重关注 §2 当中的数据集分割与检验方法§5 当中的感知机数学模型、误差逆传播算法

尽管我是非常享受把数学共性映射到具体学科,从而降维理解抽象的数学理论这一过程的





二、开发环境搭建

CPU 和 GPU 环境不能同时存在,建议先用CPU环境运行,熟练之后再尝试GPU环境。

1. CPU环境入门

百度搜一搜到处都是类似的言论:“CPU主要用于串行运算,而GPU则是大规模并行运算。由于深度学习中样本量巨大,参数量也很大,所以GPU的作用就是加速网络运算。”

但是为什么我们不直接避开CPU而使用GPU训练网络呢?因为逐飞没给教程啊(泪)。刚进入一个陌生的开发环境,面对一大堆拼起来就不认识的汉语单词,没有手把手的指导是非常困难的。并且,你不知道网络上到底哪个教程是真正可行、全程无bug、适用于你的显卡型号的。

CPU环境的开发就对着逐飞的教程照做,防止有人没有参加过NXP,链接放在下面,跟着无脑照就能搭建好可行的训练环境。如果链接出现问题请私信。

链接:https://pan.baidu.com/s/1NkKtPk5PvVmMlrZo5oQmnA
提取码:sdxx

对照教程 PDF 做到 1.5 即可,环境配置完毕。1.6 往下暂时不用


2. 插叙:GPU与深度学习入门

按照时序来说,我配置出GPU环境应该在学习过程的中后期,但是按照内容分类,还是插叙放在这里吧。

网上冲浪的时候见着有位前辈说,“如果你开始使用GPU训练神经网络,那么恭喜你开始入门了”。

出处有些难寻,但的确见过,以我之见来看确实有道理。GPU环境的配置难在各个环境之间的兼容性,python、CUDA、CUDNN、TensorFlow-gpu、Keras之间版本务必版本对应

python的开发以库文件为主,用户很少去追究底层代码逻辑,都是查到一个库,最多去找他的定义,查看输入返回是哪些,不会仔细阅读构造代码。

这种库文件开发优点就是非常简洁,而缺点就在于对库文件之间的兼容性要求很高。如果你的文件之间变量定义不一致(尤其是具有从属关系的文件之间),那么只能报错。


闲话少说,开始构建

诚然,我是一个学生,构建过程是在网络学习的。诸多博文讲解都不够清楚,跟着做之后或多或少都会遇到bug。

最后有幸在知乎上遇到一位大师,而且刚巧我的电脑配置竟与他大抵相仿!显卡驱动最高支持 CUDA 10.2。于是(嘿嘿嘿)我就照做即可。

原文链接:
全新电脑Keras+TensorFlow的GPU环境搭建

几点注解

  • 不建议直接上手GPU环境!

  • 查看CUDA版本方法

    电脑右下角点开NVDIA控制面板

    帮助里面打开系统信息

    点击组件查看CUDA版本

  • 我在安装python3.6.5的时候容易报错,经过测试,3.6.8是可以兼容3.6.5的。

  • 先按照知乎博文一步步安装、测试好keras环境、tensorflow-gpu环境。然后一步步跟着上文CPU环境入门中百度网盘里面的PDF文件,依次安装其他python包即可完成。

  • 建议先用CPU环境入门,等熟悉之后再配置GPU环境,更容易上手。

好的环境是成果的基石。耐下心来!仔细阅读文中分享的PDF文件、知乎博文,一定可以配置好开发环境!亲测有效!





三、逐行学习代码,熟悉开发环境

1. Pycharm环境熟悉

首先我拿到了逐飞AI的资料包,找到了 number_train_model 的文件夹如下

想当初刚拿到看到这里的时候是一脸懵逼,只能头铁一个个看里面的代码。

在文件夹下右击鼠标,如果已经成果安装了 PyCharm,可以看到 Open folder as Pycharm Project(很喜欢 Pycharm 的风格)

下面跟大家简单聊一些 pycharm 的使用。左边是 Project 栏,里面有三个部分。

第一个就是刚刚我们所在的 number_train_model 文件夹,现在变成了工程文件夹。

第二个是 External Library,也就是所谓的外部Python环境库,我们可以在右边最上面看到一个警告,No Python interpreter configured for the project,没有为项目配置Python解释器

第三个是 Scratch and Consoles,我一般是用作草稿文件。

这时候我们需要打开 Setting,位置如下:

setting下选择当前 Project,比如我的是 Project : number_train_model,下面就可以发现 Project Interpreter

从上到下依次点击齿轮,点击 add 加入环境,进入 Add Python Interpreter 界面,我的 python 是直接官网下载的,没有使用 Anaconda 配置,就直接在电脑本地文件夹找到我的 python安装路径,选中 python.exe ,一路OK即可。

Pycharm 有一个代码习惯的问题,可以看到下图中到处都是黄色下划线警告,因为此处与预设的代码习惯不符合。

之前在一个TensorFlow的讨论组里有人问过,Pycharm的这个黄色下划线怎么消除。结果群里一大堆同志都回答各种 “重装python啊、Pycharm破解问题啊、重装系统、建议换Linux” 都出来了,笑…

比如说我们把鼠标放在一个黄色下划线附近查看一下,上面写的是 E225 missing whitespace around operator,表示error 类型编号为225,等号周围缺少空格。

我们点击 More actions,可以直接点击 Ignore errors like this 忽略这个错误。

也可以点击 Edit inspection profile setting 查看所有的警告类型进入以下这个界面。不过要是看不惯全英文的操作界面,还是写代码的时候看见哪里不爽才把哪里屏蔽掉吧。

pycharm 的基本配置先到此为止。


下面开始与大家尽可能详尽地讲解代码,带有注释的代码打包在这里

百度网盘链接


2. 数据集准备

find_image.py 文件用于制备训练数据集。采用了 下载cifar-100 / cifar-10 网络爬虫 两种途径获取数据集。

cifar 是一份经典的数据集,包括 常见的动物、水果 、汽车、飞机、轮船 等等的图片,但是很不幸,本次任务中需要对一些特殊类别进行识别,比如 猪、榴莲 等,cifar数据集里找不到,只能通过网络爬虫来寻找。

或是等逐飞发布竞赛专用数据集哈哈哈哈,这里把逐飞整理好的数据集发给大家:
链接:https://pan.baidu.com/s/1-cFTV0KRig5QYO0ApG8pGg
提取码:data

百度图片网站上爬取图片用于训练。爬虫的原理我们就不多说,只关注如何使用、根据要求修改这份代码。

首先可以看到这里定义了几个字典、变量,可以看到明显的 https://image.baidu.com ,从百度图片网站上爬取的图片

然后下面的代码可以看到有 cattle apple cat dog horse 五个分块,这里就是利用 keras 的库函数读取 cifar 数据集的操作了。

首先我们回到这份代码的最顶端,可以看到这份代码导入的所有外部文件,这里就有 from keras.datasets import cifar10, cifar100

这里我们下载一下 Keras中文文档

链接:https://pan.baidu.com/s/1TjHb4V9Gy_Z7LfeQvb11mg
提取码:kras

百度也能搜到页面版,但版式不是很舒服:

在文档里搜索一下 dataset

可以看到 cifar10 是一个 keras 支持的数据库,可以调用 .load_data() 方法读取数据,返回值为 训练集 (X_train, y_train) 测试集 (X_test, y_test) 两个Tuple

cattle 的提取为例:

这里涉及到了 np ,同样在代码的顶部我们可以看到 import numpy as np,引入 numpy库 并重命名为 np

用到了 np.where 以及 np.ravel 两种numpy函数。这里教给大家如何快速掌握 python函数 的功能信息。

在pycharm中,点击一次 变量 或者 函数名 ,然后按快捷键 Crtl +
B , 实现 go to definition 的功能。


3. 模型训练





四、学习Keras构建网络,尝试各种模型





五、TensorBoard 可视化,更可靠





六、克服过拟合的第一步 实现过拟合





七、与导师闲言小叙,忽有灵光





八、发现神器,但功力不够,反造成内伤





九、老老实实调参师,挨个尝试架构





十、发现妙解!量化装载!超内存!





十一、最后的灵丹





十二、在线预测百分百,量化之后二百五?





十三、量化之后表现差?在线运行试试





十四、甲方又来催了…租个服务器加急





十五、寻了千百遍,原因竟不在于神经网络太傻





十六、尾声





以上是关于深度学习 - 图像识别 - 入门回忆录的主要内容,如果未能解决你的问题,请参考以下文章

Matlab基于MNIST数据集的图像识别(深度学习入门卷积神经网络附完整学习资料)

Matlab基于MNIST数据集的图像识别(深度学习入门卷积神经网络附完整学习资料)

keras入门实战:手写数字识别

怎么快速入门深度学习

[编辑] 深度学习与图像识别

tensorflow入门——3解决问题——4让我们开始吧