7.9 KiB
7.9 KiB
Seg 图像分割项目使用说明
本项目是一个多路线图像分割实验与推理工程,包含自研 segmentation_models_pytorch 训练流程、YOLO 分割流程、MMSegmentation 流程,以及数据预处理、视频抽帧、图片叠加和结果分析工具。
1. 项目结构
| 路径 | 用途 |
|---|---|
Seg_All_In_One_SegModel/ |
基于 segmentation_models_pytorch 的语义分割训练、推理、参数量/FLOPs/FPS 统计和输出完整性检查。 |
Seg_All_In_One_YoloModel/ |
基于 Ultralytics YOLO 的实例/语义分割训练、推理、热力图可视化和横向对比。 |
Seg_All_In_One_MMSeg/ |
基于 OpenMMLab MMSegmentation 的模型配置、训练和结果汇总流程。 |
Seg_All_In_One_Analysis/ |
汇总不同模型的指标、FLOPs、FPS,生成表格和 mIoU/FPS 图。 |
DataSet_Own/1. 图片预处理(内含使用手册)/ |
自有数据的重命名、尺寸统一、图像/标签配对、标签重建、叠加和拼接检查。 |
Seg_Predict_Own_Video_V2/ |
将视频按固定间隔抽帧,转换为 DataSet_Public/<dataset>/images/val 格式。 |
Tool-图片堆叠/ |
快速检查原图和标签是否匹配,并生成透明叠加图。 |
Tool-可视化/ |
YOLO 标签生成、热图、FPS 等可视化辅助脚本。 |
Back_Up.sh |
将算法目录同步到 Hardisk/ 和 Nas_BackUp_Seg/ 的本地/NAS 备份脚本。 |
大体量目录如 DataSet_Public/、DataSet_Own/ 中的数据、BestMode_Predict_Results_DataSet_Public/、Hardisk/、Nas_BackUp_Seg/、模型权重和训练产物不进入 Git。
2. Conda 环境
推荐使用独立环境 seg_smp。本机已有可运行的 SMP 环境时,最快方式是克隆它:
conda create --name seg_smp --clone SMP -y
conda activate seg_smp
python -V
python -c "import torch; print(torch.cuda.is_available(), torch.__version__)"
从零安装时可参考:
conda create -n seg_smp python=3.9 -y
conda activate seg_smp
pip install torch==2.8.0+cu129 torchvision==0.23.0+cu129 --index-url https://download.pytorch.org/whl/cu129
pip install -r requirements-seg_smp.txt
cd Seg_All_In_One_MMSeg
pip install -v -e .
cd ..
如果使用批量脚本,默认会激活 seg_smp。如需临时使用旧环境:
SEG_CONDA_ENV=SMP bash yolo_train.sh
环境验证:
conda run -n seg_smp python -c "import torch, segmentation_models_pytorch, ultralytics, mmcv, mmengine, mmseg, cv2, albumentations; print('ok')"
3. 数据约定
SegModel 默认读取:
DataSet_Public/<dataset>/
images/train
images/val
labels_GT/train
labels_GT/val
YOLO 默认读取:
DataSet_Public/<dataset>/
images/train
images/val
labels/train
labels/val
切换数据集时:
- SegModel:修改
Seg_All_In_One_SegModel/config.py中的DATA_DIR、OUTPUTS_DIR、PREDICT_BEST_MODEL_DIR、类别和图像尺寸。 - YOLO:修改
Seg_All_In_One_YoloModel/dataset.yaml中的path、train、val、test、names;必要时修改yolo_config.py的训练参数。 - MMSeg:按
Seg_All_In_One_MMSeg/※使用手册/※2025_9_23_MMSeg使用手册生成数据集和算法配置。
4. SegModel 使用方式
cd Seg_All_In_One_SegModel
conda activate seg_smp
# 单模型训练
CUDA_VISIBLE_DEVICES=0 python train.py -a Unet
# 批量训练
bash train.sh
# 单模型推理
CUDA_VISIBLE_DEVICES=0 python 1_predict.py -a Unet
# 批量推理
bash predict.sh
# 参数量、FLOPs、FPS
CUDA_VISIBLE_DEVICES=0 python 2_predict_params_and_FLOPs_V2.py
# 检查预测 raw mask 是否齐全
python 1_predict_raw_masks_check.py
可选模型包括:
Unet, UnetPlusPlus, FPN, PSPNet, DeepLabV3, DeepLabV3Plus,
Linknet, MAnet, PAN, UPerNet, Segformer, DPT
训练结果先写入 DataSet_Public_outputs/<dataset>_outputs-SegModel/,脚本结束后会移动到 Hardisk/;推理结果写入 BestMode_Predict_Results_DataSet_Public/<dataset>_outputs-SegModel/。
5. YOLO 使用方式
cd Seg_All_In_One_YoloModel
conda activate seg_smp
# 检查当前 dataset.yaml 解析出的路径
python yolo_config.py
# 单模型训练
CUDA_VISIBLE_DEVICES=0 python yolo_train.py --model "YOLOv8n-seg"
# 批量训练
bash yolo_train.sh
# 复制最佳权重到预测目录
bash ./Tool_Yolo_Copy_Best_Model.sh --pt_name "best.pt"
# 单模型推理
CUDA_VISIBLE_DEVICES=0 python yolo_predict_V2.py --model "YOLOv8n-seg" --conf 0.2 --pt_name "best.pt"
# 批量推理
bash yolo_predict.sh --conf 0.2 --pt_name "best.pt"
# 批量热图
bash yolo_predict.sh --heatmap_method "All" --pt_name "best.pt"
# 横向对比
python yolo_predict_V2_compare_all.py --pt_name "all"
# 检查预测 raw mask 是否齐全
python yolo_predict_raw_masks_check.py --pt_name "best.pt"
常用模型包括:
YOLOv8n-seg, YOLOv8s-seg, YOLOv8m-seg, YOLOv8l-seg, YOLOv8x-seg,
YOLOv9c-seg, YOLOv9e-seg,
YOLO11n-seg, YOLO11s-seg, YOLO11m-seg, YOLO11l-seg, YOLO11x-seg,
YOLO12-seg
6. MMSeg 使用方式
cd Seg_All_In_One_MMSeg
conda activate seg_smp
# 首次或新增模块后注册工程
pip install -v -e .
# 下载/保存必要预训练权重
python My_All_In_One/0_Initial_Save_All_Model_locally.py
# 生成数据配置
python My_All_In_One/1_Initial_Data_All_data_from_1_Data_Parameter-V2.py
# 生成算法配置
python My_All_In_One/2_Initial_Alg_All_data_from_2_Alg_Program-V2.py
# 参数量、FLOPs、FPS
CUDA_VISIBLE_DEVICES=0 python My_All_In_One/4_1_predict_params_FLOPs_FPS_V2.py
# 指标汇总
CUDA_VISIBLE_DEVICES=0 python My_All_In_One/4_2_predict_matrics_from_log_V2.py
# 生成预测图和表格
CUDA_VISIBLE_DEVICES=0 python My_All_In_One/4_3_predict_draw_pictures_and_tabels.py
# 提取 loss 和 best mIoU
CUDA_VISIBLE_DEVICES=0 python My_All_In_One/4_4_extract_loss_and_best_miou.py
MMSeg 对 mmcv/mmengine/mmsegmentation 版本较敏感;若遇到 mmcv CUDA 算子或版本错误,优先参考 MMSeg 使用手册中的安装记录。
7. 数据预处理与视频抽帧
自有图片预处理:
cd "DataSet_Own/1. 图片预处理(内含使用手册)"
bash 1_rename_pics.sh -i <ori_image_directory> -l <ori_label_directory>
bash 2_reformate_pics.sh -i <ori_image_directory> -l <ori_label_directory> -w 1920 -h 1080
bash 3_pair_ori_label.sh -i <ori_image_directory> -l <ori_label_directory>
bash 4_rebuild_labels.sh -l <ori_label_directory>
bash 5_TOOL_stack_pics.sh -i <ori_image_directory> -l <ori_label_directory> -r <stack_result_directory> -a 0.3
bash 6_TOOL_stitch_pics.sh -i <ori_image_directory> -l <ori_label_directory> -r <stitch_result_directory>
视频抽帧:
cd Seg_Predict_Own_Video_V2
python 1_Save_Frame_V2.py \
--video ./LC_Video_1.mp4 \
--resize "1920x1080" \
--output_dir "../DataSet_Public/5_Predict_Video" \
--interval 0.5
输出路径为:
DataSet_Public/5_Predict_Video/<video_name>/images/val
图片叠加检查:
cd Tool-图片堆叠
python 1_check_picture_pair.py -i ./ori -l ./label
bash 2_TOOL_stack_pics.sh -i ./ori -l ./label -r ./result_0.3透明度 -a 0.3 -s _label
8. 结果分析
cd Seg_All_In_One_Analysis
conda activate seg_smp
python 1_Analysis_All.py \
--input_dir ../BestMode_Predict_Results_DataSet_Public \
--output_dir ./
脚本会交互选择数据集,合并 SegModel/MMSeg 的指标和速度数据,并生成 CSV、PNG、SVG 等分析结果。
9. 备份与 Git
本仓库只提交程序和轻量配置。以下内容不进入 Git:
- 数据集:
DataSet_Public/、除预处理脚本外的DataSet_Own/ - 训练和预测产物:
DataSet_Public_outputs/、BestMode_Predict_Results_DataSet_Public/、Hardisk/、Nas_BackUp_Seg/ - 大权重和视频:
*.pt、*.pth、*.onnx、*.mp4 - Python/构建缓存:
__pycache__/、.pytest_cache/、build/、dist/
常用 Git 检查:
git status --short
git ls-files | grep -E '\\.(pt|pth|mp4|zip)$|DataSet_Public|Hardisk|BestMode' || true