飞桨领航团AI达人创造营学习笔记2

数据获取与处理(以CV任务为主)

第二讲回放链接:https://www.bilibili.com/video/BV1qq4y1X7uZ?p=2
项目地址:AI达人创造营:数据获取与处理

1. 数据的获取途径

1.1 Kaggle有趣比较火热的数据集

预测销售价格:House Prices-Advanced Regression Techniques   
猫狗分类:Cat and Dog
预测泰坦尼克号的生存情况并熟悉机器学习基础知识:Machine Learning from Disaster

1.2 天池

遥感影像分割:Barley Remote Sensing Dataset大麦遥感检测数据集
目标检测任务(人脸检测):耶鲁人脸数据库

1.3 DataFountain

图像分类:花卉分类数据集

1.4 其他常用的数据集官网

科大讯飞官网:https://www.xfyun.cn/service/object-recg
COCO数据集:https://cocodataset.org/#download

1.5.1 图像处理完整流程

  • 图片数据获取

  • 图片数据清洗
    ----初步了解数据,筛选掉不合适的图片

  • 图片数据标注

  • 图片数据预处理data preprocessing。
      ----标准化 standardlization
        一 中心化 = 去均值 mean normallization
          一 将各个维度中心化到0
          一 目的是加快收敛速度,在某些激活函数上表现更好
        一 归一化 = 除以标准差
          一 将各个维度的方差标准化处于[-1,1]之间
          一 目的是提高收敛效率,统一不同输入范围的数据对于模型学习的影响,映射到激活函数有效梯度的值域

  • 图片数据准备data preparation(训练+测试阶段)
      ----划分训练集,验证集,以及测试集

  • 图片数据增强data augjmentation(训练阶段 )
      ----CV常见的数据增强
        随机旋转
        随机水平或者重直翻转
        缩放
        剪裁
        平移
        调整亮度、对比度、饱和度、色差等等
        注入噪声
        基于生成对抗网络GAN做数搪增强AutoAugment等

1.5.2 纯数据处理完整流程

数据预处理与特征工程

  • 感知数据
      ----初步了解数据
      ----记录和特征的数量特征的名称
      ----抽样了解记录中的数值特点描述性统计结果
      ----特征类型
      ----与相关知识领域数据结合,特征融合
  • 数据清理
      ----转换数据类型
      ----处理缺失数据
      ----处理离群数据
  • 特征变换
      ----特征数值化
      ----特征二值化
      ----OneHot编码
      ----特征离散化特征
      ----规范化
        区间变换
        标准化
        归一化
  • 特征选择
      ----封装器法
        循序特征选择
        穷举特征选择
        递归特征选择
      ----过滤器法
      ----嵌入法
  • 特征抽取
      ----无监督特征抽取
        主成分分析
        因子分析
      ----有监督特征抽取

2. 数据处理与标注

2.1 官方数据处理成VOC或者COCO

2.1.1COCO2017数据集介绍

COCO数据集是Microsoft制作收集用于Detection + Segmentation + Localization + Captioning的数据集,作者收集了其2017年的版本,一共有25G左右的图片和600M左右的标签文件。 COCO数据集共有小类80个,分别为:

[‘person’, ‘bicycle’, ‘car’, ‘motorcycle’, ‘airplane’, ‘bus’, ‘train’, ‘truck’, ‘boat’, ‘traffic light’, ‘fire hydrant’, ‘stop sign’, ‘parking meter’, ‘bench’, ‘bird’, ‘cat’, ‘dog’, ‘horse’, ‘sheep’, ‘cow’, ‘elephant’, ‘bear’, ‘zebra’, ‘giraffe’, ‘backpack’, ‘umbrella’, ‘handbag’, ‘tie’, ‘suitcase’, ‘frisbee’, ‘skis’, ‘snowboard’, ‘sports ball’, ‘kite’, ‘baseball bat’, ‘baseball glove’, ‘skateboard’, ‘surfboard’, ‘tennis racket’, ‘bottle’, ‘wine glass’, ‘cup’, ‘fork’, ‘knife’, ‘spoon’, ‘bowl’, ‘banana’, ‘apple’, ‘sandwich’, ‘orange’, ‘broccoli’, ‘carrot’, ‘hot dog’, ‘pizza’, ‘donut’, ‘cake’, ‘chair’, ‘couch’, ‘potted plant’, ‘bed’, ‘dining table’, ‘toilet’, ‘tv’, ‘laptop’, ‘mouse’, ‘remote’, ‘keyboard’, ‘cell phone’, ‘microwave’, ‘oven’, ‘toaster’, ‘sink’, ‘refrigerator’, ‘book’, ‘clock’, ‘vase’, ‘scissors’, ‘teddy bear’, ‘hair drier’, ‘toothbrush’]

大类12个,分别为

[‘appliance’, ‘food’, ‘indoor’, ‘accessory’, ‘electronic’, ‘furniture’, ‘vehicle’, ‘sports’, ‘animal’, ‘kitchen’, ‘person’, ‘outdoor’]

VOC与COCO简介
  Pascal 的全称是模式分析,静态建模和计算学习(Pattern Analysis, Statical Modeling and Computational Learning)。PASCAL VOC 挑战赛是视觉对象的分类识别和检测的一个基准测试,提供了检测算法和学习性能的标准图像注释数据集和标准的评估系统。从2005年至今,该组织每年都会提供一系列类别的、带标签的图片,挑战者通过设计各种精妙的算法,仅根据分析图片内容来将其分类,最终通过准确率、召回率、效率。
  MS COCO的全称是Microsoft Common Objects in Context,起源于微软于2014年出资标注的Microsoft COCO数据集,与ImageNet竞赛一样,被视为是计算机视觉领域最受关注和最权威的比赛之一。

COCO格式,文件夹路径样式:
COCO_2017/
├── val2017 # 总的验证集
├── train2017 # 总的训练集
├── annotations # COCO标注
│ ├── instances_train2017.json # object instances(目标实例) —目标实例的训练集标注
│ ├── instances_val2017.json # object instances(目标实例) —目标实例的验证集标注
│ ├── person_keypoints_train2017.json # object keypoints(目标上的关键点) —关键点检测的训练集标注
│ ├── person_keypoints_val2017.json # object keypoints(目标上的关键点) —关键点检测的验证集标注
│ ├── captions_train2017.json # image captions(看图说话) —看图说话的训练集标注
│ ├── captions_val2017.json # image captions(看图说话) —看图说话的验证集标注

VOC格式,文件夹路径样式:
VOC_2017/
├── Annotations # 每张图片相关的标注信息,xml格式
├── ImageSets
│ ├── Main # 各个类别所在图片的文件名
├── JPEGImages # 包括训练验证测试用到的所有图片
├── label_list.txt # 标签的类别数
├── train_val.txt #训练集
├── val.txt # 验证集

2.1.2 Object Keypoint 类型的标注格式

{
“info”: info,
“licenses”: [license],
“images”: [image],
“annotations”: [annotation],
“categories”: [category]
}

其中,info、licenses、images这三个结构体/类型,在不同的JSON文件中这三个类型是一样的,定义是共享的(object instances(目标实例), object keypoints(目标上的关键点), image captions(看图说话))。不共享的是annotation和category这两种结构体,他们在不同类型的JSON文件中是不一样的。 新增的keypoints是一个长度为3 X k的数组,其中k是category中keypoints的总数量。每一个keypoint是一个长度为3的数组,第一和第二个元素分别是x和y坐标值,第三个元素是个标志位v,v为0时表示这个关键点没有标注(这种情况下x=y=v=0),v为1时表示这个关键点标注了但是不可见(被遮挡了),v为2时表示这个关键点标注了同时也可见。 um_keypoints表示这个目标上被标注的关键点的数量(v>0),比较小的目标上可能就无法标注关键点。

annotation{
“keypoints”: [x1,y1,v1,…],
“num_keypoints”: int,
“id”: int,
“image_id”: int,
“category_id”: int,
“segmentation”: RLE or [polygon],
“area”: float,
“bbox”: [x,y,width,height],
“iscrowd”: 0 or 1,
}
示例:
{
“segmentation”: [[125.12,539.69,140.94,522.43,100.67,496.54,84.85,469.21,73.35,450.52,104.99,342.65,168.27,290.88,179.78,288,189.84,286.56,191.28,260.67,202.79,240.54,221.48,237.66,248.81,243.42,257.44,256.36,253.12,262.11,253.12,275.06,299.15,233.35,329.35,207.46,355.24,206.02,363.87,206.02,365.3,210.34,373.93,221.84,363.87,226.16,363.87,237.66,350.92,237.66,332.22,234.79,314.97,249.17,271.82,313.89,253.12,326.83,227.24,352.72,214.29,357.03,212.85,372.85,208.54,395.87,228.67,414.56,245.93,421.75,266.07,424.63,276.13,437.57,266.07,450.52,284.76,464.9,286.2,479.28,291.96,489.35,310.65,512.36,284.76,549.75,244.49,522.43,215.73,546.88,199.91,558.38,204.22,565.57,189.84,568.45,184.09,575.64,172.58,578.52,145.26,567.01,117.93,551.19,133.75,532.49]],
“num_keypoints”: 10,
“area”: 47803.27955,
“iscrowd”: 0,
“keypoints”: [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,142,309,1,177,320,2,191,398,2,237,317,2,233,426,2,306,233,2,92,452,2,123,468,2,0,0,0,251,469,2,0,0,0,162,551,2],
“image_id”: 425226,“bbox”: [73.35,206.02,300.58,372.5],“category_id”: 1,
“id”: 183126}

2.1.3 categories字段

最后,对于每一个category结构体,相比Object Instance中的category新增了2个额外的字段,keypoints是一个长度为k的数组,包含了每个关键点的名字;skeleton定义了各个关键点之间的连接性(比如人的左手腕和左肘就是连接的,但是左手腕和右手腕就不是)。 目前,COCO的keypoints只标注了person category (分类为人)。

{
“id”: int,
“name”: str,
“supercategory”: str,
“keypoints”: [str],
“skeleton”: [edge]
}
示例:
{
“supercategory”: “person”,
“id”: 1,
“name”: “person”,
“keypoints”: [“nose”,“left_eye”,“right_eye”,“left_ear”,“right_ear”,“left_shoulder”,“right_shoulder”,“left_elbow”,“right_elbow”,“left_wrist”,“right_wrist”,“left_hip”,“right_hip”,“left_knee”,“right_knee”,“left_ankle”,“right_ankle”],
“skeleton”: [[16,14],[14,12],[17,15],[15,13],[12,13],[6,12],[7,13],[6,7],[6,8],[7,9],[8,10],[9,11],[2,3],[1,2],[1,3],[2,4],[3,5],[4,6],[5,7]]
}

2.1.4 数据集统计信息

人体关键点标注,每个人体关键点个数的分布情况,其中11-15这个范围的人体是最多的,有接近70000人,6-10其次,超过40000人,后面依次为16-17,2-5,…
在这里插入图片描述

2.2 自定义数据集进行训练

2.2.1 常见标注工具

对于图像分类任务,我们只要将对应的图片是哪个类别划分好即可。对于检测任务和分割任务,目前比较流行的数据标注工具是labelimg、labelme,分别用于检测任务与分割任务的标注。

标注工具Github地址:

labelimg

labelme

PPOCRLabel

2.2.2 制作VOC格式与COCO格式数据集并划分

3. 数据预处理方法

3.1 图像的本质

我们常见的图片其实分为两种,一种叫位图,另一种叫做矢量图。如下图所示:
在这里插入图片描述
位图的特点:

  • 由像素点定义一放大会糊
  • 文件体积较大
  • 色彩表现丰富逼真

在这里插入图片描述矢量图的特点:

  • 超矢量定义
  • 放太不模糊
  • 文件体积较小
  • 表现力差

3.2 为什么要做这些数据增强

是因为很多深度学习的模型复杂度太高了,且在数据量少的情况下,比较容易造成过拟合(通俗来说就是训练的这个模型它太沉浸在这个训练样本当中的一些特质上面了),表现为的这个模型呢受到了很多无关因素的影响。 所得出的结果就是在没有看到过的样本上对它做出预测呢就表现的不太好。

4. 模型训练评估

4.1 比对实验

在其他参数都相同的情况下,在没有加任何的数据增强时,mAP为38.06:

在这里插入图片描述

在其他参数都相同的情况下,在随机扩张,随机像素变换数据增强时,mAP为41.9:

在这里插入图片描述

在其他参数都相同的情况下,在加随机裁剪,随机水平翻转,短边调整,与Mixup的数据增强时,mAP为35.4:

在这里插入图片描述

以上对比实验说明,正确的增加数据增强时,可以小幅度提升mAP值。

在这里插入图片描述

4.2 拓展介绍mAP:

在机器学习领域中,用于评价一个模型的性能有多种指标,其中几项就是FP、FN、TP、TN、精确率(Precision)、召回率(Recall)、准确率(Accuracy)。
mean Average Precision, 即各类别AP的平均值,是AP:PR 曲线下面积。
此前先了解一下IOU评判标准:
在这里插入图片描述
TP、FP、FN、TN

常见的评判方式,第一位的T,F代表正确或者错误。第二位的P和N代表判断的正确或者错误

  • True Positive (TP): I o U > I O U t h r e s h o l d IoU>IOU_{threshold} IoU>IOUthreshold (IOU的阈值一般取0.5)的所有检测框数量(同一Ground Truth只计算一次),可以理解为真实框,或者标准答案。
  • False Positive (FP): I o U < I O U t h r e s h o l d IoU<IOU_{threshold} IoU<IOUthreshold的所有检测框数量
  • False Negative (FN): 没有检测到的 GT 的数量
  • True Negative (TN): mAP中无用到
真实情况预测值
正例反例
正例TP(真正例)FP(假反例)
反例<FN(假正例)TN(真反例)

查准率(Precision): P r e c i s i o n = T P T P + F P = T P all detections Precision = \frac{TP}{TP+FP} = \frac{TP}{\text {all detections}} Precision=TP+FPTP=all detectionsTP

查全率(Recall): R e c a l l = T P T P + F N = T P all ground truths Recall = \frac{TP}{TP+FN} = \frac{TP}{\text {all ground truths}} Recall=TP+FNTP=all ground truthsTP

二者绘制的曲线称为 P-R 曲线: 查准率:P 为纵轴y 查全率:R 为横轴x轴,如下图

在这里插入图片描述
mAP值即为,PR曲线下的面积。

五、模型推理预测

使用模型进行预测,同时使用pdx.det.visualize将结果可视化,可视化结果将保存到work/PaddleDetection/output/PPYOLO/vdl_log下,载入模型推理保存图片至work/PaddleDetection/output/PPYOLO/img下。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值