五个相互独立的计算机视觉模块,共用一套数据集约定、虚拟环境与评测规范。 每个模块都是可复现的最小工程:数据管线 → 训练 → 推理 → 指标评测 → 技术报告, 代码与产物分离,数据集与权重不入库。
| 编号 | 任务 | 方法 | 数据集 | 关键指标 |
|---|---|---|---|---|
| 01a | 图像分类 | TensorFlow / Keras 从零实现基础 AlexNet;ReLU vs LeakyReLU × 学习率 0.01 / 0.001 四组对照 | CIFAR-10 | acc 0.8185,macro-F1 0.8162 |
| 01b | 目标检测 | keras-yolo3 / YOLOv3 从头训练,自建 VOC2007 格式猫脸数据集,聚类 anchors | 自建猫脸数据集 | AP 0.5308,F1 0.4651 |
| 02 | 多目标跟踪 | OpenCV 内置 6 种跟踪器基准,OTB / MOTChallenge / VOT 三套指标 | 自建合成多目标序列 | Success AUC 0.843 |
| 03 | 视频摘要 | FCSN 全卷积序列网络(有监督),BCE + 类别加权 | TVSum | F-score 0.2552 |
| 04 | 视频检索 | ResNet50 深度特征 / HSV 直方图,FAISS Flat·IVF·HNSW 索引 | 程序化合成检索库 | mAP 0.9861 |
任务规格摘要(原始规格文档为 .docx / .pptx,因版权仅本地保留,见 docs/):
- 01a:搭建基础 AlexNet 完成图像分类,实现「输入一张图像 → 输出类别」;用两种激活函数(ReLU 与任一对比项)和两种学习率做对照。
- 01b:用卷积神经网络完成猫脸检测。以
keras-yolo3为基础,制作 VOC2007 格式数据集(LabelImg 标注 → XML →ImageSets/Main→train.txt),修改yolov3.cfg与类别配置,从头训练后用yolo_video.py批量推理;附加训练过程可视化(TensorBoard)。 - 02:基于 OpenCV 内置算法对多目标做跟踪(≥3 种算法),比较跟踪效率;输入视频框出多目标运动轨迹;用 ≥2 种指标评价精度、准确率与鲁棒性。
- 03:基于 FCSN 与 TVSum 训练视频摘要模型,取 10 段视频测试,为每段视频生成摘要视频 / 关键帧并输出到独立目录,计算 Precision / Recall / F-score。
- 04:基于深度特征实现以图搜图、以图搜视频,比较检索效率,并用 ≥2 种指标评价性能与准确率。
Professional_Comprehensive_Design/
├─ README.md # 本文件:模块清单、结构、环境、运行、结果
├─ docs/ # 原始规格文档与纯文本抽取(版权原因:仅本地保留,不入库)
│ ├─ course_materials/ # 原始 .docx / .pptx(只读参考)
│ └─ extracted_text/ # 纯文本抽取结果,便于检索
├─ datasets/ # 共享数据集,按模块划分
│ ├─ classification/ # 01a 图像分类:CIFAR-10
│ ├─ cat_face/ # 01b 目标检测:猫脸数据集(VOC2007 格式)
│ ├─ tracking_videos/ # 02 多目标跟踪:视频与标注
│ ├─ TVSum/ # 03 视频摘要:TVSum
│ └─ retrieval/ # 04 视频检索:图像库 / 视频库 / 查询集
├─ experiments/
│ ├─ 01_TensorFlow_AlexNet/ # 01a code/ models/ logs/ outputs/ README.md requirements.txt
│ ├─ 01_ObjectDetection_YOLOv3/ # 01b code/ models/ outputs/ logs/ README.md requirements.txt
│ ├─ 02_ObjectTracking_OpenCV/ # 02 code/ outputs/ README.md requirements.txt
│ ├─ 03_VideoSummarization_FCSN/# 03 code/ models/ outputs/ logs/ README.md requirements.txt
│ └─ 04_VideoRetrieval/ # 04 code/ models/ outputs/ logs/ README.md requirements.txt
├─ reports/ # 技术报告与图表
│ ├─ 01-object-detection.md # 各模块技术报告(01a / 01b / 02 / 03 / 04)
│ ├─ figures/ # 报告插图(曲线、对比图、样例检测结果)
│ └─ tables/ # 报告表格(指标 CSV / Markdown)
├─ envs/ # 环境构建脚本与版本记录(环境本体不入库)
└─ tools/ # 公共工具(文档抽取、数据集校验、labelImg 修补等)
各模块目录约定:
| 子目录 | 用途 |
|---|---|
code/ |
该模块全部源代码 |
models/ |
预训练权重与训练产物(.h5 / .pth / .pt) |
outputs/ |
检测结果图、跟踪视频、摘要视频、检索结果等运行产物 |
logs/ |
训练日志、TensorBoard events、评测原始输出 |
README.md |
模块说明:任务、环境、数据、运行、结果、故障排查 |
requirements.txt |
该模块的 Python 依赖 |
01a 与 01b 的依赖完全一致(TensorFlow 2.10 + numpy + matplotlib + Pillow), 共用同一虚拟环境
envs/pcd01_tf,未重复构建。
入库:各模块源代码、README.md、requirements.txt、reports/ 下的脱敏 Markdown 技术报告与插图、
数据集说明文档与校验脚本、环境构建脚本。
不入库(见 .gitignore):数据集本体、模型权重(.h5 / .pth / .pkl)、
outputs/ 与 logs/ 下的运行产物、envs/ 下的虚拟环境本体、原始规格文档(.docx / .pptx / .pdf,版权原因)
以及报告的 Word / PDF 版本。数据集与权重按各模块 README 的步骤重新下载或训练即可。
各模块依赖栈差异较大,按模块分组使用独立环境。
# 01a / 01b 共用(Python 3.10 + TensorFlow 2.10 + Keras 2.10,CPU)
python envs/setup_tf_env.py
# 其余模块按各自 requirements.txt 安装
conda create -n pcd02 python=3.9 -y
pip install -r experiments/02_ObjectTracking_OpenCV/requirements.txt版本说明:上游参考实现基于
keras 2.2~2.4 + tensorflow 1.5~2.3; 本仓库统一到TF 2.10 + Keras 2.10。02 依赖opencv-contrib-python(跟踪器位于 contrib 模块), 03 / 04 使用 PyTorch。01a / 01b 为何只用 CPU:本机 RTX 4060 Laptop 为 sm_89(Ada),需 CUDA 11.8+; 而 TF 2.10 绑定 CUDA 11.2(最高支持 sm_86),TF ≥ 2.11 又取消了 Windows 原生 GPU 支持。
数据集体积较大,不纳入版本控制。按下表放置:
| 模块 | 放置位置 | 获取方式 |
|---|---|---|
| 01a | datasets/classification/cifar10/ |
脚本自动下载:python experiments/01_TensorFlow_AlexNet/code/data.py --download |
| 01b | datasets/cat_face/ |
图像放 JPEGImages/,LabelImg 标注结果 .xml 放 Annotations/(已完成:205 图 / 205 标注) |
| 02 | datasets/tracking_videos/videos/ |
待跟踪视频(.mp4 / .avi) |
| 03 | datasets/TVSum/ |
TVSum 视频与 ydata-tvsum50-anno.tsv 标注 |
| 04 | datasets/retrieval/images/、videos/、queries/ |
检索库与查询图 |
命名规范、目录校验的细节见 datasets/README.md,或运行:
python tools/check_datasets.pyCIFAR-10 下载慢属预期:到境外站点实测 0.02
0.07 MB/s,官方源每 89 秒停滞,全量约 1.5~2.5 小时。data.py已实现多镜像、HTTP Range 断点续传、停滞重试与 SHA256 校验,中断后重跑同一命令即可续传。 详见 datasets/classification/README.md。
# 01b 目标检测
python experiments/01_ObjectDetection_YOLOv3/run_all.py --dry-run
python experiments/01_ObjectDetection_YOLOv3/run_all.py --epochs 200
# 01a AlexNet 图像分类($TF 指向 01a/01b 共用的解释器,见模块 README)
& $TF experiments/01_TensorFlow_AlexNet/run_all.py --dry-run --tf-python $TF
& $TF experiments/01_TensorFlow_AlexNet/run_all.py --epochs 15 --tf-python $TF02 / 03 / 04 各有 run_step*.cmd 或 env.cmd 驱动的分步流程,入口与参数见各模块 README。
| 模块 | 环境 | 数据 | 代码 | 训练 / 推理 | 评测 | 报告 |
|---|---|---|---|---|---|---|
| 01a 图像分类 | ☑ | ☑ | ☑ | ☑ | ☑ | ☑ |
| 01b 目标检测 | ☑ | ☑ | ☑ | ☑ | ☑ | ☑ |
| 02 多目标跟踪 | ☑ | ☑ | ☑ | ☑ | ☑ | ☑ |
| 03 视频摘要 | ☑ | ☑ | ☑ | ☑ | ☑ | ☑ |
| 04 视频检索 | ☑ | ☑ | ☑ | ☑ | ☑ | ☑ |
实现要点:
data.py:CIFAR-10 下载 / 解析 / 缓存 / 划分 / 归一化 / 增强,下载部分不依赖 TFalexnet.py:基础 AlexNet(5 卷积 + 3 全连接,4.62 M 参数),激活函数与规范化方式可切换train.py:单组训练,含--benchmark测速、NaN 守卫、断点续训evaluate.py:accuracy / top-3 / 逐类 P-R-F1 / 混淆矩阵,带--selftestpredict.py:输入一张图像输出类别,带--selftestcompare.py:四组汇总与对比图;run_all.py:一键流程(含--dry-run)- 自检 160 项断言全过(
test_pipeline.py74 + 四个--selftest57 +test_cli.py29)
四组正式训练各 15 epoch,总用时 3.25 小时:
| 激活函数 | 学习率 | 测试准确率 | top-3 | macro-F1 |
|---|---|---|---|---|
| ReLU | 0.01 | 0.8185 | 0.9633 | 0.8162 |
| ReLU | 0.001 | 0.7768 | 0.9519 | 0.7771 |
| LeakyReLU | 0.01 | 0.8055 | 0.9582 | 0.7987 |
| LeakyReLU | 0.001 | 0.7706 | 0.9484 | 0.7699 |
分组均值:ReLU 0.7976 vs LeakyReLU 0.7880(差 0.96 个百分点,不显著); lr=0.01 0.8120 vs lr=0.001 0.7737(差 3.83 个百分点,显著)。
三条结论:① 激活函数无显著差异(推测 BN 已缓解 ReLU 神经元死亡);
② 学习率影响约为激活函数的 4 倍,小学习率的劣势来自训练不足而非收敛质量(损失仍在下降);
③ cat 类最难(Recall 0.5310,18% 误判为 dog)。
跨数据集验证:4 张未参与训练的真实猫照片 3 张判为 cat。
技术报告:reports/01b-alexnet-classification.md
- 数据集:205 张图 + 8 张演示图;COCO 预训练 Faster R-CNN 生成 200 个 VOC XML 后人工收紧,共 236 个目标框
- 环境:Python 3.10 + TF 2.10.0(CPU),处理 4 处 Keras API 兼容问题
yolov3.cfg修正 3 处classes=1/filters=18- 训练 200 epoch(中途从 ep167 续训至 200)
- 指标:AP 0.5308,Recall 最高 0.88(阈值 0.003);工作点阈值 0.03 时 P 0.5556 / R 0.4000 / F1 0.4651
- 关键改进:默认 COCO anchors 使全部目标落入最粗尺度、细尺度零正样本; 改用本数据集聚类 anchors 后,同样 20 epoch 下 AP 由 0.0011 提升到 0.0752(68 倍)
技术报告:reports/01-object-detection.md
OpenCV 内置 6 种跟踪器(KCF / CSRT / MedianFlow + MIL / Boosting / TLD)同时跟踪 3 个目标,
自建 cross、occlude 两段合成序列(640×360、25 fps、300 帧)并生成逐帧真值,
按 OTB / MOTChallenge / VOT 三套指标评测精度、成功率与鲁棒性。
cross序列 Success AUC:BOOSTING 0.843 > MedianFlow 0.794 > CSRT 0.772 > KCF 0.679- 速度:MedianFlow ≈ 197 FPS、KCF ≈ 92 FPS、CSRT ≈ 12 FPS、MIL 3.4 FPS
- MOSSE 在真实视频上
update全部失败(0/59):合成 patch 自检通过不等于真实序列可用 - 结论:相关滤波(KCF / CSRT)在精度-速度上最均衡;纯色块目标使 MedianFlow 无法初始化
技术报告:reports/02-multi-object-tracking.md
FCSN + TVSum(40 段训练 / 10 段测试),补齐上游缺失的 pool5 特征库与 KTS 镜头切分, 生成摘要视频与关键帧并计算 P / R / F-score。
- 10 段测试视频平均:Precision 0.3724、Recall 0.1961、F-score 0.2552(epoch-109),末轮 0.2230
- 同口径参照:线性岭回归基线 0.2561、用 gtscore 选段(Oracle)0.2858、20 位标注者互评 0.366 —— 模型达到理想选段的 89%、人类一致度的 70%
- 关键修复:上游 NLL + 反比加权配方会使模型退化为常数输出(AUC 0.49);
改为 BCE +
pos_weight = n_neg / n_pos后 AUC 升至 0.62
技术报告:reports/03-video-summarization.md
ResNet50 深度特征与 HSV 颜色直方图两种表示,配暴力检索 + FAISS Flat / IVF / HNSW 四种索引, 实现以图搜图、以图搜视频,用 P@K 与 mAP 评价,并在三种库规模上测延迟。
- 以图搜图(120 库图 / 24 查询):深度特征 mAP 0.9861、P@1 = 1.0000;直方图 mAP 0.9623
- 以图搜视频(12 视频 / 24 查询):深度特征 mAP 1.0000(mean / max / frame-max 三种聚合同分)
- 检索库由
make_dataset.py程序化合成,相关性真值由目录名推导,避免人工标注偏差
技术报告:reports/04-video-retrieval.md
- AlexNet:https://papers.nips.cc/paper/2012/hash/c399862d3b9d6b76c8436e924a68c45b-Abstract.html
- CIFAR-10:https://www.cs.toronto.edu/~kriz/cifar.html
- keras-yolo3(01b 基础实现):https://github.com/qqwweee/keras-yolo3
- LabelImg(01b 标注工具):https://github.com/HumanSignal/labelImg
- TVSum:https://github.com/yalesong/tvsum
- FCSN 视频摘要:https://github.com/remega/video_summarization_fcsn
- OpenCV 跟踪 API:https://docs.opencv.org/4.x/d9/df8/group__tracking.html