在工业级神经网络应用中,Yolo模型可能是最脍炙人口之一的模型结构,作为一种实时目标检测的革命性方案,它已经成为计算机视觉领域的标杆。
一个一个框框+目标的状态,但是事实上Yolo模型已经发展了很多的分支,例如分割与检测结合:Yolov8seg实现实例分割(Instance Segmentation) 语义分割分支,可同时输出掩码。
本期我们就介绍小白也能实现的,Yolo的实例分割检测。
1、数据集准备
首先我们需要准备我们的数据集,最近博主在进行一个医学检测项目,打算用到实例分割技术。
我们使用cmd安装Label-Studio来进行数据集准备:
pip install label-studiolabel-studio start
安装和启动label-studio
进入Label-studio之后,我们新建一个项目用来管理数据集:
导入我们需要的数据集,之后要配置一下标注配置,在Labeling Setup选择带掩码的实例分割:
添加我们要标注的名字。
接着我们开始图片的标注任务,
在标注任务中用多边形覆盖有效区域,接着导出Yolo格式的图片。
这样子我们就得到了图片和Yolo格式的标签。
2、环境准备
pip install --upgrade pippip install ultralytics torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118pip install opencv-python numpy pandas matplotlib
使用pip命令安装Pytorch环境和ultralytics即Yolo官方库,接着我们需要设置一下我们的目录:
path: F:CodePythonYoloAntibacterial zone masktrain: data/images/trainval: data/images/valnc: 2names:0: Area1: Yaoping
dataset.yaml
创建一个yaml文件用来配置数据集。
这个dataset的对应文件目录如上图所示,接着我们设置编写训练文件:
import osimport torchimport multiprocessingfrom pathlib import Pathfrom ultralytics import YOLOCONFIG = {"data": "dataset.yaml",# 模型:使用分割版本"model": "yolov8n-seg.pt",# 训练基本参数"epochs": 300,"imgsz": 640,"batch": 18,"workers": 4,}def run():model = YOLO(CONFIG["model"])results = model.train(data=CONFIG["data"],epochs=CONFIG["epochs"],imgsz=CONFIG["imgsz"],batch=CONFIG["batch"],workers=CONFIG["workers"],val=True,verbose=True,plots=True, # 保存训练曲线图save=True, # 保存 best.pt 和 last.ptsave_period=50, # 每 50 轮额外保存一次检查点)if __name__ == "__main__":multiprocessing.freeze_support()run()
Train.py
构建一个基本的能够训练的脚本,接着开始模型训练,训练的结果会保存到run文件夹中。
3、模型查看与使用
等待模型训练完可以查看模型的训练结果,例如损失函数曲线:
在Weights文件夹中我们可以拿到我们的pt格式的yolo模型:
可以看到这个模型是一个640*640*3的RGB888输入,1*38*8400,8400个锚框的二分类带掩码的输出。
import cv2from ultralytics import YOLOdef run_inference():#加载模型model = YOLO("best.pt")source = "images/0399bb1a-0260315082348_5_223.jpg",results = model.predict(source=source,conf=0.25, # 置信度过滤save=True, # 设置为 True 自动保存结果图name="task_1",exist_ok=True,visualize=False,line_width=2 # 增强结果图的可读性)if __name__ == "__main__":run_inference()
简单的写一个测试脚本,可以看到模型的运行效果如下所示:
232