一个完整的 AI 图像识别应用,从数据标注到模型训练,再到后端和前端的搭建。由于原始数据和训练过程中产生文件占用了很大的存储空间,因此没有包含在这个仓库里
目前应用暂时没有部署到互联网上,因此只能下载仓库后在本地使用。请参考后端和前端两个章节了解如何启动开发服务器
数据标注我使用了 X-AnyLabeling,当然你可以使用别的标注工具,只要能导出为 YOLO 使用的格式即可
标注完成后可以使用以下脚本分割数据集
cd training
python scripts/split_dataset.py --images "path/to/images" --labels "path/to/labels" --output "path/to/output" --train-ratio 0.7 --val-ratio 0.1我用 just 将该命令包装成了更易用的形式,不过使用该方法要求安装了 just,且原始图片和标签应按如下方式存放
training
└── data
└── dataset_name
├── images
└── labels准备好后运行如下命令即可
just spsplit_dataset dataset_name 0.7 0.1在正式开始训练之前,还需要一些东西
在 training 目录下新建一个 data.yaml 文件夹,填写如下信息
# 更多内容请参考 https://docs.ultralytics.com/zh/datasets/
# 替换为你的数据集的名称和分割比例
path: dataset_name-0.7-0.1
train: images/train
val: images/val
test: images/test
# 替换为你的数据集的物体种类名
names:
0: person
1: bicycle
# 后面省略请确保激活了正确的环境,并且安装了 YOLO。更详细的依赖项可以参考 training/requirements.txt 文件,但不建议直接使用 pip -r requirements.txt 安装依赖,因为这无法保证与你机器上的 CUDA 版本一致。
YOLO CLI 提供了丰富的参数可以设置,基本上涵盖了所有的需求,很少有需要写代码的情况
cd training
# 更详细的设置可参考 https://docs.ultralytics.com/zh/modes
# 训练
yolo train data="path/to/data.yaml" model=yolo11n.pt epochs=10 batch=4 lr0=0.01
# 验证
yolo val model="path/to/best.pt" split=test同样地,这些命令我用 just 包装了一下。如果想要使用 just,请在根目录运行
# 训练
just train coco8 yolo11n 10 4 0.01
# 验证
just val coco8 yolo11n-10-4-0.01 test当然,还能更方便一点,一行命令完成训练和在所有数据集上分别验证
just tran_val coco8 yolo11n 10 4 0.01如果需要记录日志,可以使用 script 和 ansifilter。前者记录日志(同时终端也能看到输出),后者处理 ANSI 转义字符
script -q -c "just tran_val coco8 yolo11n 10 4 0.01" output.log
ansifilter -i output.log -o output_filtered.log两者都在 Windows 平台可用,建议通过 MSYS 来获取这两个工具
最后我又包装了这些命令。这个应该就是终极命令了,一行命令完成所有任务
- 模型训练
- 在所有数据集上分别验证模型
- 记录日志并处理 ANSI 转义字符
命令示例如下
just train_val_log coco8 yolo11n 10 4 0.01如果 YOLO CLI 满足不了你的非常特殊的需求,那么你可能需要使用 YOLO 的 Python 接口
不过我不推荐直接写 python 脚本。使用 Jupyter 可能更好,这在科学计算、机器学习中非常流行
在 training/training.ipynb 里有我使用的训练代码
后端使用 FastAPI 进行开发,并且直接使用 YOLO 进行模型推理
请确保安装了 python,并按照以下步骤启动后端开发服务器。我建议为后端新建一个环境。虽然我为了方便,后端环境和训练环境是一样的,并且还没有遇到过问题,但这总归是不太好的实践
cd backend
# 安装依赖
pip install -r requirements.txt
# 启动后端开发服务器
fastapi dev main.py如果需要更改模型,可以修改 backend/models.json 文件。path 的值应为模型文件的相对路径,id 不能有重复,name 和 description 只在用户界面中使用,对后端没有影响
可以把模型复制到 backend/models 文件夹中。这样如果模型要更新,就不用反复更改 path 的值,只需覆盖原本的模型文件即可
前端使用 React + Vite 进行开发
请确保安装了 nodejs,并按照以下步骤启动前端开发服务器
cd frontend
# 安装依赖
npm install
# 启动前端开发服务器
npm run dev如果更改了 backend/models.json 文件,则需要刷新浏览器页面才能将更改同步到前端