目标检测工具二次开发
技术文档
前言
- WJ项目期间密集的做RGB和IR人头、人体、车目标检测任务,暴露出许多问题,特此梳理已有工具和问题,便于确定日后开发工作。
二次开发功能需求
格式转换(内部格式统称Hik格式):具体的COCO\Hik\YOLO格式需要包括的文件详见此文档尾部
- COCO2Hik
- YOLO2Hik
- Hik2COCO
- Hik2YOLO
数据增强
- 人体+人头XX背景增强
- 功能描述:将人体框内图片贴在要增强的背景图上,并将人体和人头标签(YOLO格式)进行相应转换
- 避坑指南:
- 注意拼接图片时, 人头不要飘在天空上,很诡异。
- Crowdhuman原始框出界:由于Crowdhuman有一类人体框是“全身框”,被遮挡或者在图像边缘的人体即使没显示出来,标注人员也会“幻想” 出全身框的大小,因此,部分框会出界。
- 人头框出界:
- 第一种出界:此增强算法逻辑是选择一个人体框,然后找该人体框内的人头框,部分人头框会超出人体框范围导致出界,此时需要根据人头框与人体框重叠面积对人头框进行过滤筛选。
- 第二种出界:由于裁剪的人体框会在高度上随机裁剪一下,将下半身随机按比例裁剪掉,此时,会出现位于下半身的人头框出界,这种情况也需要做出界处理。
- 标签随尺寸缩放变化:由于人体框沿高度裁剪,YOLO格式的中心点会随着高度变化而相应改变。
- 贴图
- 重叠:裁剪下来的人体框在贴到背景图上时,会随机生成目标点坐标,注意贴多张图时是否与前一张图重叠
- 人体框和背景图尺寸适配问题:有可能出现人体框相对于背景图尺寸过大或过小问题,需要相应对人体框图片做resize,在做resize的同时,记得对人体和人头框的标签相应调整
- 人头标签解析
- 由于人头标签和人体标签都是相对于原始图片的坐标,在贴图时,会对人体标签随机生成中心点坐标,此时人体标签中心点坐标会改变成相对于背景图的坐标;假如人头中心点在贴图过程中依旧使用相对于原始图片坐标,在贴图时则会无法解析相对于背景图的新标签。因此,在裁剪时,记录的人头的YOLO格式的中心点坐标替换成与人体框中心点的相对横纵坐标距离(在原图上),在贴图时,由于人体框会缩放,人头的标签要对应解析。
- 质检:需要手动查看生成图片中人头和背景的相对大小分布,是否与想要的数据一致。
- 人头XX背景增强
- 功能描述:将人头图片贴在要增强的背景图上,并将人头标签进行相应转换
- 避坑指南:与上述踩坑的点差不多
- 注意拼接图片时, 人头不要飘在天空上,很诡异
- Crowdhuman原始框出界
- 贴图多图重叠问题
- 质检
- 可视化分析
- 画框:将标签(类别、分数)画在对应图片上
- 画框可选择虚线、实线:对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’退出。
- 在线查看:为上述每一个可视化函数提供在线查看功能
- 对图片则逐张查看(按任意键跳转下一张),对视频则自动在线播放。
- 离线保存:为上述每一个可视化函数提供离线保存功能
- 数值分析
- 数据集大中小目标数量分布
- 按原图中目标框面积(小于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
- 模型参数量打印
- 其他
- 数据集下载
- 数据集合并
数据集格式
- 目标:
- 确定COCO\YOLO数据集发布时的格式,固定下来,转换代码直接一键生成,用于数据集发布。
- 确定内部统一的标签格式和文件组织结构,方便后续可视化代码开发。
内部统一Hik格式(待定)
COCO数据集格式
tdlp_dataset
| -- images:存放所有图片
| -- class.names:标签种类,一行一个
| -- annotations:存放标签文件
| -- train.json:存储训练集标签
| -- val.json:存储验证集标签
| -- (option)test.json:存储测试集标签
{
"images": [image], # images数组元素的数量等于划入训练集/验证集/测试集的图片的数量
"categories": [category] # categories数组元素的数量等于class.names的行数
"annotations": [annotation] # annotations数组元素的数量等于训练集/验证集/测试集中bounding box的数量
}
{
"id":int, # 图片id
"file_name": string, # 图片的名称,非路径
"height":float, # 图片高度
"width":float,# 图片宽度
}
{
"id":int, # 种类id
"name": string, # 种类名称
"supercategory":str, # 父类名称,若无则为自身名称
}
{
"id":int, # bbox id
"image_id": int, # bbbox所在图片的id
"category_id":int # bbox的标签种类id
"segmentation":RLE or [polygon],# must have,检测任务时为空
"area": float # 标注区域的面积,若矩形框则是高乘宽
"bbox": [x,y,width,height] # x,y是bbox的左上标
"iscrowd": 0 or 1, # iscrowd=0表示单个对象,segmentation是polygon格式;iscrowd=1表示一组对象,segmentation是RLE格式
}
YOLO数据集格式
| -- head_RGB
| -- images
| -- 0000001.jpg # 图片,或者其他格式 .png .jpeg ...
| -- 0000001.txt # 标签
| -- 0000002.jpg # 图片
| -- 0000002.txt # 标签
| -- ...
| -- train.txt # 存放训练集图片相对路径
| -- val.txt # 存放验证集图片相对路径
| -- test.txt # 存放测试集图片相对路径
| -- data.names # 存放类别名称,一类一行,序号与标签文件对应
| -- data.data # 存放数据集类别信息和路径
- 标签0000001.txt说明
- 格式是
class_id x_c y_c w h
, 分别表示类别标签序号 横坐标中心点 纵坐标中心点 宽 高
,其中x_c y_c w h
都是相对坐标,计算方式如:x_c = absolute_x_c/image_width, y_c = absolute_y_c/image_height
, w = absolute_w/image_width,h = absolute_h/image_height
。absolute_x_c
表示Bbox中心点横坐标绝对坐标,image_width
表示图像宽度,其他类推。
- train.txt/val.txt/test.txt 示例
./images/0000001.jpg # 相对head_RGB的路径
./images/0000002.jpg # 相对head_RGB的路径
...
head
person
classes = 2
train = /head_RGB/train.txt # 绝对路径
valid = /head_RGB/val.txt # 绝对路径
names = /head_RGB/data.names # 绝对路径
附件
二次开发功能需求
- 格式转换类
- COCO2YOLO
- VOC2YOLO
- CSV2YOLO
- YOLO2COCO
- YOLO2VOC
- COCO2VOC
- VOC2COCO
- 数据增强类
- 人体+人头XX背景增强
- 将人体框内图片贴在要增强的背景图上,并将人体和人头标签进行相应转换
- 人头XX背景增强
- 将人头图片贴在要增强的背景图上,并将人头标签进行相应转换
- 数据集基本类
- 模型结果处理
- 阈值筛选
- 批量生成不同阈值下的precision\recall
- 计算大中小目标AP
- 按原图中目标框面积(小于32*32为小目标,32*32-96*96为中目标,大于96*96为大目标)统计
- 可以使用COCOAPI
- 结果可视化
- 支持单/多模型可视化图片、视频、图片列表等输入;
- 显示框、类别、分数,同时显示groundtruth和detection;
- 支持在线显示+离线保存功能
- 筛选bad list
- 根据Groundtruth和Detection bbox的IOU重叠度筛选hard example(可以生成图片列表,用结果可视化工具进行可视化)
- 模型测速
- 模型参数量打印
- 其他