coco128-seg数据集分析

本文详细介绍了COCO128-seg数据集,包括其配置文件coco128-seg.yaml的结构和用法。数据集包含图像及其对应的txt标签文件,用于标注图像中的物体。文章还提供了一个将LabelMe的json格式转换为COCO128-seg所需的txt格式的代码示例,以便于训练模型如YOLO进行图像识别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文分析了coco128-seg数据集,并且提供了由labelme转coco128代码,敬请享用。

简述

配置文件

使用数据集一般会配套使用coco128-seg.yaml 数据配置,内容如下,或者查看coco128-seg.yaml

# Ultralytics YOLO 🚀, GPL-3.0 license
# COCO128-seg dataset https://www.kaggle.com/ultralytics/coco128 (first 128 images from COCO train2017) by Ultralytics
# Example usage: python train.py --data coco128.yaml
# parent
# ├── yolov5
# └── datasets
#     └── coco128-seg  ← downloads here (7 MB)


# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: ../datasets/coco128-seg  # dataset root dir
train: images/train2017  # train images (relative to 'path') 128 images
val: images/train2017  # val images (relative to 'path') 128 images
test:  # test images (optional)

# Classes
names:
  0: person
  1: bicycle
  2: car
  .
  .中间不再冗余叙述
  .
  75: vase
  .
  .
  .
  78: hair drier
  79: toothbrush


# Download script/URL (optional)
download: https://ultralytics.com/assets/coco128-seg.zip

数据集

数据集下载,结构如下,可点击下载

coco128-seg
    |——images
        |——001.jpg
        |——002.jpg
        |——......
    |——labels
        |——001.txt
        |——002.txt
        |——...

选择查看一个:如查看000000000030.jpg,与其对应的label的txt

如图所示,txt中红色边框标注为label,75对应这yaml文件中的vase(花瓶),而黑色横线标记的就是一个坐标如(0.616156,0.364042),为了得到对应真实坐标,需要分别乘以宽和高,得到(0.616156*w,0.364042*h),即为标注的一个点;把后面坐标依次相连可的标注区域。

代码验证

我把txt提取出来,转换成真实坐标,并绘制出坐标点,得到相应图像。

import cv2
#以下为花瓶对应坐标
bbox="0.616156 0.364042 0.631188 0.395514 0.631188 0.462921 0.608641 0.561799 0.569562 0.602243 0.551531 0.653925 0.544016 0.676402 0.554531 0.710117 0.581594 0.730327 0.599625 0.755047 0.581594 0.793248 0.510953 0.817967 0.462859 0.820234 0.422297 0.788762 0.417781 0.773037 0.416281 0.764042 0.456859 0.728084 0.461359 0.638201 0.438812 0.606752 0.39975 0.548318 0.371188 0.447196 0.407266 0.510117 0.446328 0.489883 0.498937 0.480888 0.516969 0.460678 0.528984 0.408995 0.545516 0.397757 0.586094 0.386519 0.578578 0.431472 0.587594 0.429206 0.596609 0.4 0.608641 0.37528 0.614656 0.368528"
image=cv2.imread("000000000030.jpg")
(h,w)=image.shape[:2]
bbox=bbox.split()
bbox=[float(i) for i in bbox]
print(bbox)
#得到每一个横坐标
bb_w=[int(bbox[i]*w) for i in range(len(bbox)-1) if i%2==0]
#得到每一纵坐标
bb_h=[int(bbox[i]*h) for i in range(len(bbox)-1) if i%2==1]
print(bb_w,bb_h)
for i in range(len(bb_w)-1):
    #绘制圆点
    cv2.circle(image,(bb_w[i],bb_h[i]),3,(0,0,0),6)
#显示图片
cv2.imshow("a",image)
cv2.waitKey(0)

如图:

可见黑色区域即为花瓶标注区域

重头戏:labelme to coco128-seg

import json
import os
import cv2
json_filepath="D:\Shanmh\DeskTop/vase"#包含json文件的目录
image_filepath="D:\Shanmh\DeskTop/vase"#包含原图文件的目录
txt_savapath="D:\Shanmh\DeskTop/vase"#txt保存目录
json_files=[i for i in os.listdir(json_filepath) if i.endswith("json")]
for i in json_files:
    #新建一个数据list
    info_list=[]
    json_path=os.path.join(json_filepath,i)
    with open(json_path,"r") as r:
        json_info=json.load(r)
    r.close()
    imagePath=json_info["imagePath"]
    #得到图像宽高
    h,w=cv2.imread(os.path.join(image_filepath,imagePath)).shape[:2]
    shapes=json_info["shapes"]
    for shape in shapes:#每一个区域
        row_str=""#初始化一行
        label=shape["label"]
        row_str+=label
        points=shape["points"]
        for point in points:
            x=round(float(point[0])/w,6)#小数保留6位
            y = round(float(point[1]) / h, 6)  # 小数保留6位
            row_str+=" "+str(x)+" "+str(y)
        row_str+="\n"
        info_list.append(row_str)
    with open(os.path.join(txt_savapath,i.replace(".json",".txt")),"w") as w:
        w.writelines(info_list)
    w.close()
    print(f"已保存文件{i.replace('.json','.txt')}")
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值