从零开始使用YOLO和Paddle——Paddle模型训练

目录

一、PaddleDetection库克隆安装与修改

二、Paddle模型训练数据构建

三、Paddle模型训练

        1.参数配置

        2.命令行指令训练

        3.模型参数保存

        4.模型的使用——预测


一、PaddleDetection库克隆安装与修改

        克隆使用 paddledetection 源码库前需安装好相应包环境,具体可以参考之前博文中关于“Paddle模型所需包安装”部分https://blog.csdn.net/qq_58718853/article/details/137856367

        访问以下地址将源码包下载并解压。

        Github地址:https://github.com/PaddlePaddle/PaddleDetection.git

        Gitee地址:https://gitee.com/paddlepaddle/PaddleDetection        

        下载好的源码库有几处源码需要修改添加,具体参考之前博文“paddle模型部署”部分的代码。https://blog.csdn.net/qq_58718853/article/details/137856367

二、Paddle模型训练数据构建

        Paddle支持VOC和COCO数据集格式的训练数据集,具体转换方式及代码参考博文:《从零开始使用YOLO和Paddle——目标检测模型数据预处理:从json到txt、voc和coco数据格式》https://blog.csdn.net/qq_58718853/article/details/137225306

        下面给出生成COCO数据集的代码,运行结果是生成 annotations.json 文件到指定的文件夹——包含框信息、文件名信息、类别信息。

import json
import os
import cv2

# coco保存地址
savefiles = 'cocofile'
# jpg文件保存地址
jpgfiles = 'jpgfile'
# json文件保存地址
jsonfiles = 'jsonfile'

## coco数据集构建(.json)
# 根据数据集生产相应annotation文件.json格式
def create_anno(jpgfiles, jsonfiles, savefiles):
    jpgfile = os.path.join(jpgfiles)
    images = []
    annotation = []
    j = 0          # 框id计数
    for i, jpg in enumerate(os.listdir(jpgfile)):
        basename = jpg.split('.')[0]
        # 获取图片信息:图片名;高宽;id
        jpgdir = os.path.join(jpgfile, jpg)
        image = cv2.imread(jpgdir)
        h, w, _ = image.shape  # 图片大小
        jpg_dict = {"file_name": str(jpg),
                    "height": h,
                    "width": w,
                    "id": i}
        images.append(jpg_dict)

        # 获取边缘框信息:area; bbox;类别;图片id;框id
        jsondir = os.path.join(jsonfiles, basename+'.json')
        with open(jsondir, 'r') as f:
            box_list = json.load(f)
        for box in box_list:
            # 框定义为左上坐标(x,y)和框的宽高
            x,y,w,h = box["box"][0], box["box"][1], box["box"][2]-box["box"][0], box["box"][3]-box["box"][1]
            area = w*h
            box_dict ={"area": area,  "iscrowd": 0,
                       "bbox": list((x,y,w,h)),
                       "category_id": 1,
                       "ignore": 0,
                       "image_id": i,
                       "id": j  }
            j += 1    # 框id计数
            annotation.append(box_dict)
            print(basename+' success')
    # 类别信息字典
    categories = [{"supercategory": "none", "id": 1, "name": "ZW"}]
    result = {"images":images, "annotations":annotation, "categories":categories}
    save = os.path.join(savefiles,'annotations.json')
    with open(save, 'w') as f:
        json.dump(result, f)
        print('save success')

if __name__ == '__main__':
    # 保存coco格式的annotations
    create_anno(jpgfiles, jsonfiles, savefiles)

三、Paddle模型训练

        1.参数配置

        开始训练模型前需要对训练配置文件 .yml 的内容进行修改。具体来说,本人使用的模型配置文件具体地址如下:

# 配置文件.yml 地址
\PaddleDetection\configs\picodet\legacy_model\application\layout_analysis\picodet_lcnet_x1_0_layout.yml

        打开配置文件后,需要修改的地方如下所示,根据实际环境和需求进行修改。

        修改预训练模型的地址和训练轮次:       

        可以根据下面地址下载预训练模型,然后在项目文件夹下新建一个 /pretrain/ 文件夹,将下载好的预训练模型放在该文件下,并修改红框内地址为当前存放预训练模型地址。

http:// https://paddledet.bj.bcebos.com/models/pretrained/LCNet_x1_0_pretrained.pdparams

        修改模型训练数据地址(训练自己数据的模型):

        将红色框内地址改为你图片数据集保存的文件夹地址。

        一种可能的自己训练数据集的修改完成状况:

        修改模型训练超参数——学习率:

        访问以下文件地址,打开关于学习率的超参数配置文件

# 学习率配置文件地址
/PaddleDetection/configs/picodet/legacy_model/_base_/optimizer_100e.yml

        2.命令行指令训练

        修改完成后相应的配置文件后,即可使用指令进行模型的训练了,具体代码如下。

        (如果有报错,将指令中的地址改为本地实际的绝对完整地址)

# 模型训练命令行指令
python -u tools/train.py -c /PaddleDetection/configs/picodet/legacy_model/application/layout_analysis/picodet_lcnet_x1_0_layout.yml -o pretrain_weights=./pretrain/LCNet_x1_0_pretrained.pdparams finetune_exclude_pretrained_params=['cls_score','bbox_pred'] --eval

        3.模型参数保存

        训练完成后,会自动创建一个 output 文件夹保存训练过程的所有模型参数,以及最好的模型参数。(如果你想在此基础上继续训练,只需将此处的参数复制到 /pretrain/ 文件夹下,并修改之前的预训练模型地址)

        4.模型的使用——预测

        模型的预测使用,检测模型的部署效果,也是使用命令行指令,具体参见博文部署paddle模型内容:从零开始使用YOLO和Paddle——模型CPU部署_paddle serving 部署cpu yolov8-CSDN博客

  • 31
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Keras深度学习实战(15)——从零开始实现YOLO目标检测是一篇非常实用的教程。YOLO(You Only Look Once)是一种流行的实时目标检测算法,其核心思想是将目标检测任务视为回归问题,并通过卷积神经网络实现端到端的检测。这篇教程提供了一步一步的实现代码,让读者能够快速了解并实践YOLO目标检测的方法。 首先,教程介绍了YOLO的工作原理和网络结构。YOLO将输入图像划分为多个网格,每个网格负责预测包含在该网格中的目标。每个网格预测包含目标的方框的位置和类别,以及目标的置信度。 接下来,教程详细介绍了如何实现YOLO的网络结构。使用Keras库,创建了一个具有卷积和池化层的卷积神经网络。还使用了Anchor Boxes,用来预测不同比例和宽高比的目标。 教程还介绍了如何预处理输入图像,包括将图像调整为适当的大小,并将目标边界框转换为YOLO需要的格式。然后,选择了合适的损失函数,训练模型,以及进行了模型评估和预测。 最后,教程提供了一些改进和扩展的思路,包括使用更大的数据集进行训练、调整网络结构和超参数等等。 通过这篇教程,读者可以了解到YOLO目标检测的基本原理和实现步骤。并且,使用Keras库可以很方便地实现和训练自己的YOLO模型。无论是对于已经有一定深度学习基础的读者,还是对于刚刚开始学习的读者,这篇教程都是非常有价值的参考资料。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值