当前位置:   article > 正文

adodb.connection id password windows用户_COCO 数据集格式 和 windows 下 pycocotools

vba adodb.connection账号密码

COCO数据集格式

COCO的全称是Objects in Context,是微软推出的数据集,用于进行物体检测、分割、关键点检测、添加字幕等。

95aa8e8a176c0c28a361ae851b339e1b.png

数据的标注通过字典进行组织,保存在json文件中,json文件最主题的结构如下:

{
    

文件只包含5个字段:

info 和 licenses 并不重要,下面介绍剩下三个字段。

  • images 字段
{
    

上面比较重要的字段为 file_name 用于读取图片,id表示图像的id。

  • annotations 字段
  1. {
  2. "id": int,
  3. "image_id": int,
  4. "category_id": int,
  5. "segmentation": RLE or [polygon],
  6. "area": float,
  7. "bbox": [x,y,width,height],
  8. "iscrowd": 0 or 1
  9. }

上述字段中 segmentation 表示分割,用多边形顶点(iscrowd为0)或者mask编码(iscrowd为1)后表示。

bbox表示目标的框。

image_id 与 category_id 对应了标记所述的图像和类别。

  • categories 字段
  1. {
  2. "id": int,
  3. "name": str,
  4. "supercategory": str,
  5. }

以上为目标检测和分割的标记,COCO数据集还提供关键点检测、image caption的标记,具体格式可以参见:

COCO 标注详解_911的专栏-CSDN博客​blog.csdn.net
9a2ac84b246963903102bcfee7db8581.png

pycocotools

通过观察可以发现,COCO数据集中包含三种id:图像id、标注id、类别id,解析COCO数据的关键就是可以通过一种id,找到和该id相关的其他数据,例如通过图像id找到该图像的标注。

在windows安装pycocotools可以使用以下的命令:

pip install git+https://github.com/philferriere/cocoapi.git#subdirectory=PythonAPI

下面通过使用Mnist合成的目标检测数据集,展示该工具的原理。

加载标注数据

from 

读取数据的id

  1. imgIds = coco.getImgIds() # 获取所有的image id,可以选择参数 coco.getImgIds(imgIds=[], catIds=[])
  2. imgIds = coco.getImgIds(imgIds=[0, 1, 2]) # 获得image id 为 012的图像的id
  3. imgIds = coco.getImgIds(catIds=[0, 1, 2]) # 获得包含类别 id 为012的图像
  4. annIds = coco.getAnnIds(catIds=[0, 1, 2]) # 获得类别id为012的标签
  5. annIds = coco.getAnnIds(imgIds=imgIds[0]) # 获得和image id对应的标签
  6. catIds = coco.getCatIds(catNms=['0']) # 通过类别名筛选
  7. catIds = coco.getCatIds(catIds=[0, 1, 2]) # 通过id筛选
  8. catIds = coco.getCatIds(supNms=[]) # 通过父类的名筛选

通过id加载对应的数据(类别、标签、图像)

  1. print('类别信息')
  2. cats_name = coco.loadCats(ids=catIds)
  3. print(cats_name)
  4. print('n标签信息:')
  5. anns = coco.loadAnns(annIds)
  6. bboxes = np.array([i['bbox'] for i in anns]).astype(np.int32)
  7. cats = np.array([i['category_id'] for i in anns])
  8. print(anns)
  9. print('n从标签中提取的Bounding box:')
  10. print(bboxes)
  11. print('图像')
  12. imgIdx = imgIds[0]
  13. img = coco.loadImgs([imgIdx]) # 读取图片信息
  14. img = cv.imread('./train/' + img[0]['file_name'])
  15. # 绘制bounding box
  16. for i in range(len(bboxes)):
  17. p1 = bboxes[i][0:2]
  18. p2 = bboxes[i][0:2] + bboxes[i][2:4]
  19. cv.rectangle(img, (p1[0], p1[1]), (p2[0], p2[1]), (255, 0, 0))
  20. plt.figure(figsize=(8, 8))
  21. plt.imshow(img)
  22. plt.show()

加载的数据如下图所示:

738a0d10d9f215a82b56610524a84e8a.png

d10efbc02dcadfb8741658f444808004.png

总结来说使用coco加载数据步骤如下:

获得图像id,通过图像id获得图像对应标签的id,加载图像和对应标签,就可以作为网络的输入进行训练了。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/122422
推荐阅读
相关标签
  

闽ICP备14008679号