最近项目要进行汽车牌照抓拍后进行数据识别,想到了神器模型:COCO,Recently, the project was to carry out data recognition after the capture of car license plate. I thought of the artifact model: COCO

前言

兄弟们正如标题所言那样,项目中要识别汽车牌照,之前自己接触过COCO模型,通过本篇文章详细的介绍一下【COCO数据集的简介、安装、使用方法之详细攻略】

COCO数据集简介🙂

首先介绍一下主要是用来干什么的,通过介绍呢可以叫我们职场小白,了解到这个模型具体是干啥的😀。

COCO数据集(Common Objects in Context)是视觉对象检测、分割、特征点检测、图像描述和视觉问答中的常用数据集。它由微软构建和维护,数据集中的图像被详细地标注了常见对象的实例,实例边界以及实例关键点等信息。

COCO数据集的特点是:

​ 数据集规模很大,包括2.5百万的数据集,由328,000张图像和超过200,000个对象实例组成。这些图像涵盖了91个对象类别,其中有80个是物体,11个是人物。

​ 数据集注重上下文,图像中物体出现在各种各样的场景和环境中,而不仅仅是与单色背景。这使得COCO数据集非常适合评估算法在复杂场景下的鲁棒性。

​ 数据集提供丰富的注释,不仅包括对象的位置,也包括对象分割的像素级注释、几何形状的关键点以及图像描述。这使得COCO数据集适用于检测、分割、姿态估计以及自动图像描述等多种任务。

​ 数据集质量高,拥有清晰的物体分割注释和人工描述,标注精确和一致性高。这使得COCO数据集成为视觉任务中高质量的数据集。

​ COCO工具集功能强大,提供了图像预处理、数据集分析、结果评估等工具,方便研究人员使用。COCO数据集的广泛应用使其成为计算机视觉中的重要数据集之一。

​ 许多著名的视觉算法均使用COCO数据集进行实验评估和模型训练。COCO数据集依然在不断丰富和扩展,其最新版本已包含更丰富的注释以支持更多的视觉任务,如视觉关系推理等。COCO数据集的成功证明了数据集的重要性,它推动了计算机视觉技术的进步,特别是在物体检测、图像分割和图像描述等领域。

​ 通过👆的专业性描述,这个COCO数据集的发布我们可以嗨皮的训练和测试各种视觉模型,并可以直接比较不同模型之间的性能,这大大促进了计算机视觉的发展。但是😀数据集的规模也带来一定的挑战,如数据集 annotate 成本高、数据集使用门槛高以及过拟合问题等。

​ COCO数据集填补了图像识别中“上下文”不足的空白,使视觉模型可以更好地理解图像场景和环境。但是COCO数据集也存在一定局限,比如对象种类有限,无法覆盖全部视觉概念;图像分布有偏,导致模型测试时的DOMAIN SHIFT问题;数据集无法涵盖对象之间的关系等。

​ 这需要未来的计算机视觉数据集进行进一步丰富和拓展。MS COCO 2017是一个更新的版本,增加了新的图像及修正了部分图像的标注错误,并新增了新的图像描述任务及图像分割的评估指标,对图像分割结果进行了重新评估。

​ 整体来说,MS COCO 2017在不断提高数据集的规模与质量的同时,也同步适当调整评估指标,来更公平地评价不同的视觉技术。这些都有助于促进未来视觉技术的进步。

​ 在MS COCO数据集的启发下,近年来涌现出许多相关的数据集,这些数据集在不同程度上填补了MS COCO的不足,丰富了视觉任务的数据集,如 Open Images数据集提供600视觉类别和Boolean relations 注释,Visual Genome 数据集提供丰富的视觉关系注释,COCO-Stuff数据集提供图像中 stuff 的注释等。

​ 这些相关的数据集与 COCO数据集共同推动了视觉技术的发展。可见,COCO数据集是一个具有里程碑意义的计算机视觉数据集。它的发布和丰富Perfect促进了近年来视觉技术的快速发展,特别是在目标检测、图像分割和图像描述等领域。

​ 虽然COCO数据集存在一定限制,但作为一个开源的高质量数据集,它显著降低了视觉技术研究的门槛,产生了巨大影响力。相信在未来,COCO数据集会进一步扩充,新的数据集会出现,视觉技术也将迎来更快发展。

兄弟们,通过上面的分享,大家对这个数据集是否有了基本的了解哈哈,下面开始我们的骚操作,进行安装

安装

首先我们要进行下载Anaconda并安装,选择适合我们系统的版本,

​ Anaconda包含conda、Python等工具

上面工具安装成功需要进行更新conda,😀

第一步:先创建conda环境命令如下:

conda update conda

安装成功后,我们进行第二步哈哈

第二步: 激活conda环境

conda create -n coco python=3.7

第三步:在conda环境下安装PyTorch,这里我们选择1.6版本,请根据你的CUDA版本选择合适的PyTorch版本
conda activate coco

第四步:开始安装我们的神器O(∩_∩)O哈哈~ COCO API

conda install pytorch==1.6.0 torchvision==0.7.0 cudatoolkit=10.2 -c pytorch

第五步: 进行克隆COCOAPI仓库
git clone https://github.com/cocodataset/cocoapi.git

第六步:安装COCO API

进入PythonAPI目录

cd cocoapi/PythonAPI
python setup.py build_ext --inplace# 或者使用pip安装(前提是已经安装Cython等编译环境)
pip install -U .# 为了让其他代码能找到COCO API,

我们需要将cocoapi添加到PYTHONPATH中:
export PYTHONPATH=/path/to/cocoapi:$PYTHONPATH # 验证安装`
\# 1. 导入pycocotools,如果没有错误,则安装成功
import pycocotools

#2. 运行示例代码
from pycocotools.coco import COCO
import [skimage.io](http://skimage.io/) as io
import matplotlib.pyplot as plt
\#%matplotlib inline# 下载COCO数据集
!wget -c https://images.cocodataset.org/zips/train2017.zip
!wget -c https://images.cocodataset.org/annotations/annotations_trainval2017.zip# 解压数据集
!unzip -q train2017.zip
!unzip -q annotations_trainval2017.zip dataDir='annotations'
dataType='train2017'
annFile='{}/instances_{}.json'.format(dataDir,dataType)
coco=COCO(annFile) # 显示图像及标注
img = coco.loadImgs(coco.getImgIds(imgIds=42))[0]
I = io.imread('%s/train2017/%s'%(dataDir,img['file_name']))
plt.imshow(I); plt.axis('off')
plt.show() # 3. 使用COCOeval测试
from pycocotools.cocoeval import COCOeval
cocoEval = COCOeval(coco, cocoGt, 'segm')
cocoEval.evaluate()
print(cocoEval.stats)# 4. 初始化COCO对象,如果没有错误,则成功
coco = COCO(annFile) # 5.读取COCO数据
img = coco.loadImgs(coco.getImgIds(imgIds=42))[0]# 以上方法如果全部成功,则COCO API安装成功。

还有几种方法可以验证COCO API是否安装成功:

  1. 运行示例Python代码:运行上面提供的示例Python代码,如果能够正常运行并显示图像及标注,则说明安装成功。如果运行过程中出现模块找不到等错误,则表示安装失败。
  2. 导入pycocotools包:在Python中输入import pycocotools,如果没有错误报出,则表示安装成功。如果报错信息中包含"No module named pycocotools"等,则表示安装失败。
  3. 测试 COCOeval 工具:COCO API包含了COCO数据集的评估工具COCOeval,我们可以运行如下代码进行测试:
python
from pycocotools.cocoeval import COCOeval

# 初始化COCOeval对象 
cocoEval = COCOeval(coco, cocoGt, 'segm')

# 计算所有指标 
cocoEval.evaluate()  

# 打印结果
print(cocoEval.stats)

如果可以正常打印出各个指标(如AP等)的结果,则COCO API安装成功。如果运行报错,则安装失败。

  1. COCO对象初始化:运行coco = COCO(annFile)代码,如果没有报错,coco对象初始化成功,则表示安装成功。如果报错信息包含"No module named 'pycocotools'"等,则安装失败。
  2. COCO数据读取:使用COCO对象读取COCO数据集数据,如img = coco.loadImgs(coco.getImgIds(imgIds=42))[0],如果可以正常读取数据,则安装成功。否则,安装失败。综上,通过导入pycocotools包、运行示例代码、测试COCOeval工具、COCO对象初始化以及数据读取等方法,可以全面验证COCO API的安装结果,判断是否安装成功。

开始介绍一下:COCO数据集的80个类别—YoloV3算法采用的数据集😀兄弟们☆( ̄▽ ̄)/$:*

我们通过查阅资料可以知道:COCO数据集包含80个目标类别,这些类别被广泛使用在目标检测算法的训练和评估中,比如Yolov3等。那么COCO的80个类别是什么呢❓

如下:

  1. person: 人

  2. bicycle: 自行车

  3. car: 汽车

  4. motorcycle: 摩托车

  5. airplane: 飞机

  6. bus: 公交车

  7. train: 火车

  8. truck: 卡车

  9. boat: 船

  10. traffic light: 红绿灯

  11. fire hydrant: 消防栓

  12. stop sign: 停止标志

  13. parking meter: 自动取款机

  14. bench: 长椅

  15. bird: 鸟

  16. cat: 猫

  17. dog: 狗

  18. horse: 马

  19. sheep: 羊

  20. cow: 奶牛

  21. elephant: 大象

  22. bear: 熊

  23. zebra: 斑马

  24. giraffe: 长颈鹿

  25. backpack: 背包

  26. umbrella: 伞

  27. handbag: 手提包

  28. tie: 领带

  29. suitcase: 箱子

  30. Frisbee: 飞盘

  31. skis: 滑雪板

  32. snowboard: 滑雪板

  33. sports ball: 运动球

  34. kite: 风筝

  35. baseball bat: 棒球棒

  36. baseball glove: 手套

  37. skateboard: 滑板

  38. surfboard: 冲浪板

  39. tennis racket: 网球拍

  40. bottle: 瓶子

  41. wine glass: 红酒杯

  42. cup: 杯子

  43. fork: 叉子

  44. knife: 刀

  45. spoon: 勺子

  46. bowl: 碗

  47. banana: 香蕉

  48. apple: 苹果

  49. sandwich: 三明治

  50. orange: 橙子

  51. broccoli: 西兰花

  52. carrot: 胡萝卜

  53. hot dog: 热狗

  54. pizza: 比萨

  55. donut: 甜甜圈

  56. cake: 蛋糕

  57. chair: 椅子

  58. couch: 沙发

  59. potted plant: 盆栽

  60. bed: 床

  61. dining table: 餐桌

  62. toilet: 马桶

  63. tv: 电视机

  64. laptop: 笔记本电脑

  65. mouse: 鼠标

  66. remote: 遥控器

  67. keyboard: 键盘

  68. cell phone: 手机

  69. microwave: 微波炉

  70. oven: 烤箱

  71. toaster: 烤面包机

  72. sink: 水槽

  73. refrigerator: 冰箱

  74. book: 书

  75. clock: 时钟

  76. vase: 花瓶

  77. scissors: 剪刀

  78. teddy bear: 玩具熊

  79. hair drier: 吹风机

  80. toothbrush: 牙刷

这80个类别涵盖了我们日常生活中最常见的物体和人物,是图像识别研究中重要的类别之一。

Yolov3等目标检测算法使用这80个类别进行训练和测试:

训练的过程如下:

使用COCO训练数据集训练YoloV3模型,COCO训练数据集包含80个类别的图像以及对应的标注信息。

​ 下载COCO2017训练数据集,包含80个类别的118,000张图像及其标注文件。

​ 将训练数据集分为训练集(80%)和验证集(20%)。训练集用于模型训练,验证集用于训练过程中的评估。

​ 根据COCO数据集的标注,生成YoloV3需要的训练数据:

​ 从每张图像中提取所有的标注框。

​ 过滤掉标注框面积过小的框(面积小于某个阈值)。

​ 对剩余的标注框进行归一化,使其坐标在0-1范围内。

​ 为每个标注框生成标签,包括框的坐标、宽高比例和类别id。

​ 构建YoloV3模型,包括Backbone(如Darknet-53)、预测层等。预测层用于预测80个类别的框坐标和置信度。5 为YoloV3模型定义损失函数,通常使用MSE(均方误差)损失计算预测框和真实框之间的坐标误差,以及交叉熵损失计算类别置信度。

​ 使用Adam等优化器,以及多GPU等手段,对YoloV3模型进行训练。每个epoch训练完成后在验证集上评估mAP,根据mAP调整学习率等超参数。

​ 训练多个epoch后,YoloV3模型会逐渐学会检测COCO数据集的80个类别,mAP会不断提高。当验证集mAP达到一定阈值(如60+)或长时间不提高,表示模型已经基本训练完毕。

​ 此时获得的YoloV3模型已经学会了检测COCO80个类别的目标,可以用于测试COCO测试集,或者迁移学习到其他数据集。

​ 整个训练过程通常需要几天到一周时间,需要高性能GPU等硬件条件。

👇我提供了我自己使用PyTorch框架训练YoloV3的代码逻辑如下:

python
import torch
import torch.nn as nn
import torch.optim as optim
import torch.utils.data as data
import torchvision.transforms as transforms

# 定义YoloV3模型
class YoloV3(nn.Module):
    def __init__(self, num_classes):
        super(YoloV3, self).__init__()
        # 定义Darknet-53作为backbone
        # ...

        # 定义预测层,预测 num_classes 个类别的框及置信度
        self.pred_layer = nn.Conv2d(1024, (5 + num_classes) * 3, 1)  

    def forward(self, x):
        # 通过backbone提取特征
        x = self.backbone(x)

        # 进行预测
        predictions = self.pred_layer(x)

        # 对预测结果进行解析
        return predictions

# 定义损失函数  
criterion = nn.BCEWithLogitsLoss()

# 定义优化器和学习率Scheduler
optimizer = optim.Adam(model.parameters())
lr_scheduler = optim.lr_scheduler.StepLR(optimizer, step_size=3, gamma=0.1)   

# 读取COCO数据集,并根据训练/验证集划分 
dataset = COCODataset(root_dir=coco_root, set='train', 
                      transform=transforms.ToTensor())
train_dataset, val_dataset = torch.utils.data.random_split(dataset, [0.8, 0.2])

# 定义训练参数 
num_epochs = 100
batch_size = 8

for epoch in range(num_epochs): 
    # 训练过程
    for imgs, targets in train_dataset:
        predictions = model(imgs)
        loss = criterion(predictions, targets)
        loss.backward()
        optimizer.zero_grad()
        optimizer.step()

    # 验证过程
    model.eval()
    with torch.no_grad():
        for imgs, targets in val_dataset:
            predictions = model(imgs)
            # 计算mAP等评估指标

    # 调整学习率         
    lr_scheduler.step()   

# 最终模型已经学会了检测80个类别目标

以上就是使用PyTorch训练YoloV3的基本代码逻辑。通过定义模型、损失函数、优化器等,读取COCO数据集并进行训练和验证,最终获得一个检测COCO80类目标的YoloV3模型。整个训练过程需要迭代多轮epoch,逐步优化模型,最终达到较高的mAP。

​ YoloV3的训练目标是学习获得80个类别的预测框及对应类别的置信度,以达到检测COCO数据集中的80个目标物体。

​ YoloV3使用COCO验证数据集进行评估,计算mAP等指标来衡量模型的检测性能,并根据评估结果调整模型结构和超参数。

​ 经过多轮训练和调优后,YoloV3可以达到非常高的mAP,如在COCO测试集上达到60+ mAP,这证明它学会了很好的检测COCO的80个类别。

​ 由于YoloV3使用COCO数据集学会了 detecting 80种目标,所以它也可以用于检测这80种类别的目标在其他数据集和应用场景中。这使得YoloV3成为一个更通用的目标检测模型。

​ 如果要检测自定义的数据集,也可以使用COCO数据集预训练的YoloV3模型,然后进行转移学习,使用自定义的数据集微调YoloV3模型,以适应新的目标检测任务。

所以,可以说YoloV3深度依赖于COCO数据集。它使用COCO数据集获得了检测80类目标的能力,这是它成为一个强大目标检测模型的基础。而COCO数据集的分类方案和丰富的训练数据也使得YoloV3学到了更加通用的特征表示,可以应用到更广范围的检测任务中。这也证明构建高质量数据集对模型性能的重要影响。

下载COCO2017训练数据集的步骤如下:

  1. 访问COCO数据集官网:https://cocodataset.org/#download
  2. 在"Download COCO 2017 Data"下找到"2017 Training images [118K/18GB]"并点击下载。这包含了COCO2017训练数据集中的118,000张图像。
  3. 找到"2017 Training/Validation annotations [241MB]"并点击下载。这包含了COCO2017训练数据集的标注文件,包括图像标注和实例分割标注。
  4. 下载完成后,解压两个文件。将图像文件解压到coco/images/train2017文件夹下,将标注文件解压到coco/annotations文件夹下。
  5. 目录结构应如下:
coco 
├── annotations 
│   ├── captions_train2017.json  
│   ├── captions_val2017.json
│   ├── instances_train2017.json    
│   └── instances_val2017.json
└── images 
    ├── train2017 
    │   ├── 000000000009.jpg 
    │   ├── 000000000025.jpg 
    │   ├── 000000000030.jpg 
    │   └── ...  
    └── val2017
        ├── 000000000139.jpg
        ├── 000000000285.jpg 
        └── ...
  1. instances_train2017.json 是COCO2017训练数据集的图像标注文件,包含了所有图像的标注框和类别id。这是训练目标检测模型如YoloV3所需要的注释。
  2. images/train2017文件夹下是118,000张COCO2017训练数据集的图像。
  3. 这样COCO2017的训练数据集就准备完毕,可以用于训练YoloV3等目标检测模型了。
  4. 类似地,可以下载COCO2017验证集和测试集。验证集用于模型选择和调优,测试集用于最终模型评估。

COCO数据集的使用方法

COCO数据集有多种使用方法,主要包括:

  1. 训练目标检测模型:这是COCO数据集的主要用途之一。可以使用COCO的训练和验证集训练目标检测模型,如Yolo、Faster R-CNN等,使其学会检测COCO的80个类别。
  2. 评估目标检测模型:使用COCO的测试集对目标检测模型进行评估,计算mAP和其他指标来衡量模型的性能。这是模型选择和调优的重要依据。
  3. 迁移学习:使用COCO预训练的目标检测模型,如YoloV3,并将其迁移到自定义数据集上,进行微调以适应新的数据和任务。这可以快速得到一个性能不错的模型。
  4. 数据增强:COCO包含丰富的图像和标注,这些数据可以用于图像增强,如裁剪、旋转、颜色扰动等,产生更多合成的数据来训练模型。
  5. 数据集切分:可以将COCO的图像和标注进行切分,构建更小的子数据集用于训练或评估。比如将COCO随机切分为多个子集,每个子集包含60%/20%/20%的数据作为训练集/验证集/测试集。
  6. 基准测试:使用COCO数据集和标准评估指标(如mAP)来测试目标检测算法和模型的性能,这提供了一个公平的比较基准。许多研究会在COCO上报告算法和模型的指标结果。
  7. 可视化和错误分析:通过可视化COCO数据集中的图像、标注和模型的预测结果,可以更深入理解模型的行为,分析其错误并进行改进。
  8. 应用部署:使用在COCO上训练的模型,部署到应用中进行目标检测,如图像识别、自动驾驶等。COCO包含常见目标,模型有很好的泛化能力。

COCO数据集的意义

  1. 提供了一个包含常见目标的大规模数据集。COCO包含330K张图像和80个类别,覆盖了我们生活中最常见的人物和物体。这为目标检测研究提供了丰富的数据来源。
  2. 包含详尽的标注。COCO不仅包含标注框,还包含分割掩码、关键点等信息。这使得它不仅适用于目标检测,也适用于实例分割、人体关键点检测等任务。
  3. 成为目标检测等领域的评估基准。COCO提供了标准的评估指标和测试集,使得算法和模型有一个公平的比较基准。许多方法会在COCO上报告性能,这使得研究成果更具可比性。
  4. 驱动目标检测技术的发展。COCO数据集的提出直接带动了目标检测技术的进步。在COCO出来之前,目标检测的性能和泛化能力都比较有限。COCO的出现使得算法可以在更大规模和更复杂的数据集上训练和测试,技术也随之得到长足进步。
  5. 被广泛应用在目标检测相关领域。COCO训练的模型已经在许多应用中使用,如图像识别、自动驾驶、机器人等。这证明COCO具有很好的代表性,是目标检测实际应用的数据来源。
  6. 成为计算机视觉基准之一。COCO已经成为计算机视觉中的重要基准之一,与ImageNet一样,是一个里程碑式的成果。它推动了目标检测等子领域的研究和进展,对整个视觉领域产生重要影响。

COCO数据集的特点

  1. 大规模。COCO包含330K张图像和80个类别,是目标检测的数据集中规模最大的之一。这为模型提供了丰富的数据来训练更强大的检测能力。
  2. 详尽的标注。COCO不仅有边界框标注,还有分割掩码、关键点标注等。这使其适用于目标检测以外的任务,如实例分割、人体关键点检测等。
  3. 高质量。COCO数据集注释精确、一致,质量较高。图像也较清晰多样,这为模型学习提供了高质量的监督信号。
  4. 标准化评估。COCO提供了标准的评估指标(如mAP)和测试集,使模型的性能具有可比性。这也推动了模型的快速进步。
  5. 包含常见目标。COCO的80个类别涵盖了生活中最常见的人和物体。这使得COCO训练的模型具有很强的泛化能力,可以应用到很多实际场景中。
  6. 开放无偿。COCO数据集开放下载和使用,这减轻了研究者的负担,推动了相关研究的开展。COCO的开放也使其迅速成为目标检测的标准基准之一。
  7. 常更新。COCO数据集会不断更新,加入更多数据和新的标签,以使其继续推动研究进步。这也要求模型能处理新增的目标和数据集。
  8. 研究驱动。COCO数据集是由研究机构推出并维护的。它的构建考虑了目标检测研究的需求和发展,所以内容和形式都比较适合研究。这也使其深受学术界青睐和运用。

数据集的大小和版本

  1. COCO 2014:第一个版本,包含83,000张图像和80个类别,分为训练集(82,783张)、验证集(40,504张)和测试集(40,770张)。
  2. COCO 2017:更新版本,包含118,000张训练图像、5,000张验证集图像和40,670张测试集图像。它是目前最广泛使用的版本。
  3. COCO 2018:最近的版本,包含同样规模的图像,但图像主要采集于2018年,数据更加新颖多变。它也增加了对新类别的支持,但较少应用。
  4. COCO-Stuff:一个补充 COCO对象的场景分割注释,包含172个场景类别。它使用COCO 2017的图像,提供额外的语义分割标注。
  5. COCO-Text:对COCO 2017图像进行文本检测和识别标注,包含字符级、单词级和句子级别的文本标注。
  6. COCO-Parts:对COCO人体进行更详细的关键点标注,标注了人体中的24个关键部位。使用COCO 2017人体标注作为基础。除此之外,COCO也提供了许多子集,如COCO 2014 Minival(5,000张图像)、COCO 2014 Valminusminival(35,504张)等,用于模型选择和调参。

所以,COCO数据集包含:

  • 3个主要版本:2014、2017和2018版本,规模逐渐扩大,数据更新。

    • 多个扩充子集:提供场景分割、文本检测以及人体关键点标注的数据。

      • 多个小规模子集:用于模型调优及选择。研究者可以根据实际需求选择使用COCO的不同版本和子集。但目前最广泛和最权威的仍然是COCO 2017版本,包含最丰富的图像和注释,也是评估模型性能的金标准。
    • 其他版本和子集在一定程度上补充和扩展了COCO的标注,提供更丰富的监督信息,但应用相对较少。

最近项目要进行汽车牌照抓拍后进行数据识别,想到了神器模型:COCO,Recently, the project was to carry out data recognition after the capture of car license plate. I thought of the artifact model: COCO

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

滚动到顶部