卷积神经网络边缘识别

为什卷积神经网络能够识别图片呢?是基于图片相似度比较,两张图片的点击越大说明两张图片越像,比如我们那狗胡子的图片去比较,如果相似度很高,就是认为这个动物更像狗。点积越大,图片越相似,这个比较好理解,图片在计算机中存储就是位图,每个像素通过 0、1 来表示,如果两张图一样,把所有对应的元素相乘然后结构相加,和一定是最大的。通过修改卷积核的值可以识别到图像的特征,卷积神经网络在训练过程会不断的更新参数值,最终让模型的输出与损失函数之间的差值最小。
在训练完成卷积神经网络中,通常第一层会进行边缘的识别,而后边每一层会识别更抽象的特征。通过一个简单的例子我们看一下 Sobel矩阵检测图片的边缘。一共三张图,原始图片、识别水平边缘图片、识别垂直方向边缘图片
在这里插入图片描述

from PIL import Image
import torchvision.transforms as transforms

# Load an image
image_path = 't.jpg'
image = Image.open(image_path).convert('L')  # Convert to grayscale

# Transform to tensor
transform = transforms.ToTensor()
image_tensor = transform(image).unsqueeze(0)  # Shape [1, 1, H, W] batch,channel,height,width


import torch
import torch.nn.functional as F

# Define the Sobel filters as PyTorch tensors
sobel_x = torch.tensor([[-1., 0., 1.],
                        [-2., 0., 2.],
                        [-1., 0., 1.]]).reshape((1, 1, 3, 3))

sobel_y = torch.tensor([[-1., -2., -1.],
                        [ 0.,  0.,  0.],
                        [ 1.,  2.,  1.]]).reshape((1, 1, 3, 3))

sobel_x, sobel_y = sobel_x.float(), sobel_y.float()

# Apply the filters using conv2d
edges_x = F.conv2d(image_tensor, sobel_x, padding=1)
edges_y = F.conv2d(image_tensor, sobel_y, padding=1)

# Calculate the magnitude of the gradients
edges = torch.sqrt(edges_x**2 + edges_y**2)

import matplotlib.pyplot as plt
import numpy as np

# Function to convert tensor to image for plotting
def tensor_to_image(tensor):
    return tensor.squeeze(0).squeeze(0).numpy()

# Plotting
fig, ax = plt.subplots(1, 3, figsize=(12, 5))
ax[0].imshow(tensor_to_image(image_tensor), cmap='gray')
ax[0].set_title('Original Image')
ax[0].axis('off')

ax[1].imshow(tensor_to_image(edges_x), cmap='gray')
ax[1].set_title('Edges X')
ax[1].axis('off')

ax[2].imshow(tensor_to_image(edges_y), cmap='gray')
ax[2].set_title('Edges Y')
ax[2].axis('off')

plt.show()


在网络训练过程中,网络是不知道 Sobel 这个矩阵的,它完全是通过学习对卷积核的参数进行更新,从而减少与损失函数之间的差值。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
神经网络(Convolutional Neural Network,CNN)是一种常用的深度学习模型,广泛应用于图像识别、语音识别、自然语言处理等领域。在人脸识别中,卷神经网络也被广泛应用。 卷神经网络的基本结构由卷层、池化层、全连接层组成。其中,卷层通过卷操作提取图像特征,池化层通过降采样操作减小特征图的维度,全连接层则将特征映射到输出空间。在人脸识别中,卷神经网络的输入一般是人脸图像,输出则是人脸的识别结果。 卷神经网络人脸识别的基本流程如下: 1. 数据预处理:将人脸图像进行归一化处理,包括缩放、剪裁、旋转等操作,使得图像具有一定的统一性和可比性。 2. 特征提取:通过卷层提取图像的特征,如边缘、纹理等,进一步提高图像的可识别性。 3. 特征降维:通过池化层将特征图降维,减少计算量和存储空间需求。 4. 特征映射:通过全连接层将特征映射到输出空间,如人脸的识别结果。 5. 训练模型:使用已标注的人脸数据集训练模型,优化模型参数,提高模型的准确率和泛化能力。 6. 评估模型:使用测试数据集评估模型的性能,包括准确率、召回率、F1值等指标。 7. 应用模型:将训练好的模型应用于实际的人脸识别场景,如门禁系统、安防系统等。 需要注意的是,人脸识别涉及到隐私和安全问题,需要遵守相关法律法规,保护用户的个人信息和隐私。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值