当前位置: 首页 > article >正文

AI 入门 30 天挑战 - Day 15 费曼学习法版 - 目标检测基础

完整项目和代码本教程是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 步快速复习 Week 2 的内容30 分钟费曼输出 #0考考你合上教程尝试回答□ CNN 是怎么提取图像特征的用卷积核的例子说明 □ 什么是池化层为什么要降维 □ ResNet 的核心创新是什么解决了什么问题 □ RNN 和 LSTM 的区别在哪里各适合什么场景 □ 如果你要做图像分类项目你会怎么设计流程⏰ 时间25 分钟如果能答出 80% 以上我们开始今天的目标检测之旅如果不够花 5 分钟翻一下 Week 2 的笔记。 第 2 步什么是目标检测40 分钟故事时间 图像分类 vs 目标检测场景一张足球比赛的照片 图像分类Week 2 学的: 你问这是什么场景 AI 答足球场 ❌ 只有整体标签 问题 - 场上有多少人不知道 - 球在哪里不知道 - 球门在哪个位置不知道 目标检测今天要学的: 你问图里有什么在哪里 AI 答 - 左上角有个人边界框 95% 置信度✅ - 中间有个足球边界框 88% 置信度✅ - 右下角有球门边界框 92% 置信度✅ 既知道是什么又知道在哪里生活中的例子超市找商品 图像分类就像 你妈说去超市买水果 你到了超市这是水果区 ✅ 但不知道苹果、香蕉具体在哪里 ❌ 目标检测就像 你妈说去超市买苹果和香蕉 你不仅能找到水果区 还能准确地指出 - 苹果在这里伸手拿 - 香蕉在那里伸手拿 这就是目标检测的价值目标检测的任务详解输入一张图片 ↓ [目标检测模型] ↓ 输出多个边界框 类别标签 例如 ┌──────────────┐ │ 人 95% │ ← 边界框 1 │ ┌────┐ │ │ 车 98% │ ← 边界框 2 │ └────┘ │ │ 猫 92% │ ← 边界框 3 └──────────────┘ 每个检测包含 ✓ 位置x, y, 宽高 ✓ 类别人、车、猫... ✓ 置信度95%、98%... 应用 - 自动驾驶检测行人、车辆 - 安防监控检测可疑人员 - 医疗影像检测病变区域 - 零售检测货架商品 费曼输出 #1解释目标检测任务 1向小学生解释场景有个小朋友问你目标检测是什么要求不用边界框、置信度、IoU这些专业术语用游戏、寻宝、拍照等生活场景比喻让小学生能听懂参考模板目标检测就像______一样。 比如你在______ 要找到______。 你不仅要说出______ 还要指出______。 这样就能______⏰ 时间15 分钟 卡壳检查点如果你在解释时卡住了□ 我说不清楚图像分类和目标检测的区别 □ 我不知道如何解释定位的概念 □ 我只能说检测物体但不能说明白怎么做到的这很正常标记下来回去再看上面的内容然后重新尝试解释提示图像分类 整体判断这是什么地方目标检测 个体识别什么东西在哪里就像看森林 vs 数树木 第 3 步核心概念详解60 分钟1. 边界框Bounding Box生活中的例子相框你要给墙上的一幅画拍照 方法 1把整面墙拍下来 ❌ 画太小看不清 方法 2只拍画的部分 ✅ 正好框住画 这个正好框住就是边界框 在目标检测中 - 找到物体的最小矩形框 - 用 4 个数字表示 两种常用表示方法 方法 1[x_min, y_min, x_max, y_max] → 左上角和右下角坐标 → PyTorch 默认用这个 方法 2[center_x, center_y, width, height] → 中心点 宽高 → YOLO 等模型用这个 可以互相转换2. IoU交并比怎么判断框得准不准真实框Ground Truth: ┌─────────┐ │ │ │ │ ← 实际的物体 │ │ └─────────┘ 预测框Prediction: ┌─────────┐ │ │ │ │ ← AI 预测的框 │ │ └─────────┘ IoU 交集面积 / 并集面积 解释 - 交集 两个框重叠的部分 - 并集 两个框覆盖的全部区域 IoU 1.0 → 完美重合 ✅ IoU 0.7 → 还不错 IoU 0.3 → 差太远 ❌ 一般 IoU 0.5 就认为检测成功 就像考试评分 - 90 分以上 优秀 - 60 分以上 及格 - 60 分以下 不及格3. 非极大值抑制NMS问题同一个物体被框了多次AI 检测一只猫 第 1 次[猫 95%] ┌──┐ 第 2 次[猫 93%] ┌──┐ 第 3 次[猫 85%] ┌──┐ 都框住了同一只猫 ❌ 为什么会出现这个问题 因为 AI 会从不同角度、不同尺度检测 可能会产生多个候选框 解决NMS非极大值抑制 步骤 1. 按置信度排序95% 93% 85% 2. 选最高的95% 这个 3. 去掉和它重叠的93% 和 85% 去掉 4. 结果只保留最好的那个框 ✅ 就像选班长 - 全班投票 - 得票最多的当选 - 其他人淘汰 或者像比赛 - 预赛选出很多人 - 复赛筛选 - 决赛只要冠军 费曼输出 #2深入理解核心概念任务 1创造多个比喻场景 A解释给摄影师听用拍照的例子 取景框 边界框 对焦准确度 IoU 连拍选最佳 NMS场景 B解释给老师听用考试的例子 答题卡上的框 边界框 答案匹配度 IoU 选择题排除法 NMS场景 C解释给厨师听用切菜的例子 切成的方块 边界框 切得准不准 IoU 去掉不好的部分 NMS要求每个场景都要详细说明任务 2解释技术细节思考题1. 为什么要有两种边界框表示方法 2. IoU 为什么用交集除以并集 3. NMS 会不会误删什么情况下会发生 4. 如果两个物体靠得很近怎么办⏰ 时间25 分钟 卡壳检查点□ 我解释不清 IoU 的计算原理 □ 我说不明白 NMS 的必要性 □ 我不能用生活中的例子说明提示边界框 框住物体的矩形IoU 衡量准确度的尺子NMS 去重工具留最优 第 4 步动手实现70 分钟完整代码实现import torch import torchvision from torchvision.ops import nms, box_iou import matplotlib.pyplot as plt import matplotlib.patches as patches import numpy as np print( * 50) print(️ 目标检测基础详解) print( * 50) # # 第 1 步理解边界框表示 # print(\n【1. 边界框表示方法】) # 方法 1[x_min, y_min, x_max, y_max] box1 torch.tensor([[50, 50, 150, 150]], dtypetorch.float32) print(f方法 1[xmin, ymin, xmax, ymax]) print(f 例子{box1}) print(f 含义左上角 (50,50), 右下角 (150,150)) # 方法 2[center_x, center_y, width, height] box2 torch.tensor([[100, 100, 100, 100]], dtypetorch.float32) print(f\n方法 2[cx, cy, w, h]) print(f 例子{box2}) print(f 含义中心点 (100,100), 宽 100, 高 100) print(f\n 两种方法可以互相转换:) print(f PyTorch 默认用方法 1) print(f YOLO 等模型用方法 2) # 可视化 fig, ax plt.subplots(1, figsize(6, 6)) ax.set_xlim(0, 200) ax.set_ylim(0, 200) ax.set_aspect(equal) ax.grid(True, alpha0.3) # 画法 1 rect1 patches.Rectangle( (box1[0, 0], box1[0, 1]), box1[0, 2] - box1[0, 0], box1[0, 3] - box1[0, 1], linewidth2, edgecolorr, facecolornone, label[xmin,ymin,xmax,ymax] ) ax.add_patch(rect1) # 画法 2转换后 x_min box2[0, 0] - box2[0, 2] / 2 y_min box2[0, 1] - box2[0, 3] / 2 rect2 patches.Rectangle( (x_min, y_min), box2[0, 2], box2[0, 3], linewidth2, edgecolorb, facecolornone, linestyle--, label[cx,cy,w,h] ) ax.add_patch(rect2) ax.legend() ax.set_title(边界框的两种表示方法) plt.show() # # 第 2 步计算 IoU # print(\n * 50) print(【2. 计算 IoU交并比】) print( * 50) # 创建两个边界框 box_a torch.tensor([[50, 50, 150, 150]], dtypetorch.float32) # 真实框 box_b torch.tensor([[60, 60, 160, 160]], dtypetorch.float32) # 预测框 print(f真实框{box_a}) print(f预测框{box_b}) # 计算 IoU iou box_iou(box_a, box_b) print(f\nIoU {iou.item():.4f}) # 可视化 fig, ax plt.subplots(1, figsize(6, 6)) ax.set_xlim(0, 200) ax.set_ylim(0, 200) ax.set_aspect(equal) ax.grid(True, alpha0.3) # 画真实框 rect_gt patches.Rectangle( (box_a[0, 0], box_a[0, 1]), box_a[0, 2] - box_a[0, 0], box_a[0, 3] - box_a[0, 1], linewidth2, edgecolorg, facecolorgreen, alpha0.3, label真实框 ) ax.add_patch(rect_gt) # 画预测框 rect_pred patches.Rectangle( (box_b[0, 0], box_b[0, 1]), box_b[0, 2] - box_b[0, 0], box_b[0, 3] - box_b[0, 1], linewidth2, edgecolorr, facecolorred, alpha0.3, label预测框 ) ax.add_patch(rect_pred) ax.legend() ax.set_title(fIoU {iou.item():.4f}) plt.show() print(f\n IoU 解读:) print(f IoU 1.0 → 完美重合 ✅) print(f IoU 0.5 → 检测成功) print(f IoU 0.5 → 需要改进) # # 第 3 步NMS 实战 # print(\n * 50) print(【3. 非极大值抑制NMS】) print( * 50) # 创建一些边界框模拟对同一只猫的多次检测 boxes torch.tensor([ [50, 50, 150, 150, 0.95], # [x1, y1, x2, y2, score] [52, 52, 152, 152, 0.93], [48, 48, 148, 148, 0.85], [200, 200, 300, 300, 0.90], # 另一个物体 [205, 205, 305, 305, 0.80], ], dtypetorch.float32) print(原始检测结果5 个框:) for i, box in enumerate(boxes): print(f 框{i1}: [{box[0]:.0f}, {box[1]:.0f}, {box[2]:.0f}, {box[3]:.0f}] f置信度{box[4]:.2f}) # 分离坐标和分数 boxes_xyxy boxes[:, :4] scores boxes[:, 4] # 应用 NMS keep nms(boxes_xyxy, scores, iou_threshold0.5) print(f\nNMS 后保留的索引{keep}) # 查看保留的框 kept_boxes boxes[keep] print(fNMS 后的结果{len(kept_boxes)} 个框:) for i, box in zip(keep, kept_boxes): print(f 框{i1}: [{box[0]:.0f}, {box[1]:.0f}, {box[2]:.0f}, {box[3]:.0f}] f置信度{box[4]:.2f} ✅) # 可视化 fig, ax plt.subplots(1, figsize(10, 5)) # NMS 前 ax1 ax ax1.set_xlim(0, 400) ax1.set_ylim(0, 400) ax1.set_aspect(equal) ax1.grid(True, alpha0.3) ax1.set_title(NMS 前5 个框) colors [red, orange, yellow, blue, purple] for i, box in enumerate(boxes): rect patches.Rectangle( (box[0], box[1]), box[2] - box[0], box[3] - box[1], linewidth2, edgecolorcolors[i], facecolorcolors[i], alpha0.3, labelf框{i1} ({box[4]:.2f}) ) ax1.add_patch(rect) ax1.text(box[0], box[1]-5, f{box[4]:.2f}, fontsize9, colorcolors[i]) # NMS 后 ax2 ax1.twin() ax2.set_xlim(0, 400) ax2.set_ylim(0, 400) ax2.set_aspect(equal) ax2.grid(True, alpha0.3) ax2.set_title(NMS 后保留 2 个框) for i, box in zip(keep, kept_boxes): rect patches.Rectangle( (box[0], box[1]), box[2] - box[0], box[3] - box[1], linewidth3, edgecolorgreen, facecolorgreen, alpha0.3, labelf保留框{i1} ({box[4]:.2f}) ) ax2.add_patch(rect) ax2.text(box[0], box[1]-5, f{box[4]:.2f} ✅, fontsize10, colorgreen, fontweightbold) plt.tight_layout() plt.show() print(f\n NMS 的作用:) print(f 去除重复检测) print(f 保留置信度最高的框) print(f 让结果更干净) # # 第 4 步使用预训练的目标检测模型 # print(\n * 50) print(【4. 使用 Faster R-CNN 进行目标检测】) print( * 50) # 加载预训练的 Faster R-CNN 模型 model torchvision.models.detection.fasterrcnn_resnet50_fpn(pretrainedTrue) model.eval() print(✓ Faster R-CNN 模型加载完成) print( 可以检测 COCO 数据集的 80 种物体) # 读取一张图片 from PIL import Image import requests from io import BytesIO print(\n正在下载测试图片...) url https://farm.staticflickr.com/2/1715103333_13a0a7d4fc_z.jpg try: response requests.get(url) img Image.open(BytesIO(response.content)) # 转换为 Tensor transform transforms.Compose([ transforms.ToTensor() ]) img_tensor transform(img).unsqueeze(0) # 进行检测 with torch.no_grad(): prediction model(img_tensor) print(f✓ 检测完成) print(f 检测到 {len(prediction[0][boxes])} 个物体) # 显示结果 fig, ax plt.subplots(1, figsize(12, 8)) ax.imshow(img) # 获取类别名称 COCO_CATEGORIES [ __background__, person, bicycle, car, motorcycle, airplane, bus, train, truck, boat, traffic light, fire hydrant, stop sign, parking meter, bench, bird, cat, dog, horse, sheep, cow, elephant, bear, zebra, giraffe, backpack, umbrella, handbag, tie, suitcase, frisbee, skis, snowboard, sports ball, kite, baseball bat, baseball glove, skateboard, surfboard, tennis racket, bottle, wine glass, cup, fork, knife, spoon, bowl, banana, apple, sandwich, orange, broccoli, carrot, hot dog, pizza, donut, cake, chair, couch, potted plant, bed, dining table, toilet, tv, laptop, mouse, remote, keyboard, cell phone, microwave, oven, toaster, sink, refrigerator, book, clock, vase, scissors, teddy bear, hair drier, toothbrush ] # 画边界框 for box, label, score in zip( prediction[0][boxes], prediction[0][labels], prediction[0][scores] ): if score 0.5: # 只显示置信度50%的 box box.numpy() class_name COCO_CATEGORIES[label] rect patches.Rectangle( (box[0], box[1]), box[2] - box[0], box[3] - box[1], linewidth2, edgecolorlime, facecolornone, labelf{class_name} ({score:.2f}) ) ax.add_patch(rect) ax.text(box[0], box[1]-5, f{class_name} {score:.2f}, fontsize9, colorlime, fontweightbold) ax.set_title(Faster R-CNN 目标检测结果) plt.tight_layout() plt.show() except Exception as e: print(f下载或处理图片失败{e}) print(跳过此步骤继续下面的内容) print(\n 恭喜你理解了目标检测的基础) print( * 50)按 Shift Enter 运行 费曼输出 #3解释代码含义逐行解释给小白听任务假装你在教一个完全不懂编程的人要解释清楚1. 边界框的 4 个数字各代表什么 2. IoU 是怎么计算的为什么要这样算 3. NMS 的算法流程是怎样的 4. 预训练模型能做什么要求不用张量、阈值、索引等术语用生活化的比喻每行代码都要说明白参考思路torch.tensor 就像是______ box_iou 就像是______ nms 就像是______ pretrained 就像是______⏰ 时间30 分钟 卡壳检查点□ 我解释不清边界框的坐标含义 □ 我说不明白 NMS 的去重逻辑 □ 我不能用生活中的例子说明提示torch.tensor 装数据的容器box_iou 计算两个框的重叠程度nms 去掉重复的留最好的pretrained 别人训练好的模型 今日费曼总结30 分钟⭐完整的费曼学习流程第 1 步回顾今天的内容5 分钟□ 图像分类 vs 目标检测的区别 □ 边界框的两种表示方法 □ IoU 的计算和意义 □ NMS 的原理和作用 □ 使用预训练模型检测第 2 步合上教程尝试完整教授15 分钟⭐任务假装你在给一个完全不懂的人上第十五堂课要覆盖目标检测和图像分类的区别用至少 2 个例子边界框是怎么框住物体的IoU 是怎么判断准确度的NMS 是怎么去重的演示一个实际的目标检测应用方式 写一篇 800 字左右的文章 录一段 10-15 分钟的视频 找个朋友给他讲一遍第 3 步标记卡壳点5 分钟我今天卡壳的地方 □ _________________________________ □ _________________________________ □ _________________________________第 4 步针对性复习5 分钟回到教程中卡壳的地方重新学习然后再次尝试解释 费曼学习笔记模板╔═══════════════════════════════════════════════════╗ ║ Day 15 费曼学习笔记 ║ ╠═══════════════════════════════════════════════════╣ ║ 日期__________ ║ ║ 学习时长__________ ║ ╠═══════════════════════════════════════════════════╣ ║ ║ ║ 1. 我向小白解释了 ║ ║ _______________________________________________ ║ ║ _______________________________________________ ║ ║ ║ ║ 2. 我卡壳的地方 ║ ║ □ _____________________________________________ ║ ║ □ _____________________________________________ ║ ║ ║ ║ 3. 我的通俗比喻 ║ ║ • 目标检测就像 ______ ║ ║ • 边界框就像 ______ ║ ║ • IoU 就像 ______ ║ ║ • NMS 就像 ______ ║ ║ ║ ║ 4. 我还想知道 ║ ║ _______________________________________________ ║ ║ ║ ╚═══════════════════════════════════════════════════╝ 今日总结✅ 你今天学到了1. 目标检测基础图像分类 vs 目标检测检测 定位的双重任务实际应用场景2. 核心技术边界框两种表示方法IoU交并比NMS非极大值抑制3. 实践能力边界框的可视化IoU 的计算NMS 的应用使用预训练模型4. 费曼输出能力⭐能用比喻解释目标检测能向小白说明边界框能完整讲解 NMS 流程 明日预告明天你将学习主题图像分割语义分割 内容 ✓ 比目标检测更精细 ✓ 精确到像素级别 ✓ 每个像素都分类 ✓ 医学影像分析 ✓ 自动驾驶道路识别 需要准备 ✓ 复习今天的边界框概念 ✓ 了解像素的基本概念 ✓ 保持好奇心 常见问题Q1: 目标检测和图像分类到底有什么区别图像分类: → 整张图片一个标签 → 这是猫 → 不管猫在哪里 目标检测: → 多个物体多个标签 → 这里有一只猫那里有一个人 → 既知道是什么又知道在哪里 选择 - 只需要判断场景 → 图像分类 - 需要找出所有物体 → 目标检测Q2: IoU 为什么重要IoU 是目标检测的核心指标 ✓ 衡量检测准确度 ✓ 训练时的优化目标 ✓ NMS 的关键参数 ✓ 评估模型性能 就像考试的分数 - 告诉你做得好不好 - 指导你怎么改进 - 比较谁做得更好Q3: NMS 会不会误删会有以下情况 情况 1两个物体靠得很近 → 可能被当成同一个物体 → 解决方案调低 NMS 阈值 情况 2遮挡严重 → 多个小框可能被保留 → 解决方案结合其他信息 实际应用中的权衡 - 阈值高 → 可能漏检 - 阈值低 → 可能重复 - 需要根据场景调整 最后的鼓励第十五天完成了你已经掌握了 ✓ Week 1: 机器学习基础 ✓ Week 2: 深度学习入门 ✓ Day 15: 目标检测基础 这是质的飞跃 从今天起 ✓ 你能做目标检测了 ✓ 你能解释边界框了 ✓ 你能用预训练模型了 ✓ 你能创造生动的比喻了 记住这个成就感 每天都在进步 每天都在变强 继续加油明天学习图像分割 记住 定位和识别同样重要 你现在有了这种能力 可以做更多有趣的事情了 加油我相信你一定可以的✨ 打卡模板日期___________ 学习时长_______ 小时 费曼输出次数_______ 次 今天学会了 遇到的卡壳点 如何用比喻解释的 明天的目标明天见继续加油✨ 相关链接 项目资源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 16 的学习~学习建议如果本篇教程对你有帮助欢迎Star GitHub 项目https://github.com/Lee985-cmd/AI-30-Day-Challenge留言交流你的学习困惑一起学习一起进步

相关文章:

AI 入门 30 天挑战 - Day 15 费曼学习法版 - 目标检测基础

🌟 完整项目和代码 本教程是 AI 入门 30 天挑战 系列的一部分! 💻 GitHub 仓库: https://github.com/Lee985-cmd/AI-30-Day-Challenge📖 CSDN 专栏: https://blog.csdn.net/m0_67081842?typeblog⭐ 欢迎 Star 支持!…...

嵌入式——认识电子元器件——电阻系列

认识常见电子元器件——电阻介绍名词解释精度温漂噪声过载分类按制造工艺/外观结构分类碳膜电阻金属膜电阻金属氧化膜电阻绕线电阻水泥电阻(陶瓷绕线)贴片电阻(片式厚膜/薄膜)按功能/特性分类固定电阻可调电阻(电位器&…...

从UVM-1.2源码看PH_TIMEOUT:超时机制详解与自定义超时策略配置指南

UVM超时机制深度解析:从源码实现到定制化策略实战 在芯片验证领域,UVM框架的超时机制就像一位严格的监考老师,当测试用例执行时间超出预期时,它会果断终止仿真并抛出PH_TIMEOUT错误。这种看似"无情"的设计背后&#xff…...

2026年终极终端战争:Warp vs. Tabby vs. 文心终端——软件测试工程师的专业选型指南

测试工程师为何需要关注终端革命?在软件开发的生命周期中,测试环节正变得前所未有的复杂与高效。自动化测试、持续集成/持续部署(CI/CD)、云原生与容器化技术的普及,使得测试工程师的工作场景早已超越了简单的图形界面…...

Spring Boot 4.0 Agent集成实战:从字节码注入到可观测性闭环,3步实现零侵入监控升级

第一章:Spring Boot 4.0 Agent-Ready 架构演进与核心价值Spring Boot 4.0 标志着 JVM 应用可观测性与运行时增强能力的一次范式跃迁。其核心设计理念是原生支持 Java Agent 集成,不再将字节码增强视为“外部插件行为”,而是作为框架生命周期的…...

3分钟解锁艾尔登法环帧率限制:告别卡顿的终极完整指南

3分钟解锁艾尔登法环帧率限制:告别卡顿的终极完整指南 【免费下载链接】EldenRingFpsUnlockAndMore A small utility to remove frame rate limit, change FOV, add widescreen support and more for Elden Ring 项目地址: https://gitcode.com/gh_mirrors/el/Eld…...

远程工作骗局:隐形加班——软件测试从业者的专业困境与破局之道

在数字浪潮席卷全球的今天,远程办公、混合工作制已成为包括软件测试行业在内的许多技术领域的“新常态”。它许诺了时间自由、通勤解放与生活平衡,一时间风靡无数职场人。然而,在这看似美好的工作模式背后,一个日益严峻且极具隐蔽…...

Java Stream里的‘懒’与‘急’:从面试题‘peek()为何不生效’讲透流操作原理

Java Stream里的‘懒’与‘急’:从面试题‘peek()为何不生效’讲透流操作原理 在Java开发者的日常工作中,Stream API已经成为集合处理的标配工具。但你是否遇到过这样的场景:在peek()方法中修改了元素,最终collect()的结果却"…...

# WebGPU实战:从零构建高性能图形渲染管线(附完整代码与流程图)在现代Web应用中,**图形渲染性能

WebGPU实战:从零构建高性能图形渲染管线(附完整代码与流程图) 在现代Web应用中,图形渲染性能的提升已成为开发者关注的核心问题之一。随着浏览器对硬件加速能力的支持不断增强,WebGPU作为下一代Web图形API,…...

超市售货管理平台小程序(文档+源码)_kaic

第5章 系统实现编程人员在搭建的开发环境中,会让各种编程技术一起呈现出最终效果。本节就展示关键部分的页面效果。5.1 管理员功能实现5.1.1 商品管理图5.1 即为编码实现的商品管理界面,管理员在商品管理界面中可以对界面中显示,可以对商品信…...

m4s-converter:3分钟实现B站缓存视频永久保存的终极方案

m4s-converter:3分钟实现B站缓存视频永久保存的终极方案 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否曾经在B站缓存了珍贵的…...

别再手动拖Actor了!用UE4官方Python插件解放你的双手(附7种运行脚本方法)

用UE4 Python插件打造高效自动化工作流:7种脚本运行方式全解析 在虚幻引擎4的日常开发中,你是否经历过这样的场景:需要批量放置数百个环境装饰Actor,或者重命名一整套材质资源?传统的手动操作不仅耗时耗力&#xff0c…...

Applera1n:iOS 15-16.6设备激活锁免费绕过完整指南

Applera1n:iOS 15-16.6设备激活锁免费绕过完整指南 【免费下载链接】applera1n icloud bypass for ios 15-16 项目地址: https://gitcode.com/gh_mirrors/ap/applera1n 如果你手头有一台带有激活锁的二手iPhone,看到那个熟悉的"Hello"界…...

从搜索引擎到推荐系统:Dice和Jaccard相似性系数在真实业务场景中的应用与调优

从搜索引擎到推荐系统:Dice和Jaccard相似性系数在真实业务场景中的应用与调优 在信息爆炸的时代,如何在海量数据中快速找到最相关的内容?无论是搜索引擎中的查询匹配,还是推荐系统中的物品推荐,或是社交网络中的用户分…...

告别Confluence,我用开源Outline自建团队Wiki,两个月体验全分享(含Docker一键部署脚本)

从Confluence到Outline:开源Wiki系统的深度迁移实践 在知识管理工具的选择上,许多技术团队正面临一个关键转折点。随着商业SaaS产品定价策略的调整和数据主权意识的觉醒,越来越多的组织开始重新评估他们的知识库解决方案。作为一名长期使用Co…...

2025年09月CCF-GESP编程能力等级认证Python编程四级真题解析

本文收录于专栏《Python等级认证CCF-GESP真题解析》,专栏总目录:点这里,订阅后可阅读专栏内所有文章。 一、单选题(每题 2 分,共 30 分) 第 1 题 人工智能现在非常火,小杨就想多了解一下,其中就经常听人提到 “大模型”。那么请问这里说的 “大模型” 最贴切是指 ( )…...

2025年09月CCF-GESP编程能力等级认证Python编程三级真题解析

本文收录于专栏《Python等级认证CCF-GESP真题解析》,专栏总目录:点这里,订阅后可阅读专栏内所有文章。 一、单选题(每题 2 分,共 30 分) 第 1 题 人工智能现在非常火,小杨就想多了解一下,其中就经常听人提到 “大模型”。那么请问这里说的 “大模型” 最贴切是指 ( )…...

2025年09月CCF-GESP编程能力等级认证Python编程二级真题解析

本文收录于专栏《Python等级认证CCF-GESP真题解析》,专栏总目录:点这里,订阅后可阅读专栏内所有文章。 一、单选题(每题 2 分,共 30 分) 第 1 题 人工智能现在非常火,小杨就想多了解一下,其中就经常听人提到 “大模型”。那么请问这里说的 “大模型” 最贴切是指 ( )…...

从Android AudioMixer源码出发,拆解手机App混音时采样率不一致的‘鬼影’问题

Android音频混音中的采样率陷阱:从源码解析到实战避坑指南 在移动应用开发中,音频处理往往是最容易被忽视却又最容易出问题的领域之一。去年我们团队开发一款语音社交应用时,就遭遇了一个诡异的音频问题——当用户开启背景音乐并进行语音聊天…...

从混乱到清晰:手把手教你用log4net配置多环境、按模块过滤的日志策略

从混乱到清晰:手把手教你用log4net配置多环境、按模块过滤的日志策略 在软件开发的生命周期中,日志系统如同项目的神经系统,贯穿开发、测试、生产全流程。一个设计良好的日志策略能帮助团队快速定位问题、分析性能瓶颈,甚至成为业…...

终极跨平台RGB灯光控制:OpenRGB一站式解决方案彻底告别软件混乱

终极跨平台RGB灯光控制:OpenRGB一站式解决方案彻底告别软件混乱 【免费下载链接】OpenRGB Open source RGB lighting control that doesnt depend on manufacturer software. Supports Windows, Linux, MacOS. Mirror of https://gitlab.com/CalcProgrammer1/OpenRG…...

【12.MyBatis源码剖析与架构实战】19.MyBatis分⻚插件设计与实战

MyBatis 分页插件设计与实战(完整实操案例) 分页查询是业务系统中最常见的需求之一。虽然可以手动在 SQL 后拼接 LIMIT 或 ROWNUM,但这样会侵入业务代码,且需要为每个查询编写重复的分页逻辑。通过 MyBatis 插件机制,我们可以实现一个透明物理分页插件:开发者只需在调用…...

Java响应式编程革命再升级(Loom协程×Virtual Threads×Reactive Streams三重融合白皮书)

第一章:Java响应式编程革命再升级:Loom协程Virtual ThreadsReactive Streams三重融合白皮书Java生态正经历一场静默而深刻的范式迁移——Project Loom的虚拟线程(Virtual Threads)不再仅是轻量级线程的替代方案,而是与…...

API密钥泄露率飙升47%?Dify 2026网关安全配置(2024Q3 CISA认证级实操手册)

第一章:API密钥泄露率飙升47%的行业现状与Dify 2026网关安全演进逻辑近年来,API密钥泄露事件呈爆发式增长。根据2025年CNVD与OWASP联合发布的《AI服务接口安全年报》,全球生产环境中检测到的硬编码API密钥泄露数量同比上升47%,其中…...

保姆级教程:用Python和Basemap绘制台风‘利奇马’期间的卫星云图(附完整代码)

用Python和Basemap绘制台风卫星云图实战指南 去年夏天,当超强台风"利奇马"逼近华东沿海时,气象部门发布了大量卫星云图数据。这些看似简单的彩色图片背后,其实隐藏着台风的强度、移动路径等关键信息。作为气象爱好者或相关领域的研…...

别再只会用NMOS了!PMOS高侧开关搭配稳压管钳位的保姆级配置教程(附电阻计算)

PMOS高侧开关实战指南:从稳压管钳位到电阻计算的完整设计 引言 在电源开关设计中,PMOS高侧驱动方案常被工程师们忽视——大多数人更熟悉NMOS低侧开关的简单用法。但当我们面对需要完全断开电源、避免地线浮空或简化电路结构的场景时,PMOS高侧…...

企业AI落地两年,我学到最贵的一课:别升级你的Agent架构

最近我参与了一个企业AI项目的架构评审。团队花了三个月,搭建了一套他们称之为”多Agent协作系统”的东西:一个编排器LLM负责任务分解,四个工人LLM并行处理,外加一个评估器LLM做质量审核。架构图画了三页PPT,代码量超过…...

PyTorch模型部署实战:手把手教你解决‘tensors on different devices’这个烦人报错

PyTorch模型部署实战:彻底解决设备一致性报错的工程化方案 当你满怀期待地将训练好的PyTorch模型投入生产环境时,屏幕上突然弹出的RuntimeError: Expected all tensors to be on the same device报错就像一盆冷水浇灭了所有热情。这个看似简单的错误背后…...

告别调参玄学:用EEGNet和MNE-Python搞定脑电分类,附完整可运行代码

脑电信号分类实战:EEGNet与MNE-Python的黄金组合 在神经科学和脑机接口研究中,脑电信号分类一直是个令人着迷又充满挑战的领域。传统方法往往需要复杂的特征工程和大量领域知识,而深度学习技术特别是EEGNet的出现,为这一领域带来了…...

TI DP83822I的Strap Pin配置避坑指南:如何根据RMII模式与LED需求精准计算电阻值

DP83822I Strap Pin配置实战:从模式选择到电阻计算的完整设计指南 在以太网硬件设计中,PHY芯片的strap pin配置往往是决定系统稳定性的关键细节。以TI的DP83822I为例,其strap pin不仅决定了RMII/RGMII等工作模式,还影响着LED行为、…...