卷积的计算过程

卷积的计算过程

flyfish
包括手动计算,可视化使用torch.nn.Conv2d实现

示例

import torch
import torch.nn as nn# 定义输入图像
input_image = torch.tensor([[1, 2, 3, 0, 1],[0, 1, 2, 3, 4],[2, 3, 0, 1, 2],[1, 2, 3, 4, 0],[0, 1, 2, 3, 4]
], dtype=torch.float32).unsqueeze(0).unsqueeze(0)  # 添加批次和通道维度
print(input_image.shape)# 定义卷积核
conv_kernel = torch.tensor([[1, 0, -1],[1, 0, -1],[1, 0, -1]
], dtype=torch.float32).unsqueeze(0).unsqueeze(0)  # 添加输入和输出通道维度
print(conv_kernel.shape)
# 创建卷积层
conv_layer = nn.Conv2d(in_channels=1, out_channels=1, kernel_size=3, stride=1, padding=0, bias=False)# 将卷积核的权重设置为自定义值
with torch.no_grad():conv_layer.weight = nn.Parameter(conv_kernel)# 进行卷积操作
output_tensor = conv_layer(input_image)# 打印输入图像
print("输入图像:")
print(input_image.squeeze().numpy())# 打印卷积核
print("卷积核:")
print(conv_kernel.squeeze().numpy())# 打印输出结果
print("输出结果:")
print(output_tensor.squeeze().detach().numpy())
torch.Size([1, 1, 5, 5])
torch.Size([1, 1, 3, 3])
# 输入图像:
[[1. 2. 3. 0. 1.][0. 1. 2. 3. 4.][2. 3. 0. 1. 2.][1. 2. 3. 4. 0.][0. 1. 2. 3. 4.]]
卷积核:
[[ 1.  0. -1.][ 1.  0. -1.][ 1.  0. -1.]]
输出结果:
[[-2.  2. -2.][-2. -2. -1.][-2. -2. -1.]]
输入图像和卷积核

输入图像 I I I:
[ 1 2 3 0 1 0 1 2 3 4 2 3 0 1 2 1 2 3 4 0 0 1 2 3 4 ] \begin{bmatrix} 1 & 2 & 3 & 0 & 1 \\ 0 & 1 & 2 & 3 & 4 \\ 2 & 3 & 0 & 1 & 2 \\ 1 & 2 & 3 & 4 & 0 \\ 0 & 1 & 2 & 3 & 4 \\ \end{bmatrix} 1021021321320320314314204
卷积核 K K K:
[ 1 0 − 1 1 0 − 1 1 0 − 1 ] \begin{bmatrix} 1 & 0 & -1 \\ 1 & 0 & -1 \\ 1 & 0 & -1 \\ \end{bmatrix} 111000111

手动计算卷积

我们将逐个计算每个位置的卷积结果:

  1. 位置 (0, 0) [ 1 2 3 0 1 2 2 3 0 ] ⊙ [ 1 0 − 1 1 0 − 1 1 0 − 1 ] = ( 1 ⋅ 1 + 2 ⋅ 0 + 3 ⋅ ( − 1 ) ) + ( 0 ⋅ 1 + 1 ⋅ 0 + 2 ⋅ ( − 1 ) ) + ( 2 ⋅ 1 + 3 ⋅ 0 + 0 ⋅ ( − 1 ) ) = ( 1 − 3 ) + ( − 2 ) + ( 2 ) = − 2 \begin{bmatrix} 1 & 2 & 3 \\ 0 & 1 & 2 \\ 2 & 3 & 0 \\ \end{bmatrix} \odot \begin{bmatrix} 1 & 0 & -1 \\ 1 & 0 & -1 \\ 1 & 0 & -1 \\ \end{bmatrix} = (1 \cdot 1 + 2 \cdot 0 + 3 \cdot (-1)) + (0 \cdot 1 + 1 \cdot 0 + 2 \cdot (-1)) + (2 \cdot 1 + 3 \cdot 0 + 0 \cdot (-1)) = (1 - 3) + (-2) + (2) \\= -2 102213320 111000111 =(11+20+3(1))+(01+10+2(1))+(21+30+0(1))=(13)+(2)+(2)=2
  2. 位置 (0, 1) [ 2 3 0 1 2 3 3 0 1 ] ⊙ [ 1 0 − 1 1 0 − 1 1 0 − 1 ] = ( 2 ⋅ 1 + 3 ⋅ 0 + 0 ⋅ ( − 1 ) ) + ( 1 ⋅ 1 + 2 ⋅ 0 + 3 ⋅ ( − 1 ) ) + ( 3 ⋅ 1 + 0 ⋅ 0 + 1 ⋅ ( − 1 ) ) = 2 + ( 1 − 3 ) + ( 3 − 1 ) = 2 \begin{bmatrix} 2 & 3 & 0 \\ 1 & 2 & 3 \\ 3 & 0 & 1 \\ \end{bmatrix} \odot \begin{bmatrix} 1 & 0 & -1 \\ 1 & 0 & -1 \\ 1 & 0 & -1 \\ \end{bmatrix} = (2 \cdot 1 + 3 \cdot 0 + 0 \cdot (-1)) + (1 \cdot 1 + 2 \cdot 0 + 3 \cdot (-1)) + (3 \cdot 1 + 0 \cdot 0 + 1 \cdot (-1)) = 2 + (1 - 3) + (3 - 1) \\= 2 213320031 111000111 =(21+30+0(1))+(11+20+3(1))+(31+00+1(1))=2+(13)+(31)=2
  3. 位置 (0, 2) [ 3 0 1 2 3 4 0 1 2 ] ⊙ [ 1 0 − 1 1 0 − 1 1 0 − 1 ] = ( 3 ⋅ 1 + 0 ⋅ 0 + 1 ⋅ ( − 1 ) ) + ( 2 ⋅ 1 + 3 ⋅ 0 + 4 ⋅ ( − 1 ) ) + ( 0 ⋅ 1 + 1 ⋅ 0 + 2 ⋅ ( − 1 ) ) = 3 − 1 + 2 − 4 − 2 = − 2 \begin{bmatrix} 3 & 0 & 1 \\ 2 & 3 & 4 \\ 0 & 1 & 2 \\ \end{bmatrix} \odot \begin{bmatrix} 1 & 0 & -1 \\ 1 & 0 & -1 \\ 1 & 0 & -1 \\ \end{bmatrix} = (3 \cdot 1 + 0 \cdot 0 + 1 \cdot (-1)) + (2 \cdot 1 + 3 \cdot 0 + 4 \cdot (-1)) + (0 \cdot 1 + 1 \cdot 0 + 2 \cdot (-1)) = 3 - 1 + 2 - 4 - 2 \\= -2 320031142 111000111 =(31+00+1(1))+(21+30+4(1))+(01+10+2(1))=31+242=2
  4. 位置 (1, 0) [ 0 1 2 2 3 0 1 2 3 ] ⊙ [ 1 0 − 1 1 0 − 1 1 0 − 1 ] = ( 0 ⋅ 1 + 1 ⋅ 0 + 2 ⋅ ( − 1 ) ) + ( 2 ⋅ 1 + 3 ⋅ 0 + 0 ⋅ ( − 1 ) ) + ( 1 ⋅ 1 + 2 ⋅ 0 + 3 ⋅ ( − 1 ) ) = − 2 + 2 + 1 − 3 = − 2 \begin{bmatrix} 0 & 1 & 2 \\ 2 & 3 & 0 \\ 1 & 2 & 3 \\ \end{bmatrix} \odot \begin{bmatrix} 1 & 0 & -1 \\ 1 & 0 & -1 \\ 1 & 0 & -1 \\ \end{bmatrix} = (0 \cdot 1 + 1 \cdot 0 + 2 \cdot (-1)) + (2 \cdot 1 + 3 \cdot 0 + 0 \cdot (-1)) + (1 \cdot 1 + 2 \cdot 0 + 3 \cdot (-1)) = -2 + 2 + 1 - 3 \\= -2 021132203 111000111 =(01+10+2(1))+(21+30+0(1))+(11+20+3(1))=2+2+13=2
  5. 位置 (1, 1) [ 1 2 3 3 0 1 2 3 4 ] ⊙ [ 1 0 − 1 1 0 − 1 1 0 − 1 ] = ( 1 ⋅ 1 + 2 ⋅ 0 + 3 ⋅ ( − 1 ) ) + ( 3 ⋅ 1 + 0 ⋅ 0 + 1 ⋅ ( − 1 ) ) + ( 2 ⋅ 1 + 3 ⋅ 0 + 4 ⋅ ( − 1 ) ) = 1 − 3 + 3 − 1 + 2 − 4 = − 2 \begin{bmatrix} 1 & 2 & 3 \\ 3 & 0 & 1 \\ 2 & 3 & 4 \\ \end{bmatrix} \odot \begin{bmatrix} 1 & 0 & -1 \\ 1 & 0 & -1 \\ 1 & 0 & -1 \\ \end{bmatrix} \begin{aligned} \\ &= (1 \cdot 1 + 2 \cdot 0 + 3 \cdot (-1)) + (3 \cdot 1 + 0 \cdot 0 + 1 \cdot (-1)) + (2 \cdot 1 + 3 \cdot 0 + 4 \cdot (-1)) \\ &= 1 - 3 + 3 - 1 + 2 - 4 \\ &= -2\end{aligned} 132203314 111000111 =(11+20+3(1))+(31+00+1(1))+(21+30+4(1))=13+31+24=2
  6. 位置 (1, 2) [ 2 3 4 0 1 2 3 4 0 ] ⊙ [ 1 0 − 1 1 0 − 1 1 0 − 1 ] = ( 2 ⋅ 1 + 3 ⋅ 0 + 4 ⋅ ( − 1 ) ) + ( 0 ⋅ 1 + 1 ⋅ 0 + 2 ⋅ ( − 1 ) ) + ( 3 ⋅ 1 + 4 ⋅ 0 + 0 ⋅ ( − 1 ) ) = − 2 − 2 + 3 = − 1 \begin{bmatrix} 2 & 3 & 4 \\ 0 & 1 & 2 \\ 3 & 4 & 0 \\ \end{bmatrix} \odot \begin{bmatrix} 1 & 0 & -1 \\ 1 & 0 & -1 \\ 1 & 0 & -1 \\ \end{bmatrix} \\ = (2 \cdot 1 + 3 \cdot 0 + 4 \cdot (-1)) + (0 \cdot 1 + 1 \cdot 0 + 2 \cdot (-1)) + (3 \cdot 1 + 4 \cdot 0 + 0 \cdot (-1)) \\ = -2 - 2 + 3 \\ = -1 203314420 111000111 =(21+30+4(1))+(01+10+2(1))+(31+40+0(1))=22+3=1
  7. 位置 (2, 0) [ 2 3 0 1 2 3 0 1 2 ] ⊙ [ 1 0 − 1 1 0 − 1 1 0 − 1 ] = ( 2 ⋅ 1 + 3 ⋅ 0 + 0 ⋅ ( − 1 ) ) + ( 1 ⋅ 1 + 2 ⋅ 0 + 3 ⋅ ( − 1 ) ) + ( 0 ⋅ 1 + 1 ⋅ 0 + 2 ⋅ ( − 1 ) ) = 2 + ( 1 − 3 ) − 2 = − 2 \begin{bmatrix} 2 & 3 & 0 \\ 1 & 2 & 3 \\ 0 & 1 & 2 \\ \end{bmatrix} \odot \begin{bmatrix} 1 & 0 & -1 \\ 1 & 0 & -1 \\ 1 & 0 & -1 \\ \end{bmatrix} = (2 \cdot 1 + 3 \cdot 0 + 0 \cdot (-1)) + (1 \cdot 1 + 2 \cdot 0 + 3 \cdot (-1)) + (0 \cdot 1 + 1 \cdot 0 + 2 \cdot (-1)) \\= 2 + (1 - 3) - 2 \\= -2 210321032 111000111 =(21+30+0(1))+(11+20+3(1))+(01+10+2(1))=2+(13)2=2
  8. 位置 (2, 1):$ [ 3 0 1 2 3 4 1 2 3 ] ⊙ [ 1 0 − 1 1 0 − 1 1 0 − 1 ] = ( 3 ⋅ 1 + 0 ⋅ 0 + 1 ⋅ ( − 1 ) ) + ( 2 ⋅ 1 + 3 ⋅ 0 + 4 ⋅ ( − 1 ) ) + ( 1 ⋅ 1 + 2 ⋅ 0 + 3 ⋅ ( − 1 ) ) = 3 − 1 + 2 − 4 + 1 − 3 = − 2 \begin{bmatrix} 3 & 0 & 1 \\ 2 & 3 & 4 \\ 1 & 2 & 3 \\ \end{bmatrix} \odot \begin{bmatrix} 1 & 0 & -1 \\ 1 & 0 & -1 \\ 1 & 0 & -1 \\ \end{bmatrix} \\= (3 \cdot 1 + 0 \cdot 0 + 1 \cdot (-1)) + (2 \cdot 1 + 3 \cdot 0 + 4 \cdot (-1)) + (1 \cdot 1 + 2 \cdot 0 + 3 \cdot (-1)) = 3 - 1 + 2 - 4 + 1 - 3 \\= -2 321032143 111000111 =(31+00+1(1))+(21+30+4(1))+(11+20+3(1))=31+24+13=2
  9. 位置 (2, 2) [ 0 1 2 3 4 0 2 3 4 ] ⊙ [ 1 0 − 1 1 0 − 1 1 0 − 1 ] = ( 0 ⋅ 1 + 1 ⋅ 0 + 2 ⋅ ( − 1 ) ) + ( 3 ⋅ 1 + 4 ⋅ 0 + 0 ⋅ ( − 1 ) ) + ( 2 ⋅ 1 + 3 ⋅ 0 + 4 ⋅ ( − 1 ) ) = − 2 + 3 + 2 − 4 = − 1 \begin{bmatrix} 0 & 1 & 2 \\ 3 & 4 & 0 \\ 2 & 3 & 4 \\ \end{bmatrix} \odot \begin{bmatrix} 1 & 0 & -1 \\ 1 & 0 & -1 \\ 1 & 0 & -1 \\ \end{bmatrix} \\= (0 \cdot 1 + 1 \cdot 0 + 2 \cdot (-1)) + (3 \cdot 1 + 4 \cdot 0 + 0 \cdot (-1)) + (2 \cdot 1 + 3 \cdot 0 + 4 \cdot (-1)) \\= -2 + 3 + 2 - 4 \\= -1 032143204 111000111 =(01+10+2(1))+(31+40+0(1))+(21+30+4(1))=2+3+24=1

参数解释

conv_layer = nn.Conv2d(in_channels=3,        # 输入通道数out_channels=16,      # 输出通道数kernel_size=3,        # 卷积核大小stride=1,             # 步幅padding=1,            # 填充padding_mode='zeros', # 填充模式dilation=1,           # 空洞卷积groups=1,             # 组卷积bias=True             # 是否使用偏置
)
in_channels (int): 输入通道数。例如,对于RGB图像,in_channels 应为 3。
out_channels (int): 输出通道数,也就是卷积核的数量。
kernel_size (int or tuple): 卷积核的大小。如果是整数,表示卷积核的高度和宽度相等。如果是元组,表示 (高度, 宽度)。
stride (int or tuple, optional): 卷积操作中窗口滑动的步幅。如果是整数,表示高度和宽度的步幅相等。如果是元组,表示 (高度步幅, 宽度步幅)。默认值为 1。
padding (int or tuple, optional): 输入的每一边要填充的零的层数。如果是整数,表示高度和宽度的填充相等。如果是元组,表示 (高度填充, 宽度填充)。默认值为 0。
padding_mode (str, optional): 填充模式,可以是 'zeros', 'reflect', 'replicate' 或 'circular'。默认值为 'zeros'。
dilation (int or tuple, optional): 卷积核元素之间的间距。如果是整数,表示高度和宽度的间距相等。如果是元组,表示 (高度间距, 宽度间距)。默认值为 1。
groups (int, optional): 从输入通道到输出通道的阻塞连接数。默认值为 1。groups 可以用于实现深度可分离卷积。
bias (bool, optional): 如果设置为 True,则添加一个学习到的偏置。默认值为 True。
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as patches
from matplotlib.animation import FuncAnimation, PillowWriter# 定义输入图像和卷积核
input_image = np.array([[1, 2, 3, 0, 1],[0, 1, 2, 3, 4],[2, 3, 0, 1, 2],[1, 2, 3, 4, 0],[0, 1, 2, 3, 4]
])conv_kernel = np.array([[1, 0, -1],[1, 0, -1],[1, 0, -1]
])# 输入图像和卷积核的尺寸
input_size = input_image.shape[0]
kernel_size = conv_kernel.shape[0]
output_size = input_size - kernel_size + 1# 创建图形和轴
fig, ax = plt.subplots(figsize=(6, 6))# 显示输入图像
im = ax.imshow(input_image, cmap='viridis')# 初始化矩形框和文本
rect = patches.Rectangle((0, 0), kernel_size, kernel_size, linewidth=2, edgecolor='r', facecolor='none')
ax.add_patch(rect)
text = ax.text(0, 0, '', ha='center', va='center', color='white', fontsize=12)# 动画更新函数
def update(frame):i, j = divmod(frame, output_size)sub_matrix = input_image[i:i+kernel_size, j:j+kernel_size]conv_result = np.sum(sub_matrix * conv_kernel)# 更新矩形框的位置rect.set_xy((j, i))# 更新文本的位置和内容text.set_position((j + kernel_size / 2, i + kernel_size / 2))text.set_text(f'{conv_result:.2f}')return im, rect, text# 创建动画
ani = FuncAnimation(fig, update, frames=output_size * output_size, blit=True, repeat=False)# 保存动画为 GIF 文件
ani.save('convolution_animation.gif', writer=PillowWriter(fps=1))plt.show()

请添加图片描述
卷积的结果

[[-2.  2. -2.][-2. -2. -1.][-2. -2. -1.]]

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

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

相关文章

springboot 3 oauth2认证this.authorizationService.save(authorization)生成token报错异常

springboot 3 oauth2认证this.authorizationService.save(authorization)生成token报错异常&#xff0c;使用springboot版本3.3.0。 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId>&…

2024年政治经济学与社会科学国际会议(ICPESS 2024)

2024年政治经济学与社会科学国际会议 2024 International Conference on Political Economy and Social Sciences 会议简介 2024年政治经济学与社会科学国际会议是一个致力于探讨政治经济学与社会科学交叉领域前沿问题的国际盛会。本次会议汇聚了全球顶尖的专家学者、研究人员和…

探索智慧农业系统架构的设计与应用

随着科技的不断进步和农业现代化的推进&#xff0c;智慧农业正逐渐成为农业发展的重要趋势。智慧农业系统架构的设计与应用&#xff0c;将农业生产与信息技术相结合&#xff0c;为农业生产提供了新的思路和解决方案。本文将深入探讨智慧农业系统架构的设计与应用&#xff0c;从…

用爬虫实现---模拟填志愿

先来说实现逻辑&#xff0c;首先我要获取到这个网站上所有的信息&#xff0c;那么我们就可以开始对元素进行检查 我们发现他的每一个学校信息都有一个对应的属性&#xff0c;并且是相同的&#xff0c;那么我们就可以遍历这个网页中的所有属性一样的开始爬取 在来分析&#xff0…

美团大规模KV存储挑战与架构实践--图文分析

美团大规模KV存储挑战与架构实践–图文分析 原作者&#xff1a;美团技术团队 原文链接&#xff1a;https://tech.meituan.com/2024/03/15/kv-squirrel-cellar.html 1 美团 KV 存储发展历程 第一代&#xff1a;使用Memcached 什么是一致性哈希&#xff1f; 哈希&#xff1a…

kafka如何保证消息不丢失

Kafka发送消息是异步发送的&#xff0c;所以我们不知道消息是否发送成功&#xff0c;所以会可能造成消息丢失。而且Kafka架构是由生产者-服务器端-消费者三种组成部分构成的。要保证消息不丢失&#xff0c;那么主要有三种解决方法。 生产者(producer)端处理 生产者默认发送消息…

AI炒股:用Kimi获取美股的历史成交价格并画出股价走势图

在Kimi中输入提示词&#xff1a; 你是一个Python编程专家&#xff0c;要完成一个编写Python脚本的任务&#xff0c;具体步骤如下&#xff1a; 用akshare库获取谷歌(股票代码&#xff1a;105.GOOG)、亚马逊(股票代码&#xff1a;105.AMZN )、苹果(股票代码&#xff1a;105.AAP…

明天15点!如何打好重保预防针:迎战HVV经验分享

在当今数字化时代&#xff0c;网络攻击日益猖獗&#xff0c;各行各业面临的网络安全威胁不断升级。从钓鱼邮件到复杂的APT攻击&#xff0c;网络犯罪分子的手法层出不穷&#xff0c;给各行各业的信息安全带来了前所未有的挑战。 在这样的背景下&#xff0c;"HVV行动"应…

6月7号作业

1&#xff0c; 搭建一个货币的场景&#xff0c;创建一个名为 RMB 的类&#xff0c;该类具有整型私有成员变量 yuan&#xff08;元&#xff09;、jiao&#xff08;角&#xff09;和 fen&#xff08;分&#xff09;&#xff0c;并且具有以下功能&#xff1a; (1)重载算术运算符…

2024年电子工程与自动化技术国际会议(ICEEAT 2024)

2024 International Conference on Electronic Engineering and Automation Technology 【1】大会信息 会议简称&#xff1a;ICEEAT 2024 大会地点&#xff1a;中国西安 审稿通知&#xff1a;投稿后2-3日内通知 【2】会议简介 2024年电子工程与自动化技术国际会议是聚焦电子…

OrangePi AIpro小试牛刀-目标检测(YoloV5s)

非常高兴参加本次香橙派AI Pro&#xff0c;香橙派联合华为昇腾打造的一款AI推理开发板评测活动&#xff0c;以前使用树莓派Raspberry Pi4B 8G版本&#xff0c;这次有幸使用国产嵌入式开发板。 一窥芳容 这款开发板搭载的芯片是和华为昇腾的Atlas 200I DK A2同款的处理器&#…

Vue3中的常见组件通信之$attrs

Vue3中的常见组件通信之$attrs 概述 ​ 在vue3中常见的组件通信有props、mitt、v-model、 r e f s 、 refs、 refs、parent、provide、inject、pinia、slot等。不同的组件关系用不同的传递方式。常见的撘配形式如下表所示。 组件关系传递方式父传子1. props2. v-model3. $re…

[Linux]内网穿透nps

文章目录 基础文件下载项目地址下载地址 客户端安装解压文件客户端启动客户端注册到linux系统服务客户端注册到windows系统服务windows bat 一键管理员注册windows bat 一键管理员取消 基础文件下载 项目地址 https://github.com/ehang-io/nps 下载地址 Releases ehang-io…

微服务第二轮

学习文档 背景 由于每个微服务都有不同的地址或端口&#xff0c;入口不同 请求不同数据时要访问不同的入口&#xff0c;需要维护多个入口地址&#xff0c;麻烦 前端无法调用nacos&#xff0c;无法实时更新服务列表 单体架构时我们只需要完成一次用户登录、身份校验&#xff…

想在VBA软件中做个登录验证会员授权,用什么云服务器好?

想在VBA中做个登录验证会员授权&#xff0c;用什么服务器好&#xff1f; 腾讯云99起&#xff0c;百度云50元起&#xff0c;不过也不知道到底是一整个虚拟机服务器&#xff0c; 装了WIN2012系统的&#xff0c;还是只是一个虚拟网站只给你一个文件夹可以上传PHP,ASP网页后台。 价…

6、组件通信详解(父子、兄弟、祖孙)

一、父传子 1、props 用法&#xff1a; &#xff08;1&#xff09;父组件用 props绑定数据&#xff0c;表示为 v-bind:props"数据" &#xff08;v-bind:简写为 : &#xff0c;props可以任意命名&#xff09; &#xff08;2&#xff09;子组件用 defineProps([props&…

Java 编译报错:找不到符号? 手把手教你排查解决!

Java 编译报错&#xff1a;找不到符号&#xff1f; 手把手教你排查解决&#xff01; 在 Java 开发过程中&#xff0c;我们经常会遇到编译器抛出 "找不到符号" 错误。这个错误提示意味着编译器无法在它所理解的范围内找到你所引用的类、变量或方法。这篇文章将带你一步…

一文学习yolov5 实例分割:从训练到部署

一文学习yolov5 实例分割&#xff1a;从训练到部署 1.模型介绍1.1 YOLOv5结构1.2 YOLOv5 推理时间 2.构建数据集2.1 使用labelme标注数据集2.2 生成coco格式label2.3 coco格式转yolo格式 3.训练3.1 整理数据集3.2 修改配置文件3.3 执行代码进行训练 4.使用OpenCV进行c部署参考文…

手写kNN算法的实现-用欧几里德空间来度量距离

kNN的算法思路&#xff1a;找K个离预测点最近的点&#xff0c;然后让它们进行投票决定预测点的类型。 step 1: kNN存储样本点的特征数据和标签数据step 2: 计算预测点到所有样本点的距离&#xff0c;关于这个距离&#xff0c;我们用欧几里德距离来度量&#xff08;其实还有很多…

苍穹外卖笔记-07-菜品管理-增加、删除、修改、查询分页还有菜品起售或停售状态

菜品管理 1 新增菜品1.1 需求分析与设计1.2 代码开发文件上传新增菜品实现 1.3 功能测试 2 菜品分页查询2.1 需求分析和设计2.2 代码开发设计DTO类设计VO类Controller层Service层Mapper层 2.3 功能测试 3 删除菜品3.1 需求分析和设计3.2 代码开发Controller层Service层Mapper层…