YOLO模型比赛实战--井盖隐患智能识别(一)

目录

前言

一、自定义数据集代入YOLOv5模型训练

1.建立井盖隐患数据集

2.数据集预处理

3.将数据集代入Yolov5进行训练

4.用训练好的模型对图片进行目标检测

未完待续


前言

        研一阶段在导师推荐下参加了一个服务外包大赛,其中挑选了一个课题叫做井盖隐患智能识别。本课题基于目标检测技术实现对井盖隐患的识别。 首先,在数据预处理阶段,为提升数据质量,可采用数据增强、数据标注等方式。在模型训练阶段,不局限于单一检测算法的使用,可采用集成学习思想,训练多模型并将结果融合,以提升模型效果及泛化能力。最后,选择合适的后 处理方式输出井盖隐患的识别结果。由于本课题主要用到目标检测,所以我选择了YOLO模型进行训练。


一、自定义数据集代入YOLOv5模型训练

1.建立井盖隐患数据集

        利用python爬虫代码在百度上爬取井盖隐患图片(完好、破损、缺失、未盖、井圈受损),各类分别爬取五百张,从而建立2500张的井盖隐患数据集。

import requests
headers = {
    'Host': 'image.baidu.com',
    'Cookie': 'BDqhfp=%E4%BA%95%E7%9B%96%E7%BC%BA%E5%A4%B1%26%26-10-1undefined%26%2627132%26%2634; BIDUPSID=1FF461C33C0DA8824D4D59CA50542629; PSTM=1574996095; ',
    'Referer': ‘https://image.baidu.com/search/……… ',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36 Edg/121.0.0.0 ',
}
number = 1
for page in range(1, 11):
    url = f'https://image.baidu.com/search/…………. '
    response = requests.get(url=url, headers=headers)
    json_data = response.json()
    data_list = json_data['data']
    for data in data_list[:-1]:
        fromPageTitleEnc = data['fromPageTitleEnc']
        middleURL = data['middleURL']
        print(fromPageTitleEnc,middleURL)
        img_data = requests.get(middleURL).content
        with open(f'img/{number}.jpg', mode='wb') as f:
            f.write(img_data)
        number += 1

 

2.数据集预处理

        利用make-sense数据标注网站对井盖隐患数据集进行预处理,将图片中的每一类井盖框起来并打上标签。

步骤一:创建标签

步骤二: 对每一张图片进行标注,并选择分类标签

 步骤三: 导出数据集标签,选择yolo需要的txt格式

        给每张图片中的每一个井盖都标注好类别以后,导出标注完的数据,导出的数据是txt格式的labels,每个txt里面有n行(n为每张图片中的井盖标注数量),每行有五个数据,分别是该井盖的类别(用数字表示的)以及标注井盖的标注框的坐标位置信息:

        每个label的数据信息: 

步骤四: 生成txt文件以后,对数据集进行处理,整理成能输入进yolo模型源代码的样子:

        数据集最终文件夹呈现:

        数据集文件夹内分为两个文件夹,分别是images(图片)以及labels(每个图片生成的txt格式文件),每个image和label一定要一一对应,images和labels文件夹内又分成train和test两个文件夹。

3.将数据集代入Yolov5进行训练

        将数据集导入代码中先需要一个yaml格式代码文件,将数据集中的train数据和test数据导入:

well.yaml文件:

train: welldataDemo/images/train  # 128 images
val: welldataDemo/images/test  # 128 images

# number of classes
nc: 5

# class names
names: [ 'broke','circle','good','lose','uncovered']

将得到的well.yaml代入yolo模型的train部分代码: 

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('--weights', type=str, default='yolov5s.pt', help='initial weights path')
    parser.add_argument('--cfg', type=str, default='', help='model.yaml path')
    parser.add_argument('--data', type=str, default='data/well.yaml', help='data.yaml path')
    parser.add_argument('--hyp', type=str, default='data/hyp.scratch.yaml', help='hyperparameters path')#一些超参数,学习率什么的
    parser.add_argument('--epochs', type=int, default=300)
    parser.add_argument('--batch-size', type=int, default=16, help='total batch size for all GPUs')
    parser.add_argument('--img-size', nargs='+', type=int, default=[640, 640], help='[train, test] image sizes')
    parser.add_argument('--rect', action='store_true', help='rectangular training')
    parser.add_argument('--resume', nargs='?', const=True, default=False, help='resume most recent training')
    parser.add_argument('--nosave', action='store_true', help='only save final checkpoint')
    parser.add_argument('--notest', action='store_true', help='only test final epoch')
    parser.add_argument('--noautoanchor', action='store_true', help='disable autoanchor check')
    parser.add_argument('--evolve', action='store_true', help='evolve hyperparameters')
    parser.add_argument('--bucket', type=str, default='', help='gsutil bucket')
    parser.add_argument('--cache-images', action='store_true', help='cache images for faster training')
    parser.add_argument('--image-weights', action='store_true', help='use weighted image selection for training')
    parser.add_argument('--device', default='', help='cuda device, i.e. 0 or 0,1,2,3 or cpu')
    parser.add_argument('--multi-scale', action='store_true', help='vary img-size +/- 50%%')
    parser.add_argument('--single-cls', action='store_true', help='train multi-class data as single-class')
    parser.add_argument('--adam', action='store_true', help='use torch.optim.Adam() optimizer')
    parser.add_argument('--sync-bn', action='store_true', help='use SyncBatchNorm, only available in DDP mode')
    parser.add_argument('--local_rank', type=int, default=-1, help='DDP parameter, do not modify')
    parser.add_argument('--workers', type=int, default=0, help='maximum number of dataloader workers')
    parser.add_argument('--project', default='runs/train', help='save to project/name')
    parser.add_argument('--entity', default=None, help='W&B entity')
    parser.add_argument('--name', default='exp', help='save to project/name')
    parser.add_argument('--exist-ok', action='store_true', help='existing project/name ok, do not increment')
    parser.add_argument('--quad', action='store_true', help='quad dataloader')
    parser.add_argument('--linear-lr', action='store_true', help='linear LR')
    parser.add_argument('--label-smoothing', type=float, default=0.0, help='Label smoothing epsilon')
    parser.add_argument('--upload_dataset', action='store_true', help='Upload dataset as W&B artifact table')
    parser.add_argument('--bbox_interval', type=int, default=-1, help='Set bounding-box image logging interval for W&B')
    parser.add_argument('--save_period', type=int, default=-1, help='Log model after every "save_period" epoch')
    parser.add_argument('--artifact_alias', type=str, default="latest", help='version of dataset artifact to be used')
    opt = parser.parse_args()

        开始训练,训练成功以后就可以得到该次训练的一些评估结果:p曲线、r曲线、pr曲线、F1曲线、mAp值等。 

        其中pr曲线和各类的Ap以及整个模型训练出来的mAp值就是这个课题评估本实验成果好坏的评估标准。

        pr曲线:PR曲线(Precision-Recall Curve)是一种用于评估分类模型性能的方法,它展示了模型在特定召回率水平上的精确率(Precision)与召回率(Recall)之间的相互关系。PR曲线通常是以召回率为横坐标,精确率为纵坐标的二维图形。

        Ap值:AP(Average Precision)是平均精准率,一种常用的模型训练指标, 用于衡量模型在一定IOU下,不同分类阈值的精确率和召回率之间的权衡的整体指标。用于评估目标检测和图像分类等任务中模型的性能。

        mAp值:所有类别的Ap值的平均数。

 该次训练的pr曲线呈现以及右上角的每一类的ap值和所有类别的map值:

4.用训练好的模型对图片进行目标检测

用目前数据集跑出来的模型对图片目标检测的成果展示:


未完待续

本章记录了如何将自定义数据集代入YOLOv5模型进行训练以及预测识别,下一章将用比赛数据集以及对数据的增强得到的增强数据集代入模型进行训练对比效果。

YOLO模型比赛实战--井盖隐患智能识别(二)

评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值