基于YOLO26的珍稀鸟类检测系统
基于 YOLO26 与 Faster R-CNN 双模型对比,覆盖数据集构建、模型训练调优、桌面系统集成的完整深度学习工程项目。
目录
项目概览
本项目以北美 200 种鸟类的细粒度识别为核心任务,完整经历了以下深度学习开发阶段:
-
数据集构建与处理 :基于经典 CUB-200-2011 基准数据集,将原始分类标注转换为 YOLO 目标检测格式,按 8:1:1 完成数据集划分,构建可直接驱动检测训练的
CUB_200_8_1_1数据集。 -
模型训练与调优:以 YOLO26n 为主训练模型(100 epoch,早停则提前结束),并同步训练 Faster R-CNN(30 epoch)作为对比基线,通过超参数设计、学习率调度、数据增强等手段完成调优,最终在 200 类细粒度鸟类检测任务上取得优异指标。
-
系统集成与功能开发:基于 PyQt6 开发桌面端珍稀鸟类检测系统,集成图片、视频、实时摄像头三种检测模式,配合历史记录、模型管理、训练指标展示等功能模块,形成完整的工程化应用。
数据集
概述
| 项目 | 内容 |
|---|---|
| 数据集名称 | CUB_200_8_1_1 |
| 来源基准 | CUB-200-2011(Caltech-UCSD Birds 200) |
| 标注格式 | YOLO 格式(归一化中心点 + 宽高) |
| 类别数量 | 200 种北美鸟类 |
| 图片总数 | 11,788 张 |
| 图片格式 | JPEG(.jpg) |
| 图片尺寸 | 不固定,短边通常 200--500 px |
| 标注特点 | 每张图片含单个目标框,各类别分布均衡 |
数据集划分
| 子集 | 图片数量 | 占比 |
|---|---|---|
| 训练集(train) | 9,430 | 80% |
| 验证集(val) | 1,179 | 10% |
| 测试集(test) | 1,179 | 10% |
| 合计 | 11,788 | 100% |
标注格式说明
<class_id> <cx> <cy> <w> <h>
| 字段 | 说明 |
|---|---|
class_id |
类别索引(0 ~ 199) |
cx |
目标框中心点 x(相对图片宽度,归一化) |
cy |
目标框中心点 y(相对图片高度,归一化) |
w |
目标框宽度(相对图片宽度,归一化) |
h |
目标框高度(相对图片高度,归一化) |
200 种鸟类完整列表
点击展开查看全部 200 种
| ID | 英文名 | 中文名 |
|---|---|---|
| 0 | Black_footed_Albatross | 黑脚信天翁 |
| 1 | Laysan_Albatross | 莱岛信天翁 |
| 2 | Sooty_Albatross | 乌信天翁 |
| 3 | Groove_billed_Ani | 沟嘴犀鹃 |
| 4 | Crested_Auklet | 凤头海雀 |
| 5 | Least_Auklet | 小海雀 |
| 6 | Parakeet_Auklet | 长嘴海雀 |
| 7 | Rhinoceros_Auklet | 角嘴海雀 |
| 8 | Brewer_Blackbird | 布氏拟八哥 |
| 9 | Red_winged_Blackbird | 红翅黑鸟 |
| 10 | Rusty_Blackbird | 锈色拟八哥 |
| 11 | Yellow_headed_Blackbird | 黄头黑鸟 |
| 12 | Bobolink | 刺歌雀 |
| 13 | Indigo_Bunting | 靛蓝彩鹀 |
| 14 | Lazuli_Bunting | 天青石彩鹀 |
| 15 | Painted_Bunting | 彩色彩鹀 |
| 16 | Cardinal | 主红雀 |
| 17 | Spotted_Catbird | 斑猫鸟 |
| 18 | Gray_Catbird | 灰猫鸟 |
| 19 | Yellow_breasted_Chat | 黄胸聊鸟 |
| 20 | Eastern_Towhee | 东方唧鹀 |
| 21 | Chuck_will_Widow | 查克遗孀夜鹰 |
| 22 | Brandt_Cormorant | 布氏鸬鹚 |
| 23 | Red_faced_Cormorant | 红脸鸬鹚 |
| 24 | Pelagic_Cormorant | 远洋鸬鹚 |
| 25 | Bronzed_Cowbird | 铜色牛鹂 |
| 26 | Shiny_Cowbird | 光泽牛鹂 |
| 27 | Brown_Creeper | 褐旋木雀 |
| 28 | American_Crow | 美洲乌鸦 |
| 29 | Fish_Crow | 鱼鸦 |
| 30 | Black_billed_Cuckoo | 黑嘴杜鹃 |
| 31 | Mangrove_Cuckoo | 红树林杜鹃 |
| 32 | Yellow_billed_Cuckoo | 黄嘴杜鹃 |
| 33 | Gray_crowned_Rosy_Finch | 灰顶玫红雀 |
| 34 | Purple_Finch | 紫朱雀 |
| 35 | Northern_Flicker | 北扑翅䴕 |
| 36 | Acadian_Flycatcher | 阿卡迪亚捕蝇鸟 |
| 37 | Great_Crested_Flycatcher | 大冠捕蝇鸟 |
| 38 | Least_Flycatcher | 小捕蝇鸟 |
| 39 | Olive_sided_Flycatcher | 橄榄侧捕蝇鸟 |
| 40 | Scissor_tailed_Flycatcher | 剪尾捕蝇鸟 |
| 41 | Vermilion_Flycatcher | 朱红捕蝇鸟 |
| 42 | Yellow_bellied_Flycatcher | 黄腹捕蝇鸟 |
| 43 | Frigatebird | 军舰鸟 |
| 44 | Northern_Fulmar | 北方管鼻鹱 |
| 45 | Gadwall | 赤膀鸭 |
| 46 | American_Goldfinch | 美洲金翅雀 |
| 47 | European_Goldfinch | 欧洲金翅雀 |
| 48 | Boat_tailed_Grackle | 船尾拟八哥 |
| 49 | Eared_Grebe | 黑颈䴙䴘 |
| 50 | Horned_Grebe | 角䴙䴘 |
| 51 | Pied_billed_Grebe | 斑嘴䴙䴘 |
| 52 | Western_Grebe | 西方䴙䴘 |
| 53 | Blue_Grosbeak | 蓝色大嘴雀 |
| 54 | Evening_Grosbeak | 暮色大嘴雀 |
| 55 | Pine_Grosbeak | 松雀 |
| 56 | Rose_breasted_Grosbeak | 玫胸大嘴雀 |
| 57 | Pigeon_Guillemot | 鸽崖海鸦 |
| 58 | California_Gull | 加州鸥 |
| 59 | Glaucous_winged_Gull | 灰翅鸥 |
| 60 | Heermann_Gull | 赫氏鸥 |
| 61 | Herring_Gull | 银鸥 |
| 62 | Ivory_Gull | 象牙鸥 |
| 63 | Ring_billed_Gull | 环嘴鸥 |
| 64 | Slaty_backed_Gull | 灰背鸥 |
| 65 | Western_Gull | 西方鸥 |
| 66 | Anna_Hummingbird | 安娜蜂鸟 |
| 67 | Ruby_throated_Hummingbird | 红喉蜂鸟 |
| 68 | Rufous_Hummingbird | 棕煌蜂鸟 |
| 69 | Green_Violetear | 绿紫耳蜂鸟 |
| 70 | Long_tailed_Jaeger | 长尾贼鸥 |
| 71 | Pomarine_Jaeger | 中贼鸥 |
| 72 | Blue_Jay | 蓝松鸦 |
| 73 | Florida_Jay | 佛罗里达灌丛鸦 |
| 74 | Green_Jay | 绿松鸦 |
| 75 | Dark_eyed_Junco | 暗眼灯草鹀 |
| 76 | Tropical_Kingbird | 热带王霸鹟 |
| 77 | Gray_Kingbird | 灰王霸鹟 |
| 78 | Belted_Kingfisher | 带翠鸟 |
| 79 | Green_Kingfisher | 绿翠鸟 |
| 80 | Pied_Kingfisher | 斑翡翠 |
| 81 | Ringed_Kingfisher | 环翠鸟 |
| 82 | White_breasted_Kingfisher | 白胸翡翠 |
| 83 | Red_legged_Kittiwake | 红腿三趾鸥 |
| 84 | Horned_Lark | 角百灵 |
| 85 | Pacific_Loon | 太平洋潜鸟 |
| 86 | Mallard | 绿头鸭 |
| 87 | Western_Meadowlark | 西草地鹨 |
| 88 | Hooded_Merganser | 头巾秋沙鸭 |
| 89 | Red_breasted_Merganser | 红胸秋沙鸭 |
| 90 | Mockingbird | 北方嘲鸫 |
| 91 | Nighthawk | 美洲夜鹰 |
| 92 | Clark_Nutcracker | 克拉克星鸦 |
| 93 | White_breasted_Nuthatch | 白胸䴓 |
| 94 | Baltimore_Oriole | 巴尔的摩拟黄鹂 |
| 95 | Hooded_Oriole | 头巾拟黄鹂 |
| 96 | Orchard_Oriole | 果园拟黄鹂 |
| 97 | Scott_Oriole | 斯科特拟黄鹂 |
| 98 | Ovenbird | 灶鸟 |
| 99 | Brown_Pelican | 褐鹈鹕 |
| 100 | White_Pelican | 白鹈鹕 |
| 101 | Western_Wood_Pewee | 西方林霸鹟 |
| 102 | Sayornis | 北美鹟 |
| 103 | American_Pipit | 美洲鹨 |
| 104 | Whip_poor_Will | 三声夜鹰 |
| 105 | Horned_Puffin | 角海鹦 |
| 106 | Common_Raven | 普通渡鸦 |
| 107 | White_necked_Raven | 白颈渡鸦 |
| 108 | American_Redstart | 美洲红尾林莺 |
| 109 | Geococcyx | 走鹃 |
| 110 | Loggerhead_Shrike | 大头伯劳 |
| 111 | Great_Grey_Shrike | 大灰伯劳 |
| 112 | Baird_Sparrow | 贝氏麻雀 |
| 113 | Black_throated_Sparrow | 黑喉麻雀 |
| 114 | Brewer_Sparrow | 布氏麻雀 |
| 115 | Chipping_Sparrow | 棕顶麻雀 |
| 116 | Clay_colored_Sparrow | 土色麻雀 |
| 117 | House_Sparrow | 家麻雀 |
| 118 | Field_Sparrow | 田野麻雀 |
| 119 | Fox_Sparrow | 狐色麻雀 |
| 120 | Grasshopper_Sparrow | 蝗虫麻雀 |
| 121 | Harris_Sparrow | 哈里斯麻雀 |
| 122 | Henslow_Sparrow | 亨斯洛麻雀 |
| 123 | Le_Conte_Sparrow | 勒孔特麻雀 |
| 124 | Lincoln_Sparrow | 林肯麻雀 |
| 125 | Nelson_Sharp_tailed_Sparrow | 纳尔逊尖尾麻雀 |
| 126 | Savannah_Sparrow | 萨瓦纳麻雀 |
| 127 | Seaside_Sparrow | 海滨麻雀 |
| 128 | Song_Sparrow | 歌带鹀 |
| 129 | Tree_Sparrow | 美洲树麻雀 |
| 130 | Vesper_Sparrow | 晚祷麻雀 |
| 131 | White_crowned_Sparrow | 白冠麻雀 |
| 132 | White_throated_Sparrow | 白喉麻雀 |
| 133 | Cape_Glossy_Starling | 好望角辉椋鸟 |
| 134 | Bank_Swallow | 崖沙燕 |
| 135 | Barn_Swallow | 家燕 |
| 136 | Cliff_Swallow | 崖燕 |
| 137 | Tree_Swallow | 树燕 |
| 138 | Scarlet_Tanager | 猩红比蓝雀 |
| 139 | Summer_Tanager | 夏比蓝雀 |
| 140 | Artic_Tern | 北极燕鸥 |
| 141 | Black_Tern | 黑燕鸥 |
| 142 | Caspian_Tern | 里海燕鸥 |
| 143 | Common_Tern | 普通燕鸥 |
| 144 | Elegant_Tern | 丽色燕鸥 |
| 145 | Forsters_Tern | 福氏燕鸥 |
| 146 | Least_Tern | 小燕鸥 |
| 147 | Green_tailed_Towhee | 绿尾唧鹀 |
| 148 | Brown_Thrasher | 褐嘲鸫 |
| 149 | Sage_Thrasher | 鼠尾草嘲鸫 |
| 150 | Black_capped_Vireo | 黑冠绿鹃 |
| 151 | Blue_headed_Vireo | 蓝头绿鹃 |
| 152 | Philadelphia_Vireo | 费城绿鹃 |
| 153 | Red_eyed_Vireo | 红眼绿鹃 |
| 154 | Warbling_Vireo | 鸣唱绿鹃 |
| 155 | White_eyed_Vireo | 白眼绿鹃 |
| 156 | Yellow_throated_Vireo | 黄喉绿鹃 |
| 157 | Bay_breasted_Warbler | 栗胸林莺 |
| 158 | Black_and_white_Warbler | 黑白林莺 |
| 159 | Black_throated_Blue_Warbler | 黑喉蓝林莺 |
| 160 | Blue_winged_Warbler | 蓝翅林莺 |
| 161 | Canada_Warbler | 加拿大林莺 |
| 162 | Cape_May_Warbler | 海角林莺 |
| 163 | Cerulean_Warbler | 天蓝林莺 |
| 164 | Chestnut_sided_Warbler | 栗侧林莺 |
| 165 | Golden_winged_Warbler | 金翅林莺 |
| 166 | Hooded_Warbler | 兜帽林莺 |
| 167 | Kentucky_Warbler | 肯塔基林莺 |
| 168 | Magnolia_Warbler | 木兰林莺 |
| 169 | Mourning_Warbler | 悼念林莺 |
| 170 | Myrtle_Warbler | 桃金娘林莺 |
| 171 | Nashville_Warbler | 纳什维尔林莺 |
| 172 | Orange_crowned_Warbler | 橙冠林莺 |
| 173 | Palm_Warbler | 棕榈林莺 |
| 174 | Pine_Warbler | 松林莺 |
| 175 | Prairie_Warbler | 草原林莺 |
| 176 | Prothonotary_Warbler | 黄头林莺 |
| 177 | Swainson_Warbler | 斯温森林莺 |
| 178 | Tennessee_Warbler | 田纳西林莺 |
| 179 | Wilson_Warbler | 威尔逊林莺 |
| 180 | Worm_eating_Warbler | 食虫林莺 |
| 181 | Yellow_Warbler | 黄林莺 |
| 182 | Northern_Waterthrush | 北方水鸫莺 |
| 183 | Louisiana_Waterthrush | 路易斯安那水鸫莺 |
| 184 | Bohemian_Waxwing | 波西米亚太平鸟 |
| 185 | Cedar_Waxwing | 雪松太平鸟 |
| 186 | American_Three_toed_Woodpecker | 美洲三趾啄木鸟 |
| 187 | Pileated_Woodpecker | 北美黑啄木鸟 |
| 188 | Red_bellied_Woodpecker | 红腹啄木鸟 |
| 189 | Red_cockaded_Woodpecker | 红顶啄木鸟 |
| 190 | Red_headed_Woodpecker | 红头啄木鸟 |
| 191 | Downy_Woodpecker | 绒啄木鸟 |
| 192 | Bewick_Wren | 贝氏鹪鹩 |
| 193 | Cactus_Wren | 仙人掌鹪鹩 |
| 194 | Carolina_Wren | 卡罗来纳鹪鹩 |
| 195 | House_Wren | 家鹪鹩 |
| 196 | Marsh_Wren | 沼泽鹪鹩 |
| 197 | Rock_Wren | 岩鹪鹩 |
| 198 | Winter_Wren | 冬鹪鹩 |
| 199 | Common_Yellowthroat | 普通黄喉林莺 |
模型训练
YOLO26n 训练配置
| 参数 | 值 | 说明 |
|---|---|---|
| 基础模型 | YOLO26n | Nano 级别,轻量高效 |
| 预训练权重 | 是 | 基于 COCO 预训练,迁移学习 |
| 训练轮次 | 100 epoch | --- |
| 早停耐心 | 30 epoch | 验证指标无提升则停止 |
| 输入分辨率 | 640×640 | --- |
| Batch Size | 16 | --- |
| 初始学习率(lr0) | 0.01 | --- |
| 最终学习率(lrf) | 0.01 | 余弦衰减终值比例 |
| 动量 | 0.937 | --- |
| 权重衰减 | 0.0005 | --- |
| 预热轮次 | 3 epoch | 学习率从低值线性增长 |
| 优化器 | auto | 自动选择(AdamW/SGD) |
| AMP 混合精度 | 是 | 加速训练,降低显存占用 |
| 随机种子 | 42 | 保证可复现性 |
| 设备 | GPU(cuda:0) | --- |
数据增强策略
| 增强方式 | 参数 | 说明 |
|---|---|---|
| HSV 色调扰动 | 0.015 | 轻微色调变化 |
| HSV 饱和度扰动 | 0.7 | 较强饱和度随机变换 |
| HSV 明度扰动 | 0.4 | 中等亮度随机变换 |
| 水平翻转 | 0.5 | 50% 概率随机水平翻转 |
| 平移 | 0.1 | 随机平移 10% |
| 缩放 | 0.5 | 随机缩放 ±50% |
| Mosaic | 1.0 | 四图拼接,增强小目标识别 |
| 关闭 Mosaic | 最后 10 epoch | 稳定训练末期收敛 |
| RandAugment | 自动 | 随机组合多种增强策略 |
| 随机擦除 | 0.4 | 40% 概率随机遮盖区域 |
Faster R-CNN 训练配置(对比实验)
| 参数 | 值 | 说明 |
|---|---|---|
| 骨干网络 | ResNet-50 + FPN | torchvision 预训练 |
| 预训练权重 | 是 | COCO 预训练迁移 |
| 训练轮次 | 30 epoch | --- |
| 输入分辨率 | 640×640 | --- |
| Batch Size | 2 | Two-stage 模型显存需求大 |
| 初始学习率 | 0.005 | --- |
| 动量 | 0.9 | --- |
| 权重衰减 | 0.0005 | --- |
| 学习率调度 | StepLR(step=10,γ=0.1) | 每 10 epoch 学习率缩小 10 倍 |
| AMP 混合精度 | 是 | --- |
| 置信度阈值 | 0.5 | 预测框过滤阈值 |
| IoU 阈值 | 0.5 | NMS 重叠度阈值 |
| 随机种子 | 42 | --- |
| 设备 | GPU(cuda:0) | --- |
训练指标
YOLO26n 最终结果
| 指标 | 值 |
|---|---|
| 最佳 Epoch | 第 57 轮 |
| Precision(精确率) | 81.47% |
| Recall(召回率) | 79.66% |
| mAP@50 | 86.87% |
| mAP@50-95 | 78.26% |
| 训练总时长 | ~3.82 小时 |
| 单张推理耗时 | 21.68 ms |
| 参数量 | 2.70 M |
| 权重文件大小 | 5.51 MB |
Faster R-CNN 最终结果
| 指标 | 值 |
|---|---|
| 最佳 Epoch | 第 29 轮 |
| Precision(精确率) | 60.31% |
| Recall(召回率) | 63.53% |
| mAP@50 | 69.75% |
| F1 分数 | 61.88% |
| 平均 IoU | 91.25% |
| 训练总时长 | ~9.66 小时 |
| 单张推理耗时 | 67.19 ms |
| 参数量 | 44.28 M |
| 权重文件大小 | 337.36 MB |
双模型对比
| 指标 | YOLO26 | Faster R-CNN | YOLO26 优势 |
|---|---|---|---|
| mAP@50 | 86.87% | 69.75% | +24.6% |
| Precision | 81.47% | 60.31% | +35.1% |
| Recall | 79.66% | 63.53% | +25.4% |
| 训练时长 | ~3.82h | ~9.66h | 快 60.5% |
| 推理耗时 | 21.68ms | 67.19ms | 快 67.7% |
| 参数量 | 2.70M | 44.28M | 少 93.9% |
| 权重大小 | 5.51MB | 337.36MB | 小 98.4% |
YOLO26 在所有核心指标上全面优于 Faster R-CNN,同时具备更快的推理速度和更小的模型体积,是本项目的主力部署模型。
可视化图说明
训练过程中自动生成若干可视化曲线图,保存于 train_result_yolov26/metric_plots/(YOLO26)和 fastrcnn_result/metric_plots/(Faster R-CNN)目录,双模型对比图保存于 model_compare_result/。
YOLO26 训练曲线
| 图文件 | 含义 |
|---|---|
train_box_loss.png |
训练集边界框回归损失(Box Loss),反映模型对目标位置预测的准确度,越低越好 |
train_cls_loss.png |
训练集分类损失(Classification Loss),反映模型对 200 类鸟类识别的分类能力,越低越好 |
train_dfl_loss.png |
训练集分布焦点损失(DFL Loss),YOLO 系列的边界框精细化损失,越低越好 |
val_box_loss.png |
验证集边界框回归损失,用于判断模型泛化能力,与训练损失走势对比可观察过拟合情况 |
val_cls_loss.png |
验证集分类损失,反映模型在未见数据上的分类稳定性 |
val_dfl_loss.png |
验证集分布焦点损失 |
val_precision.png |
验证集精确率曲线(Precision),表示所有正例预测中真正例的比例,趋势上升表示误检减少 |
val_recall.png |
验证集召回率曲线(Recall),表示所有真实目标中被正确检出的比例,趋势上升表示漏检减少 |
val_map50.png |
验证集 mAP@IoU=0.5 曲线,是目标检测的核心综合评估指标,越高代表整体检测越准确 |
val_map50_95.png |
验证集 mAP@IoU=0.5:0.95 曲线,多 IoU 阈值下的严格综合指标,对定位精度要求更高 |
lr_pg0.png |
第 0 参数组学习率变化曲线(主干网络),反映学习率调度策略的执行过程 |
lr_pg1.png |
第 1 参数组学习率变化曲线(检测头) |
lr_pg2.png |
第 2 参数组学习率变化曲线(偏置项) |
Faster R-CNN 训练曲线
| 图文件 | 含义 |
|---|---|
train_total_loss.png |
训练总损失,为分类损失、回归损失、RPN 损失之和 |
train_loss_classifier.png |
RoI 头分类损失,衡量目标类别预测的误差 |
train_loss_box_reg.png |
RoI 头边界框回归损失,衡量目标定位的精度 |
train_loss_objectness.png |
RPN 目标性损失,衡量候选框是否包含目标的判断能力 |
train_loss_rpn_box_reg.png |
RPN 阶段边界框回归损失,衡量候选区域的定位误差 |
val_precision.png |
验证集精确率曲线 |
val_recall.png |
验证集召回率曲线 |
val_f1.png |
验证集 F1 分数,精确率与召回率的调和平均值 |
val_map50.png |
验证集 mAP@50 曲线 |
val_mean_iou.png |
验证集平均 IoU,衡量预测框与真实框的平均重叠程度 |
inference_time.png |
每 epoch 的平均推理耗时变化曲线(ms) |
双模型对比图(model_compare_result/)
| 图文件 | 含义 |
|---|---|
comparison_overview.png |
综合对比总览图,将所有核心指标并排展示,直观呈现两模型全局差异 |
map50.png |
mAP@50 指标对比柱状图 |
precision.png |
Precision 精确率对比柱状图 |
recall.png |
Recall 召回率对比柱状图 |
infer_time_ms_.png |
推理时间对比柱状图(ms),越低代表推理越快 |
params_m_.png |
参数量对比柱状图(百万),越低代表模型越轻量 |
系统功能
桌面端应用基于 PyQt6 开发,提供以下六大功能模块:
| 模块 | 功能说明 |
|---|---|
| 图片识别 | 导入本地图片,运行 YOLO26 检测,输出标注框、类别名称(中英文)、置信度,支持结果图片保存 |
| 视频识别 | 导入本地视频文件,逐帧检测,实时预览检测结果,支持进度控制与结果导出 |
| 摄像头识别 | 调用本地摄像头,实时推流检测,适用于现场鸟类目标观测 |
| 检测历史 | 记录每次检测的时间、来源、模型、目标总数、识别类别数等信息,支持筛选与导出(CSV) |
| 模型管理 | 切换检测模型(支持加载不同 .pt 文件),调整置信度阈值、IoU 阈值、最大检测数等推理参数 |
| 指标展示 | 在应用内直接浏览训练过程中生成的各类指标曲线图,无需离开系统即可查阅训练结果 |
其他特性:
-
用户登录认证系统,支持多账号管理
-
SQLite 本地数据库持久化检测历史
-
中英双语类别显示(200 种鸟类均提供中文名)
-
检测结果支持导出为 CSV 文件
技术栈
| 层次 | 技术 |
|---|---|
| 深度学习框架 | PyTorch |
| 目标检测(主模型) | Ultralytics YOLO26 |
| 目标检测(对比模型) | torchvision Faster R-CNN(ResNet-50 + FPN) |
| 桌面 GUI | PyQt6 |
| 数据库 | SQLite(通过 Python 内置 sqlite3) |
| 图像处理 | OpenCV(cv2) |
| 数据处理 | NumPy、Pandas |
| 可视化 | Matplotlib |
| 语言 | Python 3.10+ |
| 训练设备 | NVIDIA GPU(CUDA) |
项目结构
c226/
├── main.py # 桌面应用启动入口
├── train.py # YOLO 训练启动脚本(默认 YOLO26)
├── train_fastrcnn.py # Faster R-CNN 训练启动脚本
│
├── desktop_app/ # 桌面应用核心代码
│ ├── app_context.py # 全局应用上下文
│ ├── bootstrap.py # 应用初始化与启动
│ ├── core/
│ │ ├── bird_names.py # 200 种鸟类中英文名称映射
│ │ ├── constants.py # 全局常量(页面、默认参数、配置键)
│ │ └── paths.py # 路径管理(模型、数据、数据库等)
│ ├── database/
│ │ └── connection.py # SQLite 数据库连接管理
│ ├── repositories/
│ │ ├── config_repository.py # 配置项持久化
│ │ ├── history_repository.py# 检测历史记录存取
│ │ └── user_repository.py # 用户信息管理
│ ├── services/
│ │ ├── auth_service.py # 用户认证服务
│ │ ├── detection_service.py # 检测核心逻辑
│ │ ├── export_service.py # 检测结果导出
│ │ ├── history_service.py # 历史记录业务逻辑
│ │ ├── metrics_service.py # 训练指标读取服务
│ │ └── model_service.py # 模型加载与推理管理
│ ├── ui/
│ │ ├── login_window.py # 登录窗口
│ │ ├── main_window.py # 主窗口框架
│ │ ├── styles.py # 全局样式
│ │ ├── pages/
│ │ │ ├── image_page.py # 图片识别页面
│ │ │ ├── video_page.py # 视频识别页面
│ │ │ ├── camera_page.py # 摄像头识别页面
│ │ │ ├── history_page.py # 检测历史页面
│ │ │ ├── model_page.py # 模型管理页面
│ │ │ └── metrics_page.py # 指标展示页面
│ │ └── widgets/
│ │ ├── common.py # 通用 UI 组件
│ │ └── preview.py # 检测结果预览组件
│ ├── utils/
│ │ ├── icon_utils.py # 图标工具
│ │ ├── image_utils.py # 图像处理工具
│ │ └── matplotlib_utils.py # Matplotlib 嵌入 Qt 工具
│ └── workers/
│ └── detection_workers.py # 后台检测线程(异步推理)
│
├── yolo_train/ # YOLO 训练管线
│ ├── config.py # 训练超参数配置
│ ├── dataset.py # 数据集加载与预处理
│ ├── train_pipeline.py # 完整训练流程
│ ├── torch_path_io.py # PyTorch 路径兼容补丁
│ └── visualizer.py # 训练指标可视化
│
├── fastrcnn_train/ # Faster R-CNN 训练管线
│ ├── config.py # 训练超参数配置
│ ├── dataset.py # 数据集加载(YOLO 标注转换)
│ ├── modeling.py # 模型构建(ResNet-50 + FPN)
│ ├── metrics.py # COCO 评估指标计算
│ ├── train_pipeline.py # 完整训练流程
│ ├── checkpoint.py # 模型权重保存与加载
│ ├── comparison.py # 双模型对比分析
│ └── visualizer.py # 训练指标可视化与对比图生成
│
├── CUB_200_8_1_1/ # 数据集
│ ├── data.yaml # YOLO 数据集配置(类别 + 路径)
│ ├── 数据集说明.md
│ ├── train/images/ # 训练集图片(9430 张)
│ ├── train/labels/ # 训练集标注
│ ├── val/images/ # 验证集图片(1179 张)
│ ├── val/labels/
│ ├── test/images/ # 测试集图片(1179 张)
│ └── test/labels/
│
├── train_result_yolov26/ # YOLO26 训练输出
│ ├── weights/
│ │ ├── best.pt # 最佳验证集权重
│ │ └── last.pt # 最终 epoch 权重
│ ├── args.yaml # 完整训练参数记录
│ ├── runtime_data.yaml # 运行时数据集配置
│ ├── results.csv # 逐 epoch 训练/验证指标数据
│ └── metric_plots/ # 各项指标可视化曲线图
│
├── fastrcnn_result/ # Faster R-CNN 训练输出
│ ├── weights/
│ │ ├── best_model.pth # 最佳验证集权重
│ │ └── last_model.pth # 最终权重
│ ├── metrics.csv # 逐 epoch 训练/验证指标数据
│ ├── summary.json # 最终指标汇总
│ ├── train_config.json # 完整训练配置记录
│ └── metric_plots/ # 各项指标可视化曲线图
│
├── model_compare_result/ # 双模型对比分析结果
│ ├── comparison_summary.json # 对比数据汇总
│ └── *.png # 各维度对比柱状图
│
├── yolo26n.pt # YOLO26n 预训练权重(回退用)
└── requirements.txt # Python 依赖列表
启动教程
环境要求
-
Python 3.10 或以上
-
NVIDIA GPU + CUDA(训练阶段必须;推理/系统运行可使用 CPU)
-
操作系统:Windows 10/11
安装依赖
pip install -r requirements.txt
训练 YOLO26 模型
python train.py
训练输出(权重、日志、指标曲线)自动保存至 train_result_yolov26/ 目录。
训练 Faster R-CNN 模型(对比实验)
python train_fastrcnn.py
训练输出自动保存至 fastrcnn_result/ 目录,训练完成后自动与 YOLO26 进行对比分析,结果输出至 model_compare_result/。
启动桌面应用
python main.py
首次运行时自动初始化数据库,默认加载 train_result_yolov26/weights/best.pt 作为检测模型。若权重文件不存在,将回退至项目根目录下的 yolo26n.pt。











