4.1.2023

首先是对上一篇博文中所提到论文中的一些方法进行补充。

重参数化(re-parameterization)

在机器学习和深度学习中,re-parameterization(重新参数化)是一种技术,旨在使模型训练更加高效和稳定。re-parameterization 技术将一个随机变量(如一个潜在向量)表示为另一个随机变量的函数,从而使其可以用标准的优化算法进行处理。

在深度学习中,re-parameterization 主要用于优化变分自编码器(VAE)和生成对抗网络(GAN)等模型。这些模型通常涉及对随机噪声的操作,而re-parameterization 可以使这些操作变得更加简单和有效。

具体来说,re-parameterization 技术可以将一个随机变量 z 表示为 μ + σε 的形式,其中 μ 和 σ 是模型的可学参数,ε 是从标准正态分布中采样得到的随机噪声。这个表示方法允许我们使用梯度下降等标准优化算法来优化模型,而不需要使用随机梯度估计等计算复杂的方法。

例如,在变分自编码器中,我们希望学习生成数据的潜在变量表示。我们可以将潜在变量 z 表示为 μ + σε 的形式,其中 μ 和 σ 是变分自编码器的编码器输出,ε 是从标准正态分布中采样得到的随机噪声。通过将 z 表示为这种形式,我们可以使用反向传播算法对 μ 和 σ 进行优化,从而学习到更好的潜在变量表示。

总之,re-parameterization 技术允许我们将随机变量表示为可学参数的函数,从而使模型训练更加高效和稳定。它在深度学习中得到了广泛应用,尤其是在涉及随机噪声的模型中。

参考自:chatGPT

一些新知识:

gamma校正:

Gamma校正是一种在数字图像处理中使用的技术,用于改善显示器显示的图像质量。它是一种针对电视、电影和计算机显示器的技术,它的主要目的是纠正显示器中存在的非线性亮度响应。

Gamma值是用来描述显示器响应的非线性度量。Gamma值越高,显示器的响应曲线就越弯曲,显示的图像就越暗。Gamma值越低,显示器的响应曲线就越直,显示的图像就越亮。

Gamma校正通过应用一个Gamma值来调整图像的亮度级别。Gamma校正的目标是将输入亮度范围内的值映射到输出亮度范围内的值,使得显示器显示的图像具有更好的对比度和色彩鲜艳度。

Gamma校正在数字摄影、电影和计算机图形中广泛使用,可以通过图像处理软件或硬件来实现。

gamma校正具体操作:

  1. 确定所需的Gamma值。Gamma值通常在0.5-2.5范围内取值,通常默认值为1.0。

  2. 将图像中每个像素的RGB值取出,对其进行以下转换: 新像素值 = 255 * (原像素值 / 255)^(1 / gamma值)

  3. 将计算得到的新像素值重新赋给原来的像素位置。

  4. 对整个图像重复以上操作直至所有像素完成Gamma校正。

注意:需要确保在处理多通道图像时,对于每个通道都进行相同的Gamma校正操作。

代码如下:

import cv2
import numpy as np

# 加载图像
img = cv2.imread('input_image.jpg', 0)

# 设置 gamma 值
gamma = 1/2.2

# 创建查找表
inv_gamma = 1.0 / gamma
table = np.array([((i / 255.0) ** inv_gamma) * 255
                  for i in np.arange(0, 256)]).astype("uint8")

# 应用查找表
result = cv2.LUT(img, table)

# 显示结果
cv2.imshow('Input Image', img)
cv2.imshow('Gamma Corrected Image', result)
cv2.waitKey(0)
cv2.destroyAllWindows()

gamma=1/2.2

左图为原始图像,右图为gamma校正后的图像

 gamma=2.2

左图为原始图像,右图为gamma校正后的图像

gamma校正的好处在于:能够有效地降低图像局部的阴影和光照变化

函数释义:

1、cv2.imread('1.jpg', 0):将图像1.jpg的灰度图像读入,并返回numpy数组形式

类似的操作还有,PIL库中的Image.open('1.jpg'),不同的是Image.open()函数返回的是PIL库中的Image对象,其中包含了图像的像素信息以及一些相关的元数据,可以进行后续的各种图像操作。

此时需要另外一个函数convert()将图像转换为灰度图像,具体操作为:

from PIL import Image

image = Image.open('1.jpg')
image_gray = image.convert('L')

 2、cv2.LUT()函数用于执行查找表操作。它接受两个参数,第一个参数是输入图像,第二个参数是颜色映射表或灰度级映射表。

该函数返回与输入图像相同大小的输出图像,其中每个像素的像素值通过查找表进行映射。查找表可以由numpy数组表示,其中每个元素表示输入像素值的索引,对应的输出像素值为该元素的值。

通过使用查找表,我们可以对图像进行多种变换,例如图像增强、颜色转换等。

其中LUT是"Look-Up Table"的缩写,也称为表查找或色彩映射表。

 3、cv2.waitKey(0)函数的作用是允许程序等待用户按下一个按键,在这里的作用是使窗口等待,直到用户按下任意键才能关闭窗口。

4、cv2.destroyWindows()函数来销毁所有创建的窗口,以避免内存泄漏。

(tips:如果使用的OpenCV版本较老,可能会出现以下报错:

建议将函数改为 cv2.destroyAllWindows()

请注意,如果您的 OpenCV 版本较老,也可能会出现此错误,因为 'destroyAllWindows' 函数是在 OpenCV 2.4.11 版本中引入的。如果您的版本较老,请尝试升级到最新版本或使用其他相应的函数。)

  • 11
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
2023-07-14 15:19:01.215 WARN 7308 --- [sson-netty-2-15] io.netty.util.concurrent.DefaultPromise : An exception was thrown by org.redisson.misc.RedissonPromise$$Lambda$888/0x00000008008f7440.operationComplete() java.lang.NullPointerException: null 2023-07-14 15:19:01.216 ERROR 7308 --- [sson-netty-2-15] o.r.c.SentinelConnectionManager : Can't execute SENTINEL commands on /172.24.107.11:26379 org.redisson.client.RedisException: ERR No such master with that name. channel: [id: 0x2d66827d, L:/172.23.9.103:46812 - R:/172.24.107.11:26379] command: (SENTINEL SLAVES), params: [mymaster] at org.redisson.client.handler.CommandDecoder.decode(CommandDecoder.java:365) ~[redisson-3.13.3.jar:3.13.3] at org.redisson.client.handler.CommandDecoder.decodeCommand(CommandDecoder.java:196) ~[redisson-3.13.3.jar:3.13.3] at org.redisson.client.handler.CommandDecoder.decode(CommandDecoder.java:134) ~[redisson-3.13.3.jar:3.13.3] at org.redisson.client.handler.CommandDecoder.decode(CommandDecoder.java:104) ~[redisson-3.13.3.jar:3.13.3] at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:501) ~[netty-codec-4.1.51.Final.jar:4.1.51.Final] at io.netty.handler.codec.ReplayingDecoder.callDecode(ReplayingDecoder.java:366) ~[netty-codec-4.1.51.Final.jar:4.1.51.Final] at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:276) ~[netty-codec-4.1.51.Final.jar:4.1.51.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final] at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final] at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final] at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final] at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:163) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final] at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:714) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final] at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:650) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final] at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:576) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final] at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final] at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) ~[netty-common-4.1.51.Final.jar:4.1.51.Final] at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.51.Final.jar:4.1.51.Final] at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-common-4.1.51.Final.jar:4.1.51.Final] at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na] 解决方法
07-15
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值