补全内容

This commit is contained in:
2025-02-21 14:28:44 +08:00
parent 85d0a8fadc
commit e74cb852c4
10 changed files with 207 additions and 13 deletions

View File

@ -159,4 +159,7 @@ def run_train(project_id: int, session: Session = Depends(get_db)):
return rc.response_error("项目查询错误") return rc.response_error("项目查询错误")
if project_info.project_status == '1': if project_info.project_status == '1':
return rc.response_error("项目当前存在训练进程,请稍后再试") return rc.response_error("项目当前存在训练进程,请稍后再试")
return StreamingResponse(ps.run_train_yolo(project_info, session), media_type="text/plain") data, project, name, epochs, yolo_path, version_path = ps.run_train_yolo(project_info, session)
return StreamingResponse(
ps.run_commend(data, project, name, epochs, yolo_path, version_path, project_id, session),
media_type="text/plain")

View File

@ -51,14 +51,12 @@ def update_project_status(project_id: int, project_status: str, session: Session
:return: :return:
""" """
if project_status == '2': if project_status == '2':
stmt = update(ProjectInfo).where(ProjectInfo.id == project_id).values({ session.query(ProjectInfo).filter_by(id=project_id).update({
'train_status': project_status, 'project_status': project_status,
'train_version': ProjectInfo.train_version + 1 'train_version': ProjectInfo.train_version + 1
}) })
session.execute(stmt)
else: else:
stmt = update(ProjectInfo).where(ProjectInfo.id == project_id).values({ session.query(ProjectInfo).filter_by(id=project_id).update({
'train_status': project_status 'project_status': project_status
}) })
session.execute(stmt)
session.commit() session.commit()

View File

@ -146,7 +146,8 @@ def run_train_yolo(project_info: ProjectInfoOut, session: Session):
operate_img_label(project_images_val, img_path_val, label_path_val, session, label_id_list) operate_img_label(project_images_val, img_path_val, label_path_val, session, label_id_list)
# 打包完成开始训练,训练前,更改项目的训练状态 # 打包完成开始训练,训练前,更改项目的训练状态
pic.update_project_status(project_info.id, '1') pic.update_project_status(project_info.id, '1', session)
# 开始训练 # 开始训练
data = yaml_file data = yaml_file
project = os.file_path(runs_url, project_info.project_no, 'train') project = os.file_path(runs_url, project_info.project_no, 'train')
@ -154,9 +155,20 @@ def run_train_yolo(project_info: ProjectInfoOut, session: Session):
epochs = 10 epochs = 10
yolo_path = os.file_path(yolo_url, 'train.py') yolo_path = os.file_path(yolo_url, 'train.py')
return data, project, name, epochs, yolo_path, version_path
def run_commend(data: str, project: str,
name: str, epochs: int,
yolo_path: str, version_path: str,
project_id: int, session: Session):
# 启动子进程 # 启动子进程
with subprocess.Popen( with subprocess.Popen(
["python", yolo_path, "--data=" + data, "--project=" + project, "--name=" + name, "--epochs=" + str(epochs)], ["python", yolo_path,
"--data=" + data,
"--project=" + project,
"--name=" + name,
"--epochs=" + str(epochs)],
shell=True, shell=True,
stdout=subprocess.PIPE, stdout=subprocess.PIPE,
stderr=subprocess.PIPE, stderr=subprocess.PIPE,
@ -173,12 +185,12 @@ def run_train_yolo(project_info: ProjectInfoOut, session: Session):
# 等待进程结束并获取返回码 # 等待进程结束并获取返回码
return_code = process.wait() return_code = process.wait()
if return_code != 0: if return_code != 0:
pic.update_project_status(project_info.id, '-1', session) pic.update_project_status(project_id, '-1', session)
else: else:
pic.update_project_status(project_info.id, '2', session) pic.update_project_status(project_id, '2', session)
# 然后保存版本训练信息 # 然后保存版本训练信息
train = ProjectTrain() train = ProjectTrain()
train.project_id = project_info.id train.project_id = project_id
train.train_version = version_path train.train_version = version_path
bast_pt_path = os.file_path(project, name, 'weight', 'bast.pt') bast_pt_path = os.file_path(project, name, 'weight', 'bast.pt')
last_pt_path = os.file_path(project, name, 'weight', 'last.pt') last_pt_path = os.file_path(project, name, 'weight', 'last.pt')

20
test.py Normal file
View File

@ -0,0 +1,20 @@
import subprocess
def main():
data = 'D:\\syg\\yolov5\\datasets\\hqjvaj\\v1\\hqjvaj.yaml'
project = 'D:\\syg\\yolov5\\runs\\hqjvaj\\train'
name = 'v1'
epochs = 10
yolo_path = 'yolov5/train.py'
subprocess.run(["python", yolo_path, "--data=" + data, "--project="
+ project, "--name=" + name, "--epochs=" + str(epochs)], check=True)
if __name__ == "__main__":
"""
如果此脚本被直接运行则调用main()函数。
如果此脚本被其他脚本导入则不会自动调用main()。
"""
main()

14
yolov5/CITATION.cff Normal file
View File

@ -0,0 +1,14 @@
cff-version: 1.2.0
preferred-citation:
type: software
message: If you use YOLOv5, please cite it as below.
authors:
- family-names: Jocher
given-names: Glenn
orcid: "https://orcid.org/0000-0001-5950-6979"
title: "YOLOv5 by Ultralytics"
version: 7.0
doi: 10.5281/zenodo.3908559
date-released: 2020-5-29
license: AGPL-3.0
url: "https://github.com/ultralytics/yolov5"

View File

147
yolov5/pyproject.toml Normal file
View File

@ -0,0 +1,147 @@
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
# Overview:
# This pyproject.toml file manages the build, packaging, and distribution of the Ultralytics library.
# It defines essential project metadata, dependencies, and settings used to develop and deploy the library.
# Key Sections:
# - [build-system]: Specifies the build requirements and backend (e.g., setuptools, wheel).
# - [project]: Includes details like name, version, description, authors, dependencies and more.
# - [project.optional-dependencies]: Provides additional, optional packages for extended features.
# - [tool.*]: Configures settings for various tools (pytest, yapf, etc.) used in the project.
# Installation:
# The Ultralytics library can be installed using the command: 'pip install ultralytics'
# For development purposes, you can install the package in editable mode with: 'pip install -e .'
# This approach allows for real-time code modifications without the need for re-installation.
# Documentation:
# For comprehensive documentation and usage instructions, visit: https://docs.ultralytics.com
[build-system]
requires = ["setuptools>=43.0.0", "wheel"]
build-backend = "setuptools.build_meta"
# Project settings -----------------------------------------------------------------------------------------------------
[project]
version = "7.0.0"
name = "YOLOv5"
description = "Ultralytics YOLOv5 for SOTA object detection, instance segmentation and image classification."
readme = "README.md"
requires-python = ">=3.8"
license = { "text" = "AGPL-3.0" }
keywords = ["machine-learning", "deep-learning", "computer-vision", "ML", "DL", "AI", "YOLO", "YOLOv3", "YOLOv5", "YOLOv8", "HUB", "Ultralytics"]
authors = [
{ name = "Glenn Jocher" },
{ name = "Ayush Chaurasia" },
{ name = "Jing Qiu" }
]
maintainers = [
{ name = "Glenn Jocher" },
{ name = "Ayush Chaurasia" },
{ name = "Jing Qiu" }
]
classifiers = [
"Development Status :: 4 - Beta",
"Intended Audience :: Developers",
"Intended Audience :: Education",
"Intended Audience :: Science/Research",
"License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Topic :: Software Development",
"Topic :: Scientific/Engineering",
"Topic :: Scientific/Engineering :: Artificial Intelligence",
"Topic :: Scientific/Engineering :: Image Recognition",
"Operating System :: POSIX :: Linux",
"Operating System :: MacOS",
"Operating System :: Microsoft :: Windows",
]
# Required dependencies ------------------------------------------------------------------------------------------------
dependencies = [
"matplotlib>=3.3.0",
"numpy>=1.22.2",
"opencv-python>=4.6.0",
"pillow>=7.1.2",
"pyyaml>=5.3.1",
"requests>=2.23.0",
"scipy>=1.4.1",
"torch>=1.8.0",
"torchvision>=0.9.0",
"tqdm>=4.64.0", # progress bars
"psutil", # system utilization
"py-cpuinfo", # display CPU info
"thop>=0.1.1", # FLOPs computation
"pandas>=1.1.4",
"seaborn>=0.11.0", # plotting
"ultralytics>=8.1.47"
]
# Optional dependencies ------------------------------------------------------------------------------------------------
[project.optional-dependencies]
dev = [
"ipython",
"check-manifest",
"pre-commit",
"pytest",
"pytest-cov",
"coverage[toml]",
"mkdocs-material",
"mkdocstrings[python]",
"mkdocs-redirects", # for 301 redirects
"mkdocs-ultralytics-plugin>=0.0.34", # for meta descriptions and images, dates and authors
]
export = [
"onnx>=1.12.0", # ONNX export
"coremltools>=7.0; platform_system != 'Windows'", # CoreML only supported on macOS and Linux
"openvino-dev>=2023.0", # OpenVINO export
"tensorflow>=2.0.0", # TF bug https://github.com/ultralytics/ultralytics/issues/5161
"tensorflowjs>=3.9.0", # TF.js export, automatically installs tensorflow
]
# tensorflow>=2.4.1,<=2.13.1 # TF exports (-cpu, -aarch64, -macos)
# tflite-support # for TFLite model metadata
# scikit-learn==0.19.2 # CoreML quantization
# nvidia-pyindex # TensorRT export
# nvidia-tensorrt # TensorRT export
logging = [
"comet", # https://docs.ultralytics.com/integrations/comet/
"tensorboard>=2.13.0",
"dvclive>=2.12.0",
]
extra = [
"ipython", # interactive notebook
"albumentations>=1.0.3", # training augmentations
"pycocotools>=2.0.6", # COCO mAP
]
[project.urls]
"Bug Reports" = "https://github.com/ultralytics/yolov5/issues"
"Funding" = "https://ultralytics.com"
"Source" = "https://github.com/ultralytics/yolov5/"
# Tools settings -------------------------------------------------------------------------------------------------------
[tool.pytest]
norecursedirs = [".git", "dist", "build"]
addopts = "--doctest-modules --durations=30 --color=yes"
[tool.isort]
line_length = 120
multi_line_output = 0
[tool.ruff]
line-length = 120
[tool.docformatter]
wrap-summaries = 120
wrap-descriptions = 120
in-place = true
pre-summary-newline = true
close-quotes-on-newline = true
[tool.codespell]
ignore-words-list = "crate,nd,strack,dota,ane,segway,fo,gool,winn,commend"
skip = '*.csv,*venv*,docs/??/,docs/mkdocs_??.yml'

View File

@ -1,4 +1,4 @@
YOLOv5 requirements # YOLOv5 requirements
# Usage: pip install -r requirements.txt # Usage: pip install -r requirements.txt
# Base ------------------------------------------------------------------------ # Base ------------------------------------------------------------------------

BIN
yolov5/zshz.mp4 Normal file

Binary file not shown.