darknet之coco数据库的使用

COCO数据集转换为YOLO格式

1. 前言

coco数据库的标签用一个json保存,所以我们需要将它转化成一个个和图片对应的txt标签文件。
coco类别id从1到90,但其中有10个id没有,所以是80类,我们也将id调整到0到79
标签文件有两个instances_val2017.json和instances_train2017.json
2.生成txt是用python2写的,其他用的python3,注意版本,我这里3的代码区别也就在print吧

2. 生成txt

  • 借鉴这篇博客,编写split.py
  • 先安装模块:`sudo pip2 install pycocotools
  • 使用方法:python split.py --out-dir=val2017 --imgset-file=./test.txt instances_val2017.json
  • out-dir是txt的保存路径,imgset-file我没有用到,只是不想改代码了,哈哈
from pycocotools.coco import COCO
import argparse
from collections import OrderedDict
import json
import os
from pprint import pprint
import sys
import skimage.io as io
import matplotlib.pyplot as plt
import pylab
sys.path.append(os.path.dirname(sys.path[0]))
pylab.rcParams['figure.figsize'] = (8.0, 10.0)

from pycocotools.coco import COCO

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description = "Split whole json annotation to individual files.")
    parser.add_argument("annofile",
            help = "The file which contains all the annotations for a dataset in json format.")
    parser.add_argument("--out-dir", default = "",
            help = "The output directory where we store the annotation per image.")
    parser.add_argument("--imgset-file", default = "",
            help = "A file where we store all the image names of a dataset.")

    args = parser.parse_args()
    annofile = args.annofile
    if not os.path.exists(annofile):
        print "{} does not exist!".format(annofile)
        sys.exit()

    out_dir = args.out_dir
    if out_dir:
        if not os.path.exists(out_dir):
            os.makedirs(out_dir)
    imgset_file = args.imgset_file
    if imgset_file:
        imgset_dir = os.path.dirname(imgset_file)
        if not os.path.exists(imgset_dir):
            os.makedirs(imgset_dir)

    # initialize COCO api.
    coco = COCO(annofile)

    img_ids = coco.getImgIds()
    img_names = []
    for img_id in img_ids:
        # get image info
        img = coco.loadImgs(img_id)
        file_name = img[0]["file_name"]
        name = os.path.splitext(file_name)[0]
        if out_dir:
            # get annotation info
            anno_ids = coco.getAnnIds(imgIds=img_id, iscrowd=None)
            anno = coco.loadAnns(anno_ids)
            # save annotation to file
            img_anno = dict()
            img_anno["image"] = img[0]
            img_anno["annotation"] = anno
            width = img[0]["width"]
            height = img[
### 使用 YOLO v1 和 COCO 数据集进行目标检测模型训练 #### 准备工作环境 为了顺利使用YOLO v1和COCO数据集进行目标检测模型训练,需先安装必要的库并配置好开发环境。这包括但不限于Python及其科学计算库numpy、机器学习框架PyTorch等。 #### 下载YOLO v1源码与预训练权重文件 获取官方发布的YOLO v1源代码以及在ImageNet上预先训练好的权重文件对于后续微调至关重要。可以从Darknet官方网站下载这些资源[^1]。 #### 获取COCO数据集 COCO(Common Objects in Context)是一个大型图像识别、分割及字幕生成数据库。该数据集中包含了超过33万张图片,覆盖80个类别,非常适合用于多类别的物体检测任务。访问[COCO官网](https://cocodataset.org/)按照指引下载所需版本的数据集。 #### 修改配置文件适应个人需求 调整`yolo_voc.cfg`中的超参数设置来匹配当前的任务特点,比如输入尺寸、batch size大小、最大迭代次数max_batches等等;同时也要修改`.data`文件指定train/test/validation三个阶段所对应的txt列表路径。 #### 开始训练过程 通过命令行工具启动训练流程: ```bash ./darknet detector train cfg/coco.data cfg/yolov1.cfg yolov1.weights -dont_show ``` 上述指令会读取coco.data定义的数据分布情况,并基于给定的网络结构描述cfg/yolov1.cfg加载初始权值yolov1.weights来进行finetune操作[-dont_show选项表示不在窗口显示实时预测结果]。 #### 测试与评估 当训练完成后,可以通过测试脚本来验证最终模型的表现质量: ```python from darknet import performDetect performDetect(imagePath="test.jpg", thresh=0.25, configPath="./cfg/yolov1.cfg", weightPath="./backup/yolov1_final.weights", metaPath="./cfg/coco.data") ``` 此段代码展示了如何利用已保存的最佳模型对新图象执行推断作业,其中设置了置信度阈值thresh控制输出框的数量。 #### 进一步优化建议 考虑到实际应用环境中可能存在特定领域内的特殊要求或挑战,除了以上基本步骤外还可以考虑采取更多措施提升性能表现,例如增加自定义标注样本扩充现有资料库规模,探索更先进的正则化技术防止过拟合现象发生等方法[^2]。
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刀么克瑟拉莫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值