目录
一、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博客