深度学习目标检测入门COCO数据集

日暮途远z 2024-09-12 16:31:02 阅读 84

常见数据集类型:

COCO数据集:

Pytorch加载COCO数据集:

COCO数据集的读取

<code>COCO_dataset = torchvision.datasets.CocoDetection(

root="./dataset/val2017",code>

annFile="./instances_val2017/instances_val2017.json"code>

)

root (str or pathlib.Path) – Root directory where images are downloaded to.

annFile (string) – Path to json annotation file.

 root 参数为图像所在的目录 annFile为标注文件所在的路径

val2017:包含 COCO数据集2017 验证集 内容为图片 1G

instances_val2017.json 该json文件中包括:

图像信息images: 

id: 图像的唯一标识符file_name: 图像文件名width 和 height: 图像尺寸date_captured: 图像捕获日期license: 图像许可证信息

标注信息annotations

id: 注释的唯一标识符image_id: 对应图像的idcategory_id: 对象类别的idsegmentation: 对象的分割掩码(可能是多边形或RLE格式):

counts:

如果"counts"为 [3,2,1,4],则表示:3个背景像素2个前景像素1个背景像素4个前景像素

area: 分割区域的面积bbox: 边界框坐标 [x, y, width, height]iscrowd: 标记是否为群体对象

将COCO数据集中第六个元素为例 :

利用Image和info接收

image,info = COCO_dataset[5]

原因:解包内容

(<PIL.Image.Image image mode=RGB size=640x425 at 0x264B630EB10>, [{'segmentation': [[353.37, 67.65, 358.15, 52.37, 362.92, 47.59, 374.38, 44.73, 389.66, 52.37, 389.66, 67.65, 389.66, 76.25, 393.48, 83.89, 396.35, 88.66, 397.3, 91.53, 406.85, 99.17, 413.54, 104.9, 451.74, 148.83, 458.43, 153.6, 462.25, 166.02, 467.02, 173.66, 463.2, 181.3, 449.83, 183.21, 448.88, 191.81, 455.56, 226.19, 448.88, 254.84, 453.65, 286.36, 475.62, 323.6, 491.85, 361.81, 494.72, 382.82, 494.72, 382.82, 499.49, 391.41, 416.4, 391.41, 424.04, 383.77, 439.33, 374.22, 445.06, 360.85, 436.46, 334.11, 421.18, 303.55, 416.4, 289.22, 409.72, 268.21, 396.35, 280.63, 405.9, 298.77, 417.36, 324.56, 425.0, 349.39, 425.0, 357.99, 419.27, 360.85, 394.44, 367.54, 362.92, 370.4, 346.69, 367.54, 360.06, 362.76, 369.61, 360.85, 382.98, 340.8, 355.28, 271.08, 360.06, 266.3, 386.8, 219.5, 368.65, 162.2, 348.6, 175.57, 309.44, 187.03, 301.8, 192.76, 288.43, 193.72, 282.7, 193.72, 280.79, 187.03, 280.79, 174.62, 287.47, 171.75, 291.29, 171.75, 295.11, 171.75, 306.57, 166.98, 312.3, 165.07, 345.73, 142.14, 350.51, 117.31, 350.51, 102.03, 350.51, 90.57, 353.37, 65.74]], 'area': 27789.110550000005, 'iscrowd': 0, 'image_id': 785, 'bbox': [280.79, 44.73, 218.7, 346.68], 'category_id': 1, 'id': 442619}, {'segmentation': [[613.15, 389.9, 368.65, 400.41, 275.06, 400.41, 264.55, 388.95, 267.42, 384.17, 275.06, 388.95, 290.34, 395.63, 409.72, 393.72, 504.27, 386.08, 615.06, 385.13], [446.97, 369.85, 217.75, 382.26, 205.34, 370.8, 213.93, 367.94, 232.08, 375.58, 456.52, 362.21]], 'area': 3871.073400000008, 'iscrowd': 0, 'image_id': 785, 'bbox': [205.34, 362.21, 409.72, 38.2], 'category_id': 35, 'id': 609541}])

image_handler = ImageDraw.ImageDraw(image)

代码 image_handler = ImageDraw.ImageDraw(image) 是在使用 Python Imaging Library (PIL) 中的 ImageDraw 模块创建一个绘图对象。这个操作的目的和用途如下:

创建绘图对象:

ImageDraw.Draw() 方法创建一个可以在给定图像上进行绘制操作的对象。

图像编辑:

这个对象允许你在现有图像上进行各种绘图操作,而不需要创建新的图像。

 本代码中用于在目标检测或图像分割任务中标注边界框或区域

标注原始图像:

循环遍历:

遍历 info 中的每个元素,赋值给annotation(标注)

COCO数据集中‘bbox':

'bbox': [205.34, 362.21, 409.72, 38.2]

 含义x_min,y_min,width,height

而VOC 数据集中'bbox':

含义为 左上x,左上y,右下x,右下y坐标

 接收x_min,y_min,width,height参数:

在Info中遍历得到的信息 赋值给了 annotation

此时annotation内部为一个字典包括:area,bbox等参数

x_min,y_min,width,height = annotation['bbox']

标注处理:

image_handler.rectangle((x_min,y_min,x_min+width,y_min+height),outline='red')code>

image_handler.rectangle([(x_min,y_min),(x_min+width,y_min+height)],outline="blue")code>

xy(必需):

这是定义矩形位置和大小的主要参数。它可以是以下两种格式之一:

a) 四元组 (x0, y0, x1, y1)

(x0, y0) 是左上角坐标(x1, y1) 是右下角坐标

例如:(100, 100, 200, 200)

b) 包含两个坐标点的列表或元组 [(x0, y0), (x1, y1)]

(x0, y0) 是左上角坐标(x1, y1) 是右下角坐标

例如:[(100, 100), (200, 200)]

fill(可选):

矩形的填充颜色可以是颜色名称字符串(如 "red")或 RGB/RGBA 元组(如 (255, 0, 0) 或 (255, 0, 0, 255))默认为 None(不填充)

outline(可选):

矩形轮廓的颜色格式同 fill默认为 None(无轮廓)

width(可选):

轮廓线的宽度(像素)默认为 1

 完整代码:

import torchvision

from PIL import ImageDraw

COCO_dataset = torchvision.datasets.CocoDetection(

root="./dataset/val2017",code>

annFile="./instances_val2017/instances_val2017.json"code>

)

print(COCO_dataset[5])

image,info = COCO_dataset[5]

image_handler = ImageDraw.ImageDraw(image)####对原有图像进行标注画框处理

for annotation in info:

x_min,y_min,width,height = annotation['bbox']

# image_handler.rectangle((x_min,y_min,x_min+width,y_min+height),outline='red')code>

image_handler.rectangle([(x_min,y_min),(x_min+width,y_min+height)],outline="blue")code>

# image_handler.rectangle(((x_min,y_min),(x_min+width,y_min+height)))

image.show()

实验结果 :



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。