• 深度学习基础 2D卷积(1)


    什么是2D卷积

    2D参数量怎么计算

    pytorch为例子,2D卷积在设置的时候具有以下参数,具有输入通道的多少(这个决定了卷积核的通道数量),滤波器数量,这个是有多少个滤波器,越多提取的特征就越有用,kernel_size,这个是卷积核的大小,相当于一个观测器的大小,越大参数越大其实是越强。

    1. import torch
    2. import torch.nn as nn
    3. # 创建一个输入张量,假设是一张3通道的4x4图像
    4. # 输入通道数为3
    5. input_tensor = torch.randn(1, 3, 4, 4) # (batch_size, in_channels, height, width)
    6. # 创建卷积层
    7. # 输入通道数为3,输出通道数为16,卷积核大小为3x3,步幅为1,无填充
    8. conv_layer = nn.Conv2d(in_channels=3, out_channels=16, kernel_size=3, stride=1, padding=0)
    9. # 执行卷积操作
    10. output_tensor = conv_layer(input_tensor)
    11. # 查看输出张量的形状
    12. print("输出张量的形状:", output_tensor.shape)
    Param # = (input_channels * output_channels * kernel_height * kernel_width) + output_channels
    数字图像处理中的2D卷积与自己设计的2D卷积的区别
    代码如下
    1. import cv2
    2. import numpy as np
    3. import torch
    4. import torch.nn as nn
    5. import matplotlib.pyplot as plt
    6. # 创建一个随机的灰度图像
    7. gray_image = np.random.rand(64, 64) * 255 # 生成0到255之间的随机灰度值
    8. gray_image=cv2.imread("7.jpg",0)
    9. # 将灰度图像复制到RGB通道,创建彩色图像
    10. color_image = cv2.cvtColor(gray_image.astype(np.uint8), cv2.COLOR_GRAY2RGB)
    11. # 定义一个锐化卷积核
    12. # kernel = np.array([[-1, -1, -1],
    13. # [-1, 9, -1],
    14. # [-1, -1, -1]])/2 # 平均滤波器
    15. kernel = np.array([[ 0 , 1 , 0],
    16. [ 1 ,-4 , 1],
    17. [ 0 , 1 , 0]])*128 # 平均滤波器
    18. kernel = np.array([[ 1 , 1 , 1],
    19. [ 1 ,1 , 1],
    20. [ 1 , 1 , 1]])/9 # 平均滤波器
    21. # 进行基本卷积操作、OpenCV卷积操作和锐化卷积操作
    22. basic_result = cv2.filter2D(gray_image, -1, kernel)
    23. opencv_conv_result = cv2.filter2D(gray_image, -1, kernel)
    24. sharpened_image = cv2.filter2D(gray_image, -1, kernel)
    25. # 将灰度图像转换为PyTorch张量
    26. gray_image_tensor = torch.from_numpy(gray_image).unsqueeze(0).unsqueeze(0).float() / 255.0
    27. # 创建一个卷积层,使用相同的卷积核
    28. conv2d_layer = nn.Conv2d(in_channels=1, out_channels=1, kernel_size=3, padding=1, bias=False)
    29. conv2d_layer.weight.data = torch.from_numpy(kernel).unsqueeze(0).unsqueeze(0).float()
    30. # 进行PyTorch的Conv2d卷积操作
    31. pytorch_conv_result = conv2d_layer(gray_image_tensor).squeeze().detach().numpy()
    32. # 显示原始灰度图像、基本卷积结果、OpenCV卷积结果、锐化卷积结果和PyTorch卷积结果
    33. plt.figure(figsize=(25, 5))
    34. plt.subplot(1, 5, 1)
    35. plt.title("Original Gray Image")
    36. plt.imshow(gray_image, cmap='gray', vmin=0, vmax=255)
    37. plt.subplot(1, 5, 2)
    38. plt.title("Basic Convolution")
    39. plt.imshow(basic_result, cmap='gray', vmin=0, vmax=255)
    40. plt.subplot(1, 5, 3)
    41. plt.title("OpenCV Convolution")
    42. plt.imshow(opencv_conv_result, cmap='gray', vmin=0, vmax=255)
    43. # plt.subplot(1, 5, 4)
    44. # plt.title("Sharpened Gray Image")
    45. # plt.imshow(sharpened_image, cmap='gray', vmin=0, vmax=255)
    46. plt.subplot(1, 5, 4)
    47. plt.title("PyTorch Convolution")
    48. plt.imshow(pytorch_conv_result, cmap='gray', vmin=0, vmax=1)
    49. plt.show()

    均值滤波结果如下

    采用边缘检测算法结果如下

    结果如下

    从结果来看卷积似乎有些区别但是功能一致具体问题处在哪,以后再尝试

  • 相关阅读:
    Python中协程异步IO(asyncio)理解与入门
    docker学习:docker基础容器构建
    第五讲:使用blockscout对链上数据可视化
    11月了,焦虑烦躁,然后是无悲无喜
    Three.js一学就会系列:01 第一个3D网站
    C++ 与基本数据类型:整型、布尔型与字符型
    有哪些原因会导致excel文档损坏打不开?
    数据结构------排序3(快速排序)
    调研capacitor兼容openharmony平台可行性
    pycharm远程连接服务器的使用(自用)
  • 原文地址:https://blog.csdn.net/u013590327/article/details/133581824