coco数据集的理解(人工标准框绘制)
一键式下载:https://github.com/pjreddie/darknet/tree/master/scripts/get_coco_dataset.sh,然后在Linux环境下运行.sh文件。
1. coco数据集下载地址
(1) 图像集下载地址
训练图像集:https://pjreddie.com/media/files/train2014.zip
验证图像集:https://pjreddie.com/media/files/val2014.zip
(2) 图像路径文件下载地址
所有训练图像路径的文件:https://pjreddie.com/media/files/coco/trainvalno5k.part
所有验证图像路径的文件:https://pjreddie.com/media/files/coco/5k.part
(3) 标签文件下载地址
人工标注的标签文件(包括训练与验证):https://pjreddie.com/media/files/coco/labels.tgz
2. 图像集内容
(1) 训练集图像内容。其中包括82783张不同尺寸的图像,图像文件命名为:COCO_train2014_xxxxx.jpg。
(2) 验证集图像内容。包括40504张不同尺寸的图像,文件命名格式:COCO_val2014_xxx.jpg
3. 图像路径文件内容
4. 标签文件内容
标签文件中内容:人工标注框与类别。训练与验证标签目录下的txt文件名称,同训练与验证图像集目录下的jpg文件名称一一对应。即下图中COCO_train2014_000000000009.txt与训练图像集COCO_train2014_000000000009.jpg对应。同理验证集相同。
5. 标签文件txt的理解
(1) 标签格式:如下所示,每一列数据表示一个类别代号与人工标注框,存储的格式为[class_num,box_cx,box_cy,box_w,box_h],标注框的坐标是归一化后的数据,即像素单位的[box_cx,box_cy,box_w,box_h]除以整个图像的宽高[W,H]。
(2) 还原标签并绘图
import numpy as np
import cv2
import matplotlib.pyplot as plt
from PIL import Image
'''人工标注框的还原'''
# 加载coco类别名称
def load_classes(path):
fp = open(path, "r")
names = fp.read().split("\n")[:-1]
return names
classes = load_classes('data/coco.names')
# 数据类型:[cls_index, cx, cy, w, h]
boxes = np.loadtxt('E:/DataSets/COCO/labels/train2014/COCO_train2014_000000001926.txt').reshape(-1,5)
img_path = 'E:/DataSets/COCO/images/train2014/COCO_train2014_000000001926.jpg'
image = np.array(Image.open(img_path).convert('RGB'), dtype=np.uint8)
# 人工标注框的绘制 [cx,cy,w,h]
h, w, _ = image.shape
boxes[:,[1,3]] = boxes[:,[1,3]]*w
boxes[:,[2,4]] = boxes[:,[2,4]]*h
for box in boxes:
p1 = box[1:3] - box[3:5]/2
p1 = p1.astype(int)
p2 = box[1:3] + box[3:5]/2
p2 = p2.astype(int)
print(p1,p2) # box
print(classes[int(box[0])]) # class_name
cv2.rectangle(image, tuple(p1), tuple(p2),(255,0,0),1)
# arg:图像,标签,坐标,标签字体,字体大小,字体颜色,字体厚度
cv2.putText(image,classes[int(box[0])],tuple(p1),cv2.FONT_HERSHEY_SIMPLEX,0.35,(255,0,0),0)
plt.figure(figsize=(25,15))
plt.imshow(image)
运行结果:
(3) 人工标注框归一化的作用:供yolo训练使用,有助于提高检测的精度等。