Skip to content

TDIT-haha/StoneSegmentator

Repository files navigation

StoneSegmentator

Instance segmentation task for stones

环境安装

conda create -n env_name python=3.8
conda activate env_name
pip install -r requirements.txt

模型指标

Model size (box)mAP50 (box)mAP50-95 (mask)mAP50 (mask)mAP50-95
v1.0 640 0.962 0.868 0.965 0.838

百度网盘链接:https://pan.baidu.com/s/1r64zoGveZ1zOpAICdX4IpQ 提取码:h5h1

速度

Model size GPU/A4000/ONNX/BigImage
v1.0 640 8.5s

项目流程

  1. 数据获取以及处理
    1.1 将6000x4000的图像进行切割为512x512的图像images01
    1.2 结合SAM对images01进行自动标注获得mask图,并通过mash图获得图像的分割标签labels01
    (可集合example/images文件夹内的图像,结合下面的指令进行试跑)

  2. 模型训练
    2.1 结合yolov5框架进行模型的训练,使用上面生成分割标签labels01对模型进行训练可获得分割模型pth,训练细节可查询操作指示,分别有训练,验证,可视化

  3. 在项目中的使用
    3.1 为了用于模型的部署,对分割模型pth转换为ONNX,基于ONNX框架进行模型的部署
    3.2 对根据项目的需求对6000x4000图像结合模型进行处理,其逻辑基本流程: 大图像分割为小图像 -> 小图像的模型推理 -> 获得小图像的mask -> 小图像的mask拼接回大图像或进行mask统计 -> 获得石头的大小分布

数据获取以及处理

已有的数据集

百度网盘链接:https://pan.baidu.com/s/1QF6ydVZBmLIcLQ6Xfv5IrA 提取码:wspt

若想创建自己的数据集,需结合sam创建数据集

案例图像A_4542.JPG 百度网盘链接:https://pan.baidu.com/s/1R88gtAb_Cea3udIfsPetzg 提取码:ni4z
将图像A_4542.JPG放置example/images,可以运行下面例子进行试跑

将6000x4000的图像进行切割为512x512的图像集

cd tools/splitSeg
python splitImg.py  #切割数据,需自己修改图像地址和保存地址savepath01
python splitTrainVal.py #对数据划分训练集和测试机

SAM的vit_h.pt模型,百度网盘链接:https://pan.baidu.com/s/1qZIow1FZ5uQ28SVtRGbY2A 提取码:z86u

cd samseg/segment-anything-main
sh run.sh   #使用sam获得每个石头的masks

使用SAM的masks转换为json文件用于labelme工具进行查看或是修改,可以再labelme中自己查看

python sam_mask2json.py  #生成json文件,可用于labelme的可视化或进行修改
cd ./tools
python labelme2mask.py  #可视化json文件的图像进行保存

对json文件转换为yolov5可以训练的数据集

cd /root/project/Modules/yolov5/tools
python json2txt_seg.py  #生成可用于训练的数据集

模型训练

以下的训练可参考yolov5框架的训练修改下面的脚本参数

训练

sh run_seg_train.sh

验证

sh run_seg_val.sh

可视化

sh run_seg_detect.sh

模型转换

模型pth转onnx

sh run_export.sh

在项目中的使用

通过ONNX模型进行对大图像(6000x4000)的处理

如果运行大图

run_bigImSeg.sh

or

cd tools/splitSeg
python bigImgSeg.py \
--weights "/root/project/Modules/yolov5/runs/train-minseg/V3/weights/best.onnx" \ 
--imagefolder r"./images" \
--savefolder r"./draws" \
--conf-thres 0.3 \
--iou-thres 0.45 \
--scale-factor 1.0 \

如果运行分割后的图

run_smallImSeg.sh

or

cd tools/splitSeg
python smallImgSeg.py \
--weights "/root/project/Modules/yolov5/runs/train-minseg/V3/weights/best.onnx" \ 
--imagepath r"/root/project/Modules/yolov5/data/images/[1.8]11.jpg" \
--savefolder r"./draws" \
--conf-thres 0.3 \
--iou-thres 0.45 \
--scale-factor 1.0 \

工具

cd tools/splitSeg
python splitImg.py  #切割数据
python labelme2mask.py #labelme的可视化

TODO

1、修改分支名字 ok
2、上传onnx模型、torch模型 ok
3、整合SAM代码,整理生成数据流程,整理运行脚本到markdown中 ok
4、整合运行onnx模型的demo代码,整理运行脚本到markdown中 ok
5、切分大图为小图的代码 ok

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •