SSD系列(1)——制作自己的COCO格式Object Instance目标检测数据集

本文介绍了如何将数据集封装成COCO格式,以便于在SSD模型上进行目标检测。首先讲解了COCO-detection数据集的格式,接着详细描述了如何划分数据集和生成json文件的过程,强调了数据清洗的重要性。
摘要由CSDN通过智能技术生成

前言

目前在目标检测任务中,VOC和COCO是两个影响力最大的数据集系列。有时候我们希望将一些经典模型如RCNN、YOLO、SSD等运用到自己的数据集中,同时希望能够尽可能快的部署、验证,而不是花时间重新写一整套dataset和dataloader。此时我们可以将自己的数据集封装成VOC或COCO固定格式,然后对模型的接口做一些细微修改,就可以跑起来。
本文主要讨论COCO数据集的detection任务,并基于SSD-Pytorch的源码进行修改,将自己的数据集封装成COCO格式,并在SSD上跑起来。
关键词:COCO数据集SSDpytorch目标检测

注:编者水平有限,如有谬误,欢迎指正。若要转载,请注明出处,谢谢。
联系方式:
邮箱:yue_zhan@yahoo.com
QQ:1156356625


COCO-detection数据集格式

注:格式相对官方做了简化处理
数据集的格式一般用一个json文件表示,训练集测试集分开保存。数据集格式如下:

generated_list = {
   "images": [],
                  "annotations": [],
                  "categories": []

拆开来,先说说images,它是一个字典的列表,其中每个元素对应一个样本图片:

{
   "file_name": 图片路径,
"width": 图片宽度,
"height": 图片高度,
"id": 图片编号}

前三项包含了文件的基本信息,id是最重要的一项,其编号是人为指定,与文件层级没有关系。
然后是annotations,同样也是一个字典的列表,每个元素对应一个标注。

{
   "image_id": 对应图片的编号,
"category_id": label, 
"id": annotation编号, 
"bbox": bbox}

这里的image_idimagesid要对应起来,这两个id是必须一对多严格对应起来的,否则在调试的时候可能会出现loss能下降但是不收敛的情况(找错标注)。label是标注类别,K类的话对应就是0到K-1。annotations也有一个id,这里的表示其自身的编号。因为一张图片对应多个标注框,所以annotation也要重新编号。bbox格式默认为XYWH格式,即[x, y, w, h]代表标注框左上角点x、y坐标与其宽高,其数据格式是列表。
最后是category的格式,同样也是字典列表。不过对于一个数据集,这项是定长的,可以预先生成好。

{
   "id": 0,		#类别编号
"name": "类别名0"}
 ...
 "id": K-1,
 "name": "类别名1"}

对于普通的检测任务,这些数据就已经足够了,接下来是封装。

自定义数据集封装

对于数据的排列没有要求,只需要图片和标注的文件在一个目录就可以,至于目录的层叠嵌套没有什么影响。封装可以分为两个步骤:

  • 划分数据集

数据集的划分可以根据个人需求来,现在假设数据集没有人为划分过,按比例随机进行划分。我按照8:2把训练集划成train和val两部分,然后把划分的文件路径

# 过滤有效样本对,图片和标注需要在同一目录下,且命名前缀一致,如果残缺则滤掉
def get_path_list(root_dir):
	# 图片及标注格式
	img_extensions = ['jpg', 'jpeg', 'bmp', 'png', 'gif']
	annotation_extensions = ['json']
	# 图片及标注的路径列表
	images_path_list = []
	annotations_path_list = []
	# 遍历所有子路径
	for root, dir, files in os.walk(root_dir):
		if files:
			files.sort()
			imglist_org = [fn for fn in files if any(fn.endswith(ext) for ext in img_extensions)]
			anlist_org = []
			delete_index = []
			
  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值