IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 学习记录1:pytorch——自定义卷积(sobel / gaussian_blur) | FFT -> 正文阅读

[人工智能]学习记录1:pytorch——自定义卷积(sobel / gaussian_blur) | FFT

issue1: 在正常的CNN中,一般使用的都是learned conv weights ,这样不需要我们去做任何的干涉和操作;可在部分时候也需要自定义一些特殊的运算,比如获取图像的梯度(sobel算子),获取blur图像以此搭建pyramid images。使用卷积操作既可以大大契合需求,在CNN中也能加快运算。

实际操作:使用

F.conv2d(xx, k, stride=stride, padding=0)  xx是输入,k是自定义的卷积核。

其实只是提取获取好xx & k, 然后将其转换成tensor形式,然后套入F.conv2d 运算即可。

def get_gaussian_kernel(size=3): # 获取高斯kerner 并转为tensor ,size 可以改变模糊程度
    kernel = cv2.getGaussianKernel(size, 0).dot(cv2.getGaussianKernel(size, 0).T)
    kernel = torch.FloatTensor(kernel).unsqueeze(0).unsqueeze(0)
    kernel = torch.nn.Parameter(data=kernel, requires_grad=False)
    return kernel
def get_sobel_kernel(im):
    sobel_kernel = np.array([[-1, -1, -1], [-1, 8, -1], [-1, -1, -1]], dtype='float32')  
    sobel_kernel = sobel_kernel.reshape((1, 1, 3, 3))
    weight = Variable(torch.from_numpy(sobel_kernel))
????return weight 

两种形式都是一样的,提前获取好,然后再转换成tensor 就好。

im = Image.open('./cat.jpg').convert('L')
    # 将图片数据转换为矩阵
    im = np.array(im, dtype='float32')
    # 将图片矩阵转换为pytorch tensor,并适配卷积输入的要求
    im = torch.from_numpy(im.reshape((1, 1, im.shape[0], im.shape[1])))

????????

def gaussian_blur(x, k, stride=1, padding=0):
    res = []
    x = F.pad(x, (padding, padding, padding, padding), mode='constant', value=0)
    for xx in x.split(1, 1):
        res.append(F.conv2d(xx, k, stride=stride, padding=0))
    return torch.cat(res, 1)
gauss_kernel = get_gaussian_kernel(size=9)
low_gray = gaussian_blur(im, gauss_kernel, padding=0)
def functional_conv2d(im):
    sobel_kernel = np.array([[-1, -1, -1], [-1, 8, -1], [-1, -1, -1]], dtype='float32')  #
    sobel_kernel = sobel_kernel.reshape((1, 1, 3, 3))
    weight = Variable(torch.from_numpy(sobel_kernel))
    print('weight.size()',weight.size())
    edge_detect = F.conv2d(Variable(im), weight)
    print('edge_detect.size()', edge_detect.size())
    edge_detect = edge_detect.squeeze().detach().numpy()
    print('edge_detect.size()', edge_detect.shape)
    return edge_detect
edge_detect = functional_conv2d(im)

运行结果展示:

??

?

issue2:? pytorch 中FFT

im = torch.from_numpy(im.reshape((1, 1, im.shape[0], im.shape[1])))
    print('input size:',im.size())
    fft = torch.rfft(im, 2, onesided=False)
    print('fft[..., 0]',fft[..., 0].size())
    print('fft',fft.size())

?输出:

输出:
size: torch.Size([1, 1, 360, 600])
fft[..., 0]  是实部  fft[..., 1] 是虚部
torch.Size([1, 1, 360, 600])
fft
torch.Size([1, 1, 360, 600, 2])
获取幅度:torch.sqrt(fft[..., 0] ** 2 + fft[..., 1] ** 2 + 1e-8)

?

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-03-15 22:31:54  更:2022-03-15 22:34:03 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/9 15:23:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码