41 物体检测和数据集【动手学深度学习v2】

物体检测和数据集
- object detection / object recognition
目标检测和图片分类的区别
图片分类:
- 在图像分类任务中,假设图像中只有一个主要物体对象,目标是识别出这个主要物体对象的类别(其他东西相对来说就不那么重要了)
目标检测:
- 在目标检测任务中,一张图像里往往不只一个感兴趣的物体对象,目标不仅仅是识别图像中所有感兴趣的物体(找出所有感兴趣的物体),还要找出它们在图像中所在的具体位置(通过方框来表示)
目标检测相对于图片分类来讲所做的工作更多,它需要找出所有感兴趣的物体,当图片中只有一个物体时,可以将目标检测看成是图像分类,把图像中最主要的物体当作是图片的类别,但是当图片中有多个物体的时候,目标检测不仅能将所有的物体都检测出来,还能将他们所在的位置标注出来,所以目标检测的应用场景相对来讲更多
目标检测的应用
- 无人驾驶:通过识别拍摄到的视频图像中的车辆、行人、道路和障碍物的位置来规划行进路线
- 无人售后:通过目标检测识别客户选购的物品
- 机器人通常通过目标检测来检测感兴趣的目标
- 安防领域使用目标检测来检测异常目标,比如歹徒或者炸弹
边缘框(boundingbox)
物体检测 P1 - 03:30
- 在目标检测中,通常使用边界框来描述对象的空间位置
- 边界框是矩形的
边缘框可以用四个数字来定义(两种常用的表示方法)
- (左上x,左上y,右下x,右下y)
- (中心x,中心y,宽,高)
正方向
- 对于 x 轴来说,向右为 x 轴的正方向,即 x 的值从左到右依次增大
- 对于 y 轴来说,向下为 y 轴的正方向,y 的值从上到下依次增大
目标检测数据集
- 目标检测领域没有像MNIST和Fashion-MNIST那样的小数据集
- 目标检测的数据集通常来说比图片分类的数据集小很多,因为标注的成本很高
- 对于图片分类来说,最简单的就是给定一个CSV文件(图片与标号一一对应)或者是给定一个文件夹(每个类对应一个子文件夹,对应标号的图片放在子文件夹下)
- 对于目标检测来说就不能简单的用文件夹的形式,因为一张图片中可能存在多个类,所以就不能放在子文件夹中,所以通常来说目标检测的数据集的标号需要额外存储
- 假设使用文本文件存储的话,每一行表示一个物体,每一行分别由图片文件名(因为一张图片中可能有多个物体,所以同一个文件名可能会出现多次)、物体类别(标号)、边缘框(图片中物体的位置)组成,每一行一共有6(1+1+4)个值
COCO数据集
- 目标检测中比较常见的数据集,类似于Imagenet在图片分类中的地位
- 访问地址:https://cocodataset.org/#home
- COCO数据集中有 80 个类别,330k 图片,1.5M 物体(每张图片中有多个物体)
数据集的读取
读取小批量的时候,图像的小批量的形状为(批量大小、通道数、高度、宽度),与图像分类任务中的相同
标签的小批量的形状为(批量大小,m,5)
- m:数据集的任何图像中边界框可能出现的最大数量
- 5:每个边界框的标签将被长度为 5 的数组表示:数组的第一个元素是边界框中对象的类别,其中 -1 表示用于填充的非法边界框;数组的其余 4 个元素是边界框左上角和右下角(x,y)坐标值
小批量计算虽然高效,但是要求每张图像含有相同数量的边界框,以便放在同一个批量中
- 通常图像可能拥有不同数量个边界框,所以,在达到 m 之前,边界框少于 m 的图像将被非法边界框填充
总结
- 物体检测不仅能够识别图片所有感兴趣的物体的类别,还能够识别他们的位置,该位置通常由矩形边框表示
- 位置通常用边缘框表示(通常有四个数字)
- 用于目标检测的数据加载与图像分类的数据加载类似,但是,在目标检测中,标签还包含真实边界框的信息,它不出现在图像分类中
Q&A
- 1、老师你好,请问想从事工业计算机视觉方向除了深度学习、C++、python等代码能力、传统计算机视觉方法外,还有哪些知识需要掌握?QA P4 - 00:00
- 2、请问一下老师yolo的anchor box具体是怎么发挥作用的?QA P4 - 00:46
- 3、老师,目标检测会是自动驾驶采用的主流方案吗?目前业界的精度最高达到了多少呢?QA P4 - 00:56
- 4、老师,有哪些批量标注软件/平台值得推荐?QA P4 - 02:56
- 5、请老师讲解一下show_boxes(...,color=['w'])中最后一个参数color=['w']QA P4 - 05:18
- 6、老师,如果在工业检测中数据集非常小(近百张),除了进行数据增强外,还有什么更好的方法吗?QA P4 - 05:41
- 7、老师,现在用深度学习做这种三维视觉方面的东西怎么样,我看像SLAM之类的大都是C++做的QA P4 - 06:48
- 8、batch([0][0:10].permute(0,2,3,1))/255,您能再解释一下这句话如何理解吗?QA P4 - 09:17
- 9、请问老师能不能录个小视频简单宏观介绍一下无人车用到的技术和现状呢?QA P4 - 09:38
----end----
其他参考:
1、《动手学深度学习》,课程安排,https://courses.d2l.ai/zh-v2/assets/pdfs/part-2_7.pdf
2、《动手学深度学习》,https://zh-v2.d2l.ai/chapter_computer-vision/bounding-box.html