前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >一文讲解图像插值算法原理!附Python实现

一文讲解图像插值算法原理!附Python实现

作者头像
Datawhale
发布于 2020-04-24 10:39:58
发布于 2020-04-24 10:39:58
6.9K00
代码可运行
举报
文章被收录于专栏:Datawhale专栏Datawhale专栏
运行总次数:0
代码可运行

作者:姚童,Datawhale优秀学习者

寄语:本文梳理了最近邻插值法、双线性插值法和三次样条插值法的原理,并以图像缩放为例,对原理进行了C++及Python实现。

在图像处理中,几何变换是将一幅图像映射到另外一幅图像内的操作,可以大概分为放缩、翻转、仿射(平移、旋转)、透视、重映射几部分。

在几何变换时,无法给有些像素点直接赋值,例如,将图像放大两倍,必然会多出一些无法被直接映射的像素点,对于这些像素点,通过插值决定它们的值。且不同插值方式的结果不同。

在一幅输入图像[u,v]中,灰度值仅在整数位置上有定义。然而,输出图像的坐标映射回原图像后,一般为非整数的坐标。所以输出图像[x,y]的灰度值,一般由非整数坐标来决定,非整数坐标的像素值,就需要插值算法来进行处理。常见的插值算法有最近邻插值、双线性插值和三次样条插值。

本文目标

  • 了解插值算法与常见几何变换之间的关系
  • 理解插值算法的原理
  • 掌握OpenCV框架下插值算法API的使用

插值算法原理介绍

近邻插值算法

1. 原理简介

将目标图像中的点,对应到原图像中后,找到最相邻的整数坐标点的像素值,作为该点的像素值输出。

如上图所示,目标图像中的某点投影到原图像中的位置为点P,与P距离最近的点为Q11,此时易知,f(P)=f(Q11)。

2. 例子说明

如图所示:

将一幅3*3图像放大到4*4,用f(x , y)表示原图像,h(x ,y)表示目标图像,我们有如下公式:

3. 缺点

由最邻近插值法,放大后的图像有很严重的马赛克,会出现明显的块状效应;缩小后的图像有很严重的失真。

这是一种最基本、最简单的图像缩放方式。变换后的每个像素点的像素值,只由原图像中的一个像素点确定。例如上面,点(0,0.75)的像素只由(0,1)确定,这样的效果显然不好。点(0,0.75)的像素不止和(0,1)有关,和(0,0)也有关,只是(0,1)的影响更大。如果可以用附近的几个像素点按权重分配,共同确定目标图像某点的像素,效果会更好。下面的双线性插值就解决了这个问题。

双线性插值算法

1. 线性插值

在讲双线性插值之前先了解一下线性插值。线性插值:使用连接两个已知量的直线来确定在这两个已知量之间的一个未知量的值。线性插值形式:

如下图所示:

线性插值多项式:

其实,即使x不在x0到x1之间,这个公式也是成立的。在这种情况下,这种方法叫作线性外插。

线性插值的误差:线性插值其实就是拉格朗日插值有2个结点时的情况。插值余项为:

从插值余项可以看出,随着二阶导数的增大,线性插值的误差增大。即函数的曲率越大,线性插值近似的误差也越大。

举个例子。下图中,左边为原图像,拉伸后,理想的输出图像的像素分布应该为绿色箭头指向的,但是按照线性插值,会得到红色箭头指向的结果。

2. 双线性插值

双线性插值形式:

双线性插值是线性插值在二维时的推广,在两个方向上共做了三次线性插值。定义了一个双曲抛物面与四个已知点拟合。

具体操作为在X方向上进行两次线性插值计算,然后在Y方向上进行一次插值计算。如下图所示:

首先,f(x,y)为二元函数,假设我们知道f(x0,y0),f(x1,y1),f(x0,y1),f(x1,y0)四个点的值。这四个点确定一个矩形,我们希望通过插值得到矩形内任意点的函数值。

先在x方向上进行两次线性插值,得到:

再在y方向上进行一次线性插值,得到:

综合起来,就是双线性插值的结果:

如果选择一个坐标系统,使f(x)已知的四个点的坐标分别为(0,0),(0,1),(1,0),(1,1),那么确定一个单位正方形,四个点分别为正方形的四个顶点:

  • 首先对上端的两个顶点进行线性插值得:
  • 再对底端的两个顶点进行线性插值得:
  • 最后,做垂直方向的线性插值,以确定:
  • 整理得插值公式的化简形式:

3. 原图像和目标图像的几何中心对齐

在计算目标图像中,对应原图像的虚拟坐标点时,一般的变换是:

这种变换下,原图像的有些点没有参与计算。举个例子,把9∗9的原图像缩小成3∗3,原图像的原点(0,0)和目标图像的原点(0,0)都为左上角,目标图像右上角的坐标为(0,2),对应原图像的坐标为(0∗(9/3),2∗(9/3))=(0,6)。目标图像右边已经没有点了,(0,6)右边的像素点也就用不到了。

原图像和目标图像的像素之间的对应关系如下:

从图片可以看出,只有圈出来的红色部分参与运算了。目标图像的每个像素点的灰度值相对于原图像偏左上方,右下角的元素实际上没有参与运算。

为了让原图像和目标图像的中心对齐,我们规定另外一种变换方式:

就是在原来的变换后面加了调节因子:

0.5(src_width/dst_width−1)

这种变换下,目标图像的中心点(1,1),对应了原图像的中心点(4,4),两个图像的几何中心重合,能充分利用原图像的点,并且目标图像的每个像素点之间都是等间隔的,也都和两边有一定的边距。实际上,在openCv中也是这种变换方式。

4. cv.resize()的计算过程

对于缩小图像,目标图像中每个点都能找到原图像中包围它的四个临近点,每个点都进行双线性插值即可。

对于放大图像,边界附近的点经过坐标变换可能超出了原图像的范围。举个例子,把3∗3的原图像放大成4∗4。

  • 中间的点:双线性插值

中间的点都能在原图像中找到包围它的四个临近点,做双线性插值即可。

  • 边界上的点(除了顶点):线性插值

例如,目标图像中的点(1,3),对应原图像的点为(0.625,2.125),原图像的纵坐标最大为2,找不到包围(0.625,2.125)四个点,所以用它最邻近的两个点(0,2)和(1,2)做线性插值(外插),得到目标图像中(1,3)的像素值。

  • 四个顶点:最邻近插值

例如,目标图像右上角的顶点(0,3),对于原图像的点为(0,2.125),直接用原图像右上角的顶点(0,2)作为它的值即可。

计算过程:

用h(x,y)表示目标图像,f(x,y)表示原图像

  • 中间的点:双线性插值
  • 边界上的点(除了顶点):线性插值
  • 四个顶点:最邻近插值

可以用代码举例子测试:

  • cv2import numpy as npsrc = np.array([[56,23,15],[65,32,78],[12,45,62]],dtype=np.uint8)print(src)dst = cv2.resize(src,dsize=(4,4),interpolation=cv2.INTER_LINEAR)print(dst)

三次样条插值算法

给定n+1个点,a=x_0<x_1<...<x_n=b,以及他们的函数值f(x_i),i=0,1,2,...n上,确定一个三次多项式:

每个三次多项式中有四个未知参数,有n个区间,n个多项式,共4n个未知参数。我们知道“n个未知数需要n个已知条件确定唯一解”,所以要确定这4n个未知参数,共需要4n个已知条件。

每个三次多项式满足如下条件:

以上共4n−2个条件,还差2个条件,由如下三种边界条件确定:

4n个条件有了,就可以确定每个区间上的三次多项式。

对于每个区间内的点,就可以用Si(x)得到插值结果。三次样条插值具有良好的收敛性,稳定性和光滑性,优点明显,是非常重要的插值工具。

这里主要了解三次样条插值的作用,具体的推导过程比较繁琐,想了解的可以查阅资料。

两种映射方法

向前映射和向后映射都是将一个图像经过几何变换得到另一个图像的过程,它们的目的都是得到目标图像的像素,只是方式不同。

向前映射

图像变换的本质是将像素点的坐标通过某一种函数关系,映射到另外的位置。

向前映射的过程可以分解为两步:坐标变换+分配像素值

向前映射的坐标变换:由原图像坐标推算该像素在目标图像的位置。

例如,我们知道原图像的某个像素点的坐标(x,y),变换后在新图像的坐标为(x′,y′),变换后的坐标一般为非整数的,而非整数的坐标是没意义的,所以将这个点的像素按权重分配给周围四个像素点。对于变换后坐标仍为整数的点,直接把其像素值分配给目标图像中对应的点即可。将原图像的所有像素点都进行这种坐标变换和分配像素值,就得到了新图像。

所以,新图像的每个像素点的像素值,都是由它周围的非整数坐标的点的像素分配给它并叠加得到的(或者直接等于某个整数坐标点的像素值)。由于这个分配、叠加的特性,向前映射法有时也叫像素移交映射。

对于向前映射,虽然原图像中的每个点分配系数之和为1。但目标图像上每个点的像素值是多个分配值叠加而成的,所以不能保证所有分配到其上的权重之和为1。因此必须记录下所有分配到其上的权重并累加起来,最后利用累加权重进行归一化,才能得到正确的插值结果。所以,确定目标图像某一点的像素值,需要遍历原图像的所有像素值,进行坐标变换和分配像素值。这是向前映射法的缺点。

向后映射

向后映射的过程可以分解为两步:坐标变换+插值。

向后映射的坐标变换:由输出图像坐标反过来推算该像素在原图像的位置

前面说的几种插值方式,就是向后映射的例子。是由目标图像的坐标算出在原图像的坐标,再确定它的像素值由原图像的哪几个点按权重分配得到。然后进行插值操作,得到该点的像素值。某一点的像素值进行一次操作就可以得到,不需要遍历全部像素点。向后映射法也叫像素填充算法。向后映射法解决了漏点的问题,出现了马赛克。

动手实现

c++实现

1. 函数原型

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void cv::resize(InputArray src, OutputArray dst, Size dsize, double fx=0, double fy=0, int interpolation=INTER_LINEAR )

2. 插值方式

注:目标图像大小可以通过“参数dsize”和“参数fx和fy”两种方式确定。两种参数不能同时为0。

  • 通过参数dsize确定

dsize的第一个参数为列数,第二个参数为行数,都为整数。若指定了dsize的值,无论是否指定了fx和fy的值,都由参数dsize来决定目标图像的大小。

  • 通过参数fx和fy确定

如果dsize的值None,目标图像的大小通过fx和fy确定。fx为列数缩放的倍数,fy为行数缩放的倍数。

3.代码实现

  • #include <opencv2/opencv.hpp>#include <iostream> using namespace cv;using namespace std; int main(int argc, char* argv[]){ Mat img = imread(""C:/Users/94890/Desktop/picture/luelue.jpg""); if (img.empty()) { cout << "无法读取图像" << endl; return 0; } int height = img.rows;//原图像行数 int width = img.cols;//原图像列数 // 缩小图像,比例为(0.2, 0.2),行列数必须为整数 Size dsize = Size(round(0.2 * width), round(0.2 * height)); Mat shrink; //使用双线性插值 resize(img, shrink, dsize, 0, 0, INTER_LINEAR); // 在缩小图像的基础上,放大图像,比例为(1.5, 1.5) float fx = 1.5; float fy = 1.5; Mat enlarge1, enlarge2; resize(shrink, enlarge1, Size(), fx, fy, INTER_NEAREST); resize(shrink, enlarge2, Size(), fx, fy, INTER_LINEAR); // 显示 imshow("src", img); imshow("shrink", shrink); imshow("INTER_NEAREST", enlarge1); imshow("INTER_LINEAR", enlarge2); //保存图像 imwrite("C:/Users/94890/Desktop/picture/shrink2.jpg",shrink); imwrite("C:/Users/94890/Desktop/picture/INTER_NEAREST2.jpg", enlarge1); imwrite("C:/Users/94890/Desktop/picture/INTER_LINEAR2.jpg", enlarge2); waitKey(0); return 0;}

原图像

0.2倍缩小,双线性插值

缩小后的图像1.5倍放大,最近邻插值

缩小后的图像1.5倍放大,双线性插值

python实现

1. 函数原型

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#dst为输出图像,类型与原图像相同dst = cv2.resize(src, dsize[, dst[, fx[, fy[, interpolation]]]])

2. 插值方式

通常,缩小图像使用区域插值(cv.INTER_AREA),放大图像使用三次样条插值(cv.INTER_CUBIC)和双线性插值(cv.INTER_LINEAR)。三次样条插值方式速度较慢,双线性插值方式较快且效果也不错。

3. 代码实现

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import cv2
if __name__ == "__main__":    img = cv2.imread('C:/Users/94890/Desktop/smile.jpg', cv2.IMREAD_UNCHANGED)    print('Original shape : ', img.shape)#img.shape属性种第一个值对应行数,第二个值对应列数    width = int(img.shape[1] * 0.3)#列数必须是整数    height = int(img.shape[0] * 0.3)#行数必须是整数    dsize = (width, height)#dsize属性值第一个数对应列数,第二个数对应行数    # resize image    resized = cv2.resize(img, dsize, interpolation=cv2.INTER_LINEAR)#双线性插值方式    print('Resized shape : ', resized.shape)
    fx = 1.5#列数变为原来的1.5倍    fy = 1.5#行数变为原来的1.5倍    resized1 = cv2.resize(resized, dsize=None, fx=fx, fy=fy, interpolation=cv2.INTER_NEAREST)#最邻近插值    resized2 = cv2.resize(resized, dsize=None, fx=fx, fy=fy, interpolation=cv2.INTER_LINEAR)#双线性插值    print('Resized1 shape : ', resized1.shape)
    #显示图像    cv2.imshow("Resized image", resized)    cv2.imshow("INTER_NEAREST image", resized1)    cv2.imshow("INTER_LINEAR image", resized2)    #保存图像    cv2.imwrite("C:/Users/94890/Desktop/Resized_image.jpg", resized)    cv2.imwrite("C:/Users/94890/Desktop/INTER_NEAREST_image.jpg", resized1)    cv2.imwrite("C:/Users/94890/Desktop/INTER_LINEAR_image.jpg", resized2)    cv2.waitKey(0)    cv2.destroyAllWindows()

原图像

0.3倍缩小,双线性插值

缩小后的图像1.5倍放大,最近邻插值

缩小后的图像1.5倍放大,双线性插值

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-04-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Datawhale 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
AIGC----生成对抗网络(GAN)如何推动AIGC的发展
随着人工智能领域的迅猛发展,AI生成内容(AIGC,AI Generated Content)正成为创意产业和技术领域的重要组成部分。在AIGC的核心技术中,生成对抗网络(GAN,Generative Adversarial Network)被认为是推动AIGC发展的关键力量之一。本篇博客将详细探讨GAN的工作原理,以及它如何加速AIGC的发展。为了使文章更具深度和可操作性,我们将通过代码示例来解释相关原理和应用场景。
hope kc
2024/11/21
2010
AIGC----生成对抗网络(GAN)如何推动AIGC的发展
探秘生成对抗网络(GAN):原理、应用与代码全知道
生成对抗网络(GAN)自提出以来在深度学习领域备受关注。其独特的对抗训练机制使其在图像生成、数据增强、风格迁移等众多领域展现强大能力。
羑悻的小杀马特.
2025/03/27
6110
【专知-PyTorch手把手深度学习教程04】GAN快速理解与PyTorch实现: 图文+代码
【导读】主题链路知识是我们专知的核心功能之一,为用户提供AI领域系统性的知识学习服务,一站式学习人工智能的知识,包含人工智能( 机器学习、自然语言处理、计算机视觉等)、大数据、编程语言、系统架构。使用请访问专知 进行主题搜索查看 - 桌面电脑访问www.zhuanzhi.ai, 手机端访问www.zhuanzhi.ai 或关注微信公众号后台回复" 专知"进入专知,搜索主题查看。值国庆佳节,专知特别推出独家特刊-来自中科院自动化所专知小组博士生huaiwen和Jin创作的-PyTorch教程学习系列, 今日
WZEARW
2018/04/09
1.8K0
【专知-PyTorch手把手深度学习教程04】GAN快速理解与PyTorch实现: 图文+代码
深度学习第5天:GAN生成对抗网络
我们知道GAN的全名是生成对抗网络,那么它就是以生成为主要任务,所以可以用在这些方面
Nowl
2024/01/18
1720
深度学习第5天:GAN生成对抗网络
生成对抗网络(GAN)如何推动AIGC的发展
为了更深入理解生成对抗网络(GAN),我们需要探索其更复杂的变种和技术细节。这些变种通常旨在解决GAN的训练不稳定性、生成质量以及应用范围等问题。以下是一些主要的GAN变种及其特性。
用户11292525
2024/11/21
1750
利用pytorch实现GAN(生成对抗网络)-MNIST图像-cs231n-assignment3
In 2014, Goodfellow et al. presented a method for training generative models called Generative Adversarial Networks (GANs for short). In a GAN, we build two different neural networks. Our first network is a traditional classification network, called the discriminator. We will train the discriminator to take images, and classify them as being real (belonging to the training set) or fake (not present in the training set). Our other network, called the generator, will take random noise as input and transform it using a neural network to produce images. The goal of the generator is to fool the discriminator into thinking the images it produced are real. 在生成网络中,我们建立了两个神经网络。第一个网络是典型的分类神经网络,称为discriminator重点内容,我们训练这个网络对图像进行识别,以区别真假的图像(真的图片在训练集当中,而假的则不在。另一个网络称之为generator,它将随机的噪声作为输入,将其转化为使用神经网络训练出来产生出来的图像,它的目的是混淆discriminator使其认为它生成的图像是真的。
老潘
2018/06/21
2.5K0
利用pytorch实现GAN(生成对抗网络)-MNIST图像-cs231n-assignment3
生成对抗网络(GANs)在AIGC中的应用
生成对抗网络(Generative Adversarial Networks, GANs)是近年来在人工智能生成内容(Artificial Intelligence Generated Content, AIGC)领域取得显著进展的重要技术。GANs通过两个神经网络——生成器(Generator)和判别器(Discriminator)——之间的对抗训练,实现了从噪声中生成高质量、逼真的图像和其他类型的内容。本文将深入探讨GANs在AIGC中的应用,并通过一个代码实例来展示其工作原理。
一键难忘
2024/06/19
4990
AIGC-----AIGC如何提升营销与广告效果
在如今快速发展的数字时代,人工智能生成内容(AIGC,AI Generated Content)已经成为推动营销与广告行业变革的重要力量。AIGC的到来为品牌、企业和广告主提供了全新的创作与推广方式,使营销活动的定制化、效率以及效果得到了显著提升。本篇文章将深入探讨AIGC如何提升营销与广告效果,通过多个实际应用的案例与代码实现,帮助你更好地理解AIGC在营销中的强大力量。
hope kc
2024/11/24
5160
AIGC-----AIGC如何提升营销与广告效果
【小白学习PyTorch教程】十一、基于MNIST数据集训练第一个生成性对抗网络
GAN 是使用两个神经网络模型训练的生成模型。一种模型称为生成网络模型,它学习生成新的似是而非的样本。另一个模型被称为判别网络,它学习区分生成的例子和真实的例子。
润森
2022/08/18
4870
【小白学习PyTorch教程】十一、基于MNIST数据集训练第一个生成性对抗网络
【机器学习】--- 生成对抗网络 (GANs)
生成对抗网络(GANs, Generative Adversarial Networks)近年来在机器学习领域成为一个热点话题。自从Ian Goodfellow及其团队在2014年提出这一模型架构以来,GANs 在图像生成、数据增强、风格转换等领域取得了显著进展,并推动了深度学习在生成模型领域的快速发展。本文将详细讨论 GANs 的基础原理、应用场景、常见变体、以及在实际中如何实现 GAN 模型。
Undoom
2024/09/23
1680
深度学习 | GAN,什么是生成对抗网络
GAN是由两部分组成的,第一部分是生成,第二部分是对抗。简单来说,就是有一个生成网络G和一个判别网络D,通过训练让两个网络相互竞争,生成网络G接受一个随机噪声z来生成假的数据G(z),对抗网络D通过判别器去判别真伪概率,最后希望生成器G生成的数据能够以假乱真。在最理想的状态下,D(G(z)) = 0.5。
Justlovesmile
2021/12/14
1.3K0
深度学习 | GAN,什么是生成对抗网络
【人工智能】全景解析:【机器学习】【深度学习】从基础理论到应用前景的【深度探索】
无监督学习 是一种机器学习类型,模型在没有标注数据的情况下,通过识别数据中的模式和结构进行学习。
小李很执着
2024/08/14
2650
机器学习---生成对抗网络
生成对抗网络(GANs, Generative Adversarial Networks)近年来在机器学习领域成为一个热点话题。自从Ian Goodfellow及其团队在2014年提出这一模型架构以来,GANs 在图像生成、数据增强、风格转换等领域取得了显著进展,并推动了深度学习在生成模型领域的快速发展。本文将详细讨论 GANs 的基础原理、应用场景、常见变体、以及在实际中如何实现 GAN 模型。
Undoom
2024/09/22
1390
生成学习全景:从基础理论到GANs技术实战
生成学习(Generative Learning)在机器学习领域中占据了重要的位置。它通过学习数据分布的方式生成新的数据实例,这在多种应用中表现出了其独特的价值。本节将深入探讨生成学习的核心概念,明确区分生成学习与判别学习,并探索生成学习的主要应用场景。
TechLead
2024/01/02
3370
生成学习全景:从基础理论到GANs技术实战
深度学习界明星:生成对抗网络与Improving GAN
生成对抗网络,根据它的名字,可以推断这个网络由两部分组成:第一部分是生成,第二部分是对抗。这个网络的第一部分是生成模型,就像之前介绍的自动编码器的解码部分;第二部分是对抗模型,严格来说它是一个判断真假图片的判别器。生成对抗网络最大的创新在此,这也是生成对抗网络与自动编码器最大的区别。简单来说,生成对抗网络就是让两个网络相互竞争,通过生成网络来生成假的数据,对抗网络通过判别器判别真伪,最后希望生成网络生成的数据能够以假乱真骗过判别器。过程如图1所示。
博文视点Broadview
2020/06/11
4330
深度学习界明星:生成对抗网络与Improving GAN
生成式AI核心技术详解:从GANs到Transformers
生成式AI(Generative AI)作为人工智能的一个重要分支,通过学习大量的数据生成新的数据样本,在多个领域取得了令人瞩目的进展。生成式AI不仅在学术研究中激发了广泛的兴趣,也在工业应用中展示了巨大的潜力,推动了图像生成、文本生成、视频生成等领域的快速发展。
TechLead
2024/05/29
5.8K0
生成式AI核心技术详解:从GANs到Transformers
【深度学习】生成对抗网络(GAN)
生成对抗网络(Generative Adversarial Networks)是一种无监督深度学习模型,用来通过计算机生成数据,由Ian J. Goodfellow等人于2014年提出。模型通过框架中(至少)两个模块:生成模型(Generative Model)和判别模型(Discriminative Model)的互相博弈学习产生相当好的输出。生成对抗网络被认为是当前最具前景、最具活跃度的模型之一,目前主要应用于样本数据生成、图像生成、图像修复、图像转换、文本生成等方向。
杨丝儿
2022/03/20
2.7K0
【深度学习】生成对抗网络(GAN)
从虚拟到真实:解读GAN生成超真实图像的魔法
大家好,我是Echo_Wish,一直致力于探索人工智能的技术潜力。今天我要带大家进入一个神奇的领域——GAN(生成对抗网络),它是让机器画出“超真实图像”的关键技术。说实话,GAN听起来可能有点复杂,但它实际上就像两个AI在PK,一个负责创造,另一个负责挑刺,最后逼得“创作AI”变得越来越厉害,直到创作出以假乱真的作品。接下来,我会从GAN的工作原理入手,再通过实际代码演示如何用GAN生成超真实图像,为大家揭开这项技术的神秘面纱。
Echo_Wish
2025/04/08
1490
从虚拟到真实:解读GAN生成超真实图像的魔法
【机器学习实战】从零开始深度学习(通过GPU服务器进行深度学习)
0.1. 利用GPU加速深度学习   疫情期间没有办法用实验室的电脑来跑模型,用领取的腾讯云实例来弄刚刚好。发现如果没有GPU来跑的话真的是太慢了,非常推荐利用GPU加速深度学习的训练速度。     如果采用GPU的话,训练函数train_model(*)中数据的输入要改变一下,也就是需要将数据放在GPU上
汉堡888
2022/05/03
8.8K0
【机器学习实战】从零开始深度学习(通过GPU服务器进行深度学习)
AI绘画:开启艺术与科技融合的未来之门(10/10)
在科技飞速发展的今天,AI 绘画作为人工智能与艺术领域融合的创新成果,正以惊人的速度改变着我们对艺术创作的认知。短短几年间,AI 绘画从一个新奇的概念迅速演变为大众广泛参与、行业深度应用的热门领域,热度居高不下。从社交媒体上大量涌现的 AI 绘画作品分享,到艺术展览中 AI 绘画作品的频频亮相,再到影视、游戏、广告等行业对 AI 绘画技术的积极探索,AI 绘画已经渗透到我们生活的方方面面。它不仅为普通爱好者提供了便捷的创作途径,让每个人都能轻松实现自己的艺术梦想,也为专业艺术家和设计师们带来了全新的创作灵感和工具,开启了艺术创作的无限可能。
正在走向自律
2025/02/10
2940
AI绘画:开启艺术与科技融合的未来之门(10/10)
推荐阅读
相关推荐
AIGC----生成对抗网络(GAN)如何推动AIGC的发展
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验