Darknet yolov4数据集处理及训练推理

darknet包的下载

AlexeyAB版
github

编译

进入darknet文件夹

vim Makefile

按需设置,比如将opencv、gpu、cudnn设为1;
然后执行:

make

下载yolov4.weights文件

github
在这里插入图片描述
放置在darknet目录下

数据集

数据集下载

按照官方推荐,下载coco2017版本的数据集
数据集下载

数据集介绍

COCO通过大量使用Amazon Mechanical Turk来收集数据。

COCO数据集现在有3种标注类型:object instances(目标实例), object keypoints(目标上的关键点), 和image captions(看图说话),使用JSON文件存储。

数据处理

1.在/data下新建文件夹coco2017进入/data/coco2017,
按照如下方式放置:

——coco2017
————train(训练集图片文件夹)
————val(验证集图片文件夹)
————test(测试集图片文件夹)
————instances_train2017.json(训练集标签)
————instances_val2017.json(验证集标签)
————image_info_test-dev2017.json(测试集标签)
注意:测试集标签文件中没有位置数值信息。
2.在/coco2017下依次输入以下命令:

find `pwd`/train -name \*.png > train.list
find `pwd`/val -name \*.png > val.list
find `pwd`/test -name \*.png > test.list

执行完后在/coco2017生成train.list、val.list、test.list三个文件夹
3.因为darknet_yolov4的训练需要txt标签文件,因此需要将json文件转为txt文件。
3.1. 在/coco2017下新建transform.py

from pycocotools.coco import COCO
import numpy as np
import tqdm
import argparse


def arg_parser():
    parser = argparse.ArgumentParser('code by rbj')
    parser.add_argument('--annotation_path', type=str,
                        default='data/coco/annotations/instances_train2017.json')
    parser.add_argument('--save_base_path', type=str, default='data/coco/labels/train2017/')
    args = parser.parse_args()
    return args


if __name__ == '__main__':
    args = arg_parser()
    annotation_path = args.annotation_path
    save_base_path = args.save_base_path

    data_source = COCO(annotation_file=annotation_path)
    catIds = data_source.getCatIds()
    categories = data_source.loadCats(catIds)
    categories.sort(key=lambda x: x['id'])
    classes = {}
    coco_labels = {}
    coco_labels_inverse = {}
    for c in categories:
        coco_labels[len(classes)] = c['id']
        coco_labels_inverse[c['id']] = len(classes)
        classes[c['name']] = len(classes)

    img_ids = data_source.getImgIds()
    for index, img_id in tqdm.tqdm(enumerate(img_ids), desc='change .json file to .txt file'):
        img_info = data_source.loadImgs(img_id)[0]
        file_name = img_info['file_name'].split('.')[0]
        height = img_info['height']
        width = img_info['width']

        save_path = save_base_path + file_name + '.txt'
        with open(save_path, mode='w') as fp:
            annotation_id = data_source.getAnnIds(img_id)
            boxes = np.zeros((0, 5))
            if len(annotation_id) == 0:
                fp.write('')
                continue
            annotations = data_source.loadAnns(annotation_id)
            lines = ''
            for annotation in annotations:
                box = annotation['bbox']
                # some annotations have basically no width / height, skip them
                if box[2] < 1 or box[3] < 1:
                    continue
                #top_x,top_y,width,height---->cen_x,cen_y,width,height
                box[0] = round((box[0] + box[2] / 2) / width, 6)
                box[1] = round((box[1] + box[3] / 2) / height, 6)
                box[2] = round(box[2] / width, 6)
                box[3] = round(box[3] / height, 6)
                label = coco_labels_inverse[annotation['category_id']]
                lines = lines + str(label)
                print(lines)
                for i in box:
                    lines += ' ' + str(i)
                lines += '\n'
            fp.writelines(lines)
    print('finish')

3.2.在/coco2017下执行

python --annotation_path ./instances_train2017.json  --save_base_path ./train2017/
python --annotation_path ./instances_val2017.json  --save_base_path ./val2017/

/train2017/val2017下便生成针对每张图片的txt标签文件

配置文件的设置

1.在/cfg下vim coco.data

classes= 80
train  = /home/……(your filepath)/data/coco2017/train.list
valid  =/home/……(your filepath)/data/coco2017/val.list
#valid = /home/……(your filepath)/data/coco2017/test.list
names = data/coco.names
backup = backup/
eval=coco

2.在/cfgvim coco.names(默认就有)
每行分别放置类名,共80类。

测试

测试一张图

./darknet detector test cfg/coco.data cfg/yolov4.cfg yolov4.weights -ext_output data/dog.jpg

训练

从头开始训练:

./darknet detector train cfg/coco.data cfg/yolov4.cfg -clear > train_log.txt 2>&1

弹出一个yolov4.png的文件,显示出loss和literation值,
并且在darknet文件夹下生成train_log.txt记录日志文件。
最后也会生成一个yolov4_last.weights文件

验证

map计算

./darknet detector map ./cfg/coco.data ./cfg/yolov4.cfg ./yolov4_last.weights
./darknet detector map ./cfg/coco.data ./cfg/yolov4.cfg ./yolov4.weights -thresh 0.25 -map

PS:
yolov3

假如用yolov3,并加上预训练模型 darknet53.conv.74 ,则:

./darknet detector train cfg/coco.data cfg/yolov3.cfg darknet53.conv.74 -map > train_log_yolov3_210414.txt 2>&1
./darknet detector map ./cfg/coco.data ./cfg/yolov4.cfg ./yolov4_last.weights

resnet50

 ./darknet classifier train cfg/cifar.data cfg/resnet50.cfg 
time ./darknet classifier valid cfg/cifar.data cfg/resnet50.cfg ./resnet50.weights
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
您好!要使用Darknet和YOLOv8训练自己的数据集,您可以按照以下步骤进行操作: 1. 数据集准备: - 收集并标记包含您感兴趣对象的图像。 - 创建一个包含图像路径和对应标签的数据集文件(如:train.txt和val.txt)。 2. 配置文件修改: - 在Darknet目录中,复制并重命名YOLOv3模型配置文件,如yolov3-custom.cfg。 - 修改新配置文件中的相关参数: - 将`batch`设置为64或更小(取决于您的显存)。 - 将`subdivisions`设置为16。 - 将`classes`设置为您的目标类别数量。 - 根据您的数据集,将`filters`设置为$(类别数+5)*3$。 - 将配置文件中的预训练权重路径改为`yolov3.weights`(可从Darknet官方网站下载)。 3. 标签和类别文件: - 在Darknet根目录中,创建一个包含您的类别名称的文件,如obj.names。 4. 配置文件调整: - 在Darknet根目录中,创建一个包含类别数量的文件,如obj.data。 - 在obj.data文件中,设置以下参数: - `classes`:类别数量。 - `train`:指向训练数据集文件的路径。 - `valid`:指向验证数据集文件的路径。 - `names`:指向类别文件的路径。 - `backup`:指向模型权重备份目录的路径。 5. 权重准备: - 下载预训练权重文件,如darknet53.conv.74。 - 运行以下命令,将预训练权重文件转换为可用于训练的格式: ``` ./darknet partial yolov3.cfg yolov3.weights yolov3.conv.74 74 ``` 6. 训练模型: - 运行以下命令开始训练模型: ``` ./darknet detector train obj.data yolov3-custom.cfg yolov3.conv.74 ``` 7. 模型评估: - 使用验证数据集评估模型性能: ``` ./darknet detector map obj.data yolov3-custom.cfg backup/yolov3-custom_last.weights ``` 8. 模型推理: - 使用训练好的权重进行目标检测: ``` ./darknet detector test obj.data yolov3-custom.cfg backup/yolov3-custom_best.weights -ext_output < test.txt > result.txt ``` 请注意,以上步骤仅提供了基本的训练流程,您可能需要根据自己的具体需求进行进一步调整和优化。希望对您有所帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值