
人工智能计算机视觉深度学习【免费下载链接】ImageAIA python library built to empower developers to build applications and systems with self-contained Computer Vision capabilities项目地址https://gitcode.com/gh_mirrors/im/ImageAI点击查看免费下载ImageAI 为自定义目标检测模型的训练提供了目前最简洁的入口你只需准备一份符合 YOLO 格式的标注数据集再编写几行 Python 代码即可基于YOLOv3或TinyYOLOv3架构训练出属于自己的检测模型并用训练产出的模型权重 JSON 配置文件完成对任意对象类别的检测。本文以仓库内 imageai/Detection/Custom/CUSTOMDETECTIONTRAINING.md 为骨架结合 DetectionModelTrainer 实现、数据集加载器、锚框生成与 mAP 验证等源码细节带你走通「数据集准备 → 训练 → 指标解读 → 模型选用 → 部署检测」的完整链路。一、训练能力总览能做什么从文档与源码看ImageAI 自定义检测训练的核心能力包括在任意自定义对象类别的图像数据集上训练YOLOv3或TinyYOLOv3检测模型支持从零训练也支持加载预训练yolov3.pt/tiny-yolov3.pt权重进行迁移学习官方推荐精度更高训练过程中自动为你的数据集生成最匹配的锚框anchor boxes并将类别名与锚框写入 JSON 配置文件每个 epoch 自动在验证集上计算mAP0.5、mAP0.5-0.95、recall、precision等指标并据此挑选最优模型权重保存训练产物模型 .pt 文件 detection_config.json可直接交给CustomObjectDetection类做图像/视频/摄像头实时检测。在动手之前需要明确当前仓库ImageAI 3.x已切换到PyTorch 后端训练与推理均使用.pt/.pth权重文件imageai/backend_check/model_extension.py中的extension_check()会直接拒绝.h5TensorFlow 时代的模型并提示安装 2.1.6 及更早版本才能使用 TF 模型。这一迁移背景可参考仓库根目录的 BACKEND_MIGRATION.md。二、第一步准备自定义数据集2.1 采集与标注按原文档的步骤数据集准备流程如下确定目标类别并采集图片为每类对象收集约 200 张最低建议或更多的图片样本越多、角度/光照/背景越多样训练出的模型泛化能力越强。标注图片ImageAI 采用YOLO 格式标注。可使用跨平台Windows / Linux / macOS的LabelImg标注工具完成框选与类别标记。产出标注文件每张图片对应一个同名.txt标注文件例如图片为image(1).jpg、image(2).jpg……则标注为image(1).txt、image(2).txt……标注文件逐行描述图中的每一个对象。标注文件的格式可以从数据集加载器 imageai/Detection/Custom/yolo/dataset.py 的__load_raw_label()中确认每行 5 列即类别索引 中心x 中心y 宽 高且坐标必须归一化到 01 区间源码中对负值和越界值有显式断言校验。例如一张只含一个目标的图片其.txt可能长这样0 0.5000 0.4500 0.3000 0.4000如果图中同时出现多个对象则一行写一个对象类别索引必须与object_names_array中给出的顺序严格对应。2.2 目录结构train 与 validation按文档要求创建数据集根目录例如hololens-yolo内部结构如下 hololens-yolo train images img_1.jpg (含 Object_1) images img_2.jpg (含 Object_2) images img_3.jpg (含 Object_1, Object_3 ...) annotations img_1.txt annotations img_2.txt annotations img_3.txt validation images img_151.jpg images img_152.jpg images img_153.jpg annotations img_151.txt annotations img_152.txt annotations img_153.txt划分原则将每类对象图片的70%80% 放入 train/images其余放入 validation/images并把对应标注放入各自的 annotations 子目录。图片文件名不含扩展名必须与标注文件名不含扩展名完全一致这是LoadImagesAndLabels通过__img_path2label_path()按文件名一一对应读取的硬性约束文件名不一致会导致标注缺失训练时该图将被视为无目标样本。数据集目录结构同样被DetectionModelTrainer.setDataDirectory()见 imageai/Detection/Custom/init.py在运行时校验目录必须真实存在其下必须有train/images、train/annotations、validation/images、validation/annotations四个子目录。加载器源码LoadImagesAndLabels在trainTrue/False时分别拼接train与validation路径并逐张读取images下的 jpg 图片及其同名.txt标注。官方同时提供了一份已标注的Hololens / HeadsetsHololens 与 Oculus 头盔示例数据集hololens-yolo.zip以及预训练模型yolov3.pt可从项目官方 Release 资源中获取用于快速跑通本文全部流程。三、第二步开始训练——6 行代码准备好数据集后训练代码极其简洁完整示例如下from imageai.Detection.Custom import DetectionModelTrainer trainer DetectionModelTrainer() trainer.setModelTypeAsYOLOv3() trainer.setDataDirectory(data_directoryhololens-yolo) trainer.setTrainConfig(object_names_array[hololens], batch_size4, num_experiments200, train_from_pretrained_modelyolov3.pt) # 训练多个对象时例如 # trainer.setTrainConfig(object_names_array[hololens, google-glass, oculus, magic-leap], batch_size4, num_experiments200, train_from_pretrained_modelyolov3.pt) trainer.trainModel()逐行拆解from imageai.Detection.Custom import DetectionModelTrainer trainer DetectionModelTrainer() trainer.setModelTypeAsYOLOv3() trainer.setDataDirectory(data_directoryhololens-yolo)第一行导入训练器类DetectionModelTrainer第二行实例化训练器第三行把网络类型设置为YOLOv3如需更轻量的网络可调用setModelTypeAsTinyYOLOv3()切换为TinyYOLOv3第四行传入数据集目录路径即上一步的hololens-yolo文件夹。核心配置写在setTrainConfig()中参数说明如下表默认值以 源码签名 为准参数说明默认值备注object_names_array数据集中的对象类别名列表顺序必须与标注文件中的类别索引一致必填如[hololens]单类或多类[hololens, oculus]batch_size训练的批大小4越大通常精度越好如 8、16但显存占用越高num_experiments训练轮数即 epochs100文档示例用200可视数据量与收敛情况调整train_from_pretrained_model迁移学习用的预训练权重路径yolov3.pt或tiny-yolov3.ptNone从零训练可选传入后会自动校验文件扩展名必须为.pt/.pthtrainModel()会拉起完整的训练循环自动生成锚框、创建输出目录、逐 epoch 训练并在验证集上评估直到跑完所有 epochs。四、训练背后的源码级原理4.1 锚框自动生成AutoAnchor训练启动时控制台最先打印锚框生成日志对应源码 imageai/Detection/Custom/yolo/custom_anchors.py 的generate_anchors()。其原理是从训练集所有标注中统计目标框的宽高分布用K-means 聚类初始化n个锚框YOLOv3 为n9TinyYOLOv3 为n6再通过遗传算法进化约 1000 代以「锚框与真实框宽高比优于阈值thr的样本占比」为适应度函数迭代优化得到与你数据集目标尺寸最匹配的锚框日志中thr0.25: 1.0000 best possible recall表示当前锚框集合理论上能达到的最佳召回率n9, img_size416, metric_all...则给出锚框适配度统计。生成的 9 个锚框会按尺寸从小到大排序并分别分配给 YOLOv3 的三个检测层anchor_masks 依次为(6,7,8)、(3,4,5)、(0,1,2)见 imageai/yolov3/yolov3.py用于大、中、小三种尺度目标的检测TinyYOLOv3 只有两个检测层对应 mask(3,4,5)与(0,1,2)见 imageai/yolov3/tiny_yolov3.py。4.2 迁移学习权重加载若在setTrainConfig()中传入了train_from_pretrained_model训练器会在__set_training_param()→__load_model()中执行用torch.load读取预训练权重过滤掉与当前模型结构不匹配的键尤其当类别数不同导致检测层前卷积通道数变化时new_state_dict只保留形状一致的层以load_state_dict(..., strictFalse)非严格方式加载然后打印 Pretrained YOLOv3 model loaded to initialize weights 若加载失败例如文件损坏会回退为随机权重初始化并给出提示。因此迁移学习模式下网络主干特征提取层的预训练参数被复用只重新学习检测层通常能显著提升收敛速度与最终精度。4.3 训练循环优化器、损失与 AMP从trainModel()的实现细节看训练环节具备以下特点优化器SGDlr1e-2, momentum0.6, nesterovTrue偏置项单独分组不加权重衰减BatchNorm 权重不衰减其余权重使用weight_decay5e-4 * (batch_size * accumulate / 64)缩放配合LambdaLR线性衰减学习率从 1.0 衰减到 0.01。学习率预热warmup前nw max(3 * nb, 1000)个 batch 内学习率从 0 线性升到初始值、动量从 0.8 升到 0.9以稳定训练初期。梯度累积accumulate max(round(64 / batch_size), 1)等效于名义批大小 64让小 batch 也能稳定更新。混合精度AMP在 GPU 上通过torch.cuda.amp自动混合精度训练降低显存占用。损失函数见 imageai/Detection/Custom/yolo/compute_loss.py由三部分组成——边界框回归损失基于CIoU权重 0.05、目标性损失BCE三个检测层按[4.0, 1.0, 0.4]加权、类别损失BCE按0.5 * (nc / 80)缩放单类时类别损失恒为 0。三者之和即每个 batch 的反向传播目标。4.4 产物生成与模型保存策略训练器在trainModel()开始时会在数据集目录下自动创建两个子目录并写入配置json/写入{数据集名}_{模型类型}_detection_config.json内容为{labels: [...], anchors: [...]}。例如hololens-yolo数据集 YOLOv3 会生成hololens-yolo_yolov3_detection_config.json这正是后续CustomObjectDetection推理时必须配套加载的配置文件。models/存放训练产出的模型权重。模型保存采用「只留最优」策略见 imageai/Detection/Custom/init.py 的trainModel()每个 epoch 的验证阶段结束后比较当前mAP0.5与历史最优值best_fitness若mAP50 提升则保存新权重并删除旧的上一最优权重文件名格式为{模型类型}_{数据集名}_mAP-{mAP50}_epoch-{epoch}.pt例如官方示例中的yolov3_hololens-yolo_mAP-0.82726_epoch-73.pt全部 epochs 跑完后额外保存一份{模型类型}_{数据集名}_last.pt作为最后一轮权重训练结束打印总耗时并清空 GPU 缓存。五、读懂训练控制台输出训练启动后控制台输出形如来自 examples/custom_detection_train.py 中的真实示例Generating anchor boxes for training images... thr0.25: 1.0000 best possible recall, 6.93 anchors past thr n9, img_size416, metric_all0.463/0.856-mean/best, past_thr0.549-mean: Pretrained YOLOv3 model loaded to initialize weights Epoch 1/200 ---------- Train: 30it [00:14, 2.09it/s] box loss- 0.09820, object loss- 0.27985, class loss- 0.00000 Validation: 15it [01:45, 7.05s/it] recall: 0.085714 precision: 0.000364 mAP0.5: 0.000186, mAP0.5-0.95: 0.0000305.1 头部日志锚框与预训练权重Generating anchor boxes for training images...以及随后一行统计表示 ImageAI 已按 4.1 节所述为你的数据集自动生成了最匹配的锚框Pretrained YOLOv3 model loaded to initialize weights表示预训练yolov3.pt已成功加载用于初始化权重未传预训练模型时无此行。5.2 每个 epoch 的三类损失Train:段输出三类损失数值越小越好随训练推进应持续下降box loss边界框回归损失基于 CIoU衡量预测框与真实框的重合质量object loss目标性损失衡量网格单元「此处有目标」的置信度判断class loss类别分类损失。若始终为 0.0000是因为数据集只有单一类别单类时类别分支不参与计算与源码if nc 1的判断一致属正常现象。5.3 验证指标recall / precision / mAPValidation:段输出当前 epoch 的验证指标源自 imageai/Detection/Custom/yolo/validate.py 的validate.run()它在 10 个 IoU 阈值[0.5, 0.55, ..., 0.95]上计算指标recall / precision召回率与精确率mAP0.5IoU 阈值为 0.5 时的平均精度均值训练中以它作为模型保存的排序依据mAP0.5-0.95COCO 风格的严格指标对 10 个 IoU 阈值求平均更全面地反映定位精度。这些指标应随训练推进整体上升过程中出现小幅度波动属正常。精度曲线与 AP 的计算实现位于 imageai/Detection/Custom/yolo/metric.pyap_per_class/compute_ap按 COCO 101 点插值法对 PR 曲线积分。每当 mAP50 创新高就会在models/目录保存一个新模型因此训练结束后models/中文件名 mAP 最高的那个权重即当前数据条件下的最优模型。六、关于模型评估的说明原文档引言中曾提到一个独立的evaluateModel()函数用于按指定的 IoU 与 NMS 阈值评估已保存模型的 mAP。需要说明的是在当前仓库的 PyTorch 后端实现中mAP 评估已被内建到trainModel()的每个 epoch 验证阶段——validate.run()在每个 epoch 自动完成 NMSnms_thresh0.6、objectness_thresh0.001并计算上述全部指标无需再单独调用评估函数。因此「选模型」这件事在训练过程中就已自动完成直接取models/目录中文件名里 mAP 值最高的.pt文件即可。七、训练完成之后用自定义模型做检测训练产出的两个关键文件最优权重如models/yolov3_hololens-yolo_mAP-0.82726_epoch-73.pt配置json/hololens-yolo_yolov3_detection_config.json。将两者与imageai.Detection.Custom.CustomObjectDetection配合即可在任意图片上完成自定义检测。完整用法含对象裁剪、隐藏标签、numpy 数组输入输出等进阶能力见 imageai/Detection/Custom/CUSTOMDETECTION.md其核心调用如下from imageai.Detection.Custom import CustomObjectDetection detector CustomObjectDetection() detector.setModelTypeAsYOLOv3() detector.setModelPath(yolov3_hololens-yolo_mAP-0.82726_epoch-73.pt) detector.setJsonPath(hololens-yolo_yolov3_detection_config.json) detector.loadModel() detections detector.detectObjectsFromImage(input_imageholo2.jpg, output_image_pathholo2-detected.jpg) for detection in detections: print(detection[name], : , detection[percentage_probability], : , detection[box_points])若需要把自定义模型用于视频/摄像头实时检测可进一步参考 imageai/Detection/Custom/CUSTOMVIDEODETECTION.md。八、工程实践建议与注意事项batch_size 与硬件默认batch_size4在 Google Colab 上即可运行但文档明确建议使用比 Colab K80 更强的 GPU因为更大的 batch如 8、16通常带来更好的精度。训练器自动检测cuda可用性无 GPU 时回退到 CPU速度会明显下降。优先迁移学习从零训练需要极大数据量且收敛慢官方建议在预训练yolov3.pt/tiny-yolov3.pt基础上微调精度更易达标。类别顺序一致性object_names_array的顺序必须与标注.txt中的类别索引一一对应错位会导致训练出的模型类别混乱。单类场景class loss 恒为 0 是正常的只需关注 box loss、object loss 与 mAP 指标。文件命名权重必须为.pt/.pth.h5TensorFlow 旧模型会被extension_check()直接拒绝。数据量下限每类目标建议至少 200 张图训练/验证按 70%80% / 20%30% 划分并保证验证集覆盖足够多样的场景。九、快速验证仓库自带的测试与示例仓库提供了可直接参考的端到端样例与自动化测试便于验证训练流程的正确性examples/custom_detection_train.py与本文一致的完整训练脚本含控制台输出示例可直接替换data_directory、类别数组与预训练权重路径后运行test/test_custom_detection_training.py对 YOLOv3 与 TinyYOLOv3 两种模型、迁移学习与从零训练四种组合进行参数化测试batch_size2, num_experiments2并在结束后断言json/下生成了{数据集名}_{模型类型}_detection_config.json、models/下存在.pt权重文件——这恰好覆盖了「训练产物完整」这一核心验收点。从准备标注数据集、理解锚框自动生成与损失构成到解读 mAP 指标并挑选最优权重再到底层源码的调用链验证——至此你已具备用 ImageAI 训练任意自定义目标检测模型的完整能力训练产物可直接无缝接入图像、视频与摄像头实时检测场景。赞分享人工智能计算机视觉深度学习【免费下载链接】ImageAIA python library built to empower developers to build applications and systems with self-contained Computer Vision capabilities项目地址https://gitcode.com/gh_mirrors/im/ImageAI点击查看免费下载相关推荐信任的进化教学应用指南——如何在课堂中使用这个互动工具信任的进化教学应用指南——如何在课堂中使用这个互动工具 你是否正在寻找一种生动有趣的方式来向学生讲解博弈论和信任机制《信任的进化》这个互动教学工具正是你需要keras-yolo3训练指南自定义数据集训练YOLOv3模型keras yolo3训练指南自定义数据集训练YOLOv3模型 本文详细介绍了使用keras yolo3项目训练自定义YOLOv3模型的完整流程涵盖了数据准人工智能深度学习计算机视觉PaddleOCR 文本检测模型训练全流程指南数据准备、训练、评估、推理与自定义 BackbonePaddleOCR 文本检测模型训练全流程指南数据准备、训练、评估、推理与自定义 Backbone 本文以 ICDAR2015 数据集为例系统讲解 Padd人工智能计算机视觉OCR深度学习大模型RAG上一篇ZMK Devicetree 全面指南从声明式树结构到键位映射的底层原理下一篇Earnings Reviewer Managed Agent Cookbook用三层隔离架构构建财报电话会议到研报草稿的自动化流水线创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考