函数图像

马里奥AI实现方式探索 ——神经网络+增强学习

元气小坏坏 提交于 2020-02-28 08:44:28
目录 马里奥AI实现方式探索 ——神经网络+增强学习 神经网络 M-P模型 早期神经网络 深度神经网络 总结 增强学习 马尔可夫决策过程(MDP) 基于NEAT算法的马里奥AI实现 基于Deep Reinforcement Learning的马里奥AI实现 总结 马里奥AI实现方式探索 ——神经网络+增强学习 儿时我们都曾有过一个经典游戏的体验,就是马里奥(顶蘑菇^v^),这次里约奥运会闭幕式,日本作为2020年东京奥运会的东道主,安倍最后也已经典的马里奥形象出现。平时我们都是人来玩马里奥游戏,能否可以让马里奥智能的自己闯关个呢?OK,利用人工智能的相关算法来进行自动化通关一直是一个热门的话题,最近最火的相关东东就是传说中的alphaGo啦。而在游戏的自动化测试当中,这种算法也是非常实用的,可以大量的减少测试人力成本。 首先,对于实现马里奥AI当中涉及到的神经网络和增强学习的相关概念进行整理,之后对智能通关的两种方式进行阐述。(本人才疏学浅,在神经网络和增强学习方面基本门外汉,如有任何纰漏,还请大神指出,我会第一时间改正。) 神经网络 像飞机的灵感来源于鸟类,雷达的灵感来源于蝙蝠,红外线的灵盖来源于蛇,而本文要讨论的神经网络灵感来源于我们自己,人类大脑的神经元结构。从神经元结构被提出,到时下火热的无以复加的深度神经网络,发展过程也可为一波三折。我们按照时间的顺序

通俗易懂的理解卷积

余生长醉 提交于 2020-02-26 14:54:58
教科书上一般定义函数 ​的卷积如下: 连续形式: ​​离散形式:​ 并且也解释了,先对g函数进行翻转,相当于在数轴上把g函数从右边褶到左边去,也就是卷积的“卷”的由来。 然后再把g函数平移到n,在这个位置对两个函数的对应点相乘,然后相加,这个过程是卷积的“积”的过程。 这篇文章主要想解释两个问题: 卷积这个名词是怎么解释?“卷”是什么意思?“积”又是什么意思? 卷积背后的意义是什么,该如何解释? ## 考虑的应用场景 为了更好地理解这些问题,我们先给出两个典型的应用场景: 信号分析 一个输入信号f(t),经过一个线性系统(其特征可以用单位冲击响应函数g(t)描述)以后,输出信号应该是什么?实际上通过卷积运算就可以得到输出信号。 图像处理 输入一幅图像f(x,y),经过特定设计的卷积核g(x,y)进行卷积处理以后,输出图像将会得到模糊,边缘强化等各种效果。 对卷积的理解 对卷积这个名词的理解: 所谓两个函数的卷积,本质上就是先将一个函数翻转,然后进行滑动叠加。 在连续情况下,叠加指的是对两个函数的乘积求积分,在离散情况下就是加权求和,为简单起见就统一称为叠加。 整体看来是这么个过程: 翻转——>滑动——>叠加——>滑动——>叠加——>滑动——>叠加…多次滑动得到的一系列叠加值,构成了卷积函数。 卷积的“卷”,指的的函数的翻转,从 g(t) 变成 g(-t) 的这个过程;同时,“卷

《动手学深度学习》Task09:目标检测基础+图像风格迁移+图像分类案例1

前提是你 提交于 2020-02-26 00:26:02
1 目标检测基础 1.1 目标检测和边界框(9.3) % matplotlib inline from PIL import Image import sys sys . path . append ( '/home/kesci/input/' ) import d2lzh1981 as d2l # 展示用于目标检测的图 d2l . set_figsize ( ) img = Image . open ( '/home/kesci/input/img2083/img/catdog.jpg' ) d2l . plt . imshow ( img ) ; # 加分号只显示图 1.1.1 边界框 # bbox是bounding box的缩写 dog_bbox , cat_bbox = [ 60 , 45 , 378 , 516 ] , [ 400 , 112 , 655 , 493 ] def bbox_to_rect ( bbox , color ) : # 本函数已保存在d2lzh_pytorch中方便以后使用 # 将边界框(左上x, 左上y, 右下x, 右下y)格式转换成matplotlib格式: # ((左上x, 左上y), 宽, 高) return d2l . plt . Rectangle ( xy = ( bbox [ 0 ] , bbox [ 1 ] ) , width

动手学深度学习PyTorch-打卡3

两盒软妹~` 提交于 2020-02-24 23:02:36
一、数据增强 大规模数据集是成功应用深度神经网络的前提。图像增广(image augmentation)技术通过对训练图像做一系列随机改变,来产生相似但又不同的训练样本,从而扩大训练数据集的规模。图像增广的另一种解释是,随机改变训练样本可以降低模型对某些属性的依赖,从而提高模型的泛化能力。例如,我们可以对图像进行不同方式的裁剪,使感兴趣的物体出现在不同位置,从而减轻模型对物体出现位置的依赖性。我们也可以调整亮度、色彩等因素来降低模型对色彩的敏感度。可以说,在当年AlexNet的成功中,图像增广技术功不可没。 常用的图像增广方法 翻转和裁剪 左右翻转图像通常不改变物体的类别。它是最早也是最广泛使用的一种图像增广方法。下面我们通过torchvision.transforms模块创建RandomHorizontalFlip实例来实现一半概率的图像水平(左右)翻转。 apply ( img , torchvision . transforms . RandomHorizontalFlip ( ) ) 上下翻转不如左右翻转通用。但是至少对于样例图像,上下翻转不会造成识别障碍。下面我们创建RandomVerticalFlip实例来实现一半概率的图像垂直(上下)翻转。 apply ( img , torchvision . transforms . RandomVerticalFlip ( )

在OpenCV里使用泛洪算法函数floodFill

雨燕双飞 提交于 2020-02-24 06:57:52
泛洪算法--Flood Fill,也称为种子填充--Seed Fill算法。用于确定连接到多维数组中给定节点的区域。最直接的一个应用就是「颜色填充」,就是 Windows 绘画本中那个小油漆桶的标志,可以把一块被圈起来的区域全部染色。如下图: 可以看到,当你在右边的连通区域里,使用填充功能点击一下,就变成绿色了,它是以黑色边界为限制。在OpenCV里提供了相同功能的函数,它的定义如下: 本函数实现给连通的区域填充指定的颜色。 image:输入图像,可以是一通道或者是三通道表示的图像。 mask:该版本特有的掩膜。 单通道8位的图像。在长和宽上都比原图像image多2个像素点。另外,当flag为FLOORFIL 来源: CSDN 作者: caimouse 链接: https://blog.csdn.net/caimouse/article/details/104457500

opencv 2 computer vision application programming第二章翻译

醉酒当歌 提交于 2020-02-18 08:27:46
第二章 操作像素 在本章,我们会讲述: 处理像素值 用指针扫描图像 用迭代器扫描图像 写高效的图像扫描循环 用相邻的方法扫描图像 展示简单的图像计算 定义感兴趣的区域 【概述】 为了建立计算机图像应用,你必须能够接触图像内容,并且最终修改或者创建图像。这一章中会教你如何操作图像元素,比如像素。你会学 习到如何扫描一幅图像并处理每个像素点。你也会学习到如何高效地做,因为就算是适当的维度的图像也会包含成千上万的像素的。 基本上将,一个图像时一个数值对应的矩阵。这就是OpenCV2用cv::Mat处理图像的原因了。矩阵中的每一个元素代表一个像素。对于一个灰 度图像(黑白图像),像素值是8位的无符号型值(也就是非负数。。),相应地,0代表黑色而255代表白色。对于彩色图像,每个像素的三 个这样的值代表着我们常常说的三原色(红,绿,蓝)。此时一个矩阵元素由三个值生成。 正如前面所讲,OpenCV也允许你用不同类型的像素值创建图像,比如CV_8U或者浮点值CV_32F。这些对于存储很有用的,例如在一些图像处理 过程中的起到媒介作用的图像。大多数操作可以被应用到任何类型的矩阵上,其他的则是需要特定的类型,或者只能和给定数量的通道数量 起作用。所以说,为了避免在编程中犯常见错,对于一个函数或者方法的前提的理解是很重要的。 整个这一章节,我们用如下的一张图片作为输入图片。 【处理像素值】

卷积神经网络之图像

拈花ヽ惹草 提交于 2020-02-18 07:21:34
**今天,我们来正式讲计算机视觉里面一个非常非常广泛的网络,叫做 卷积神经网络 ,可以说卷积神经网络是现在计算机视觉的一个核心的概念,再讲卷积神经网络用于图片处理之前, 首先我们来看一下图片是怎么表示的? 我们现在来看一个Minist的图片, 我们之前已经接触过了,他是一个28行乘以28列的一个这样的数据,我们用一个矩阵来表示这个矩阵的每一个元素,要么是零,要么是一。然后这个矩阵的每一个元素代表了当前这个像素点的一个数值,因为当前的minist他是一个黑白图片,因此我们只使用了一张这样的值来表达。每一张表的这个点表达了这个图片的灰度值,他是从0到255的这样一个数值,我们也可以把它变换到一个0到1的范围之内,就比如说,0代表是全白,1代表的是全黑,因此他就变成了一个0到1的,这样的浮点数数组,我们在做Deep Learning的时候,一般的是使用0到1的这个范围,但是数据存储的时候,他可能会存储到0-255,因此我们把它加载进来的时候会把它除以一个255,这样的分数会使得它的范围变到0到1的这个区间。 自然界更常见的是彩色的图片对于彩色的图片,我们如果忽略他的α通道的话,那就是一个rgb的数值,因此,我们使用三张表了存储,每一张表存储了这张图片的RGB三个通道的每个数值,每个数值也是0到255或者是0到1以后我们讲的图片都是归一化成0到1的这个区间来看, 在表达一张彩色图片的时候

Opencv中的阈值函数

匆匆过客 提交于 2020-02-18 07:16:30
OpenCV基础——threshold函数的使用   图像的二值化就是将图像上的像素点的灰度值设置为0或255,这样将使整个图像呈现出明显的黑白效果。    参数原型    参数说明   src:源图像,可以为8位的灰度图,也可以为32位的彩色图像。(两者有区别)   dst:输出图像   thresh:阈值   maxval:dst图像中最大值   type:阈值类型,可以具体类型如下: 编号 阈值类型枚举 注意 1 THRESH_BINARY 2 THRESH_BINARY_INV 3 THRESH_TRUNC 4 THRESH_TOZERO 5 THRESH_TOZERO_INV 6 THRESH_MASK 不支持32位 7 THRESH_OTSU 不支持32位 8 HRESH_TRIANGLE 不支持32位       函数关系   当阈值类型为THRESH_BINARY,THRESH_BINARY_INV,THRESH_TRUNC,THRESH_TOZERO,THRESH_TOZERO_INV时,前面的thresh参数需要合理设置,函数执行时严格按照表格中的函数关系变换;当阈值类型为OTSU时,thresh参数可以直接设置为0。 来源: https://www.cnblogs.com/qinguoyi/p/8335741.html

opencv之傅里叶变换

南楼画角 提交于 2020-02-12 22:55:20
图像处理一般分为空间域处理和频率域处理 空间域处理是直接对图像内的像素进行处理。主要划分为灰度变换核空间滤波两种形式, 灰度变换对图像内的单个像素进行处理,滤波处理涉及对图像质量的改变 频率域处理是先将图像变换到频率域,然后在频率域对图像进行处理,最后通过反变换将图像变为空间域。 傅里叶变换可以将图像变换为频率域, 傅立叶反变换将频率域变换为空间域 时域是以时间为坐标轴表示动态信号的关系, 频域则是把信号变为一频率为坐标轴表示出来。 时域是实际存在的,而频域则是数学构造。 numpy实现傅里叶变换 函数 dst = numpy.fft.fft2(src) dst为一个复数数组 src 原始图像的类型应是灰度图像 该函数处理之后就能得到图像的频谱信息 零频率分量位于频谱图像的左上角 函数 dst = numpy.ffr.fftshift(src) 使用该函数处理后,图像频谱中的零频率分量会被移到频域图像的中心位置 对图像傅里叶变换后得到的是一个复数数组,为了显示图像需要将他们的值调整到 [0 , 255 ] 的灰度空间 公式为 像素新值 = 20 * np.log( np.abs( 频谱值 ) ) 1 import cv2 2 import numpy as np 3 import matplotlib.pyplot as plt 4 img = cv2.imread("/home

opencv之直方图处理

∥☆過路亽.° 提交于 2020-02-08 19:39:28
直方图是图像处理过程中的一种非常重要的分析工具。 是图像内灰度值的统计特性与灰度值之间的函数,直方图统计图像内各个 灰度级出现的次数 需要注意三个概念: DIMS : 表示绘制直方图时,收集的参数的数量,一般情况下,直方图中收集的数据只有一种,就是灰度级,因此该值为1 RANGE :表示统计的灰度级的范围,一般为[0 . 255] . 0对应的时黑色,255对应的时白色 BINS : 参数子集的数目,在处理数据的过程中,有时需要将众多的数据划分为若干个组,在进行分析 该图中,BINS为6,RANGE为[2,6] python 的模块matplotlib.pyplot中的hist()函数能方便的绘制直方图, 函数形式为 matplotlib.pyplot.hist( x , BINS) x,为数据源 ,必须是一维的,图像通常都是二维的, 可以通过函数ravel()来将二维数组降成一维的 例如:图像x 23 34 14 54 63 23 45 25 76 对其使用函数ravel() y = x.ravel() 得到y为: 23 34 14 54 63 23 45 25 76 BINS为灰度级的分组情况 绘制图像的直方图 1 import cv2 2 import matplotlib.pyplot as plt 3 o = cv2.imread("/home/miao/dog.jpg"