☰
深度学习人流量检测实战:从YOLO到密度图的完整指南
2026/9/30 9:16:54 网站建设 项目流程

简介:面向毕业设计与课程论文写作需求,这份深度学习人流量检测方法论文资料提供了完整参考。论文以MobileNet-SSD轻量级模型为核心,详细阐述深度可分离卷积减小计算量、加速推断的原理,并完整覆盖六个实施环节:爬取婴儿车数据并结合VOC的person类别自制数据集、构建并训练模型、配置solver参数、Python编写数据输入/行人检测/跟踪/结果输出模块、视频监控下实时统计人流量。针对婴儿车多、行人移动慢的公园与文化广场场景设计实验,验证了模型在准确度、速度和体积上的优势,还讨论了疫情期疏散人群的应用价值。资源含1个docx文件,压缩包224KB,适合初学者、工程师与在校师生研读。目前已有81人学习下载。读者能从中获得论文组织框架、实验设计思路、35层模型细节、开发环境(Ubuntu16.04+Caffe)配置等知识,便于开展类似课题的写作与开发。

1. 基于深度学习的人流量检测方法:这个毕设题目到底在做什么

做毕设选择“基于深度学习的人流量检测方法”这个题目时,我最初的设想很简单:找个目标检测模型把画面里的人框出来,然后len(boxes)就是人数。真正和导师聊过之后才发现,要交差的远不止这些。需要认真回答的是三件事:密集遮挡下怎么不漏检、人数怎么算成连续值而不是单纯数框、以及用什么指标证明你的方法比传统红外对射和人工目测更可靠。这个题目本质是一套完整的计算机视觉工程课题,从数据标注、模型选型、训练调参到论文里的实验组织,每一步都直接决定毕设能不能拿高分。它很适合正在准备毕设或课设的学生,也适合想快速上手深度学习图像识别,并做出一个能跑的原型系统的开发者。

2. 人流量检测的技术选型:从检测到计数的四条路线

2.1 目标检测路线:用 YOLO 检测人头再数框

目标检测是人流量检测里最符合直觉的一条路:先定位画面里每个人,再统计定位结果。这里最常见的选择是单阶段检测器,因为双阶段检测器精度虽高但推理速度慢,做实时计数并不划算。YOLO 系列是出场率最高的模型,原因有三:端到端训练方便、社区资料足够多、部署到普通 CPU 上也不算吃力。如果你是从深度学习入门开始做这个题目,YOLO 是最容易在两周内跑通并看到结果的选择。

实际落地时,我更推荐把检测目标从“人体”换成“人头”。全身检测有个致命问题:人群里两个人站得近一点,预测框就开始互相交叉,后处理的 NMS(非极大值抑制)经常把其中一个人整个压掉。而人头是刚性目标,受衣服颜色、姿态变化影响小,被上半身遮挡的概率也低很多。训练时把标注框换成头部框,推理时统计 confidence 大于阈值的框数量,就得到人数。这里有两个参数值得记下来:confidence 阈值设在 0.25 到 0.5 之间,调低能捞回一部分遮挡目标,但误检也会变多;NMS 的 IoU 阈值在 0.5 到 0.65 之间,稍微偏高一点,能缓解相邻头框被合并成一个框的问题。

这条路线在场景稀疏时表现很好,在商场走廊、会议室出入口这类地方,计数误差通常能控制在 5% 以内。但一旦人群密度上来,框与框大量重叠,漏检率就会快速上升。在每平米 3 人以上的拥挤场景里,mAP 可能看着还可以,但用框数量当成人数,偏差到 20% 都不奇怪。所以论文里报指标时,检测路线最好把 mAP 和计数误差 MAE 两个指标一起放上去,只说其中一个容易被答辩老师抓到漏洞。

2.2 密度图回归路线:拥挤场景里的主流论文方案

密度图回归的思路是:不预测“哪里有一个人”,而是预测“每个像素附近站着多少人”。模型输出一张和输入分辨率接近的热力图,对整张图求和,就是总人数。这条技术路线在人群分析领域几乎是默认选择,尤其面向景区、车站、地铁站这类高密度场景时,检测路线普遍翻车,密度图反而稳定。

常见实现是把 VGG16 去掉全连接层当作特征提取前端,后面接几层空洞卷积。空洞卷积的作用很关键:它能在不缩小特征图的前提下扩大感受野,让模型在预测某个位置时同时看到周围更大的范围。最后用 1x1 卷积输出单通道密度图。训练时让模型输出的密度图去逼近真实密度分布,损失函数用均方误差。真实密度分布由点标注生成:标注时只在每个人头顶点一个点,再以这个点为中心铺一个高斯核。这样一个点就变成一个“软人头”,相邻的人头挨得再近,高斯峰也能区分开,这是密度图抗遮挡的根本原因。

给毕设选型时,我的建议是:如果题目默认场景是密集人流,优先选密度图路线。论文里还能顺带做创新,比如用不同空洞率的并行分支处理不同尺度的人头。MCNN 就是多列不同感受野的经典设计,做对比实验时拿它当 baseline 很合适。密度图的缺点是几乎不可解释,答辩时被问“为什么这个区域预测了 20 人”会很难答,所以一定要配合可视化热力图一起讲,用图说话。

2.3 全局计数回归与分割路线:适合做 baseline 和对比项

全局计数回归是最粗暴的做法:输入一张图,模型直接输出一个数字。实现上把 ResNet 的分类头换成一层线性回归即可,训练时用 MAE 或 MSE 做损失。它的推理速度极快,模型也小,但有两个硬伤:完全不可解释、没有任何位置信息。如果场景只需要一个总人数,比如统计一个房间当前有多少人,它够用;但论文一旦需要分析区域分布,它就顶不上。我的做法是把它作为对比表的第一列 baseline,用实打实的误差数据证明“直接回归丢失空间信息,计数不靠谱”,这比放着不用更有说服力。

分割路线则是把人群当作前景像素分割出来,再按面积或连通域估算人数,在非常拥挤的“人海”画面里表现不错。问题在于它需要像素级标注,标注成本高,而且人数多到一定程度后,分割面积和人数不再是线性关系。课设时间有限,不建议当主线,可以在消融实验里当一个分支变体提一下。这一条路线的价值更多是让论文的技术路线图显得完整,而不是真的去和密度图拼精度。

2.4 技术路线怎么定:先看数据长什么样,再选模型

选型最忌讳一上来就翻最新论文找最复杂模型,反而应该先抽 50 张场景图,肉眼判断几件事:画面里最多出现多少人、人头平均像素大小、相机是俯拍还是平拍、有没有大面积遮挡。下面这个表是我给历届学生用的判断依据:

场景特征推荐主线论文侧重点
稀疏到中等密度,需要画出位置框YOLO 检测人头mAP + 计数误差双指标
密集人群,头挨着头密度图回归(VGG + 空洞卷积)MAE/MSE 对比、密度图可视化
只需要总人数,设备算力弱全局回归参数效率、消融实验
超密集人海,像素级场景分割 + 面积估计区域计数、边界误差分析

确定主线之后再定对比模型:检测路线至少和 YOLOv5、YOLOv8 对比;密度路线至少和 CSRNet、MCNN 对比。这样论文里的技术路线图就有了一条推导链,而不是“我猜这个模型好用”。如果数据还没采集,先按这个表里的场景描述去拍素材,比盲目用公开数据集更贴近你的论文题目。

3. 用 PyTorch 跑通人流量检测最小流程:环境、数据与训练参数

3.1 深度学习环境配置:从 Miniconda 开始,先确认 CUDA 再装 PyTorch

环境配置是毕设里第一个劝退点。常见的可靠做法是先用 Miniconda 建一个独立环境,不要动 base 环境,否则装坏一个包会连带崩掉一堆东西。

conda create -n crowd python=3.10 -y conda activate crowd conda install pytorch torchvision pytorch-cuda=12.1 -c pytorch -c nvidia python -c "import torch; print(torch.__version__, torch.cuda.is_available())"

python=3.10是兼容性相对稳定的版本;pytorch-cuda=12.1要和本机 NVIDIA 驱动支持的 CUDA 版本对应,不是随便填的。最后一行验证命令必须输出True,代表 GPU 可用。如果本地是纯 CPU 环境,把安装源换成 CPU 版即可,训练会慢不少,但能先把流程跑通、把指标算出来,之后再租服务器迭代。没有 GPU 又想快速实验的话,租一台带 GPU 的云服务器做训练是常见操作,本地只做推理验证,成本比想象中低。

装完先别急着装其他包,跑一次验证命令。报错大多是 CUDA 版本不匹配或者驱动太老,先把这两件事对齐,再装numpy、scipy、matplotlib。缺什么包在训练报错时再补,避免把环境搞成一个不可复现的黑匣子。每次重启电脑后先conda activate crowd再跑训练,这个习惯能省掉大量“刚才明明能跑现在报错”的排查时间。

3.2 数据集准备:标注转成检测框和密度图两种信号

人流量检测的数据标注有两种形态。检测路线用矩形框标每个头,密度路线用点标每个头的中心。公开数据集方面,ShanghaiTech 分成 Part A 的密集场景和 Part B 的稀疏街道,UCF-QNRF 是难度更高的密集场景,做毕设选其中一个就能撑起完整对比实验。

以检测路线为例,把 VOC 格式的 XML 标注转成 YOLO 需要的 txt 格式时,核心工作是归一化坐标:

# voc2yolo.py:把XML里的框转成YOLO训练格式 import glob import xml.etree.ElementTree as ET def convert_xml(xml_file, out_txt, class_id=0): tree = ET.parse(xml_file) # 解析标注文件 root = tree.getroot() w_img = int(root.find("size/width").text) # 图像原始宽度 h_img = int(root.find("size/height").text) # 图像原始高度 lines = [] for obj in root.iter("object"): name = obj.find("name").text if name != "person": # 只保留人,忽略其他类别 continue box = obj.find("bndbox") x1, y1 = int(box.find("xmin").text), int(box.find("ymin").text) x2, y2 = int(box.find("xmax").text), int(box.find("ymax").text) # YOLO格式:类别 + 中心点归一化 + 宽高归一化 cx = (x1 + x2) / 2 / w_img cy = (y1 + y2) / 2 / h_img bw = (x2 - x1) / w_img bh = (y2 - y1) / h_img lines.append(f"{class_id} {cx:.6f} {cy:.6f} {bw:.6f} {bh:.6f}") with open(out_txt, "w") as f: f.write("\n".join(lines)) for xml in glob.glob("labels/*.xml"): convert_xml(xml, xml.replace(".xml", ".txt"))

这个脚本看起来简单,但坐标不归一化、宽高算反、类别名不匹配三个问题我都见过。写完先挑三张图,把转出来的坐标画回原图检查,确认框紧贴头顶边缘,再批量执行剩下的文件。批量转换前画图这步是血泪经验,至少能救回一整天的重标时间。

密度路线要生成训练用的真实密度图。点标注本质是坐标列表,每个点膨胀成一个高斯峰:

import numpy as np from scipy.ndimage import gaussian_filter def make_density_map(points, h, w, sigma=4): # points: 每个人头顶中心坐标的列表 density = np.zeros((h, w), dtype=np.float32) for x, y in points: # 防止标注点刚好落在图像边界外 x = min(int(x), w - 1) y = min(int(y), h - 1) density[y, x] = 1 # 高斯模糊把离散点变成连续的密度分布 density = gaussian_filter(density, sigma=sigma) return density

sigma这个参数直接决定训练目标。固定 sigma 适合人头大小接近的场景,比如固定机位的俯拍;如果是大角度平拍,近处人头大、远处人头小,固定 sigma 会让远处的小头目标学不到精细信号。论文里对这个参数很敏感,自适应 sigma 是很多改进工作的切入点,常见做法是让 sigma 和每个点到周围人头最近距离成正比,人头越密集的地方 sigma 越小、峰越锐利。

3.3 训练循环与超参数:密度图模型的完整最小训练代码

密度图模型训练不需要复杂后处理,一个最小训练循环长这样:

import torch import torch.nn as nn model = CSRNet().to(device) # 前端VGG16 + 空洞卷积 optimizer = torch.optim.Adam(model.parameters(), lr=1e-4, weight_decay=1e-4) criterion = nn.MSELoss() # 回归任务用均方误差 for epoch in range(200): model.train() for img, gt_density in train_loader: # 每个batch:图 + 真实密度图 img, gt_density = img.to(device), gt_density.to(device) pred_density = model(img) loss = criterion(pred_density, gt_density) # 密度图逐像素逼近 optimizer.zero_grad() loss.backward() optimizer.step() if (epoch + 1) % 10 == 0: mae = evaluate_mae(val_loader, model) # 验证集MAE print(f"epoch {epoch+1}, loss {loss.item():.4f}, MAE {mae:.1f}") if mae < best_mae: # 保存最优权重,相当于后悔药 torch.save(model.state_dict(), "best_csrnet.pt") best_mae = mae

几个参数的常规取值要解释清楚。lr=1e-4是密度图回归的常见起点,比分类任务低很多,因为这里是直接回归像素级数值,学习率太大会导致 loss 乱跳;weight_decay=1e-4做轻量正则,防止空洞卷积的百万级参数过拟合。batch size 依显存定,8 到 32 都试过,显存不够就调小输入图分辨率,不要硬顶。200 个 epoch 是这类任务的常见上限,配合每 10 轮打印一次验证 MAE,能清楚看到模型是在收敛还是已经停滞。

检测路线的训练更省事,用 YOLO 系列自带命令就能跑:

yolo detect train data=crowd.yaml model=yolov8n.pt epochs=120 imgsz=640 batch=16 lr0=0.01 patience=20

imgsz=640是训练分辨率,小目标多就提到 1280,显存占用会翻倍;lr0=0.01是初始学习率,配合内置的余弦退火下降;patience=20表示验证指标连续 20 轮不涨就提前停,不用守着训练。yolov8n是 nano 版本,参数量小,课设环境带得动。训练结束后别急着收工,用验证集里误差最大的几张图跑一次可视化,确认模型不是靠运气蒙对的。

3.4 评估指标:MAE 和 MSE 这么算,论文里这么写

人流量检测的核心指标不是准确率,而是计数误差。最常用的是 MAE 和 MSE:

def evaluate_mae_mse(loader, model): device = next(model.parameters()).device mae = mse = total = 0 with torch.no_grad(): for img, gt in loader: pred = model(img.to(device)).sum().item() # 密度图求和 = 预测人数 gt_count = gt.sum().item() # 真实人数 mae += abs(pred - gt_count) mse += (pred - gt_count) ** 2 total += 1 return mae / total, (mse / total) ** 0.5 mae, mse = evaluate_mae_mse(val_loader, model) print(f"MAE {mae:.1f} / MSE {mse:.1f}")

MAE 是平均绝对误差,反映整体偏差;MSE 先平方再开根,会把个别误差极大的画面放大,所以论文里两个都报。检测路线会额外报 mAP,但 mAP 高不代表计数准,因为漏检和误检会互相抵消。我的习惯是把测试集按人数分成低密度、中密度、高密度三个子集分别算 MAE,这样能定位模型到底在哪种场景失效。

测试子集场景说明MAE
低密度段画面少于 10 人示例填数
中密度段画面 10 到 30 人示例填数
高密度段画面 30 人以上示例填数

论文里写指标时,不要只给一个数字,加一句“高密度段误差明显高于低密度段,主要原因是遮挡加剧导致漏检”,这一段分析能让实验部分立得住。

4. 密集人群场景避坑记录:5 个踩过的坑

4.1 小目标人头漏检:远处的头在特征图里只剩一个像素

现象:测试集里画面远端的人群几乎全被漏掉,整体 MAE 比预期高出一大截。把预测结果画出来,近处的头框得很准,远处的头位置彻底空白。

原因:目标检测模型普遍做 8 倍以上下采样,一个 16x16 像素的头顶在特征图里只剩 2x2 个值,信息基本被卷积冲掉。密度图模型如果继续用固定 sigma,小头的能量太弱,回归值趋近于零。

解决:检测路线把输入分辨率从 640 提到 1280,并开启多尺度预测层;密度路线减少前端下采样次数,或者用空洞卷积维持特征图分辨率。这两个手段不能根治,但能把远端检出率拉回可用水平。论文里把远端场景单独拿出来做“尺度鲁棒性”分析,比报一个总 MAE 更有说服力。

4.2 严重遮挡导致框合并:NMS 把两个人按成一个计数

现象:两个人在画面里身体重叠、只露出两个头,检测结果只输出一个框。实际人数 2,模型输出 1,人工核查时还说不清错在哪。

原因:NMS 执行时,如果一个低分框和高分框的重叠面积过大,低分框会被直接抑制。头贴头时两个框的 IoU 可能超过 0.7,后处理默认参数把其中一个当成重复框删掉了。

解决:把 confidence 阈值从默认 0.25 降到 0.1 到 0.15,让更多被压制的低分框活下来;更靠谱的是换成 soft-NMS 或 WBF 加权框融合,这类后处理在密集目标场景里比单纯调 IoU 阈值有效得多。另外重申主线选择:对头挨头级别的遮挡,密度图路线天生比检测路线稳定,这是我对比实验后反复强调的一点。

4.3 透视形变:近处一个大头能顶远处五个小头

现象:相机平拍时,近处一个人占 200 像素高度,远处只占 20 像素。密度图模型把近处的人预测成一个大能量团,远处的人被忽略,总人数被低估。

原因:固定 sigma 的高斯核假设所有人头一样大,但透视让真实人头尺度跨度非常大。模型学到的密度峰面积和真实人头面积对不上,近处一个峰的能量能覆盖远处好几个头。

解决:密度图路线改用自适应高斯核,sigma 根据当前点和相邻人头距离动态计算,人头越密的地方 sigma 越小、峰越锐利。检测路线则开启多尺度训练,让模型在训练中见过各种尺度的人头。这步做完,高密度段的 MAE 通常能明显降下来,而且可视化热力图里近处和远处的峰值响应会均匀很多。

4.4 标注质量翻车:GT 不贴边,模型学到的“人头”是错的

现象:自己标了 500 张图,训练出来的模型在部分场景里把衣领、背包当成人头。把预测框画出来看,位置总是偏一个角。

原因:标注时偷懒,点标在肩膀、框松垮垮地包住肩部。模型拟合了一个错误分布,人头中心的标签和真实头部区域对不上。这个问题在标注阶段看不出来,到训练完才暴露,返工成本很高。

解决:定死一套标注规范再动手。检测标注要求框紧贴头的上下左右边缘,密度标注要求点落在头顶中心而不是后脑勺。标完前 50 张先抽样画图自检,找同学复核一遍,不一致的先改规范再继续。批量转换后也一定要画图抽查,不能只看 txt 文件格式对不对。这条如果踩中,代价是按千张计的标注时间。

4.5 训练震荡不收敛:loss 玄学背后是学习率和数据顺序问题

现象:loss 前 20 轮一直在 0.1 附近抖动,验证 MAE 卡在 80 上下不再下降。重新跑一遍,结果忽高忽低,像开盲盒。

原因:学习率对回归任务偏大,梯度在最优解附近来回震荡;数据加载器没有打乱,连续多个 batch 都是同一角度的画面,梯度方向被带偏。

解决:把初始学习率降到 1e-5 到 1e-4 区间,或者用带 warmup 的调度器,前 5 轮线性升到目标学习率。dataloader 打开shuffle=True,让每个 epoch 的数据顺序都不同。还有一条重要习惯:训练时每轮都保存当前最优权重,等全部跑完再回滚到 best epoch。这个后悔药机制配合 loss 曲线一起看,能省掉大量无效重训时间。

5. 论文实验怎么组织:数据划分、对比表和可视化

5.1 数据集划分:先定划分方案再写代码,防止数据泄漏

论文实验部分最容易被质疑的就是数据划分。常见做法是 6:2:2 拆成训练、验证、测试三份。但如果数据是自己采集的视频,按帧随机划分会出事:同一时刻的相邻帧几乎一模一样,模型在训练帧上见过相似画面,测试指标虚高,答辩时一抽视频帧就露馅。

可靠做法是按视频时间顺序切段,前 60% 的帧做训练、中间 20% 做验证、后 20% 做测试,保证同一时间段的人流不跨集合。使用公开数据集时,优先采用官方划分,没有官方划分的再按 6:2:2 随机切并固定随机种子。实验记录表至少包含三列:数据集名称、划分比例、样本数。这张表放在论文里,能让导师第一眼确认实验没有明显泄漏。

数据集划分方式训练/验证/测试
自采视频A按时间切段600 / 200 / 200 帧
ShanghaiTech Part B官方划分如实填写

5.2 实验对比表:baseline、消融和关键指标缺一不可

对比表是实验结果部分的核心。以密度图路线为例,表格最少覆盖四条方法:直接全局回归、YOLO 检测计数、CSRNet 密度图、你自己的改进模型。指标列建议固定为 MAE、MSE、参数量、FPS。前两个是精度,后两个证明你的提升不是靠堆算力换来的。下面给一个占位模板,提交前把示例值换成真实跑出来的数字:

方法MAEMSE参数量(M)FPS
全局回归————
YOLOv8 检测计数————
CSRNet————
本篇改进方法————

消融实验单独放一个小表,每次只改一个因素,比如固定 sigma 换自适应 sigma、有空洞卷积换无空洞卷积。这一段写作逻辑是:改进前精度差多少,加一个模块变好多少,每一行都要对应到正文的一句话,不要让读者猜这个表在证明什么。

5.3 可视化输出:密度图叠加图、检测框画法与视频截图

论文需要两组可视化:检测路线的画框图、密度路线的热力图。密度图可视化用 matplotlib 叠加,简洁代码如下:

import matplotlib.pyplot as plt fig, axes = plt.subplots(1, 3, figsize=(15, 5)) axes[0].imshow(img) # 原图 axes[0].set_title("Input") axes[1].imshow(gt_density, cmap="jet", alpha=0.6) # 真实密度图 axes[1].set_title("Ground Truth") axes[2].imshow(pred_density, cmap="jet", alpha=0.6) # 预测密度图 axes[2].set_title("Prediction") plt.savefig("density_vis.png", dpi=200, bbox_inches="tight")

cmap="jet"是密度图论文里最常用的色带,红到蓝对应高密度到低密度;alpha=0.6让热力图半透明叠加在原图上,位置关系一眼能看清;dpi=200保证放进论文不糊。保存时横排三张图按同一坐标尺度裁剪,方便盯着同一区域对比。检测框的画出直接调用模型自带绘图接口,记得在每张图左上角标出预测人数,答辩老师第一眼看的往往就是这个数字。

视频可视化比单图更有冲击力:抽一段测试视频的 30 帧,连续标出每帧的预测人数,画成时间折线图,再叠上人工标注的真实人数。时间序列对比比单张图更容易让评委相信你的模型是连续稳定的,而不是挑了几张简单的图来演示。

5.4 实验记录与可复现:固定随机种子和保存训练配置

论文写到最后,最怕的是补实验时发现复现不了当初的数字。常见原因是训练时没有固定随机种子,或者数据加载顺序每次都不一样。在训练脚本顶部加上:

import random import numpy as np import torch random.seed(42) np.random.seed(42) torch.manual_seed(42) torch.cuda.manual_seed_all(42)

固定随机种子之后,同一份代码和同一份数据集每次跑出来的指标在误差范围内一致,这会给论文增加可信度。另外把每次实验的训练命令、数据划分比例、最优权重路径一起存进一个 txt 文件,和实验结果表放在同一级目录。毕设周期长达几个月,回来续跑的时候最怕忘了当初用的是什么参数。这个习惯省掉的返工时间,比任何调参技巧都多。

6. 把模型从论文跑到真实场景:验证方法和一个实用技巧

论文实验做完,最后一步是证明模型真实可用。我最常用的验证手段是视频抽帧测试:找一段监控或手机拍的走廊视频,每秒抽一帧逐帧跑模型,把每帧人数连成一条时间线,和人工数出的结果对比。抽帧间隔不要小于 10 帧,否则相邻画面高度相似,测出来的指标虚高。但如果要验证模型稳定性,连续帧测试反而更好,能看出预测人数有没有来回跳。两种抽法配合用,一个测精度一个测稳定性。

测推理速度时记得先 warm up,模型前几次推理包含显存分配和算子预热,直接计时会把 FPS 算低:

import time for _ in range(10): # 预热,让算子完成初始化 _ = model(img) t0 = time.time() for _ in range(100): # 正式计时 _ = model(img) fps = 100 / (time.time() - t0) print(f"FPS: {fps:.1f}")

如果 FPS 不够用,最实用的技巧是把模型切到半精度推理,PyTorch 里通过model.half()和输入张量.half()两行代码就能开启,显存占用几乎减半,速度有明显提升。这不改变计数逻辑,但足以让演示时候画面不卡顿。需要留意的是半精度在部分旧显卡上精度会有损失,切换后重新跑一遍验证集 MAE,误差放大超过 5% 就退回单精度。

最后说一个个人习惯:每次跑完一组实验,把训练命令、数据划分、最优权重路径一起存进一个 txt 文件。毕设周期跨越好几个月,中间穿插课程和实习,回来继续实验时最怕的就是忘了当初用什么参数跑出的结果。这个习惯帮我省下的返工时间,比任何调参技巧都多。这个方向的技术不算新,但依然值得投入,希望这些经验能帮到你,在毕设和课设里少踩几个坑。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询