基于深度学习的激光束识别(预测)
基于深度学习的激光束识别(预测)由于预测结果主要是激光上下定点的坐标值,所以在这里我将预测结果表示的两个定点用直线连起来就模拟出预测的激光束。先将原来的视屏拆成了一张一张的图片,然后对一张一张的图片进行预测,最后再把每张图片连起来拼成处理好的视屏保存起来。具体实现代码如下:12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394def predict_video(video_path, result_video_path): ''' 功能:将预测结果转换成视频并保存起来 参数: video_path:需要处理的原始视频路径 result_video_path:处理后的视屏路径 ''' batch_size = 1 # 初始化文 ...
基于深度学习的激光束识别(训练)
基于深度学习的激光束识别(训练)当我们完成了数据的准备工作后,接下来就是要训练了。训练之前,首先要设计好训练的网络,然后设计合适的损失函数,最后就是开始训练了。
网络设计网络设计目前还没有啥可以依据的理论,大部分全靠经验和不断尝试来设计网络。在这里,我取输入的长宽都是1000的主要目的是为了后面进行归一化的时候能够整除,这样就减少了截断误差。网络的层数也是从小到大逐渐尝试慢慢得出最好的结果。然后卷积盒的大小我是从大到小来取的,个人感觉这样能够从大到小取到特征值。网络设计的代码如下:1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950import torchimport torch.nn as nnclass net(nn.Module): def __init__(self): super(net, self).__init__() self.Conv_layers1 = nn.Sequential( nn.Conv2d(3, 128, 10, 2 ...
基于深度学习的激光束识别(数据)
基于深度学习的激光束识别(数据)说明在深度学习的项目中,可以说数据是十分重要的。因为如果数据有错误或者数据不合适的话,那后面所设计的网络和所调节的参数可能都要重新更改过,这样就会严重影响项目完成的效率。在这里数据主要分为两部分:一是数据准备,二是在pytorch中进行数据加载。
数据准备数据来源主要是导师从现场拍摄的现场视频,这应该是最原始的数据了。以下为最原始的MP4数据:首先我们做的是用OpenCV将视屏拆成一帧一帧的图片,具体代码如下:1234567891011121314151617181920212223242526272829303132333435363738394041424344import cv2import os# 要提取视频的文件名,隐藏后缀source_file_name = 'laser'# 在这里把后缀接上video_path = os.path.join("video/", source_file_name + '.mp4')# 提取视频的频率,每1帧提取一个frame_frequency = ...
基于深度学习的激光束识别(绪论)
基于深度学习的激光束识别(绪论)说明这其实是导师安排的一个小项目。为了解决煤矿箕斗倒煤倒不完全无法实时报警的问题,通过实时识别激光束的长短来判断箕斗有没有把煤倒完全。老师们在现场采集了场地的视频,然后通过对视频里的图片用神经网络进行训练从而得出网络参数,最后就能通过实时获取的图片预测出激光束具体的长度和位置。在这里只是讲述了能够把激光束识别出来并与视屏进行合成的大概的效果的实现,因为优化是个繁琐,复杂和漫长的过程,在这里也不一一赘述。在这个项目中我们使用了OpenCV来进行前期和后期的视屏图像处理,同时也使用pytorch框架来进行网络的搭建、训练和预测。
实现的内容
基于深度学习的激光束识别(数据)
基于深度学习的激光束识别(训练)
基于深度学习的激光束识别(预测)
手写数字识别源码分析
说明 手写数字识别是作为学习神经网络和深度学习最基础的实践项目。这篇博文里的代码均来自《神经网络与深度学习》一书。在network.py中虽然只有短短的七十多行代码,但代码压缩紧密,看起来比较费劲。在刚开始学习神经网络的时候理解了代码,但过了一个学期回过头再来看的时候发现还得重新理一遍。于是将其源码写上自己的注释和理解以便于以后能够快速回顾和后面学习者能够更轻松学习此源码。 此注释代码为network1中的最基础的神经网络,采用了极少的优化步骤。在代码注释中我比较喜欢假设一组最简单的数据代入其中来方便理解其中复杂的维度转换和矩阵点乘的运算。在此代码中,假设有三层网络,每层的神经元个数分别为[2,3,1],训练集和测试集数据都为10组,每5组为一批,以此假设为注释来理解代码。
源码解析123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737 ...
神经网络基础1
神经网络基础1关于iPython笔记本
iPython Notebook(是jupyter notebook的前称)是嵌入在网页中的交互式编码环境。运行iPython笔记本的方法为在终端(Mac版)输入命令:1jupyter notebookJupyter notebook的默认端口号为8888,因此在浏览器中输入localhost:8888就能访问。
使用numpy构建基本函数
sigmoid function和np.exp()sigmoid函数是激活函数的一种,其表达式为:$sigmoid(x) = \frac{1}{1+e^{-x}}$在这里主要对比了np.exp()和math.exp()之间的差别,其目的是为了说明math.exp()主要对单个的数值进行运算,而np.exp()则是对矩阵进行相关的运算。
Sigmoid gradientsigmoid函数梯度计算公式为:sigmoid\_derivative(x) = \sigma'(x) = \sigma(x) (1 - \sigma(x)),求梯度的目的主要是要知道曲线在某个方向倾斜程度。在这里将s设为sigmoid(x), ...
机器学习策略
机器学习策略机器学习策略:在优化深度学习系统时,通过一些分析机器学习问题的方法来制定一些策略,在优化过程中能够朝着有希望的过程中标前进。
正交化
正交化:如果两个方向成90o夹角,那么这两个方向正交。正交化其实就是把要解决的问题分成不同并互不影响的维度来解决。
举例:如果要调节一个视屏屏幕的大小,如果有一个按钮能同时调节屏幕的长和宽。那么这样在调节长的时候宽在变,在调节宽的时候长在变,这样就很难把屏幕调到目标大小。如果我们把一个按钮分成长和宽两个调节按钮,因为这两个按钮分别调节不同的维度,在调节长的时候宽不变,在调节宽的时候长不变,这样可以说这两个按钮是正交化了的,那么这样你就能够更准确地调节长和宽了。
单一数字评估指标
个人理解:用一个数值化的标准来评估训练结果。
查准率(P):在你的分类器标记为猫的例子中,有多少真的是猫。(假设有120张图片,分类器A说有100张图片是猫,事实真的是猫的只有95张图片,那么分类器A的查准率为95%)
查全率(R):对于所有真猫的图片,你的分类器正确识别出了多少百分比。(假设有100张图片全是真的猫,然后分类器A却说只有90张是真的猫,那么分类器A的 ...
Mac常用快捷键
cmd+C:拷贝cmd+V:粘贴cmd+W:关闭窗口cmd+Q:退出程序cmd+I:显示文件/文件夹属性cmd+Backspace:删除cmd+shift+3:捕获整个屏幕cmd+shift+4:捕获选择的区域cmd+shift+4+space:捕获某个应用程序的窗口cmd+F:在应用程序中搜索cmd+Space:用Spotlight进行桌面搜索
Hexo博客的安装教程
说明
博客:正式名称为网络日记,是使用特定的软件,在网络上出版、发表和张贴个人文章的人,或者是一种通常由个人管理、不定期张贴新的文章的网站。 由于最近看了比较多的书和学习视屏后发现很多知识容易遗忘,并且很多技术上的难点当时想通了但是之后就很容易忘记。于是想着建个个人的博客站点来记录平时学到的知识和解决的难题并且也有助于技术的分享。 本教程主要讲述Hexo博客的安装,使用的操作系统为macOS,其他系统也是大同小异。此教程中的博客是部署到GitHub中,请先安装并且配置好GitHub。
安装过程
先下载node.js,点击可进入下载网址。官网界面如下:点击如图所示的永久版本:下载完成后对其进行安装。安装好后打开终端,输入如下命令进入root目录:
1sudo su
输入如下命令测试nodejs有没有安装成功:1npm -v如果显示了版本好则说明nodejs安装成功。本来是借助npm包管理器来安装,但是国内镜像速度比较慢,先输入如下命令安装淘宝镜像:1npm install -g cnpm --registry=https ...