裂纹识别
2025年4月16日大约 5 分钟
使用 YOLOv8 进行图像分割,从数据处理到模型训练一条龙流程
环境搭建
- 安装 python 3.8.10
- 安装 X-AnyLabeling-CPU
数据准备
- 石材原图过大,需要对其进行切片。
- 点击开始切图,这个过程会卡住,不要管,切完就恢复正常了。
StoneAiTool
数据处理
- 上一步数据准备后,输出目录中还有原图片,另外图片标注需要大量数据(几百张到上千张),这样训练出来的模型效果才会好。所以要把图片再处理一下,把原图剔除掉,每 400 张切图为一组
- 新建一个输出目录文件夹
- 修改 filter.py 中的 src 和 dst, src 为数据准备中切割结果的文件夹,dst 为刚刚新建的输出目录文件夹
修改src和dst - 打开 filter.py 所在文件夹的 cmd 窗口,输入 python ./filter.py 执行脚本等待数据处理完成
打开cmd 执行脚本
数据标注
- 打开 X-AnyLabeling-CPU,修改语言为中文
设置语言 - 打开数据处理中输出目录文件夹
打开文件夹 - 按快捷键 P 开始绘制多边形,按住 Ctrl+鼠标滚轮放大图片方便绘制图片。依次点击鼠标左键在裂纹周边,把裂纹围起来,绘制的多边形要尽可能的贴合裂纹。
- 如果一张图没有裂纹,按 Ctrl+Shift+Del 将图片删掉。
- 绘制完成后会要求你输入对象标签。意思是当前绘制的多边形是什么类型,如果只是要识别裂纹就写 Crack,如果还要对裂纹进行分类,具体什么类别就写什么类别,可以是 Crack1,Crack2,....
添加标签 - 一张图有多少裂纹就要有多少个多边形,多边形的质量决定后续识别的质量。
绘制多边形 绘制多边形1 绘制多边形2 绘制多边形3 - 其他快捷建 A:上一张 D:下一张 Del:删除绘制多边形
- 标注一组大概 400 张,标注完开始导出数据
- 新建一个文本文件叫 classes.txt,这个文件里写上之前标注时的类别。要和标注的类别名称一样,包括大小写,有几类写几种,每一类占一行,比如下图
classes - 点击 X-AnyLabeling-CPU 顶部的导出,选择导出 yolo 标签,选择刚刚创建的 classes.txt
导出界面 - 导出成功后,会在图片文件夹同级目录生成一个叫 labels 的文件夹,至此标注结束
导出成功
标注数据分类
- 图片标注完成后,需要将标注结果分为训练集,测试集,验证集
- 打开 resultFilter.py,修改 image_src_dir,label_src_dir,output_root。
- image_src_dir 是数据标注中打开的文件夹路径,label_src_dir 是数据标注中最后导出的 labels 文件夹路径,output_root 是分类结果存放路径
resultFilter - 修改完成后,在 resultFilter.py 所在文件夹打开 cmd,输入 python ./resultFilter.py,等待分类完成
分类结果
安装 yolo
- 安装 yolo 必须有 python 环境
- WIN+R 打开运行,输入 cmd
- pip install ultralytics,等待下载完成,如果失败了重新执行这条命令
安装 pytorch
- https://pytorch.org/get-started/locally/ 选择适合系统的 pytorch 版本安装
- cpu 版本的 pytorch 在 cmd 输入 pip3 install torch torchvision torchaudio,等待下载完成
下载预训练模型
- https://docs.ultralytics.com/zh/models/下载需要的模型
- 已提供 yolov8-seg pt 文件
训练
- 打开 dataset.yaml,修改 path,train,test,val 地址,path 是标注数据分类中的 output_root 地址。train,test,val 分别对应该路径下的 train.txt,test.txt,val.txt 地址。
- 修改 dataset.yaml 的 nc 值,表示分类的数量。修改 names,前面的代表编号,从 0 开始累加。后面代表类名,跟 classes.txt 中的类别对应
修改datasetyaml - 打开 train.py 修改 pt 文件地址和 dataset.yaml
修改train - 在 train.py 所在文件目录打开 cmd,输入 python ./train.py 开始训练,cpu 训练时间很长,而且会很卡,如果内存不够会失败,最好拿一台配置好的电脑训练
- 训练完成后,会在 train.py 文件目录下的 runs 目录,打开 runs/segment/train/weights,该目录下会有 best.pt 和 last.pt 两个文件,这就是训练的模型。
预测
- 利用训练完的模型,可以预测大板中是否存在裂纹。
- 新建一个文件夹,将要识别的图片放在里面。
- 打开 predict.py,修改 best.pt 和刚刚新建的文件夹地址,打开 predict.py 所在文件夹的 cmd,输入 python ./predict.py 执行脚本,会显示预测结果
修改predict - 预测结果
修改结果 修改结果1 修改结果2 修改结果3 修改结果4