赞
踩
目录
克隆使用 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支持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)
开始训练模型前需要对训练配置文件 .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
修改完成后相应的配置文件后,即可使用指令进行模型的训练了,具体代码如下。
(如果有报错,将指令中的地址改为本地实际的绝对完整地址)
- # 模型训练命令行指令
- 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
训练完成后,会自动创建一个 output 文件夹保存训练过程的所有模型参数,以及最好的模型参数。(如果你想在此基础上继续训练,只需将此处的参数复制到 /pretrain/ 文件夹下,并修改之前的预训练模型地址)
模型的预测使用,检测模型的部署效果,也是使用命令行指令,具体参见博文部署paddle模型内容:从零开始使用YOLO和Paddle——模型CPU部署_paddle serving 部署cpu yolov8-CSDN博客
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。