paddle - crowdHuman数据集训练人体识别模型

paddle - crowdHuman数据集训练人体识别模型

  • 数据集annotation
    • crowdhuman的odgt文件各项意义
    • 转换为paddle yolo的格式
      • 输入哪些数据?
  • 输出模型

数据集annotation

使用paddle paddle yolo v3的模型,将这个数据集的json内容转换为xml格式。

crowdhuman的odgt文件各项意义

参考官网:http://www.crowdhuman.org/download.html
但说得并不明确,这里对照图片总结了一下:

JSON{
    "ID" : image_filename,  ---> filename
    "gtboxes" : [gtbox],  ---> gtbox框列表
}

gtbox{
    "tag" : "person" or "mask",  ---> mask表示是人群,或者反光,或者像人的东西,需要被忽略的数据,此时extra中的ignore = 1
    "vbox": [x, y, w, h], ---> visible box,可看见的部分的检测框,框坐标为左上角x,y + weight, height
    "fbox": [x, y, w, h], ---> full box,预测的全部的检测框,当extra的occ == 0时, 这个值和vbox相等
    "hbox": [x, y, w, h], ---> head box,预测头的部分的检测框
    "extra" : extra, ---> person额外描述
    "head_attr" : head_attr, ---> head额外描述
}

extra{ ---> 内容均为可选项
    "ignore": 0 or 1, ---> 对应上述mask,ignore = 1
    "box_id": int, ---> 当前gtbox的id
    "occ": int, ---> 图像是否有遮挡, =1有遮挡
}

head_attr{ ---> 内容均为可选项
    "ignore": 0 or 1, ---> 未知?
    "unsure": int, ---> 图像是否不确定(置信度低)
    "occ": int, ---> 同上
}

转换为paddle yolo的格式

输入哪些数据?

一开始:

  1. box分为三类,只用于摄像头采集的场景
  2. ignore = 1,unsure = 1时, 不使用这个box
  3. 遮挡:一开始occ = 1也输入,发现效果不好,loss不下降,不使用
  4. 分辨率:数据集中很多人群图片,box像素太少的,不使用

发现loss一直不下降,怀疑是数据集问题。再看了下这个odgt文件中的数据,发现occ为0时,fbox和vbox相等。

于是:

  1. 分为两类,head and body,只输入vbox和hbox
  2. ignore/ unsure == 1时,对应的vbox/hbox忽略
  3. head_attr的occ==1时,忽略hbox
  4. 图片先缩放为XXX*480的大小,再根据缩放后的box,过滤较小尺寸的box。
  5. 发现剩下的图片里,有很多人体重合度高的情形,因此再过滤次小尺寸,且occ==1的vbox
  6. 调整尺寸过滤的阈值,使最终的总boxes里,两类样本数量接近。

剔除后,验证集acc在85左右就不能提升了,loss也很高。另外一个使用项目场景的图片训练的人脸识别模型,效果就非常好,实际使用到项目时,还是以项目场景的图片作训练效果最好,同时要剔除那些可能存在干扰的项。

输出模型

yolo模型的输入图片像素需要为32的倍数。采用192*192,384*384等分辨率freeze模型。较小的输入图像速度会快很多,相较之下会损失检测框精度,最主要的是画面中较小目标的识别能力。因此输入图像分辨率也是根据实际情况来权衡。

paddle - crowdHuman数据集训练人体识别模型_第1张图片

你可能感兴趣的:(机器学习)