【武大遥感空信】空间智能计算与服务课程实习(任务二)
目录
1. 目的
目标检测跟踪计数(Object Detection, Tracking and Counting )的任务是找出图像中所有感兴趣的目标,并确定其类别、位置和数量,是计算机视觉领域的核心问题之一。因各类目标有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具有挑战性的问题。通过本实验,了解基于深度学习目标检测跟踪计数基本原理、特征、结构以及主流模型的应用,掌握模型应用的工作方法与流程。
2. 内容
使用 YOLOv11 深度学习模型进行校内道路交通场景常见典型目标检测跟踪计数。
3. 条件
完成本项实验的基本条件如下:
1、PC 机(笔记本或台式计算机,配置 GPU 显卡可显著提升实验效率);
2、图像编辑工具软件;
3、撰写实验报告的字处理应用软件。
4. 参考资料
- 《空间智能计算与服务》课程教材、参考书、PPT 课件
- Ultralytics YOLOv11 Docs,https://docs.ultralytics.com/models/yolo11/
5. 数据描述与分析
本实验用到的数据主要是同学们自己采集的交通图像数据,以及通过labelImg工具标注锚框后得到的YOLO label描述文件。
实验开始前,老师让每位同学分别采集了15张以上的校内道路交通场景照片,上传到QQ群共享文件夹SICISP2025DataSet,每张照片中可见人员、小汽车、电瓶车、自行车等四类要素中的一类或多类。
采集完成后,每位同学自行使用labelImg工具,对照片中的四类要素按照ebike、car、person、bicycle的顺序进行标注,再将得到的标注数据txt文件上传到QQ群共享文件夹SICISP2025YoloLabel。
经过这样的众源数据采集过程,每位同学可以下载到实验数据如下:
- SICISP2025DataSet:交通图像数据集,包含几百张同学们共同采集的校内道路交通场景照片;
- SICISP2025YoloLabel:图像数据集对应的YOLO标注集,包含与照片数量相等的txt描述文件,每个文件包含若干行数据,对应照片里的若干个锚框。每一行数据描述了一个锚框的属性,形如“class_id x y w h”,其中class_id表示类别的id编号,x表示目标的中心点 x 坐标(横向)/图片总宽度,y表示目标的中心的 y 坐标(纵向)/图片总高度,w表示目标框的宽带/图片总宽度,h表示目标框的高度/图片总高度。
6. 核心算法与工具
本次实验主要用到的工具有:
- labelImg图像标注工具;
- YOLOv11深度学习模型;
- BoT-SORT目标跟踪器;
- AutoDL云算力租借平台,用于租借在线GPU进行模型训练。
7. 步骤
7.1. 图片采集
在课程开始之前,老师布置了一项数据采集任务,要求拍摄校内道路交通场景照片,每张照片中可见人员、小汽车、电瓶车、自行车这四类要素中的一类或多类,照片大小不超过 10M,数量不少于 15 张且须涵盖全部四类要素,保存为 JPG 格式文件,文件名形式为 “< 学号 > - < 照片序号 > .jpg”。同时,还需拍摄一段上述场景的视频,时长在 25 至 30 秒之间,格式为 MP4。拍摄时要注意多点位、多视角、多焦距、多光照条件,避免画面雷同、主题要素过多造成杂乱以及要素在画面中占比过小,最后将拍摄完成的照片和视频上传至群共享文件夹 SICISP2025DataSet。

7.2. 图片标注
为了能让YOLOv11理解我们拍摄的照片中包含的目标对象,还需要使用图片标注工具在图片上标出目标框。
这里我们使用labelImg工具进行标注。
在Anaconda中新建一个3.9版本的python环境,命名为SICISPyolo:
![]()
完成环境创建后,激活该环境:
![]()
然后安装labelImg工具所需要的依赖(pyQt5):
![]()
然后安装labelImg工具:
![]()
最后直接输入labelImg就可以启动了:
![]()
进入labelImg工具,点击左侧的“Open Dir”打开拍摄的照片的存放目录,点击“Change Save Dir”选择标注文件的保存目录,点击“Create RectBox”可以在图中拖动新增一个标注框,标注好的锚框会在右侧列表显示,标注完毕后,要点击左侧保存格式按键,调整为“yolo”,然后再点击“Save”保存标注文件。点击“Prev Image”和“Next Image”跳转到上一张或下一张图像,跳转前记得保存当前图像的标注信息。

个人采集的全部照片都标注完毕后,便可关闭labelImg工具,然后将标注文件上传到QQ群SICISP2025YoloLabel共享文件夹。
7.3. 数据整理
由于众源数据采集是一种较不稳定的采集方式,在数据收集过程中难免会因为人员粗心、网络异常等多方面原因导致部分数据缺失或混乱,进而导致数据不能直接用于训练,所以需要对数据进行清洗整理。
本次实验提供的数据集中,可能由于部分同学的粗心,导致数据存在以下两种问题:
第一种是数据无法配对,上传了图片但是没有上传对应的label文件,或是上传了label文件但没上传对应图片,这样的数据就无法使用,应该剔除;
第二种是标注数据存在异常,例如今年同学采集的数据集中有一位同学的标注文件中出现了0~4一共五个类别,导致启动YOLO时始终报错index out of list,无法训练,所以这样的数据也应该从数据集中剔除。
我们需要编写一个小脚本,完成数据清洗操作。
首先定义原数据存放路径、正常数据输出路径、未能配对数据输出路径、标注异常数据输出路径。

然后设置0~3为合法标注id,以便于处理id超限问题。获取原数据存放路径中所有图片好标签文件的文件名,并使用intersection方法找出能成功匹配和不能成功匹配的文件名。

处理成对文件并进行标签检查。

最后将成对的文件、不成对的文件分别复制到相应目录下即可。

最终整理效果十分优秀:

7.4. 数据划分
经过清理的数据已经没有了标注缺失等问题,但是要用来训练神经网络,还需要划分为训练数据、验证数据和测试数据。
本实验要求按照80%作为训练集(train)、15%作为验证集(val)和 5%作为测试集(test)的比率进行划分。
首先设定好图片和标签文件的输入路径,并按照要求设置好输出路径。

然后获取所有成对的文件名,并随机打乱,按照设定好的比率进行分割。

最后将文件分别复制到目标目录即可。

划分效果如下:
![]()
7.5. AutoDL 部署 YOLOv11
由于本地电脑算力不太够,训练YOLOv11会很慢,所以本次实验选择租用AutoDL云算力进行模型训练,像这样的公开算力租借平台还是很划算的,一个小时只需要大概两块钱,而从部署项目、上传训练数据集到训练完成也就差不多一两个小时。
7.5.1. 开通实例
进入AutoDL官网,注册完账号后进入控制台,在容器实例板块电机租用新实例。

计费方式选择按量计费,地区任意选择即可,GPU数量按个人需求选择,此处我选择了一张RTX 4090 24G显卡。镜像选择社区镜像,搜索yolov11,使用社区YOLOv11镜像。

租用成功后,在自己的控制台就可以看到租用的实例了。

7.5.2. 上传数据集
为了更方便地向云算力上传数据和从中下载训练结果数据,本实验选择使用XFTP工具进行远程数据传输。
在控制台找到租用的实例,找到SSH登录信息,复制登录指令和密码。

例如我租用的实例登录信息如下(实验结束后已释放,无法登录)
登录指令:ssh -p 44407 root@connect.nmb1.seetacloud.com
密码:aaaePvhQ6FYt
可将其拆解为对应用于登录FTP的信息如下:
主机:connect.nmb1.seetacloud.com
端口号:44407
用户名:root
密码:aaaePvhQ6FYt
访问XFTP官网:XFTP - NetSarang Website

先不要直接点击下载,因为直接下载需要收费,滑到页面最下方,找到“家庭/学校免费”:

在此处即可免费下载:

下载安装好后,启动XFTP工具,选择新建连接:

将上述登录信息填入会话属性,点击确定。

可能会弹出SSH安全警告,选择“接受并保存”即可。

成功连接后,窗口左侧为电脑本地存储空间,右侧为AutoDL租用实例上的存储空间,可轻松完成从左侧上传文件或目录至右侧,或从右侧下载文件及目录至左侧的操作。

在右侧窗口进入yolov11→datasets→data目录,这里已有test、train、valid三个文件夹,是镜像原有的训练数据,需要将其删除。

删除完成后,从左侧窗口将本地自己划分好的训练数据传输上去。

传输成功后,回到AutoDL控制台,找到自己租用的实例,在快捷工具栏点击JupyterLab进入Jupyter在线控制台。

在左侧资源栏可以进入yolov11/datasets/data目录下,这里已经出现了我们刚刚上传的三个数据目录。

修改data.yaml文件,将标签类别(nc)修改为4,将标签列表(names)修改为实验规定的标签集[‘ebike’,’car’,’person’,’bicycle’]。

至此,训练前的数据准备工作就完成了。
7.6. 模型训练
回到yolov11目录,修改train.py,将epochs改为100,batch改为32,workers改为4,name改为SICISP。

然后在启动页点击终端,准备开始训练。

在终端中输入cd ~确保切换到根目录,输入conda activate yolov11启用yolov11虚拟环境,输入python yolov11/train.py开始训练。

出现如下图信息,即成功开始训练。

耐心等待所有epoch训练完毕后,出现如下信息,表示训练完成。

训练完成后,需要从AutoDL上下载训练结果。训练好的数据存放在我们前面设置的/root/yolov11/runs/SICISP目录下,我们可以使用XFTP工具将SICISP目录整个下载下来。

训练结果数据中包括训练好的模型权重文件(weights/best.pt)、混淆矩阵、标签分布图等数据。

为了测试数据集和训练过程的优劣,我分别使用老师提供的往年数据(past)、今年同学们采集的众源数据(2025)以及两组数据融合后的总数据(merged)进行多次训练,分别以100 epoch和200 epoch训练出一共六组结果,具体对比分析见《结果及分析》部分。

7.7. 目标检测
在yolov11目录下,修改test.py文件,将model的加载路径设为我们自己训练的模型权重文件,此处我使用基于融合数据(merged)训练200 epoch后得到的best.pt权重文件。
然后指定需要检测的图片路径,此处分别使用多张图片进行了检测,检测效果良好,具体结果与分析见《结果及分析》部分。

在终端中运行如下命令,开始检测。
conda activate yolov11
python yolov11/test.py
7.8. 目标跟踪与计数
目标跟踪需要用到我们拍摄的视频数据,使用XFTP工具将包含同学们拍摄的视频的videos目录上传至AutoDL实例的yolov11/datasets/data目录下。

在根目录下新建track.py文件,编写目标跟踪代码。此处我分别编写了track.py、track_count.py、track_poly.py三种脚本,可分别实现“检测跟踪”、“检测跟踪+实时计数”、“检测跟踪+绘制路径轨迹”三种不同的功能,并对两组视频进行了实验,具体结果与分析见《结果及分析》部分。

在终端输入如下命令,即可开始进行目标跟踪。
conda activate yolov11
python track.py
处理跟踪过程打印信息如下。

8. 结果及分析
本实验代码及成果已上传至GItHub仓库:AaronChou313/YOLO_SICISP: Self-trained YOLOv11 model based on traffic graphics on campus for SICISP class in School of Remote Sensing, Wuhan University.
8.1. 训练结果
六种模型训练结果(混淆矩阵)如下。总体来看,纯 2025 年数据集训练出的模型在电动车、自行车以外的三类目标上表现最为稳健,经过 200 个 epoch 后,尤其是在背景与车辆类的区分能力上有所提升,但也出现了 person 类轻微过拟合的迹象;相比之下,仅使用往年数据的模型召回率普遍偏低,尤其是在 bicycle 和 person 类别上表现最差,尽管背景误检率较低,却难以兼顾目标检测;将两者融合后不仅能在各类目标上均获得比往年更高的召回率,而且在 200 epoch 后所有目标类都实现了不同程度的提升,体现出融合数据在兼顾历史与当年场景上的优势。从迭代效果看,200 epoch 对融合模型作用最明显,各类别的 TP 值均稳步上升;而在单一数据源上,纯2025年数据更多地改善了背景检测、纯往年数据则收益甚微。
| 100轮训练 | 200轮训练 | |
| 往年数据 | ![]() |
![]() |
| 2025年数据 | ![]() |
![]() |
| 融合数据 | ![]() |
![]() |
六种模型训练结果(各指数分析图)如下。从六组YOLOv11训练结果图来看,整体训练都较为稳定,各模型均表现出损失持续下降、精度持续上升的趋势,但在不同数据集与训练轮数设置下性能略有差异。
在所有模型中,融合数据集200epoch训练的模型在多个指标上表现最为优异,训练损失持续下降,验证集的mAP50和mAP50-95均达到最高,精度与召回也较高且收敛趋势平稳,说明融合数据有助于提升泛化能力,且200轮训练能充分发挥模型潜力。
而单独使用2025年数据集的模型中,200epoch优于100epoch,尤其在mAP50-95指标上体现更充分,验证损失下降更稳,说明该数据集较新且具代表性,增加训练轮次效果显著。
往年数据集的模型表现则略逊一筹,虽然训练损失下降正常,但精度、召回率和mAP整体低于融合和2025年数据集,尤其在200epoch时验证指标的提升趋于平缓,显示其特征信息可能相对滞后。
综上,融合数据集200epoch训练效果最佳,所以后续目标检测与目标跟踪选用此模型;同时也显示了最新数据和更长训练周期对于模型精度提升的重要性。
| 100轮训练 | 200轮训练 | |
| 往年数据 | ![]() |
![]() |
| 2025年数据 | ![]() |
![]() |
| 融合数据 | ![]() |
![]() |
8.2. 目标检测结果
使用由融合数据训练200轮得到的best.pt模型进行目标检测,效果如下。从检测结果来看,该模型在目标检测任务中表现较为优秀,能够稳定识别电动车(ebike)、车辆(car)、行人(person)和自行车(bicycle)目标,且置信度普遍较高,主目标如车辆的识别准确率常在0.9以上,说明模型对主要交通目标具备良好的辨识能力。同时,模型在复杂场景中也能区分出密集分布的行人与非机动车,并有效标注边界框,没有明显漏检或误检。整体来看,该模型在光照变化、遮挡、目标重叠等典型城市道路场景中仍保持较强的鲁棒性,表明融合数据集训练增强了其泛化能力,适合应用于实际城市交通环境下的多目标检测任务。
尽管该模型整体性能较好,但仍存在部分目标未被检测的情况,表明模型仍有以下几点不足:
首先,对小目标或远距离目标的检测能力有限。在部分图像中,距离较远或遮挡严重的行人、电动车未被成功识别,这可能是由于训练集中此类目标样本较少,或图像分辨率及下采样过程中导致特征丢失,模型对小目标的感知能力不强。
其次,不同类别间的边界不够清晰。如图中部分“ebike”与“bicycle”较为相似,存在遮挡或重叠时容易漏检或误判,说明模型在这两类目标的特征区分上尚不足,可能是训练样本标签不够精准或类别间特征混淆。
再次,复杂光照和背景干扰对模型有影响。在光影强烈交错或背景纹理复杂的场景中,部分目标被忽略,表明模型对于非理想拍摄环境的适应性仍有限,推测可能是训练数据的光照和背景多样性仍不够,或模型对边缘特征的提取能力有限。
最后,模型收敛仍可能未完全优化。虽然训练了200个epoch,但若学习率设置不合理或训练数据本身存在一定噪声,可能导致模型陷入局部最优,未能充分学习所有场景中的目标特征。
综上,推测后续可进一步使用以下方式优化和完善模型:增强小目标和遮挡样本的数据增广、多类别边界清晰化训练、进一步优化模型结构(如加入FPN/PAFPN增强多尺度感知)、或者尝试更先进的YOLO变种模型(如YOLOv8)来提升整体鲁棒性和检测准确率等。
![]() |
![]() |
![]() |
![]() |
8.3. 目标跟踪结果
基于由融合数据训练200轮得到的best.pt模型,分别使用BoT-SORT和byteTrack进行目标跟踪,结果输出如下:
两种跟踪方法输出结果目录:

用多种方式测试多个视频样本:

目标跟踪+轨迹绘制效果:

目标跟踪+计数效果:

整体跟踪效果不错,但是存在一些问题:
1. 标签跳变:(自行车变电动车)

2. 类别错误:(人骑电动车变成小车骑电动车)

3. 跟踪丢失:(当跟踪对象在画面中逐渐远去,会丢失对其的跟踪)

4. 未能识别:(当画面中对象过小或较模糊,可能完全无法识别)

目标跟踪整体效果较为理想,但仍暴露出一系列实际应用中的问题。首先是标签跳变现象较为明显,例如某些场景中自行车被误识为电动车,这很可能是由于模型对这两类视觉特征相似的目标区分能力不足,加之BoT-SORT在数据关联时默认使用类别信息来匹配ID,一旦前后帧之间检测出的类别标签不一致,就会导致ID重新分配,从而出现目标“身份跳变”。 其次,存在典型的类别错误,如检测到骑电动车的人时,将其整体误识为一辆小车,这种问题多发生在骑行者和电动车体态模糊叠加的情况下,模型可能将“人+车”的组合错误归类为另一种整体目标,反映出检测模型在组合体细节解耦方面的能力还有待提升。
此外,跟踪丢失的问题也在结果中多次出现,尤其当目标发生快速移动、被遮挡或短时间未被检测到时,跟踪器缺乏连续的运动预测或外观信息支撑轨迹延续,就会导致目标ID重置或直接消失,暴露出跟踪算法对检测稳定性的高度依赖。还有一些目标甚至完全未被检测到,这通常发生在远距离、强光干扰或复杂背景中,表明当前训练数据中对边缘场景和弱目标的覆盖仍不足。综合来看,虽然整体系统已具有较强的实用性,但仍需要在模型细粒度分类能力、检测稳定性和跟踪鲁棒性等方面进行优化,特别是在多类别细粒度识别与遮挡恢复机制的结合上仍有提升空间,同时还需提高数据集的精度和覆盖程度,尝试采集更大规模的众源数据,并进一步严格规范采集数据的要求,以提高模型的准确性。
9. 体会心得
参与基于深度学习的目标检测跟踪计数实验,让我对深度学习在计算机视觉领域的应用有了更为直观和深入的认识。 YOLOv11 模型的强大性能给我留下了深刻的印象,它能够快速、准确地检测和跟踪图像中的多种目标,这背后是深度学习算法对海量数据的学习和特征提取能力的体现。从数据的采集与标注,到模型的训练与优化,再到最终的检测结果分析,每个环节都让我感受到了深度学习技术的严谨性和系统性。同时,在实验过程中,我也体会到了图像数据的多样性和复杂性,不同的光照、遮挡和目标姿态等因素都可能对检测结果产生影响。这使我认识到在实际应用中,需要不断对模型进行调整和改进,以提高其对各种复杂场景的适应能力。此外,借助 AutoDL 云算力租借平台进行模型训练的经历,让我感受到科技资源的共享与高效利用对科研工作的重要推动作用。通过这次实验,我不仅掌握了一种实用的计算机视觉技术,更培养了自己在面对复杂数据和模型时的耐心和细心,为今后在人工智能领域的学习和实践积累了宝贵经验。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



















所有评论(0)