AI 入门 30 天挑战 - Day 18 费曼学习法版 - 图像分割基础

news2026/4/27 17:07:28
完整项目和代码本教程是AI 入门 30 天挑战系列的一部分GitHub 仓库: https://github.com/Lee985-cmd/AI-30-Day-ChallengeCSDN 专栏: https://blog.csdn.net/m0_67081842?typeblog⭐欢迎 Star 支持Week 3 第二天图像分割像素级别的精细识别不仅知道在哪里还要知道精确轮廓每个概念都解释每行代码都说明白预计时间2.5-3.5 小时含费曼输出练习 第 1 步快速复习昨天的内容30 分钟费曼输出 #0考考你合上教程尝试回答□ 目标检测和图像分类的核心区别是什么用例子说明 □ 边界框有几种表示方法各有什么特点 □ IoU 是怎么计算的为什么用它衡量准确度 □ NMS 的作用是什么详细流程是怎样的 □ 如果你要检测路上的车辆你会怎么设计系统⏰ 时间25 分钟如果能答出 80% 以上我们开始今天的像素级视觉之旅如果不够花 5 分钟翻一下 Day15 的笔记。 第 2 步什么是图像分割40 分钟故事时间 目标检测 vs 图像分割场景给照片里的人抠图 目标检测昨天学的: ┌──────────────┐ │ │ ← 用矩形框住 │ ┌────┐ │ │ │人 │ │ ← 95% 置信度 │ └────┘ │ │ │ └──────────────┘ ✓ 知道位置 ✗ 只有矩形框 ✗ 框里有背景 ✗ 无法精确抠图 图像分割今天要学的: ┌──────────────┐ │ │ ← 精确勾勒轮廓 │ ╱ ╲ │ │ │ 人形 │ │ ← 每个像素分类 │ ╲____╱ │ │ │ ← 背景去掉 └──────────────┘ ✓ 精确到像素 ✓ 完整形状 ✓ 可以抠图 ✓ 能做美颜磨皮 这就是图像分割的魅力生活中的例子涂色游戏 目标检测就像 给你一张画让你圈出哪里有苹果 你用矩形框框起来 ✅ 但框里还有背景 图像分割就像 给你一张画让你把苹果涂上颜色 你要仔细地 - 沿着边缘涂 - 不涂到外面 - 每个像素都要判断 这才是真正的认识这个物体图像分割的两种类型1. 语义分割Semantic Segmentation任务给每个像素分类 输入照片 [街景有路、车、人、树] 输出 红色像素 → 车 蓝色像素 → 路 绿色像素 → 树 黄色像素 → 人 特点 ✓ 只关心这是什么类别 ✗ 不区分哪个个体 → 所有车都是红色 → 所有人都是一种颜色 就像 老师点名穿红衣服的举手 所有穿红衣服的都举手 但不关心具体是谁2. 实例分割Instance Segmentation任务不仅分类还要区分个体 输入照片 [街景有 3 个人] 语义分割 所有人 → 同一颜色黄色 看不出是不同的人 实例分割 人 1 → 黄色 人 2 → 橙色 人 3 → 棕色 特点 ✓ 关心这是什么类别 ✓ 还关心哪个个体 → 每个人不同颜色 → 能数清楚有几个人 就像 老师点名张三、李四、王五分别举手 每个人都能区分开 费曼输出 #1解释图像分割任务 1向小学生解释场景有个小朋友问你图像分割是什么要求不用像素、语义、实例这些专业术语用涂色、剪纸、贴纸等生活场景比喻让小学生能听懂参考模板图像分割就像______一样。 比如你在______ 要把______从______中分离出来。 你要______ 不能______。 这样就能______⏰ 时间15 分钟 卡壳检查点如果你在解释时卡住了□ 我说不清楚语义分割和实例分割的区别 □ 我不知道如何解释像素级的概念 □ 我只能说分割物体但不能说明白怎么做到的这很正常标记下来回去再看上面的内容然后重新尝试解释提示语义分割 按类别分所有猫一种颜色实例分割 按个体分每只猫不同颜色就像分类水果 vs 数苹果 第 3 步核心算法详解60 分钟1. FCN全卷积网络- 开山之作传统 CNN 的问题传统 CNN: 输入图片 → [卷积层] → [全连接层] → 类别 ↓ 固定尺寸输出 丢失空间信息 只能分类不能分割 就像 你看一幅画只能说这是风景 但不能指出哪里是山、哪里是水FCN 的创新2015 年FCN: 把全连接层改成卷积层 输入图片 → [卷积层] → [反卷积层] → 分割图 ↓ 任意尺寸输入 保持空间信息 每个像素都有类别 就像 你不仅说这是风景 还能准确地指出 - 这里是山 ⛰️ - 这里是水 - 这里是树 2. U-Net医学图像神器为什么叫 U-Net因为结构像字母 U 编码器左侧下采样: 解码器右侧上采样: 输入 输出 ↓ ↑ [Conv] [UpConv] ↓ ↑ [Pool] ←─── 最底层 ───→ [Conv] ↓ ↑ 更深层特征 恢复细节 中间用跳跃连接Skip Connection: 把编码器的细节传给解码器 好处 ✓ 保留边缘信息 ✓ 定位更准确 ✓ 医学图像首选 就像写作文 编码器 收集素材理解内容 解码器 组织语言表达出来 跳跃连接 不忘掉细节3. Mask R-CNN实例分割王者Faster R-CNN 的升级版Faster R-CNN: 输入 → RPN → ROI → 分类 边界框 Mask R-CNN多一个分支: 输入 → RPN → ROI → 分类 边界框 ↓ Mask 分支 ↓ 像素级分割掩码 额外输出 每个 ROI 一个二值 mask0背景1前景 这样就能 ✓ 检测物体边界框 ✓ 分割物体精确轮廓 ✓ 一举两得 就像 你先看到一个人检测 然后仔细描出他的轮廓分割 一次完成两件事 费曼输出 #2深入理解核心算法任务 1创造多个比喻场景 A解释给医生听用医学影像的例子 CT 扫描 编码器 诊断报告 解码器 病灶定位 分割结果场景 B解释给摄影师听用拍照修图的例子 拍照 输入 PS 抠图 分割 保存 PNG 输出 mask场景 C解释给老师听用批改作业的例子 看完整试卷 编码器 逐题批改 解码器 成绩单 分割图要求每个场景都要详细说明任务 2解释技术细节思考题1. 为什么 FCN 要把全连接层改成卷积层 2. U-Net 的跳跃连接是怎么工作的 3. 语义分割和实例分割各有什么应用场景 4. Mask R-CNN 比 Faster R-CNN 多了什么⏰ 时间25 分钟 卡壳检查点□ 我解释不清 U-Net 的结构原理 □ 我说不明白跳跃连接的作用 □ 我不能用生活中的例子说明提示FCN 第一个做分割的网络U-Net 对称结构医学首选Mask R-CNN 检测 分割一体 第 4 步动手实现 U-Net70 分钟完整代码实现import torch import torch.nn as nn import torchvision.transforms as transforms from PIL import Image import numpy as np import matplotlib.pyplot as plt print( * 50) print( 图像分割基础U-Net 详解) print( * 50) # # 第 1 步理解 U-Net 架构 # print(\n【1. U-Net 架构】) class DoubleConv(nn.Module): 双卷积块U-Net 的基本单元 def __init__(self, in_channels, out_channels): super().__init__() self.double_conv nn.Sequential( nn.Conv2d(in_channels, out_channels, kernel_size3, padding1), nn.BatchNorm2d(out_channels), nn.ReLU(inplaceTrue), nn.Conv2d(out_channels, out_channels, kernel_size3, padding1), nn.BatchNorm2d(out_channels), nn.ReLU(inplaceTrue) ) def forward(self, x): return self.double_conv(x) class UNet(nn.Module): U-Net 模型 def __init__(self, n_channels1, n_classes2): super(UNet, self).__init__() # 编码器下采样路径 self.enc1 DoubleConv(n_channels, 64) self.pool1 nn.MaxPool2d(2) self.enc2 DoubleConv(64, 128) self.pool2 nn.MaxPool2d(2) self.enc3 DoubleConv(128, 256) self.pool3 nn.MaxPool2d(2) self.enc4 DoubleConv(256, 512) self.pool4 nn.MaxPool2d(2) # 最底层 self.bottleneck DoubleConv(512, 1024) # 解码器上采样路径 self.upconv4 nn.ConvTranspose2d(1024, 512, kernel_size2, stride2) self.dec4 DoubleConv(1024, 512) self.upconv3 nn.ConvTranspose2d(512, 256, kernel_size2, stride2) self.dec3 DoubleConv(512, 256) self.upconv2 nn.ConvTranspose2d(256, 128, kernel_size2, stride2) self.dec2 DoubleConv(256, 128) self.upconv1 nn.ConvTranspose2d(128, 64, kernel_size2, stride2) self.dec1 DoubleConv(128, 64) # 输出层 self.out_conv nn.Conv2d(64, n_classes, kernel_size1) def forward(self, x): # 编码器 enc1 self.enc1(x) enc2 self.enc2(self.pool1(enc1)) enc3 self.enc3(self.pool2(enc2)) enc4 self.enc4(self.pool3(enc3)) # 最底层 bottleneck self.bottleneck(self.pool4(enc4)) # 解码器带跳跃连接 dec4 self.upconv4(bottleneck) dec4 torch.cat([dec4, enc4], dim1) dec4 self.dec4(dec4) dec3 self.upconv3(dec4) dec3 torch.cat([dec3, enc3], dim1) dec3 self.dec3(dec3) dec2 self.upconv2(dec3) dec2 torch.cat([dec2, enc2], dim1) dec2 self.dec2(dec2) dec1 self.upconv1(dec2) dec1 torch.cat([dec1, enc1], dim1) dec1 self.dec1(dec1) return self.out_conv(dec1) # 创建模型 model UNet(n_channels1, n_classes2) print(✓ U-Net 模型创建完成) print(f\n模型结构:) print(model) # 计算参数量 total_params sum(p.numel() for p in model.parameters()) trainable_params sum(p.numel() for p in model.parameters() if p.requires_grad) print(f\n总参数量{total_params:,}) print(f可训练参数{trainable_params:,}) # # 第 2 步可视化 U-Net 结构 # print(\n * 50) print( 可视化 U-Net 的 U 型结构) print( * 50) fig, ax plt.subplots(figsize(14, 10)) ax.axis(off) # 绘制 U-Net 结构图 x_positions [0, 1, 2, 3, 4, 5, 6, 7, 8] y_encoder [4, 3, 2, 1, 0] y_decoder [0, 1, 2, 3, 4] # 编码器左侧 for i, y in enumerate(y_encoder[:-1]): rect plt.Rectangle((x_positions[i]-0.8, y-0.6), 1.6, 1.2, fillTrue, facecolor#4ECDC4, edgecolorblack, linewidth2) ax.add_patch(rect) ax.text(x_positions[i], y, fEnc{i1}\n64×{2**i}, hacenter, vacenter, fontsize9) # 下采样箭头 ax.annotate(, xy(x_positions[i], y-0.8), xytext(x_positions[i], y-1.2), arrowpropsdict(arrowstyle-, linewidth2, color#FF6B6B)) # 最底层 rect plt.Rectangle((x_positions[4]-0.8, -0.6), 1.6, 1.2, fillTrue, facecolor#FFE66D, edgecolorblack, linewidth2) ax.add_patch(rect) ax.text(x_positions[4], 0, Bottleneck\n1024, hacenter, vacenter, fontsize9) # 解码器右侧 for i, y in enumerate(y_decoder[1:], start1): rect plt.Rectangle((x_positions[i4]-0.8, y-0.6), 1.6, 1.2, fillTrue, facecolor#FF6B6B, edgecolorblack, linewidth2) ax.add_patch(rect) ax.text(x_positions[i4], y, fDec{i}\n{512//(2**(4-i))}, hacenter, vacenter, fontsize9) # 上采样箭头 ax.annotate(, xy(x_positions[i4], y0.8), xytext(x_positions[i4], y1.2), arrowpropsdict(arrowstyle-, linewidth2, color#4ECDC4)) # 跳跃连接 for i in range(4): ax.annotate(, xy(x_positions[i5], y_decoder[i1]), xytext(x_positions[i], y_encoder[i]), arrowpropsdict(arrowstyle-, linewidth1, colorgray, linestyle--)) ax.text((x_positions[i]x_positions[i5])/2, 0.5, Skip, fontsize7, hacenter) # 输入输出 ax.text(-1.5, 4, Input\nImage, fontsize10, haright) ax.annotate(, xy(-0.8, 4), xytext(-1.3, 4), arrowpropsdict(arrowstyle-, linewidth2)) ax.text(9.5, 4, Output\nSegmentation, fontsize10, haleft) ax.annotate(, xy(8.8, 4), xytext(9.3, 4), arrowpropsdict(arrowstyle-, linewidth2)) ax.set_xlim(-2, 10) ax.set_ylim(-1, 5) ax.set_aspect(equal) ax.set_title(U-Net 架构示意图, fontsize14, pad20) plt.tight_layout() plt.show() print(\n U-Net 的特点:) print(- 对称的 U 型结构) print(- 编码器提取特征解码器恢复细节) print(- 跳跃连接保留边缘信息) print(- 医学图像分割的首选) # # 第 3 步模拟分割过程 # print(\n * 50) print(【3. 模拟分割过程】) print( * 50) # 创建一个简单的图像灰度图 image_size 256 image np.zeros((image_size, image_size), dtypenp.float32) # 画一个圆模拟肿瘤 center (128, 128) radius 50 for i in range(image_size): for j in range(image_size): if (i - center[0])**2 **(j - center[1])2 radius**2: image[i, j] 1.0 # 添加一些噪声 noise np.random.randn(image_size, image_size) * 0.1 image noise image np.clip(image, 0, 1) # 转为 Tensor input_tensor torch.from_numpy(image).unsqueeze(0).unsqueeze(0) print(f输入图像形状{input_tensor.shape}) print(f (batch1, channels1, height{image_size}, width{image_size})) # 运行模型 model.eval() with torch.no_grad(): output model(input_tensor) print(f输出分割图形状{output.shape}) print(f (batch1, classes2, height{image_size}, width{image_size})) # 可视化 fig, axes plt.subplots(1, 3, figsize(15, 5)) # 原图 axes[0].imshow(image, cmapgray) axes[0].set_title(输入图像模拟 CT 片, fontsize12) axes[0].axis(off) # 真实标签理想的分割 mask np.zeros((image_size, image_size), dtypenp.uint8) for i in range(image_size): for j in range(image_size): if (i - center[0])**2 **(j - center[1])2 radius**2: mask[i, j] 1 axes[1].imshow(mask, cmapjet) axes[1].set_title(真实分割Ground Truth, fontsize12) axes[1].axis(off) # 预测结果简化直接用阈值 output_prob torch.sigmoid(output[0, 0]).numpy() output_pred (output_prob 0.5).astype(np.uint8) axes[2].imshow(output_pred, cmapjet) axes[2].set_title(f预测分割阈值0.5, fontsize12) axes[2].axis(off) plt.tight_layout() plt.show() print(\n✅ 分割完成) print( 蓝色区域 背景) print( 红色区域 肿瘤/前景) # # 第 4 步使用预训练的 DeepLabV3 # print(\n * 50) print(【4. 使用预训练的 DeepLabV3 进行分割】) print( * 50) import torchvision.models as models # 加载预训练的 DeepLabV3 deeplab_model models.segmentation.deeplabv3_resnet50(pretrainedTrue) deeplab_model.eval() print(✓ DeepLabV3 模型加载完成) print( 可以分割 COCO 数据集的 21 种物体) # 读取一张图片 from torchvision import transforms from PIL import Image import requests from io import BytesIO print(\n正在下载测试图片...) try: url https://farm9.staticflickr.com/8/7378_1b97e49c7b_z.jpg response requests.get(url) img Image.open(BytesIO(response.content)) # 预处理 transform transforms.Compose([ transforms.ToTensor(), transforms.Normalize(mean[0.485, 0.456, 0.406], std[0.229, 0.224, 0.225]), ]) input_tensor transform(img).unsqueeze(0) # 进行分割 with torch.no_grad(): output deeplab_model(input_tensor)[out][0] output_predictions output.argmax(0) print(f✓ 分割完成) print(f 输出形状{output_predictions.shape}) # 显示结果 fig, axes plt.subplots(1, 2, figsize(16, 6)) axes[0].imshow(img) axes[0].set_title(原始图片, fontsize14) axes[0].axis(off) axes[1].imshow(output_predictions.cpu().numpy(), cmapjet) axes[1].set_title(DeepLabV3 分割结果, fontsize14) axes[1].axis(off) plt.tight_layout() plt.show() except Exception as e: print(f下载或处理图片失败{e}) print(跳过此步骤继续下面的内容) print(\n 恭喜你理解了图像分割的基础) print( * 50)按 Shift Enter 运行 费曼输出 #3解释代码含义逐行解释给小白听任务假装你在教一个完全不懂编程的人要解释清楚1. U-Net 的编码器是做什么的 2. 解码器是怎么恢复细节的 3. 跳跃连接是怎么传递信息的 4. 为什么医学图像常用 U-Net要求不用张量、卷积、转置卷积等术语用生活化的比喻每行代码都要说明白参考思路DoubleConv 就像是______ pool 就像是______ upconv 就像是______ torch.cat 就像是______⏰ 时间30 分钟 卡壳检查点□ 我解释不清编码器和解码器的关系 □ 我说不明白跳跃连接的作用 □ 我不能用生活中的例子说明提示DoubleConv 两次卷积提取特征pool 缩小图片保留重要信息upconv 放大图片恢复细节torch.cat 拼接把编码器的信息传过来 今日费曼总结30 分钟⭐完整的费曼学习流程第 1 步回顾今天的内容5 分钟□ 图像分割 vs 目标检测的区别 □ 语义分割和实例分割的不同 □ U-Net 的 U 型结构 □ 跳跃连接的作用 □ 实际应用案例第 2 步合上教程尝试完整教授15 分钟⭐任务假装你在给一个完全不懂的人上第十六堂课要覆盖图像分割和 target detection 的区别用至少 2 个例子语义分割和实例分割各适合什么场景U-Net 的结构特点用图示演示一个实际的分割应用方式 写一篇 800 字左右的文章 录一段 10-15 分钟的视频 找个朋友给他讲一遍第 3 步标记卡壳点5 分钟我今天卡壳的地方 □ _________________________________ □ _________________________________ □ _________________________________第 4 步针对性复习5 分钟回到教程中卡壳的地方重新学习然后再次尝试解释 费曼学习笔记模板╔═══════════════════════════════════════════════════╗ ║ Day 16 费曼学习笔记 ║ ╠═══════════════════════════════════════════════════╣ ║ 日期__________ ║ ║ 学习时长__________ ║ ╠═══════════════════════════════════════════════════╣ ║ ║ ║ 1. 我向小白解释了 ║ ║ _______________________________________________ ║ ║ _______________________________________________ ║ ║ ║ ║ 2. 我卡壳的地方 ║ ║ □ _____________________________________________ ║ ║ □ _____________________________________________ ║ ║ ║ ║ 3. 我的通俗比喻 ║ ║ • 图像分割就像 ______ ║ ║ • 语义分割就像 ______ ║ ║ • 实例分割就像 ______ ║ ║ • U-Net 就像 ______ ║ ║ ║ ║ 4. 我还想知道 ║ ║ _______________________________________________ ║ ║ ║ ╚═══════════════════════════════════════════════════╝ 今日总结✅ 你今天学到了1. 图像分割基础像素级的精细识别语义分割 vs 实例分割实际应用场景2. 核心算法FCN开创者U-Net医学首选Mask R-CNN检测 分割3. 实践能力U-Net 模型实现可视化 U 型结构使用预训练模型4. 费曼输出能力⭐能用比喻解释图像分割能向小白说明 U-Net能区分语义和实例分割 明日预告明天你将学习主题GAN 生成对抗网络 内容 ✓ AI 也能画画 ✓ 生成器和判别器的博弈 ✓ 伪造以假乱真的图片 ✓ 艺术创作应用 ✓ StyleGAN 详解 需要准备 ✓ 复习今天的分割概念 ✓ 了解生成和判别的思想 ✓ 保持好奇心 常见问题Q1: 图像分割和目标检测到底有什么区别目标检测: → 用矩形框框住物体 → 知道位置和类别 → 但框里有背景 图像分割: → 精确勾勒物体轮廓 → 每个像素都分类 → 可以完美抠图 选择 - 只需要知道位置 → 目标检测 - 需要精确轮廓 → 图像分割Q2: 语义分割和实例分割怎么选语义分割: ✓ 只关心类别 ✓ 不区分个体 ✓ 适合道路分割、天空分割 ✗ 无法数清楚有几个物体 实例分割: ✓ 既关心类别 ✓ 又区分个体 ✓ 适合数人头、细胞计数 ✗ 计算更复杂 例子 - 分析交通拥堵 → 语义分割知道哪里是车就行 - 统计车流量 → 实例分割要数有几辆车Q3: U-Net 为什么在医学图像这么火原因 1数据量少也能训练 ✓ 医学图像标注成本高 ✓ U-Net 小样本表现好 原因 2保留边缘细节 ✓ 跳跃连接传递细节 ✓ 病灶边界很重要 原因 3结构简单有效 ✓ 容易理解和实现 ✓ 效果稳定可靠 应用 - 肿瘤分割 - 细胞计数 - 器官定位 - 病变检测 最后的鼓励第十六天完成了你已经掌握了 ✓ Week 1: 机器学习基础 ✓ Week 2: 深度学习入门 ✓ Week 3: 进阶深度学习2/7 这是质的飞跃 从今天起 ✓ 你能做像素级分割了 ✓ 你能解释 U-Net 了 ✓ 你能用预训练模型了 ✓ 你能创造生动的比喻了 记住这个成就感 每天都在进步 每天都在变强 继续加油明天学习 GAN 记住 细节决定成败 你现在有了这种精细识别的能力 可以做更多有意义的事情了 加油我相信你一定可以的✨ 打卡模板日期___________ 学习时长_______ 小时 费曼输出次数_______ 次 今天学会了 遇到的卡壳点 如何用比喻解释的 明天的目标明天见继续加油✨ 相关链接 项目资源GitHub 仓库: https://github.com/Lee985-cmd/AI-30-Day-ChallengeCSDN 专栏: https://blog.csdn.net/m0_67081842?typeblog⭐如果觉得有帮助请给 GitHub 仓库 Star 支持本教程属于 AI 入门 30 天挑战 系列 恭喜你完成今天的学习 资源汇总完整 30 天教程CSDN 专栏 - AI 入门 30 天挑战完整代码 项目实战GitHub 仓库 ⭐欢迎 Star❓遇到问题GitHub Issues 提问 互动时间思考题今天的知识点中哪个让你印象最深刻为什么欢迎在评论区分享你的想法或疑问❤️ 如果有帮助点赞让更多人看到这篇教程⭐Star GitHub获取完整代码和项目➕关注专栏不错过后续更新分享给朋友一起学习进步明天见继续 Day 19 的学习~其他平台GitHubhttps://github.com/Lee985-cmd/AI-30Days-ChallengeCSDN 博客https://blog.csdn.net/m0_67081842学习建议如果本篇教程对你有帮助欢迎Star GitHub 项目https://github.com/Lee985-cmd/AI-30Days-Challenge留言交流你的学习困惑一起学习一起进步

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

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

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…