基于YOLOv8模型训练之图像特征标注程序

一、引言

在着手训练自定义模型的过程中,我们不可避免地需要准备大量的图像(image)及其对应的标签(label)信息。这些标签的精准程度,对于模型的精确率(Precision)、准确率(Accuracy)以及F1值等关键性能指标具有直接且深远的影响。鉴于此,本人专门设计并开发了一款图像特征标注程序,旨在高效辅助模型的训练工作。
程序无偿分享,欢迎修改指正!

二、UI 界面

Index page
label

三、功能简介

该程序的主要功能包括:通过选择图片文件夹来预览图像;在设置标注类型后(再次启动程序后无需重新设置,对图片中的特征进行标注并记录;完成每张图片的标注后,点击保存并继续下一张图片的标注工作;同时,程序还支持对标签类型进行修改。这些功能共同构成了该图像特征标注程序的核心用途。

1. 核心类库

PySide6:负责程序的界面的搭建;
python-opencv:负责每张图片的标注;

2. 图像特征标注

首先,我创建了一个名为ImageLabel的类,专门负责处理每张图片的显示(800x600 图片尺寸较大将会被缩放到规定尺寸)及其特征标注功能。该类默认采用矩形框作为标注特征的方式,并通过监听鼠标事件来精确捕捉并标注图片内的特征点。

        # 将 OpenCV 图像转换为 QImage
        height, width, channel = self.scaled_image.shape
        bytes_per_line = 3 * width
        q_img = QImage(self.scaled_image.data, width, height, bytes_per_line, QImage.Format_RGB888).rgbSwapped()

        # 绘制标注
        painter = QPainter(q_img)
        pen = QPen(QColor(255, 0, 0), 2)  # 红色画笔
        painter.setPen(pen)
        for annotation in self.annotations:
            shape, label = annotation
            if isinstance(shape, QRect):  # 矩形框
                painter.drawRect(shape)
                painter.drawText(shape.topLeft(), label)
            elif isinstance(shape, QPolygon):  # 多边形
                painter.drawPolygon(shape)
                painter.drawText(shape.boundingRect().topLeft(), label)
            elif isinstance(shape, QPoint):  # 点标注
                painter.drawPoint(shape)
                painter.drawText(shape, label)
        if self.current_shape:
            if isinstance(self.current_shape, QRect):  # 当前绘制的矩形框
                painter.drawRect(self.current_shape)
            elif isinstance(self.current_shape, QPolygon):  # 当前绘制的多边形
                painter.drawPolygon(self.current_shape)
            elif isinstance(self.current_shape, QPoint):  # 当前绘制的点
                painter.drawPoint(self.current_shape)
        painter.end()

        # 显示图像
        self.setPixmap(QPixmap.fromImage(q_img).scaled(self.max_size, Qt.KeepAspectRatio, Qt.SmoothTransformation))

3. 图像特征存储

通过捕获鼠标的位置坐标,确定矩形框的左上顶点坐标和右下端点坐标。随后,创建一个与图片具有相同名称的 .txt 文件,并将所选的标记类型(例如“stone”)以及对应的标记框信息写入该文件中,每一行记录一个标记框的信息。

    def save_annotations(self):
        """保存标注结果"""
        if not self.image_label.annotations:
            print("没有标注可保存")
            return

        if self.current_image_path is None:
            print("未加载图片")
            return

        # 默认保存路径为图片的同路径
        image_name = os.path.splitext(os.path.basename(self.current_image_path))[0]
        txt_path = os.path.join(self.image_folder, f"{
     image_name}_annotations.txt")

        # 保存标注信息到 TXT 文件
        with open(txt_path, "w") as f:
            for shape, label in self.image_label.annotations:
                if isinstance(shape, QRect):  # 矩形框
                    f.write(f"{
     label} {
     shape.left()} {
     shape.top()} {
     shape.right()} {
     shape.bottom()}\n")
                elif isinstance(shape, QPolygon):  # 多边形
                    points = ", ".join([f"{
     point.x()} {
     point.y()}" for point in shape]
### 使用YOLOv8Seg训练建筑图像进行病害特征检测 为了使用YOLOv8Seg模型训练建筑图像以检测病害特征,需遵循一系列配置和操作流程。这不仅涉及数据准备、环境搭建,还包括具体的训练过程设置。 #### 数据集准备 首先,准备好用于训练的数据集至关重要。对于建筑图像的病害特征检测而言,收集大量标注好的图片样本必不可少。这些图片应覆盖不同类型的病害情况,确保模型能学习到多样化的病变模式。每张图片都需要有对应的标签文件,通常采用COCO或VOC格式,标明病害的具体位置和类别[^1]。 #### 环境安装与依赖项配置 接着,在本地计算机上创建适合运行YOLOv8Seg的工作环境。推荐使用Anaconda管理虚拟环境,并按照官方文档指示安装必要的库和支持工具。特别是要确认已正确设置了Python版本以及PyTorch等相关依赖包。此外,还需下载YOLOv8源码仓库并根据项目需求调整部分参数设定。 #### 配置训练参数 进入实际训练阶段前,需要编辑`train.py`脚本内的若干重要超参选项。比如batch size大小的选择会直接影响GPU内存占用量;而epochs数量则决定了整个网络迭代次数。值得注意的是,默认情况下如果未特别指明优化器类型,则系统会选择Adam作为初始优化策略[^2]。不过也可以依据具体应用场景灵活更改此设置。 #### 开始训练过程 完成上述准备工作之后就可以启动正式训练了。执行命令行指令`python train.py --data custom_data.yaml --weights yolov8s-seg.pt`即可开始基于自定义数据集fine-tune预训练权重的过程。期间可以通过tensorboard或其他可视化手段监控loss变化趋势以及其他性能指标表现状况。 ```bash python train.py --data custom_data.yaml --weights yolov8s-seg.pt ``` #### 测试评估效果 当一轮或多轮次epoch结束后,应当及时验证所得到的新模型在测试集合上的泛化能力如何。借助evaluate模块快速获得各类统计报告如mAP@0.5, mAP@0.75等评价标准分值,从而判断当前方案是否达到预期目标水平。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值