[关闭]
@wanghuijiao 2021-10-20T17:59:43.000000Z 字数 4273 阅读 614

目标检测工具二次开发

技术文档


前言

二次开发功能需求

  1. 格式转换(内部格式统称Hik格式):具体的COCO\Hik\YOLO格式需要包括的文件详见此文档尾部

    • COCO2Hik
    • YOLO2Hik
    • Hik2COCO
    • Hik2YOLO
  2. 数据增强

    • 人体+人头XX背景增强
      • 功能描述:将人体框内图片贴在要增强的背景图上,并将人体和人头标签(YOLO格式)进行相应转换
      • 避坑指南:
        • 注意拼接图片时, 人头不要飘在天空上,很诡异。
        • Crowdhuman原始框出界:由于Crowdhuman有一类人体框是“全身框”,被遮挡或者在图像边缘的人体即使没显示出来,标注人员也会“幻想” 出全身框的大小,因此,部分框会出界。
        • 人头框出界:
          • 第一种出界:此增强算法逻辑是选择一个人体框,然后找该人体框内的人头框,部分人头框会超出人体框范围导致出界,此时需要根据人头框与人体框重叠面积对人头框进行过滤筛选。
          • 第二种出界:由于裁剪的人体框会在高度上随机裁剪一下,将下半身随机按比例裁剪掉,此时,会出现位于下半身的人头框出界,这种情况也需要做出界处理。
        • 标签随尺寸缩放变化:由于人体框沿高度裁剪,YOLO格式的中心点会随着高度变化而相应改变。
        • 贴图
          • 重叠:裁剪下来的人体框在贴到背景图上时,会随机生成目标点坐标,注意贴多张图时是否与前一张图重叠
          • 人体框和背景图尺寸适配问题:有可能出现人体框相对于背景图尺寸过大或过小问题,需要相应对人体框图片做resize,在做resize的同时,记得对人体和人头框的标签相应调整
        • 人头标签解析
          • 由于人头标签和人体标签都是相对于原始图片的坐标,在贴图时,会对人体标签随机生成中心点坐标,此时人体标签中心点坐标会改变成相对于背景图的坐标;假如人头中心点在贴图过程中依旧使用相对于原始图片坐标,在贴图时则会无法解析相对于背景图的新标签。因此,在裁剪时,记录的人头的YOLO格式的中心点坐标替换成与人体框中心点的相对横纵坐标距离(在原图上),在贴图时,由于人体框会缩放,人头的标签要对应解析。
        • 质检:需要手动查看生成图片中人头和背景的相对大小分布,是否与想要的数据一致。
    • 人头XX背景增强
      • 功能描述:将人头图片贴在要增强的背景图上,并将人头标签进行相应转换
      • 避坑指南:与上述踩坑的点差不多
        • 注意拼接图片时, 人头不要飘在天空上,很诡异
        • Crowdhuman原始框出界
        • 贴图多图重叠问题
        • 质检
  3. 可视化分析
    • 画框:将标签(类别、分数)画在对应图片上
      • 画框可选择虚线、实线:对groundtruth bbox(GT)显示为实线,对detection bbox(DT)显示为虚线
      • 按类别随机选择颜色
      • 分数为0-1之间,小数点后保留两位
    • 单路图片、视频、图片列表等输入的一路标签(比如标签为GT或DT)可视化
      • 为单张图片、单个视频或单个图片列表文件(记录图片路径)将其标签可视化
    • 多路图片、视频、图片列表拼接(拼接多张图片)
      • 输入图片、视频已自带bbox,本函数只做拼接操作
      • 同时显示多张拼接后的图片、视频,比如左右拼接、上下拼接,并且与输入端做好对应,如图左表示第一路输入,图右表示第二路输入;
      • 最多支持4路图片\视频拼接
    • 可视化多路DT和GT结果(多路结果画在同一张图片上)
      • 支持在一张图上同时画多路DT, 并根据输入信号指定颜色,用于同时对比多个模型的预测结果。
      • 输入支持单张图片、图片列表、视频等
      • 用颜色区分不同输入的DT。
      • 对于GT和DT可用实线、虚线区分。
      • 最多支持3路DT。当输入GT或部分DT为空时,不画对应的框即可。
    • 筛选bad/good list
      • 根据GT和DT的IOU重叠度自动筛选
      • 逐张可视化GT和DT,用于模型结果可视化分析,支持手动筛选hard example:手动按's'保存当前帧,按任意键跳转下一张,按‘q’退出。
      • 仅显示一路GT标签,用于筛选数据集,输出用于训练或测试的good list,要求逐张可视化,手动按's'保存当前帧,按任意键跳转下一张,按‘q’退出。
    • 在线查看:为上述每一个可视化函数提供在线查看功能
      • 对图片则逐张查看(按任意键跳转下一张),对视频则自动在线播放。
    • 离线保存:为上述每一个可视化函数提供离线保存功能
  4. 数值分析
    • 数据集大中小目标数量分布
      • 按原图中目标框面积(小于32*32为小目标,32*32-96*96为中目标,大于96*96为大目标)统计
    • 数据集各类别图片/标签数量分布
      • 按类别统计图片和标签数量分布
    • 模型阈值筛选
      • 批量生成不同阈值下的precision\recall
      • 将结果整理并输出保存在文档中
    • 计算大中小目标AP
      • 按原图中目标框面积(小于32*32为小目标,32*32-96*96为中目标,大于96*96为大目标)统计,可使用COCOAPI
    • 筛选bad list结果分析
      • 对可视化的筛选bad/good list结果进行分析
    • 模型测速FPS
    • 模型参数量打印
    • 其他
    • 数据集下载
      • 支持大数据集的目标类别下载和小数据集自动下载
    • 数据集合并
      • 新增数据到旧版本中,合并两种数据,形成新版本

数据集格式

内部统一Hik格式(待定)

COCO数据集格式

  1. tdlp_dataset
  2. | -- images:存放所有图片
  3. | -- class.names:标签种类,一行一个
  4. | -- annotations:存放标签文件
  5. | -- train.json:存储训练集标签
  6. | -- val.json:存储验证集标签
  7. | -- (option)test.json:存储测试集标签
  1. "images": [image], # images数组元素的数量等于划入训练集/验证集/测试集的图片的数量
  2. "categories": [category] # categories数组元素的数量等于class.names的行数
  3. "annotations": [annotation] # annotations数组元素的数量等于训练集/验证集/测试集中bounding box的数量
  1. "id":int, # 图片id
  2. "file_name": string, # 图片的名称,非路径
  3. "height":float, # 图片高度
  4. "width":float,# 图片宽度
  1. "id":int, # 种类id
  2. "name": string, # 种类名称
  3. "supercategory":str, # 父类名称,若无则为自身名称
  4. }
  1. {
  2. "id":int, # bbox id
  3. "image_id": int, # bbbox所在图片的id
  4. "category_id":int # bbox的标签种类id
  5. "segmentation":RLE or [polygon],# must have,检测任务时为空
  6. "area": float # 标注区域的面积,若矩形框则是高乘宽
  7. "bbox": [x,y,width,height] # x,y是bbox的左上标
  8. "iscrowd": 0 or 1, # iscrowd=0表示单个对象,segmentation是polygon格式;iscrowd=1表示一组对象,segmentation是RLE格式

YOLO数据集格式

  1. | -- head_RGB
  2. | -- images
  3. | -- 0000001.jpg # 图片,或者其他格式 .png .jpeg ...
  4. | -- 0000001.txt # 标签
  5. | -- 0000002.jpg # 图片
  6. | -- 0000002.txt # 标签
  7. | -- ...
  8. | -- train.txt # 存放训练集图片相对路径
  9. | -- val.txt # 存放验证集图片相对路径
  10. | -- test.txt # 存放测试集图片相对路径
  11. | -- data.names # 存放类别名称,一类一行,序号与标签文件对应
  12. | -- data.data # 存放数据集类别信息和路径
  1. ./images/0000001.jpg # 相对head_RGB的路径
  2. ./images/0000002.jpg # 相对head_RGB的路径
  3. ...
  1. head
  2. person
  1. classes = 2
  2. train = /head_RGB/train.txt # 绝对路径
  3. valid = /head_RGB/val.txt # 绝对路径
  4. names = /head_RGB/data.names # 绝对路径

附件

二次开发功能需求

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注