Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

ShineMinxing/PythonYOLO

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

16 Commits

Repository files navigation

PythonYOLO

PythonYOLO 是一个面向视频中小目标/无人机数据处理的 Python 工作流。整体流程包括:从原始视频中提取运动点、根据候选点追踪目标、结合 IMU/姿态数据生成观测角和 YOLO-OBB 标注,最后使用 Ultralytics YOLO-OBB 进行训练。

目录结构

PythonYOLO/
├── config.yaml # 主配置文件
├── config_record.txt # 多组 step2_trace 测试参数记录
├── yolo11n.pt # 示例/预置权重
├── python_file/
│ ├── step1_moving_points.py # 提取运动点
│ ├── step2_trace.py # 目标轨迹追踪与视频裁剪
│ ├── step3_observed_angle.py # 生成观测角可视化与 YOLO-OBB 数据集
│ └── step4_yolo_train.py # 训练 YOLO-OBB 模型
└── local_file/
 ├── raw_file/ # 原始视频和 IMU CSV
 ├── step1_file/ # step1 输出
 ├── step2_file/ # step2 输出
 ├── step3_file/ # step3 输出及 dataset
 └── step4_file/ # step4 训练输出

环境依赖

建议使用 Python 3,并安装以下依赖:

pip install opencv-python pandas numpy pyyaml tqdm requests ultralytics

脚本中会调用 ffmpeg 进行视频重封装/转码,请确保系统已安装:

sudo apt install ffmpeg

如果运行时报错 ModuleNotFoundError: No module named 'pandas',说明当前 Python 环境缺少 pandas,需要在实际运行脚本的同一个 Python 环境中安装依赖。

输入文件命名

原始数据放在 local_file/raw_file/ 下,默认按以下格式命名:

Camera_<timestamp>.mp4 # 原始视频
Msg_<timestamp>.csv # 对应 IMU/姿态数据

例如:

Camera_20250719_104640.mp4
Msg_20250719_104640.csv

运行流程

所有参数主要在根目录 config.yaml 中配置。每一步运行前,请先确认对应配置块中的输入目录、输出目录和 file_name 是否正确。

1. 提取运动点

python python_file/step1_moving_points.py

该步骤读取 local_file/raw_file/ 中的视频,通过背景差分、形态学处理和轮廓筛选提取每帧候选运动目标,输出:

local_file/step1_file/Camera_<timestamp>_Trace.mp4
local_file/step1_file/Trace_<timestamp>.csv

Trace_<timestamp>.csv 中包含每帧最多 max_points 个候选目标的像素坐标和面积,例如 x_1, y_1, area_1 ...

2. 追踪目标并裁剪视频

python python_file/step2_trace.py

该步骤读取 step1 生成的 Trace_<timestamp>.csv,根据 ref_x/ref_y 指定的初始位置或最大运动目标进行跟踪,并将结果同步写入 IMU CSV。输出包括:

local_file/step2_file/Msg_<timestamp>_Track.csv
local_file/step2_file/Cut_<timestamp>.mp4
local_file/step2_file/Target_<timestamp>.mp4

其中:

  • Msg_<timestamp>_Track.csv:在原始 IMU 数据基础上新增 track_x / track_y / track_area
  • Cut_<timestamp>.mp4:按 start_frame/end_frame 裁剪后的视频。
  • Target_<timestamp>.mp4:带目标追踪点和面积标注的可视化视频。

测试提示:测试不同样例时,请从 config_record.txt 中复制对应的一整段 step2_trace: 配置,替换 config.yaml 中原有的 step2_trace: 部分。一次只保留一个 step2_trace: 块,不要把整个 config_record.txt 直接粘到 config.yaml 中。

如果后续继续运行 step3,请同时确认 step3_observed_angle.file_name 与 step2 当前处理的视频一致,或者将其设置为 ALL

3. 生成观测角、可视化视频和 YOLO-OBB 数据集

python python_file/step3_observed_angle.py

该步骤读取:

local_file/step2_file/Cut_<timestamp>.mp4
local_file/step2_file/Msg_<timestamp>_Track.csv
local_file/raw_file/Msg_<timestamp>.csv

结合追踪点、相机视场角和 IMU 姿态数据,生成旋转框标注、方向箭头可视化和 YOLO-OBB 训练数据。输出包括:

local_file/step3_file/Observed_<timestamp>.mp4
local_file/step3_file/dataset/images/*.jpg
local_file/step3_file/dataset/labels/*.txt

可通过 min_track_areamax_track_area 过滤过小或过大的目标,仅保留合适的帧写入训练集。

4. 训练 YOLO-OBB 模型

python python_file/step4_yolo_train.py

该步骤读取 local_file/step3_file/dataset/,自动生成训练/验证划分和 data.yaml,并使用 Ultralytics YOLO-OBB 进行训练。训练输出默认保存到:

local_file/step4_file/drone_finetune/

常用训练参数包括:

step4_yolo_train:
 dataset_dir: "local_file/step3_file/dataset"
 model: "local_file/step4_file/models/yolo11l-obb.yaml"
 epochs: 2000
 imgsz: 640
 batch: 16
 freeze: 20
 project: "local_file/step4_file"
 name: "drone_finetune"
 resume: false

如果没有 GPU,可以在配置或命令行参数中将 device 改为 cpu

配置说明

config.yaml 按步骤划分为四个配置块:

  • step1_moving_points:控制运动目标提取参数,如 max_pointsmin_areamax_area_ratiospeed_thresh
  • step2_trace:控制目标追踪参数,如 start_frameend_frameinit_radiusref_x/ref_yradius_growthtarget_fps
  • step3_observed_angle:控制姿态字段映射、相机视场角、箭头长度和面积过滤阈值。
  • step4_yolo_train:控制数据集路径、模型、训练轮数、输入尺寸、batch 和输出目录。

file_name 可以设置为:

file_name: "ALL"

表示处理目录下所有 .mp4 文件;也可以设置为单个视频文件名:

file_name: "Camera_20250719_104640.mp4"

注意事项

  1. config.yaml 必须保持合法 YAML 格式。如果出现 YAML 解析错误,请检查缩进、引号和字段名,例如 resume: false 不要误写成 resume": false
  2. step2 会根据 target_fps 对视频和 CSV 同步下采样,使 Msg_<timestamp>_Track.csv 的行数与输出视频帧数对应。
  3. step3 当前生成的是 YOLO-OBB 旋转框标签。如果只训练单类 drone,请确认标签类别 id 与 data.yaml 中的 nc/names 一致。
  4. ref_x/ref_y 用于指定目标初始位置;如果设置为 0, 0,则会退化为选择最大运动目标作为初始目标。
  5. 建议按 step1 → step2 → step3 → step4 顺序运行,并在每一步检查输出视频,确认目标检测和跟踪结果正确后再进入下一步。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

Contributors

Languages

AltStyle によって変換されたページ (->オリジナル) /