【课程笔记】ECS部署深度学习实验环境,构建CNN模型实现景区地标识别

在华为云的ECS部署深度学习实验环境,构建CNN模型实现景区地标识别,体验AI识景带来的便利性。

登陆弹性云服务器 ECS
1、 查看服务器公网 IP。
图 2-8 弹性云服务器详情界面
2、 打开的 Putty 软件,在 Host Name 处输入弹性公网 IP,然后点击 Open 进行
连接。
图 2-9 Putty 打开界面
3、 忽略警告,确认连接。

在这里插入图片描述
安装 Anaconda 软件
1、 这部分为Linux命令,在输入完成后需要按回车键执行命令,在命令执行过程中请不要进行
其他操作,以免发生问题。
2、 下载Anaconda软件,输入以下命令,在Putty软件中鼠标右击可进行粘贴:
wget https://repo.anaconda.com/archive/Anaconda3-5.3.1-Linux-x86_64.sh
图 2-13 Anaconda 软件下载中界面
基于卷积神经网络实现景区精准识别  第 15 页图 2-14 Anaconda 软件下载完成界面
3、 安装Anaconda软件,输入以下命令:
bash Anaconda3-5.3.1-Linux-x86_64.sh
图 2-15 Anaconda 安装界面
4、 安装页面警告缺少bzip2,暂时不管,长按enter,跳过阅读协议,然后输入yes,继续安装
软件。

图 2-16 同意安装协议界面
5、 按 Enter 键使用默认安装位置安装。
图 2-17 确认 Anaconda 软件安装位置

6、 在安装报错之后安装 bzip2,输入以下命令,如果没有报错,请忽略本步,直接跳往下一
步:
yum install bzip2
在这里插入图片描述
安装 Jupyter Notebook 并开启远程访问
1、 退出 Python 环境,输入以下命令:
exit()

2、 安装 Jupyter Notebook,输入以下命令:
conda install jupyter notebook
3、 以下命令生成 Jupyter Notebook 配置文件:
jupyter notebook --generate-config
图 2-34 生成 Jupyter Notebook 配置文件界面
设置 Jupyter Notebook 远程登陆密码,输入以下命令进入 IPython 环境:
ipython
分别输入以下两行命令:
from notebook.auth import passwd
passwd ()
在这里插入图片描述
输入密码,注意不会有提示,然后保存 Sha1(引号内全复制,选中后右击复制),然后在
本地电脑新建一个文本文档进行保存,后续步骤会用到。
图 2-37 Sha1 生成界面
6、 输入 exit()退出 IPyhton 环境,并输入以下命令使用 vi 编辑器配置文件:
vi ~/.jupyter/jupyter_notebook_config.py
进入 vi 编辑界面后默认是指令模式,按 i 可以从指令模式切换到文本输入模式(英文输入
模式下),按 esc 可从文本输入模式回到指令模式,指令模式下输入/,后面接需要搜索的
字符串(区分大小写),按回车可完成搜索,n 可切换为下一个匹配对象。
在文件中找到以下四项进行修改并删除前方#,建议输入完整字符串进行搜索,Sha1 为前
上一步设置密码时生成的 Sha1。
c.NotebookApp.ip=’*’
c.NotebookApp.password
=u’ sha1:2cff9606d39d:7f9c0e43eeda25941bf274ed47d412a3022b6d4d’
替换为自己的 sha1,记得加上 u。
c.NotebookApp.open_browser = False
c.NotebookApp.port =8888
注 :每次修改完后均需回到指令模式重新搜索再进入文本输入模式修改,全部修改完成后
返回指令模式,英文输入状态下输入冒号:,进入末行模式,然后输入 wq,回车退出并保
存,如果文本输入错误,可在末行模式下输入 q!退出不保存,后面有操作图解。
在这里插入图片描述
上传本地资源到服务器
1、 点击页面上的 Upload 按钮,选择 img-classified.zip 文件
图 2-49 Jupyter Notebook 界面
图 2-50 Jupyter Notebook 上传文件界面
2、 再次点击蓝色 Upload 开始上传,使用同样的方法开始上传 train.csv,然后返回到网页上的
服务器页面,点击远程登陆,输入账号密码后登陆服务器
图 2-51 网页远程登录服务器界面
基于卷积神经网络实现景区精准识别 第 34 页
图 2-52 网页远程服务器控制界面
3、 点击 Input Commonds 之后出现一个输入框,我们可以在这里粘贴命令,回车之后按 Send
将输入框命令发送至 ECS 服务器中执行
图 2-53 网页远程服务器复制命令输入界面
4、 复制输入以下命令来安装解压软件,安装步骤和前面一样
yum install -y unzip zip
5、 在文件上传完成后输入 ls,查看是否可以看到刚才上传的文件
ls
基于卷积神经网络实现景区精准识别 第 35 页

6、 输入以下命令对压缩包进行解压
unzip img-classified.zip

原始数据集预处理
3.2.1 原始数据集的读取
1、 首先需要新建一个 Notebook,然后导入本次实验用到的工具,每个单元格可以独立运
行,按 Shift+Enter 运行选定单元格,import 关键字负责导入。
#import 为 python 中导入第三方包的关键字, pandas 是一个可以处理 cs
v , xls 等格式文件的包,这里的 as 表明用 pd 来代替 pandas ,代码更简洁
import pandas as pd
#requests 包可以让 python 获取网页上的数据,本次实验利用它来得到网
页图片内容
import requests
基于卷积神经网络实现景区精准识别 第 37 页
#os 负责 python 和系统的通信,可以用来创建新的文件夹
import os
2、 读取 train.csv 的文件数据,并将数据赋值给变量 content。
#python 创建变量时,无需声明变量类型, pandas 将读取到的 csv 文件内
容存储到 content 变量中
content=pd.read_csv(‘train.csv’)
3、 查看数据集描述。

查看数据集描述

content.describe()
图 3-2 数据集描述界面
4、 可以看到数据集包含 id,url,landmark_id 三个字段,分别对应图像 id、图像网络地址、
图像的类别 id,count、unique、top、freq 分别表示数据的数量,不重复的数据数量,出
现次数最多的数据、出现次数最多数据的出现次数。从而可以得出没有重复的图像,但是
图像的网络地址有缺失值,一共包含 14952 种景区类别,这个与数据集刚发布的不一致,
可能是因为数据集在不断更新,同时 train.csv 只是其中的一部分。
3.2.2 原始数据集的筛选
因为原始数据集较大,所以需要进行筛选,然后拿到筛选之后的图像网络地址将对应的图像下
载到弹性云服务器上。
1、 通过前面的分析可以知道,图像的 id 和 url 都是唯一的,而最后的 landmark_id 才是一对
多的,所以可以通过这个字段对数据集进行筛选,由于筛选之后的索引不会变化,所以如
果按行对筛选后的数据进行遍历,会出现断层导致程序运行出错,所以需要重置索引。

创建一个列表根据 landmark_id 对数据集进行筛选

arr=[‘0’,‘2’,‘3’,‘5’,‘7’,‘8’,‘11’,‘12’,‘13’,‘16’]
#isin 判断前面的元素是否在后面的列表里面,筛选后的数据集里的 landm
ark_id 都在前面的 arr 里面
content_selected=content[content[‘landmark_id’].isin(ar
r)]

筛选后的数据集还是保持了原来的索引,且不连续,我们需要重置一下

content_selected=content_selected.reset_index()
基于卷积神经网络实现景区精准识别 第 38 页
2、 查看筛选后的数据集,可以发现多了一个 index 字段,这是因为重置索引之后把旧的索引
作为一个字段进行保存,而不是直接丢弃掉。

查看数据集的前面部分,默认前 5 项

content_selected.head()
图 3-3 查看筛选后的数据集
3、 因为筛选数据集时知道 landmark_id 包含 10 种,但是不清楚一共有多少数据,所以需要查
看筛选之后数据集的数量,然后可以作为后续程序的输入。
#content_selected 中存储的元素是一个表格, shape[0] 代表表格的行
数, shape[1] 代表表格的列数
num=content_selected.shape[0]
3.3 实验数据集获取
3.3.1 下载程序的代码实现
1、 现在筛选之后的数据集有了,数据集数量也有了,本步就是编写代码,依次从数据集中拿
到图像网络地址,然后进行图像下载,这部分比较复杂,可根据注释逐步进行查看,考虑
到图像网络地址失效和国家防火墙原因,部分网络连接地址无法访问,所以对访问网络地
址部分的代码进行异常捕捉,防止因为一个网络地址无法访问导致程序停止运行。
#def 关键字用来定义函数,这部分代码不会立即执行,而是在调用函数的
时候才会执行
def download_img(num):

这部分是一个循环,得到数据集的样本数量,然后生成对应的循环次

数,逐次进行下载
for i in range(num):
#i 表示当前样本的行索引, url 为数据集图片链接对应的列索
引, at 的话根据行索引和列索引拿到当前样本对应的图片链接
img_url=content_selected.at[i,‘url’]
基于卷积神经网络实现景区精准识别 第 39 页

方便起见,我们用循环序号作为图片名字, str 把数字类型的序

号转换为字符串类型
img_name=str(i)+’.jpg’

我们获取到样本对应的 landmark_id ,并创建一个文件夹,这

样同一个文件夹下面的图片都是同一类的,且文件夹名字就是标签
folder=content_selected.at[i,‘landmark_id’]

定义图片保存路径,在 img 文件夹创建当前样本的标签文件

夹,再进行图片写入
path=‘img/’+folder+’/’

判断路径是否存在,如果文件夹还没创建,路径不存在的话,写

入文件会报错
isExists=os.path.exists(path)
if not isExists:

这部分利用 os 模块创建文件夹

os.makedirs(path)
#try 和 except 负责 python 里面的异常捕捉和处理,也就是
我们常说的报错,这里可能存在图片链接无效,打不开的问题,我们没有
办法,也不需要解决
try:

访问前面拿到的图片链接

img=requests.get(img_url)
#with 关键字可以在这部分内容完成后,自动关闭刚才开启
的资源,不用手动管理, open 则是在前面设置的路径里新建一个文件并打

with open(path+img_name,‘ab’) as f:
#write 将访问图片链接拿到的内容写入到空白文件
里,这部分完成后, with 会自动刷新并保存内容,释放资源
f.write(img.content)

如果发生错误的话,会跳转到这里,因为我们不做处理,所有只

写了 pass ,也就是过
except:
pass
基于卷积神经网络实现景区精准识别 第 40 页
2、 筛选之后的数据集可以保存到硬盘中,方便以后查看,然后所有准备工作已经完成,调用
图像下载函数,开始下载图像。

将筛选后的数据集写入 csv 文件中

content_selected.to_csv(‘data.csv’)

调用定义好的下载函数,开始下载图片

download_img(num)
3、 由于图像网络地址大多数为谷歌云,部分链接无法访问,为了保证实验正常运行,本部分数据集随实验手册打包,即2.25上传解压的img-classified.zip文件,在运行代码之后如无报错可直接进行下一步实验,无需等待。
4、 本部分源码为download_img.ipynb,随实验手册打包,建议先手动输入代码,不要直接运行源码。

发布了11 篇原创文章 · 获赞 9 · 访问量 1063

猜你喜欢

转载自blog.csdn.net/shuzip/article/details/102648776
今日推荐