目标检测之数据标注

标签: 无 分类: 机器学习 创建时间:2024-09-04 04:05:35 更新时间:2024-10-31 11:33:29

1.前言

做数据预测,首先要做的就是数据标注。

  • VOC标签格式,保存为xml文件。
  • yolo标签格式,保存为txt文件。
  • createML标签格式,保存为json格式。
参考文章:
【1】.【YOLO】YOLOv8训练自定义数据集(4种方式) images 下包含 train、val 文件夹,这两个文件夹下包含此次需要的 图片信息,labels 下包含 train、val 文件夹,这两个文件夹下包含此次需要的 对应图片的标注信息,test_images 下包含的是提供测试的数据集。模型训练(四种方式)1.参数重写;2.重写配置文件;3.python命令;4.python文件调用
【2】.YOLOv8制作自定义数据集并训练 我根据这篇文章进行了测试:1、建立相应文件夹;2、下载图片;3、为图片打标签;4.按比例移动自定义数据集中的内容;5.按比例移动自定义数据集中的内容;6.在文件夹中添加yaml文件。
【3】.yolov8-pytorch 这是一个yolov8-pytorch的仓库,可以用于训练自己的数据集。
【4】.15个值得推荐的开源免费图像标注工具 1.Makesense.ai;2.Labelme;3.Xtreme1;4.Label Studio;5.LOST;6.CVAT;7.Gromit-MPX;8.MyVision;9.LabelImg;10.Coco Annotator;11.Universal Data Tool;12.RectLabel;13.OpenLabeling;14.bbox-visualizer;15.PixelAnnotationTool。

2.数据收集

1.工作目的:准备AI训练用的图片,后期还需要进行数据标注,主要就是画矩形框并标明类别。

2.工作目标:尽可能多的收集各种问题类型的图片,比如:秸秆焚烧、裸土未覆盖等。

3.数据来源:可以从网上下载,也可以从历史视频中截取。在使用历史视频中的图片的时候,可以借助播放器的连续快照功能进行截图。

4.数据说明:

  • 一张图片上可以有一类或者多类问题;
  • 视频截取图片应从不同角度截图,远景近景等;
  • 每类图片最好有1000+张,多多益善;
  • 图片后缀应为.jpg;
  • 图片命名应为英文+数字,可用拼音代替,可按类别进行递增编号,方便查找;
  • 数据尺寸暂时不做要求
  • 图片中要包含多种要素,不能只有一个物体,比如整个框都是一个待检测的物体。
参考文章:
【3】.yolov8数据集图片大小 对于基础模型 YOLOv8-s,推荐分辨率是640x640或者更小。
【4】.yolov8目标检测的图片输入尺寸及预处理问题 1.保持图像的宽高比,将图像缩放到模型的输入尺寸(例如640x640)中较短的一边。2.对缩放后的图像进行填充,以达到所需的输入尺寸,通常填充的是图像的右侧和底部。3.对缩放后的图像进行填充,以达到所需的输入尺寸,通常填充的是图像的右侧和底部。

3.视频数据

如何从视频中获取大量数据,首先就要将视频转为图片,可以采用人工截图的方式,另外还可以使用程序自动处理。
(1)ffmpeg

1
2
3
4
5
## ffmpeg -i 视频 -r 每秒帧数 -q:v 图片质量参数 -f 图片命名格式
ffmpeg -i "video.mp4" -r 1 -q:v 2 -f image2 vid_%d.jpeg

# 保持宽高比
ffmpeg -i "video.mp4" -vf scale = 320:-1 output_320.png

(2)这里提供了一个视频文件抽帧的代码,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import cv2

def main(source: str, s: int = 60) -> None:
"""
:param source: 视频文件
:param s: 抽帧间隔, 默认每隔60帧保存一帧
:return:
"""
video = cv2.VideoCapture(source)
frame_num = 0
success, frame = video.read()
while success:
if frame_num % s == 0:
cv2.imwrite(f"./images/{frame_num // s}.png", frame)
success, frame = video.read()
frame_num += 1
video.release()
cv2.destroyAllWindows()


if __name__ == '__main__':
main('./videos/sample.mp4')
参考文章:
【1】.关于如何将 MP4 转换为 JPG 的详细说明 [已解决] 使用 Vidmore 视频转换器将 MP4 转换为 JPG,它具有连续快照功能,可以完美获取所有喜爱的场景。使用 VLC 将 MP4 转换为 JPG。
【2】.MP4转JPG - 在线转换图像文件
【3】.视频标注已上线,支持视频分类、多目标检测|ModelWhale 版本更新 ModelWhale这个工具好像包含视频标注,但是需要钱。
【4】.十个最常用深度学习图像/视频数据标注工具
【5】.Windows下 ffmpeg + labelImg 提取视频帧 得到图片集 并 标注图片 来 构造数据集 安装了 ffmpeg ,然后使用ffmpeg进行了视频截取,截取之后,然后对产生的文件进行了标注。
【6】.利用FFmpeg将视频按帧截取保存为图片 -r: 指定抽取的帧 即从视频中每秒抽取的图片数量 5:代表每秒抽取5帧
【7】.FFMPEG获取视频关键帧并保存成jpg图像 这里还提供了c代码,提取I帧
1
ffmpeg -i input.mp4 -an -vf select='eq(pict_type\,I)' -vsync 2 -s 720*480 -f image2  dstPath/image-%03d.jpg

【8】.FFmpeg 实用命令
【9】.ffmpeg缩放视频尺寸 这里使用 scale 进行了视频缩放。1.简单重新缩放,scale = 320:240。2.保持宽高比,scale = 320:-1。3.使用变量,scale = iw * 2:ih,iw =输入宽度,ih =输入高度。4.指定缩放算法,-sws_flags选项指定用于调整大小的算法。

4.建立文件夹

建立文件夹如下,images 文件夹下存放全部待标注图片,classes.txt里面写入需要进行标注的分类,一个行一个类,比如:汽车、狗、猫

1
2
3
4
labeldata
├─ images
├─ labels
├─ classes.txt

5.标注工具

借助于标注工具,可以进行图像标注,常用的标注工具有:labelimg、VoTT、Label Studio、Make Sense、CVAT,我分别使用了 labelimg、Label Studio和CVAT,解决了很多的问题,最后我选择了 Label Studio进行标注。

6.标注规范

  • (1)标注框的形状和大小
    对于不同大小的物体,标注框应完全包含住物体。并且标注框的形状尽可能接近物体形状。

  • (2)标注框的位置和方向
    标注框尽可能地包围目标物体,而且标注框的位置和方向应标与实际场景中的位置和方向一致。

  • (3)标签的准确性和唯一性
    每个目标物体应尽可能地被正确地标注,并且标注的标签应该与目标物体相对应。

  • (4)去除冗余信息
    在标注数据时,应该去除冗余的信息,例如背景重复的物体等,以提高目标检测算法的准确性和效率。

  • (5)数据集的平衡和扩充
    对于不同类别的目标物体应该平衡数据集的数量和分布,避免出现类别不平衡的情况。同时,可以通过数据扩充技术,例如翻转、旋转等操作,增加数据集的数量和多样性。

  • (6)人眼难以分辨的不要标
    对于人眼难以分辨的目标,可以不进行标注,避免误导模型

  • (7)不框规则
    图像模糊不清、太暗、曝光过度或不符合项目特殊规则的不框

  • (8)重叠规则
    当两个目标物体有重叠时,只要不是遮挡超过一半的就可以框。允许两个框有重叠的部分,这样模型可以学会处理重叠情况

参考文章:
【1】.在目标检测的图框标注中注意一下几点 1.标注框的形状和大小.2.标注框的位置和方向.3.标签的准确性和唯一性。4.去除冗余信息。5.数据集的平衡和扩充
【2】.目标检测标注原则 标注方框大小合适、标注方框位置合适、需要丰富多视角的素材、目标被遮挡也要标注、小目标也不能漏掉、人眼分不清是啥的不要标
【3】.目标检测的标注注意事项 通用规则:1.贴边规则;2.重叠规则;3.独立规则;4.不框规则;5.边界检查;6.小目标规则;
【4】.自训练数据集打标签注意事项及使用工具推荐 打标签规则:1.标签一一对应:每个数据集的标签标号要一致,否则会混淆。2.贴边规则:标注框需紧贴目标物体的边缘进行画框标注,不可框小或框大。3.目标被遮挡也要标注:即使目标物体被其他物体遮挡,也需要进行标注。4.人眼难以分辨的不要标:对于人眼难以分辨的目标,可以不进行标注,避免误导模型。5.重叠规则:当两个目标物体有重叠时,只要不是遮挡超过一半的就可以框。允许两个框有重叠的部分,这样模型可以学会处理重叠情况。6.独立规则:每一个目标物体均需要单独标框。7.不框规则:图像模糊不清、太暗、曝光过度或不符合项目特殊规则的不框。8.边界检查:确保框坐标不在图像边界上,防止载入数据或数据扩展时出现越界报错。9.小目标规则:对于不同算法对小目标的检测效果不同,但只要人眼能分清,都应该标出来。根据算法需求,决定是否启用这些样本参与训练。10.小于10X10或20X20像素的目标不方便标记可以忽略。11.对于边界模糊、连片处理,标为一个样本框。12.对于模糊、遮挡、有拖影的样本,最好单独建立样本库,有选择地启用。13.宽高比极端不是好样本:过长的宽高比可能会影响模型的识别效果,因此需要特别注意。
【5】.目标检测工作经验(1)–数据标注时的一些小技巧1(工作经验) 1.数据采集部分。2.数据标注部分:遮挡对象是否要标注、模糊对象是否要标注、只有一半大小的对象是否要标注、大目标包含小目标,大目标是否要标注、标注时标签的确定;一定要提前确定好,不然会做很多重复功。使用YOLO V5做多目标检测的自动标注。在单目标跟踪上面,我们使用了SiamRPN++做我们单目标跟踪的自动标注工具。
【6】.目标检测任务的标注标准(以火焰和烟雾的数据集标注为例) 1.容易标注的图片 注意 标注的边框在目标外,不要压线。2.小于10X10或者20X20像素的目标不方便标记可以忽略。3.文件命名保持在6个字符以上。4.宽高比 极端不是好样本。5.对与边界模糊、连片的处理。6.火焰的倒影之类的具备特征的也算是火焰,这种有明显间隔的可以算多个。7.对于模糊、遮挡、有拖影的样本 最好单独建立样本库,有选择的启用。
【7】.数据标注技能分享丨图像标注规范及注意事项 图像获取->图像预处理->图像标注->结果输出
小额赞助
本人提供免费与付费咨询服务,感谢您的支持!赞助请发邮件通知,方便公布您的善意!
**光 3.01 元
Sun 3.00 元
bibichuan 3.00 元
微信公众号
广告位
诚心邀请广大金主爸爸洽谈合作
每日一省
isNaN 和 Number.isNaN 函数的区别?

1.函数 isNaN 接收参数后,会尝试将这个参数转换为数值,任何不能被转换为数值的的值都会返回 true,因此非数字值传入也会返回 true ,会影响 NaN 的判断。

2.函数 Number.isNaN 会首先判断传入参数是否为数字,如果是数字再继续判断是否为 NaN ,不会进行数据类型的转换,这种方法对于 NaN 的判断更为准确。

每日二省
为什么0.1+0.2 ! == 0.3,如何让其相等?

一个直接的解决方法就是设置一个误差范围,通常称为“机器精度”。对JavaScript来说,这个值通常为2-52,在ES6中,提供了Number.EPSILON属性,而它的值就是2-52,只要判断0.1+0.2-0.3是否小于Number.EPSILON,如果小于,就可以判断为0.1+0.2 ===0.3。

每日三省
== 操作符的强制类型转换规则?

1.首先会判断两者类型是否**相同,**相同的话就比较两者的大小。

2.类型不相同的话,就会进行类型转换。

3.会先判断是否在对比 null 和 undefined,是的话就会返回 true。

4.判断两者类型是否为 string 和 number,是的话就会将字符串转换为 number。

5.判断其中一方是否为 boolean,是的话就会把 boolean 转为 number 再进行判断。

6.判断其中一方是否为 object 且另一方为 string、number 或者 symbol,是的话就会把 object 转为原始类型再进行判断。

每日英语
Happiness is time precipitation, smile is the lonely sad.
幸福是年华的沉淀,微笑是寂寞的悲伤。