地理信息系统实习报告
一、视频处理和数据清洗
1.1 处理已分类的数据
使用语言:Python。
读取每一种情感对应的.csv 文件,获取到图片文件名以及对应分数,再根据图片的文件名,使用PIL库读取图片并将图片转为numpy矩阵格式,在读取文件时将每一种情感的文件以8:2的比例分为训练集和测试集,最后通过调用pikle库将得到的图片的矩阵和分数以二进制的形式写到文件中。
1.2 处理视频数据
使用语言:Python。
先读取和视频文件同级目录的文本文件,获取视频开始录制时间,再读取CSV文件,获取每一次采集的时间以及点位数据,用采集时间和开始时间转为时间戳之后相减,得到间隔时间。
再使用 OpenCv 库根据间隔时间来截取视频对应的每一帧,由于 OpenCv 读取图片的格式是BGR,所以需要转为RGB格式之后,再将图片保存下来。
随后使用pickle库将图片以及对应的经纬度写入到文件中。
二、神经网络搭建
与老师论文不同[1],本次实习选择精度更加高的神经网络解决问题。实习选择了深度学习的框架pytorch,因为pytorch入门比较简单,对新手比较友好,比较适合解决这次实习的问题。
2.1 数据处理
原来提供的数据是300400,为了提高网络的鲁棒性,需要做一定的处理。pytorch在训练时,有一些图像处理函数,专门针对于PIL的图像文件进行处理,使用起来比较方便。本次实习采取的方法为训练时将图片随机切割224224大小,并且随机将图片进行旋转,最终再作为输入。
2.2 网络搭建
使用了 pytorch 网络当中的迁移学习来编写神经网络,使用 pytorch 框架已经预训练好的模型作为特征提取器,这样可以减少训练的时间并且提高特征提取的准确度。
2.2.1 Vgg网络搭建
选择vgg模型是因为vgg模型是比较有名的神经网络模型,vgg能够对图形数据进行很好的特征提取。本次实习使用了预训练好的vgg16模型,使用了模型前面的特征提取层,去除了后面的三层全连接层,改为了两层全连接层,减小模型的大小。然后将全连接层的最后一层的输出改为1,其中参数设置为可以调整,允许模型参数的进行微调。
2.2.2 Resnet网络搭建
ResNet 网络是为了解决这种退化问题而诞生的神经网络,也是比较有名的网络模型之一,本次实习也尝试使用resnet网络来解决实习当中的问题,使用的是预训练好的resnet18 模型,使用了模型前面的特征提取层,将最后一层fc 层改为了输出为改为 1,其中模型设置为可以调整,允许模型的参数进行微调。
2.3 最终结果
最终将两个模型的六个感情训练时的 loss 曲线显示出来,最终结果图如图 1、图 2 所示:
图 1:vgg训练后的结果图,其中红色代表训练时的loss值,蓝色代表测试时的loss 值,图从左到右,从上到下依次分别代表为beatiful、boring、depressing、lively、 safety、wealth。
图 2:resnet训练后的结果图,其中红色代表训练时的loss值,蓝色代表测试时的loss 值,图从左到右,从上到下依次分别代表为beatiful、boring、depressing、lively、 safety、wealth。
三、可视化
3.1 AntvL7 地图可视化
这一部分的可视化成果主要是可以选择点击右上角选择图层,以及通过点击图中的要素展示要素的场景信息以及六维数据,柱状高低和颜色深浅表示得分高低,具体样式可以参考图3。
图 3:可视化成功展示图,左部为l7制作的地图,右下角左侧为被点击的图层要素所在点的场景,右下角右侧为该点的六维数据制作的玫瑰图。
3.2 Antv G2 时序图展示
之所以选择时序图,是因为给的数据是一种视频数据,有很明显的时间连续性,各个数据之间应该是有一种关联的,通过查看一段时间内的数据的变化,再与视频数据相结合,更方便我们得出有效的结论。
3.2.1 流动时序图
流动时序图的目的是可以更直观的查看一段区域内的情感的变化的趋势,因为时序图变化时,同时下方的图片会随着时序图变化,这样可以结合视频查看对应情感分数变化趋势,流动时序图的样式可以参考图4。
图 4:流动的时序图,流动时图1中右下的图片也会一起流动。
带缩略轴的时序图
带缩略轴的时序图的目的是可以查看用户任意一段时间内的数据,可以让用户自由选择想要查看的时段的数据变化趋势,带缩略轴的时序图的样式可以参考图5。
图 5:带缩略轴的时序图,可以通过滑动下方的缩略轴,查看用户任意一段时间内的数据。
3.3 数据处理
我们对数据做了简单的处理,流动时序图和主地图中,将数据进行了将周围连续三个数据取平均值,缩略轴时序图中做了隔三个取一个值。这样可以避免直接将数据暴露给用户,也可以提高可视化的效率。
四、采集视频和点位数据APP
使用语言:Java。
开发软件:Android Studio。
使用MediaRecorder API进行录像,再使用高德API获取点位数据。
启动APP时就开始定位,当点击录制按钮时,先记录开始时间,然后每隔1秒采集一次经纬度和时间,判断是否处于录制状态,如果是就记录下经纬度和时间,否则不记录。当点击停止录制时,将采集到的数据存放到CSV文件中。
图6:采集视频和点位数据的安卓APP,可以录制视频,采集经纬度和时间信息,并保存到
本地 。