前言
最近在忙着怎么从头实现YOLOv3,从网上找了很多教程,也在GitHub上面找到了挺多的代码的,有些能看懂有些看不懂,看不懂的原因有两个,一个是自己太菜了,对pytorch的使用不熟悉;另一个是自己太菜了,YOLO系列的论文只读个大概,读过之后又忘记了,一些实现细节自己也不会。
看网上的代码以及视频,大多是从YOLOv3的代码和结构开始,很少有讲到关于使用的数据集和标签是怎么得来的。一开始看B站上面的大佬敲代码的时候,就觉得好牛逼,中途一看到数据处理部分,顿时一愣,虽然知道它用的是上面数据集,但是不知道怎么来的,这可不行,没有数据代码怎么跑的起来。没办法,出来混总是要还的,以前没有用过COCO数据集,现在就得补上,好了,废话就到这里,下面开始正题吧。
数据下载
先放上COCO数据集的官方下载地址:
COCO数据集官方下载地址
官网里面的数据集有好几个,自己向用哪个就下载哪个好了,官网对于COCO 数据集的介绍也是挺详细的。自己多花点时间看就行了,本人是在服务器上运行代码,因为同学正好有COCO 2017的数据集,所以就不用下载到本地再上传到服务器了。
在GitHub上面找代码的时候,发现有一个工程里面有下载数据集的脚本,通过用wget
的方式直接下载到服务器上面,因为我也没有用过,不知道效果怎么样,这里提供一下脚本的连接,用过wget
的应该都能看懂:
wget方式直接下载到服务器
本人用的数据集为2017 Train images
和2017 Val images
对应的标签文件为2017Train/Val annotations
。两个images
压缩包解压缩之后得到的是图片,而annotations
解压缩之后得到的是6个后缀为.json
的文件,这些标签的对应什么内容官网也有很详细的解释,因为YOLOv3用于目标检测,所以对应的文件为instances_train2017.json
和instances_val2017.json
。附上官网的解释:
COCO数据集官方解释
网上也有人详细的整理了一下,附上知乎的文章:
COCO数据集标注详解
数据可视化
得到数据之后,看看图片长什么样,看看标签和图片结合之后长什么样,因此就有了这一部分。本来是没有打算弄这一部分的,因为在GitHub上面找代码的时候发现找到的代码用标签的方式和官网介绍的有点不对,于是就想看一下效果,如果在数据处理这里出错了后面造成更大的错误就很难找了。
先上代码
import json
import cv2
import os
# COCO2017 各个类别的id
COCO_LABELS = {
1: 'person', 2: 'bicycle', 3: 'car', 4: 'motorcycle', 5: 'airplane', 6: 'bus', 7: 'train', 8: 'truck',
9: 'boat', 10: 'traffic light', 11: 'fire hydrant', 13: 'stop sign', 14: 'parking meter', 15: 'bench',
16: 'bird', 17: 'cat', 18: 'dog', 19: 'horse', 20: 'sheep', 21: 'cow', 22: 'elephant', 23: 'bear',
24: 'zebra', 25: 'giraffe', 27: 'backpack', 28: 'umbrella', 31: 'handbag', 32: 'tie', 33: 'suitcase',
34: 'frisbee', 35: 'skis', 36: 'snowboard', 37: 'sports ball', 38: 'kite', 39: 'baseball bat',