Paddledetection 使用教程VOC版

一、配置训练集文件:

1、在paddledetection文件夹下的dataset创建my_data文件夹

 

2、按图示创建对应的Annotations(存放标注后的xml)

 

3、JPEGImages存放照片

 

4、label_list.txt照片分类的种类

 

5、利用create_data_list.py生成trainval.txt和test.txt(test空的不要紧,但trainval必须要这种格式)    代码在最下面!!!!!!!!

 

  • 修改voc.yml的路径

使用的是yolov3_mobilenet_v1_270e_voc.yml

位置在PaddleDetection/configs/yolov3/yolov3_mobilenet_v1_270e_voc.yml

1、需要修改voc.yml()

位置在PaddleDetection\configs\datasets\voc.yml

 

只需要改框中对应的路径。

num_classes 表示分类的种类数量。跟前面的label_list.txt数量对应。

2.修改yolov3_reader.yml

其位置在

PaddleDetection\configs\yolov3\_base_\yolov3_reader.yml

 

 

根据显卡的性能更改batch_size的数量为(2,4,8……)我的3050ti最多一次4张。

  • 开始训练

1.进入搭好的环境及文件夹

1、在终端中输入

python tools/train.py -c configs/yolov3/yolov3_mobilenet_v1_270e_voc.yml

出现下图即成功,若只停在[ppdet.utils.checkpoint INFO: Finish loading modelweights:C:\Users\26026/.cache/paddle/weights\MobileNetV1_pretrained.pdparams]则说明batch_size需要改小。

 

第一次训练会出现报错!

这个报错缺少zlibwapi.dll

需要下载:http://www.winimage.com/zLibDll/

 

 

然后解压缩

这个都会吧?
然后把 zlib123dllx64\dll_x64\zlibwapi.dll 移到 cuda的目录下,我的目录是 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.6\bin

训练结束后:

会生成在paddledetection/output/yolov3_mobilenet_v1_270e_生成model_final.pdparams文件

  • 使用训练集
  1. 将要分类的照片存放在paddledetection/demo中

2.输入python tools/infer.py -c configs/yolov3/yolov3_mobilenet_v1_270e_voc.yml -o weights=output/yolov3_mobilenet_v1_270e_voc/model_final.pdparams --infer_dir=demo

 结束后可在output中找到已分类的照片

出现以下图片即成功。

 因为我们训练的较少,所以效果不是很好。

create_data_list.py:

import os

import random

import xml.etree.ElementTree

from tqdm import tqdm

# 打乱数据

def shuffle_data(data_list_path):

    with open(data_list_path, 'r', encoding='utf-8') as f:

        lines = f.readlines()

        random.shuffle(lines)

    with open(data_list_path, 'w', encoding='utf-8') as f:

        f.writelines(lines)

# 生成图像列表

def create(images_dir, annotations_dir, train_list_path, test_list_path, label_file):

    f_train = open(train_list_path, 'w', encoding='utf-8')

    f_test = open(test_list_path, 'w', encoding='utf-8')

    f_label = open(label_file, 'w', encoding='utf-8')

    label = set()

    images = os.listdir(images_dir)

    i = 0

    for image in tqdm(images):

        i += 1

        annotation_path = os.path.join(annotations_dir, image[:-3] + 'xml').replace('\\', '/')

        image_path = os.path.join(images_dir, image).replace('\\', '/')

        if not os.path.exists(annotation_path):

            continue

        root = xml.etree.ElementTree.parse(annotation_path).getroot()

        for object in root.findall('object'):

            label.add(object.find('name').text)

        if i % 20 == 0:

            f_test.write(

                "%s %s\n" % (image_path[image_path.find('/') + 1:], annotation_path[annotation_path.find('/') + 1:]))

        else:

            f_train.write(

                "%s %s\n" % (image_path[image_path.find('/') + 1:], annotation_path[annotation_path.find('/') + 1:]))

    for l in label:

        f_label.write("%s\n" % l)

    f_train.close()

    f_test.close()

    f_label.close()

    # 打乱训练数据

    shuffle_data(train_list_path)

    print('create data list done!')

if __name__ == '__main__':

    create('./JPEGImages', './Annotations', './trainval.txt', './test.txt', './label_list.txt')

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当然,下面是一个简单的示例代码,用于展示如何使用PaddleDetection进行目标检测任务: ```python import paddle from paddle.io import DataLoader from paddle.vision.transforms import transforms from paddle.static import InputSpec from paddle import Model from paddle.vision.datasets import CocoDetection from paddle.metric import Metric # 定义数据预处理的transforms transform = transforms.Compose([ transforms.Resize(size=(800, 800)), transforms.Transpose(), transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]), ]) # 加载测试数据集 test_dataset = CocoDetection( image_dir='path/to/image_dir', annotation_file='path/to/annotation_file', transforms=transform, ) # 加载预训练模型 model = paddle.vision.models.detection.mask_rcnn(pretrained=True) # 定义输入数据的形状和类型 input_spec = [ InputSpec(shape=[None, 3, 800, 800], dtype='float32', name='image') ] # 创建模型实例 model = Model(model, inputs=input_spec) # 加载训练好的模型参数 model.load('path/to/model_params') # 开始预测 model.prepare() results = model.predict(test_dataset) # 打印预测结果 for image, result in zip(test_dataset, results): print('Image:', image[0]) print('Predicted labels:', result['labels']) print('Predicted boxes:', result['boxes']) ``` 以上代码演示了如何使用PaddleDetection进行目标检测任务。你需要根据实际情况修改数据集路径、模型参数路径等。同时,你还可以根据需要对代码进行进一步的定制和调整。 希望这个示例能够帮助到你!如有任何其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值