# Yolov5Model **Repository Path**: gaoruishan/yolov5-model ## Basic Information - **Project Name**: Yolov5Model - **Description**: No description available - **Primary Language**: Unknown - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-08-13 - **Last Updated**: 2026-08-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README

**基于 YOLOv5 v7.0 的伤口/压疮智能评估目标检测系统** YOLOv5 CI YOLOv5 Citation Docker Pulls Open In Colab
本项目基于 [Ultralytics YOLOv5](https://github.com/ultralytics/yolov5) v7.0,面向医疗伤口(压疮)智能评估场景,实现伤口图片的多属性自动检测,包括压疮分期、组织类型、渗液量评估、伤口床颜色等。支持从数据标注、模型训练、验证到多端部署(服务器 API / Web / 移动端)的完整深度学习工程流程。 - **框架版本**:YOLOv5 v7.0(PyTorch 1.13.1) - **Python 版本**:3.7+ - **业务领域**:医疗影像目标检测(压疮/伤口评估) - **数据来源**:湘雅二院临床伤口图片 - **最终类别数**:124 类(综合版 dataset3) YOLOv5 🚀 is the world's most loved vision AI, representing [Ultralytics](https://ultralytics.com) open-source research into future vision AI methods. See the [official YOLOv5 repository](https://github.com/ultralytics/yolov5) and [Documentation](https://docs.ultralytics.com) for full framework details. --- ## 目录 - [快速开始](#快速开始) - [项目结构](#项目结构) - [核心模块](#核心模块) - [数据集说明](#数据集说明) - [模型架构](#模型架构) - [训练结果](#训练结果) - [自定义改动](#自定义改动) - [预训练模型](#预训练模型) - [部署导出](#部署导出) - [Flask API 服务](#flask-api-服务) - [已知问题与改进建议](#已知问题与改进建议) --- ## 快速开始 ### 安装 在 [**Python>=3.7.0**](https://www.python.org/) 环境中克隆仓库并安装依赖,包括 [**PyTorch>=1.7**](https://pytorch.org/get-started/locally/)。 ```bash git clone https://github.com/ultralytics/yolov5 # clone cd yolov5 pip install -r requirements.txt # install ``` ### PyTorch Hub 推理 ```python import torch # 加载官方模型 model = torch.hub.load('ultralytics/yolov5', 'yolov5s') # or yolov5n/m/l/x, custom # 加载自定义训练模型 model = torch.hub.load('ultralytics/yolov5', 'custom', path='runs/train/exp/weights/best.pt') img = 'data/images/bus.jpg' # 或 URL、PIL、OpenCV、numpy、list results = model(img) results.print() # 或 .show(), .save(), .crop(), .pandas() ``` ### detect.py 推理 `detect.py` 支持多种输入源,结果保存到 `runs/detect`。 ```bash python detect.py --source 0 # 摄像头 img.jpg # 图片 vid.mp4 # 视频 screen # 屏幕截图 path/ # 目录 'path/*.jpg' # glob 'rtsp://...' # RTSP/RTMP/HTTP 流 ``` ### 常用命令速查 ```bash # 安装依赖 pip install -r requirements.txt # 训练(自定义数据集) python train.py --img 640 --batch 16 --epochs 100 --data dataset3.yaml --weights yolov5s.pt # 推理 python detect.py --weights runs/train/exp/weights/best.pt --source data/images --conf-thres 0.5 # 验证 python val.py --data dataset3.yaml --weights runs/train/exp/weights/best.pt # 导出 TFLite / TF.js python export.py --weights best.pt --include tflite tfjs --img 640 # 启动 Flask API 服务 python app.py ``` --- ## 项目结构 ``` Yolov5Model/ ├── classify/ # 图像分类子模块(训练/验证/推理) ├── data/ # 官方数据配置与超参数 │ ├── hyps/ # 超参数 yaml(low/med/high/VOC/Objects365) │ ├── images/ # 示例图片(bus.jpg, zidane.jpg) │ └── scripts/ # 数据集下载脚本 ├── models/ # 模型定义 │ ├── common.py # 通用网络层(Conv, C3, SPPF, DetectMultiBackend 等) │ ├── yolo.py # 模型核心(Detect, DetectionModel, parse_model) │ ├── experimental.py # 实验性模块 │ ├── tf.py # TensorFlow 模型定义 │ ├── yolov5n/m/l/x.yaml # 五种规模模型结构配置 │ ├── hub/ # PyTorch Hub 配置 │ └── segment/ # 分割模型配置 ├── utils/ # 工具函数库 │ ├── general.py # 通用工具(NMS、坐标转换、日志等) │ ├── dataloaders.py # 数据加载器(图片/视频/流/摄像头) │ ├── loss.py # 损失函数(CIoU + BCE) │ ├── metrics.py # 评估指标(mAP、IoU、混淆矩阵) │ ├── plots.py # 绘图与可视化 │ ├── torch_utils.py # PyTorch 工具(EMA、设备选择、优化器) │ ├── augmentations.py # 数据增强(Mosaic、MixUp、HSV 等) │ ├── autoanchor.py # 自动锚框计算 │ ├── callbacks.py # 训练生命周期回调 │ ├── flask_rest_api/ # Flask API 示例 │ ├── loggers/ # 实验日志(W&B、ClearML、Comet) │ └── segment/ # 分割专用工具 ├── docs/ # 项目文档与开发记录 ├── runs/train/ # 训练结果(多次实验) │ ├── train.py # 【核心】检测模型训练 ├── detect.py # 【核心】检测推理 ├── val.py # 【核心】模型验证 ├── export.py # 【核心】模型导出(11 种格式) ├── app.py # 【自定义】Flask REST API 服务 ├── app_request.py # 【自定义】API 测试客户端 ├── convert_yolo_to_tfjs.py# 【自定义】PT 转 TF.js 工具 ├── detect_test.py # 【自定义】推理测试脚本 ├── sample_data.py # 【自定义】摄像头数据采集 ├── sample_test.py # 【自定义】多模型测试 ├── hubconf.py # PyTorch Hub 配置 ├── benchmarks.py # 性能基准测试 │ ├── dataset.yaml # 数据集配置(88 类) ├── dataset1stage.yaml # 一期数据集(94 类) ├── dataset2class.yaml # 组织类型(103 类) ├── dataset2color.yaml # 颜色(97 类) ├── dataset2liquid.yaml # 渗液量(106 类) ├── dataset3.yaml # 综合数据集(124 类,中文标签) │ ├── requirements.txt # Python 依赖 └── Arial.Unicode.ttf # 中文字体(解决标签乱码) ``` --- ## 核心模块 ### train.py — 模型训练 支持单机/多卡 DDP、断点续训、混合精度训练。 | 参数 | 说明 | 默认值 | |------|------|--------| | `--data` | 数据集配置 yaml | coco128.yaml | | `--weights` | 初始化权重路径 | yolov5s.pt | | `--cfg` | 模型结构 yaml | 自动推断 | | `--epochs` | 训练轮数 | 100 | | `--batch-size` | 批大小 | 16 | | `--imgsz` | 输入图像尺寸 | 640 | | `--hyp` | 超参数文件 | hyp.scratch-low.yaml | | `--device` | 设备(cpu/0/0,1,2,3) | 自动 | | `--workers` | 数据加载线程 | 8 | | `--cache` | 缓存方式(ram/disk) | 无 | | `--resume` | 断点续训 | 无 | | `--freeze` | 冻结层数 | 0 | ```bash # 基础训练 python train.py --img 320 --batch 16 --epochs 100 --data dataset.yaml --weights yolov5s.pt # 高性能训练(缓存到内存,多线程) python train.py --img 320 --batch 32 --epochs 100 --data dataset3.yaml --weights yolov5s.pt --workers 12 --cache ram ``` **训练流程**:参数解析 → 数据/模型加载 → AutoAnchor → 优化器(SGD/Adam)+ 学习率调度 → EMA + AMP → 每 epoch 训练+验证 → 保存 best/last → EarlyStopping。 **损失函数**:`box_loss (CIoU) + obj_loss (BCE) + cls_loss (BCE)` ### detect.py — 推理检测 支持图片、视频、摄像头、网络流、屏幕截图等输入,支持 PyTorch/ONNX/TensorRT/CoreML/TFLite/Paddle 等多种模型格式。 | 参数 | 说明 | 默认值 | |------|------|--------| | `--weights` | 模型权重 | yolov5s.pt | | `--source` | 输入源 | data/images | | `--conf-thres` | 置信度阈值 | 0.25 | | `--iou-thres` | NMS IoU 阈值 | 0.45 | | `--imgsz` | 推理尺寸 | 640 | | `--save-txt` | 保存 txt 标签 | False | | `--save-crop` | 保存裁剪目标 | False | ### val.py — 模型验证 计算 Precision、Recall、mAP@0.5、mAP@0.5:0.95,支持 COCO JSON 导出和混淆矩阵。 ```bash python val.py --data dataset3.yaml --weights best.pt --task val ``` ### export.py — 模型导出 支持导出 11 种部署格式: | 格式 | 参数 | 适用场景 | |------|------|----------| | PyTorch | 默认 | 训练/推理 | | TorchScript | `torchscript` | C++ 部署、移动端 | | ONNX | `onnx` | 跨平台推理 | | OpenVINO | `openvino` | Intel CPU/GPU 加速 | | TensorRT | `engine` | NVIDIA GPU 极速推理 | | CoreML | `coreml` | macOS/iOS | | SavedModel | `saved_model` | TensorFlow | | TFLite | `tflite` | 移动端/嵌入式(FP16/INT8) | | Edge TPU | `edgetpu` | Google Coral | | TF.js | `tfjs` | 浏览器/Web | | PaddlePaddle | `paddle` | 飞桨 | ```bash python export.py --weights best.pt --include onnx tflite tfjs --img 640 --simplify ``` --- ## 数据集说明 ### 数据集版本演进 | 配置文件 | 类别数 | 数据目录 | 说明 | |----------|--------|----------|------| | dataset.yaml | 88 | samples/ | COCO 80 类 + awake/drowsy + 6 类压疮分期 | | dataset1stage.yaml | 94 | samples1stage/ | 湘雅一期,英文命名 | | dataset2color.yaml | 97 | samples2color/ | 新增伤口床颜色(黑/红/黄) | | dataset2class.yaml | 103 | samples2class/ | 新增 6 种组织类型 | | dataset2liquid.yaml | 106 | samples2liquid/ | 新增渗液量分级 | | **dataset3.yaml** | **124** | **shan/** | **最终综合版,中文标签** | ### 最终类别体系(dataset3,124 类) - 基础 COCO 80 类 + awake/drowsy(驾驶员状态) - **压疮分期**(7 类):SDTI、Stage_I~IV、Unstageable - **中文分期别名**(6 类):深部组织损伤、分期-I~IV期、不可分期 - **组织类型**(6 类):伤口纤维化、闭合、肉芽组织、上皮组织、腐肉、坏死组织 - **渗液量**(4 类):大量、中等、少量、无 - **颜色百分比**(15 类):黑/红/黄各 0%/25%/50%/75%/100% - **渗液性质**(5 类):其他、绿色、脓性、血红色、血清色 ### 数据格式 YOLO 标注格式,每张图片对应一个 `.txt` 文件: ``` class_id x_center y_center width height ``` 坐标归一化到 0~1。目录结构: ``` dataset/ ├── images/ │ ├── train/ │ └── val/ └── labels/ ├── train/ └── val/ ``` --- ## 模型架构 YOLOv5 由三部分组成: - **Backbone**(骨干网络):Conv + C3(CSP Bottleneck)+ SPPF,提取多尺度特征 - **Neck**(颈部):PANet 结构,上采样 + 下采样 + Concat 特征融合 - **Head**(检测头):3 尺度检测(P3 80×80、P4 40×40、P5 20×20),每尺度 3 个锚框 检测头输出形状:`(batch, 3, grid_h, grid_w, 5+nc)`,其中 5 = (x, y, w, h, objectness),nc 为类别数。 ### 预训练模型 | 模型 | depth_multiple | width_multiple | 参数量 | GFLOPs | mAPval 50-95 | |------|----------------|----------------|--------|--------|-------------------| | YOLOv5n | 0.33 | 0.25 | 1.9M | 4.5 | 28.0 | | YOLOv5s | 0.33 | 0.50 | 7.2M | 16.5 | 37.4 | | YOLOv5m | 0.67 | 0.75 | 21.2M | 49.0 | 45.4 | | YOLOv5l | 1.00 | 1.00 | 46.5M | 109.1 | 49.0 | | YOLOv5x | 1.33 | 1.25 | 86.7M | 205.7 | 50.7 | > mAP 为 COCO val2017 上单模型单尺度(640)结果。权重在首次使用时自动从 [YOLOv5 release](https://github.com/ultralytics/yolov5/releases) 下载。 --- ## 训练结果 `runs/train/` 下保留多次实验结果。以压疮分期模型(exp2)为例: | 类别 | P | R | mAP50 | mAP50-95 | |------|---|---|-------|----------| | **all** | **0.968** | **0.989** | **0.993** | **0.806** | | SDTI | 0.985 | 1.000 | 0.995 | 0.794 | | Stage_I | 0.991 | 1.000 | 0.995 | 0.755 | | Stage_II | 0.991 | 1.000 | 0.995 | 0.800 | | Stage_III | 0.934 | 0.936 | 0.985 | 0.810 | | Stage_IV | 0.930 | 1.000 | 0.991 | 0.847 | | Unstageable | 0.980 | 1.000 | 0.995 | 0.830 | 训练 100 epochs 约 1.5 小时(GPU)。 --- ## 自定义改动 相对于官方 YOLOv5,本项目做了以下定制: 1. **detect.py 类别越界保护**:对预测类别 ID 做边界检查,未知类别显示 `unknown_class_X`,避免索引越界崩溃。 2. **val.py 启用多标签 NMS**(`val.py:223`):`multi_label=True`,支持同一伤口区域同时输出多个属性标签(分期+颜色+组织类型等)。 3. **中文字体支持**:引入 `Arial.Unicode.ttf`,解决中文标签绘图乱码。 4. **Flask API 服务**(app.py):提供 HTTP 推理接口。 5. **TF.js 转换工具**(convert_yolo_to_tfjs.py):基于 ultralytics 包,比官方导出更健壮。 6. **多个测试/采集脚本**:detect_test.py、sample_data.py、sample_test.py。 7. **多版本伤口评估数据集配置**:6 个 dataset yaml 记录类别扩展历程。 --- ## Flask API 服务 `app.py` 基于 Flask 的 RESTful 推理服务: - `GET /`:返回测试图片检测结果(页面) - `POST /v1/object-detection/yolov5s`:接收图片文件,返回 JSON 检测结果 返回字段:`class`(类别名)、`confidence`(置信度)、`xmin/ymin/xmax/ymax`(边界框坐标)。 ```bash python app.py # 启动服务,默认 0.0.0.0:5000 python app_request.py # 测试客户端 ``` --- ## 文档与资源 - [YOLOv5 官方文档](https://docs.ultralytics.com) — 训练、测试、部署完整文档 - [Train Custom Data](https://github.com/ultralytics/yolov5/wiki/Train-Custom-Data) — 自定义数据训练教程 - [Multi-GPU Training](https://github.com/ultralytics/yolov5/issues/475) — 多卡训练 - [TFLite, ONNX, CoreML, TensorRT Export](https://github.com/ultralytics/yolov5/issues/251) — 模型导出 - [PyTorch Hub](https://github.com/ultralytics/yolov5/issues/36) — Hub 推理 - [Tips for Best Training Results](https://github.com/ultralytics/yolov5/wiki/Tips-for-Best-Training-Results) — 训练优化建议 - [Classification Tutorial](classify/tutorial.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/ultralytics/yolov5/blob/master/classify/tutorial.ipynb) - 项目开发记录见 `docs/` 目录 --- ## 已知问题与改进建议 1. **数据集路径硬编码**:dataset.yaml 中使用绝对路径,迁移时需修改。建议改用相对路径。 2. **缺少独立验证集**:部分数据配置 train/val 指向同一目录,建议按 8:2 划分。 3. **类别命名不统一**:存在 Stage_IV / Stage4 / 分期-IV期 等多种命名,建议统一规范。 4. **调试代码残留**:detect.py 中存在 `print("-----1-------")` 等调试输出。 5. **app.py 模型路径硬编码**且 `debug=True`,生产环境应改为可配置并关闭 debug。 6. **Python/PyTorch 版本较旧**:可考虑升级到更新版本或迁移至 YOLOv8。 --- ## Contribute We love your input! Please see the [Contributing Guide](CONTRIBUTING.md) to get started. For YOLOv5 bugs and feature requests please visit [GitHub Issues](https://github.com/ultralytics/yolov5/issues). For professional support please [Contact Ultralytics](https://ultralytics.com/contact). To request a commercial license please complete the form at [Ultralytics Licensing](https://ultralytics.com/license). ## License YOLOv5 is available under two different licenses: - **AGPL-3.0 License**: See [LICENSE](LICENSE) file for details. - **Enterprise License**: Provides greater flexibility for commercial product development without the GPLv3 open-source obligations. Please see [Ultralytics Licensing](https://ultralytics.com/license) for details.