卷积神经网络边缘识别

news2024/11/24 7:48:29

为什卷积神经网络能够识别图片呢?是基于图片相似度比较,两张图片的点击越大说明两张图片越像,比如我们那狗胡子的图片去比较,如果相似度很高,就是认为这个动物更像狗。点积越大,图片越相似,这个比较好理解,图片在计算机中存储就是位图,每个像素通过 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 这个矩阵的,它完全是通过学习对卷积核的参数进行更新,从而减少与损失函数之间的差值。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1672246.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

量化交易包含些什么?

我们讲过许多关于量化交易的内容,但是量化交易具体可以做些什么?很多朋友都还不清楚,我们详细来探讨下! 第一:什么是量化交易? 量化交易是一种利用先进的数学模型和计算机技术,从大量的历史数…

老黄终于不穿皮衣了,分享一个AI换装AI试衣软件!

用AI实现在线试衣,或者在线换装,这不是一个新概念,肯定有人这么想过,但并不是所有人能都能轻松做到啊! 今天就来分享一个人人都可以实现的方法,而且是那种傻瓜式的不用付钱的那种,甚至可以把软件…

ONVIF系列一:ONVIF介绍

感谢博主OceanStar的学习笔记,ONVIF系列二和系列三中安装操作过程及代码实现参考了这位博主的博客。 ONVIF系列: ONVIF系列一:ONVIF介绍 ONVIF系列二:Ubuntu安装gSOAP、生成ONVIF代码框架 ONVIF系列三:ONVIF客户端实现…

3款常用的可视化工具Matplotlib、Seaborn和Pandas

大家好,Seaborn 是基于 Matplotlib 的扩展库,Pandas 的可视化功能同样也依赖于 Matplotlib。尽管二者都使用相同的底层图形库,但绘制图表的方法却各有千秋。本文将介绍各种柱状图的绘制,比较 Matplotlib、Pandas 和 Seaborn 在数据…

ONVIF系列三:ONVIF客户端实现

ONVIF系列: ONVIF系列一:ONVIF介绍 ONVIF系列二:Ubuntu安装gSOAP、生成ONVIF代码框架 ONVIF系列三:ONVIF客户端实现 在系列二中完成了在Ubuntu上安装gSOAP并生成ONVIF代码框架,接下来我们利用生成的框架实现ONVIF客户端…

探究NVMe SSD HMB应用场景与影响-<续>

如果需要采用HMB功能,需要SSD支持NVME协议且NVMe 1.2及以上版本。NVME协议中对HMB对应有2个关键参数: HMB建议值(HMPRE):设定实际分配给HMB使用的主机内存容量,为设备提供最优性能的内存分配量。 HMB最小值…

冥想的时候怎么专注自己

冥想的时候怎么专注自己?我国传统的打坐养生功法,实际最早可追溯到五千年前的黄帝时代。   每天投资两个半小时的打坐,有上千年之久的功效。因为当你们打坐进入永恒时,时间停止了。这不只是两个半小时,而是百千万亿年…

Github上5个实用的ChatGPT仓库

ChatGPT是一款基于聊天场景的大模型AI,最近火出圈。 Chat表示聊天,GPT表示大模型算法,它通过生成式的人机对话功能,让使用者第一次有了AI机器人‘懂我‘的感觉,而不是Siri、小爱那种傻瓜式的语音服务。 ChatGPT不仅仅…

现货黄金白银行情走高带来的投资机会分析

当现货黄金和白银行情呈现出走高的态势时,这常常被投资者解读为一个潜在的投资机会。本文旨在分析在黄金白银价格上涨时的投资机会,并指出应对策略。 一、走高行情背后的机会 行情的上升,往往代表了市场在某种程度上的认可,无论这…

知乎知+广告推广该如何做?怎么收费?

知乎作为一个汇聚高质量用户群体的知识分享平台,成为了众多品牌和产品推广的优选之地。特别是知乎的“知”广告推广服务,以其精准定向、内容原生的特点,深受广告主青睐。 一、知乎知广告推广基础 1. 什么是知乎知? 知是知乎官方…

企业网站慎用免费SSL证书!OV证书才是首选

市面上有很多免费证书提供,免费的SSL证书更适用于个人博客、学生学习、测试等应用场景。如果您的网站是企业网站一定慎用免费的SSL证书,而是选择企业级的OV证书。 一.免费SSL证书的风险 1安全性:免费SSL证书通常只提供基本的加密…

全新Transformer模型:全球与局部双重突破!

DeepVisionary 每日深度学习前沿科技推送&顶会论文分享,与你一起了解前沿深度学习信息! 引言:探索视觉变换器在对象重识别中的全局与局部特征 在对象重识别(Re-ID)的研究领域中,如何有效地从不同时间…

pytest教程-45-钩子函数-pytest_report_testitemFinished

领取资料,咨询答疑,请➕wei: June__Go 上一小节我们学习了pytest_report_collectionfinish钩子函数的使用方法,本小节我们讲解一下pytest_report_testitemFinished钩子函数的使用方法。 pytest_report_testitemFinished 钩子函数在每个测试…

7天精通Web APIs——正则阶段案例(理论+实战)(第六天)

正则表达式的定义和使用 定义:是一种匹配模式,用于匹配字符串中字符组合 作用:表单验证(匹配)、过滤敏感词(替换)、字符串中提取我们想要的部分(提取) 使用分为两步&…

MySQL-InnoDB数据存储结构

1、存储结构-页 索引结构提供了高效的索引方式,索引信息以及数据记录都保存在数据文件或索引文件中(本质存储在页结构中) 1.1、磁盘与内存交互的基本单位:页 在InnoDB中将数据划分为若干页,页的默认大小为&#xff…

SQLZOO:The JOIN operation

数据表:game-gaol-eteam game idmdatestadiumteam1team210018 June 2012National Stadium, WarsawPOLGRE10028 June 2012Stadion Miejski (Wroclaw)RUSCZE100312 June 2012Stadion Miejski (Wroclaw)GRECZE100412 June 2012National Stadium, WarsawPOLRUS... goal …

@游戏行业er!MongoDB广州线下沙龙邀您报名!

随着游戏和应用程序的发展,数据变得越来越重要。在为您的下一个游戏选择数据库时,数据库管理者常常会面对灵活性、可扩展性、可靠性、运营效率等问题或挑战。 MongoDB在游戏开发领域有着广泛的应用,灵活数据模型可以存储和处理各种类型的数据…

C++--String类

系列文章目录 文章目录 目录 系列文章目录 文章目录 前言 一、为什么要学习string 1.c语言的字符串 2.OJ上的使用 二、string类的接口介绍 1.string简介 2.string构造成员函数 3.operator函数 4.string容器size和length 5.重载operator[]和引用返回的意义 5.1 oper…

嫦娥六号揭秘真相:阿波罗登月是真是假?一文终结所有疑问!

近期,嫦娥六号的成功发射如同璀璨的星辰,再次将人们的视线聚焦于浩瀚的宇宙,与此同时,网络上关于美国阿波罗登月是否造假的争议也如潮水般涌现。一些声音宣称,嫦娥六号的发射为揭示美国阿波罗登月任务的真实性提供了关…

Java面试八股之String类的常用方法有哪些

Java中String类的常用方法有哪些 获取字符串信息: length():返回字符串的字符数。 isEmpty():判断字符串是否为空(即长度为0)。 访问单个字符: charAt(int index):返回指定索引处的字符。 …