# track-anything **Repository Path**: Airsku/track-anything ## Basic Information - **Project Name**: track-anything - **Description**: 2023 cv project - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2023-05-02 - **Last Updated**: 2024-11-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # HED全局边缘检测 ## 一、成员列表 吴陈旺、魏银涛、谭斌钰 贡献声明: | | 贡献 | 贡献度 | | ------ | ------------- | ------ | | 吴陈旺 | 代码+项目报告 | 1/3 | | 魏银涛 | 代码+项目报告 | 1/3 | | 谭斌钰 | 代码+项目报告 | 1/3 | 视频地址:https://www.bilibili.com/video/BV1Vs4y1F7d4 ## 二、项目描述与目标 本项目实现了对图像的全局边缘检测。 ### 2.1 问题定义 各类图像中,由于不同物体对电磁波的反射特性不同,图像属性中的显著变化通常反映了属性的重要事件和变化。主要包括: Ÿ 深度上的不连续(物体处在不同的物平面上); Ÿ 表面方向不连续(如正方体的不同的两个面) Ÿ 物质属性变化(会导致光的反射系数不同) Ÿ 场景照明变化(阴影) 计算机视觉边缘检测的问题旨在识别图像中的边缘或轮廓,以便进行进一步的图像分析和处理。边缘通常代表着图像中不同区域之间的灰度值变化,是图像亮度或颜色发生显著变化的地方,通常表示物体边界的位置。利用灰度的变化信息检测物体边缘,可以得到物体的轮廓,以实现图像分割。通过准确地检测和提取图像的边缘,可以帮助计算机理解和分析图像内容,从而实现自动的视觉感知和智能决策。 ### 2.2 研究动机: 边缘检测的研究动机在于,边缘是计算机视觉应用中的一个关键图像特征,可用于目标检测、图像分割、物体识别等多种任务。边缘检测的研究动机主要包括以下几个方面: Ÿ 物体检测和分割:边缘信息对于提取物体的形状和轮廓非常重要。通过边缘检测可以实现对图像中物体的自动检测和分割,为后续的目标识别和跟踪提供准确的信息。 Ÿ 图像增强和去噪:边缘检测可以帮助提升图像的质量和清晰度,去除图像中的噪声和干扰。通过检测图像中的边缘,可以实现对图像的增强和去噪处理,提高图像的视觉效果和可读性。 Ÿ 视觉导航和场景理解:边缘检测可以用于视觉导航和场景理解,帮助计算机感知和理解周围环境。通过检测图像中的边缘,可以实现对道路、建筑物、物体等场景元素的识别和理解,为智能导航和场景分析提供基础。 Ÿ 图像分析和特征提取:边缘信息是图像中一种重要的特征,可以用于图像分析和特征提取。通过边缘检测可以提取图像中的边缘特征,并进一步用于图像匹配、分类和识别等任务。 ### 2.3 背景资料: 自然图像中检测边缘和物体边界的问题无论是对传统任务如视觉显著性、分割、物体检测/识别、跟踪和运动分析、医学影像、结构运动和三维重建,还是对现代应用如自动驾驶、移动计算和图像到文本分析等领域来说,都是基础且非常重要的。人们长期以来已经认识到,在自然图像中精确定位边缘涉及到不同的视觉感知层次。 计算边缘检测的历史非常丰富,我们在这里重点介绍了一些代表性的工作,它们已被证明具有重要的实际意义。广义上讲,这些工作可以分为几个类别: 早期开创性的方法,如Sobel检测器[1]、零交叉[2]和广泛采用的Canny检测器[3];基于精心设计的特征上的信息理论方法,如Statistical Edges[4]和Pb[5];基于学习的方法,仍然依赖于人工设计的特征,如BEL[6]、Sketch Tokens[7]和Structured Edges[8]。此外,最近出现了一股使用卷积神经网络的发展浪潮,强调了自动层次特征学习的重要性,其中包括N4-Fields[9]、DeepContour[10]、DeepEdge[11]和CSCNN[12]。在这次深度学习的爆发式发展之前,基于结构边缘的方法(通常简称为SE)[13]成为边缘检测中最受欢迎的系统之一,因为它在BSD500数据集上表现出了最先进的性能,而且它实际上具有非常高的速度(每秒处理2.5帧)。 ### 2.4 相关工作: 论文中开发了一种创新的边缘检测算法,成功解决了长期存在的视觉问题中的两个关键问题。这些问题包括:(1) 如何进行整体图像的训练和预测;(2) 如何实现多尺度和多层次的特征学习。在论文中,提出的方法被称为整体嵌套式边缘检测(HED),引入了一系列创新方法。基于深度学习、卷积神经网络和深度监督网络,强调了在边缘检测中考虑多个"层次"的重要性。HED能够自动学习到丰富的层次化表征,这对于解决边缘和物体边界检测中的模糊性问题至关重要。我们在著名的BSD500数据集上进行了论文中HED算法的复现。 本项目中的端到端的边缘检测系统,称为整体嵌套边缘检测(HED)。这个系统会自动学习丰富的层级特征类型,这些特征对于我们接近人类解决自然图像边缘和物体边界检测中的歧义非常关键。我们使用“整体”一词,因为尽管HED没有明确地对结构化输出进行建模,但它旨在以图像对图像的方式训练和预测边缘。而“嵌套”一词则强调了作为副输出产生的继承和逐渐优化的边缘图。我们的目的是展示每个预测所在路径对每个边缘图都是共同的,而后续的边缘图更加精炼。这种层级特征的集成学习与之前的多尺度方法不同,那些方法既没有自动学习,也没有层级连接的尺度空间边缘场。提供了一个示例图像以及人体主观的地面实况标注,以及由提出的HED边缘检测器产生的结果(包括各个层的副响应),以及不同尺度参数下Canny边缘检测器的结果。Canny边缘不仅在不同尺度上没有直接连接,而且还表现出空间偏移和不一致性。 提出的整体嵌套边缘检测器(HED)解决了两个关键问题:(1)受到全卷积神经网络的启发,使用整体图像训练和预测的方式进行图像到图像的分类(系统以图像为输入,直接生成边缘图像作为输出);(2)受深度监督网络[23]的启发,采用嵌套多尺度特征学习的方式,在早期分类结果中进行深层次的监督,以“引导”分类结果。我们发现这些底层技术的有利特性在HED中体现出准确性和计算效率的双重优势。 ### 2.5 我们的方法: 我们需要搭建论文中的网络结构用于边缘检测,即本文的题目Holistically-Nested Network(HED),并进行相关网络结构的修改。其中Holistically表示该算法试图训练一个image-to-image的网络;Nested则强调在生成的输出过程中通过不断的集成和学习得到更精确的边缘预测图的过程。 不同于论文中包含五个层级的特征提取架构的HED 模型,我们更改了相关结构和参数,并将其命名为LightHED。我们将五个层级压缩为两个层级,并同时加大训练的批次大小,实现了多图特征同步提取,这使得模型具有更好的泛化能力。我们做出修改的原因如下: - 由于硬件环境有限,若HED层级数较高,则需要巨大的时间开销与性能开销 - 在项目进行过程中,我们发现使用论文中层级较多的HED结构,其靠后的层级的输出效果不尽人意 - 使用网络较为复杂的HED模型结构以及较小的batch size进行训练很容易造成过拟合现象 - 经过我们的对比实验,我们发现经过上述修改之后,边缘检测测试效果与高层级HED测试效果差别微小,但训练所花费的时间开销大大降低。 在每个层级中,我们都使用 VGG Block 提取层级特征图,并使用层级特征图计算层级输出。最后使用1x1 卷积对两个层级输出进行融合,也就是在通道维度拼接两个层级的输出。 同时,在未来工作中,框架层级的选择值得我们深入思考。我们需要这个架构能有效地生成感知的多层次特征以捕捉边缘图的固有尺度的同时,防止由于网络结构过于复杂而造成的过拟合。 当从零开始训练这样深层神经网络的多个阶段时,可能会遇到训练的困难。论文中提到,VGGNet以其强大的深度(16个卷积层)、密度(步幅为1的卷积核)和多个阶段(五个步幅为2的下采样层)取得了最先进的性能。同时,对通用图像分类任务进行预训练的深度神经网络进行微调对低层边缘检测任务是有用的。因此,我们采用了VGGNet的架构,但做出了以下修改: (a)我们分别将副输出层连接到每个阶段的最后一个卷积层,即conv1 2、conv2 2、conv3 3、conv4 3、conv5 3。这些卷积层的感受野大小与相应的副输出层相同; (b)我们去掉了VGGNet的最后一个阶段,包括第5个池化层和所有全连接层。裁剪VGGNet的原因如下。首先,因为我们期望具有不同尺度的有意义的副输出,步幅为32的层会产生一个输出平面太小,导致插值预测图过于模糊,无法利用。其次,全连接层(即使重新转换为卷积层)的计算量很大,因此从pool5开始删除层可以显著降低训练和测试过程中的内存以及时间成本。我们最终的HED网络架构有5个阶段,步幅分别为1、2、4、8和16,并且具有不同的感受野大小,全部嵌套在VGGNet中。 #### 2.5.1 方法的具体细节: ##### **1.模型定义以及相关公式:** 训练集中共有N对数据: ![img](https://gitee.com/Airsku/track-anything/raw/master/assets/wps1.jpg) 在网络中,我们有M个侧向输出层。每个侧面输出层也与一个分类器相关联。 层也与一个分类器相关联,其中相应的权重如下所示: ![img](https://gitee.com/Airsku/track-anything/raw/master/assets/wps2.jpg) 目标函数如下所示: ![img](https://gitee.com/Airsku/track-anything/raw/master/assets/wps3.jpg) 其中![img](https://gitee.com/Airsku/track-anything/raw/master/assets/wps4.jpg)表示类平衡的交叉熵损失函数,由于对于典型的自然图像,边缘/非边缘像素的分布存在严重的偏差:地面真实值中的90%是非边缘。所以论文中采用了一种更简单的策略来自动平衡正类别和负类别之间的损失,在每个像素项上引入一个类别平衡权重β。索引j遍历图像X的空间维度。然后使用这个类别平衡权重作为一个简单的方法来抵消边缘和非边缘之间的不平衡。具体地,论文中定义了以下的类别平衡交叉熵损失函数: ![img](https://gitee.com/Airsku/track-anything/raw/master/assets/wps5.jpg) 其中我们在每个像素项的基础上引入一个类平衡权重β ![img](https://gitee.com/Airsku/track-anything/raw/master/assets/wps6.jpg) ![img](https://gitee.com/Airsku/track-anything/raw/master/assets/wps7.jpg) 其中![img](https://gitee.com/Airsku/track-anything/raw/master/assets/wps8.jpg)表示边缘的真实标签集,![img](https://gitee.com/Airsku/track-anything/raw/master/assets/wps9.jpg)表示非边缘的真实标签集。为了直接利用边际输出预测,我们在网络中加入了一个 "加权融合 "层,并在训练中同时对融合权重进行学习。我们的损失融合层的损失函数为如下所示: ![img](https://gitee.com/Airsku/track-anything/raw/master/assets/wps10.jpg) 其中 ![img](https://gitee.com/Airsku/track-anything/raw/master/assets/wps11.jpg) 函数Dist()是融合后的预测结果与真实标签图之间的距离,我们将其设定为交叉熵损失。结合上述内容,我们通过标准的(反向传播)随机梯度下降法来最小化以下目标函数: ![img](https://gitee.com/Airsku/track-anything/raw/master/assets/wps12.jpg) 测试阶段 在测试过程中,给定图像X,我们获得边缘图的预测,从侧面输出层和加权融合层: ![img](https://gitee.com/Airsku/track-anything/raw/master/assets/wps13.jpg) ##### 2.**项目实验步骤:** 1) 项目环境搭建 主要需要搭建torch环境和opencv环境 2) 载入数据集 我们定义了如下的类来进行数据集的载入 ![img](https://gitee.com/Airsku/track-anything/raw/master/assets/wps14.jpg) 3) 定义网络结构 我们的网络结构如下所示: ![img](https://gitee.com/Airsku/track-anything/raw/master/assets/wps15.jpg) 4) 定义损失函数 我们定义的损失函数如下所示 ![img](https://gitee.com/Airsku/track-anything/raw/master/assets/wps16.jpg) 5) 加载预训练模型参数 预训练VGG网络结构如下所示 ![img](https://gitee.com/Airsku/track-anything/raw/master/assets/wps17.jpg) 6) 模型训练与保存 7) 模型预测 ##### 3.图表: 不同的多尺度深度学习架构配置的示意图如下: (a) 多流架构:使用多个并行的网络流,每个流负责处理不同尺度的输入。 (b) 跨层连接网络架构:通过添加跳跃连接,将不同层的特征图进行组合和融合。 (c) 单一模型多尺度输入:在一个网络模型上同时输入多个尺度的图像,通过共享参数进行特征提取和预测。 (d) 不同网络的分别训练:针对不同尺度的输入数据,分别训练不同的网络模型。 (e) 论文中所提出的全面嵌套架构:在该架构中,添加了多个侧面输出,用于预测不同尺度的边缘。 ![img](https://gitee.com/Airsku/track-anything/raw/master/assets/wps18.jpg) 以下是用于边缘检测的网络结构图。在这个网络结构中,侧向输出层被插入到卷积层之后。深度监督被施加在每个侧向输出层上,以引导侧向输出对边缘进行预测。通过施加深度监督,引导侧向输出的边缘预测具有我们所需的特征。HED的输出是多尺度和多层次的,侧向输出的尺寸逐渐变小,而感受野的尺寸逐渐变大。此外,一个加权融合层被添加进来,以自动学习如何结合多个尺度的输出。整个网络经过多个误差传播路径进行训练。 ![img](https://gitee.com/Airsku/track-anything/raw/master/assets/wps19.jpg) #### 2.5.2 结果 ##### 1 项目结果: 论文复现结果: ![img](https://gitee.com/Airsku/track-anything/raw/master/assets/wps20.jpg) Ground true: ![img](https://gitee.com/Airsku/track-anything/raw/master/assets/wps21.jpg) ![img](https://gitee.com/Airsku/track-anything/raw/master/assets/wps22.jpg) Ground true: ![img](https://gitee.com/Airsku/track-anything/raw/master/assets/wps23.jpg) 收敛性效果需要多轮训练才能提高 LightHED:在测试数据集上的样例输出 ![img](https://gitee.com/Airsku/track-anything/raw/master/assets/wps24.png) ### 2.6 总结和讨论 在本次论文复现项目中,我们基于卷积神经网络的边缘检测系统HED的基础上进行了修改,并通过采用预训练的修剪过的VGGNet来初始化我们的网络结构和参数。在我们的对比试验中,发现层级较多的HED网络结构存在训练开销较大、容易过拟合等缺点,我们在其基础上进行了修改,形成了LightHED。该系统在自然图像上的边缘检测展示出了较为完善的性能。此方法使用多尺度和多级别的视觉响应策略,在图像到图像的学习方面表现出了较好的结果。 #### 2.6.2 结论 在本次论文复现项目中,我们论文中提出的基于卷积神经网络的边缘检测系统HED进行了实现,并对网络结构以及相关参数进行了合理的修改。我们采用预训练的修剪过的VGGNet来初始化网络结构和参数。该系统在自然图像上展示了较为先进的边缘检测性能。此结构使用了多尺度和多级别的视觉响应策略,在图像到图像的学习方面取得了良好的结果。 ### 参考文献 [1] Kittler J. On the accuracy of the Sobel edge detector[J]. Image and Vision Computing, 1983, 1(1): 37-42. [2] Lee C Y, Xie S, Gallagher P, et al. Deeply-supervised nets[C]//Artificial intelligence and statistics. PMLR, 2015: 562-570. [3] Canny J. A computational approach to edge detection[J]. IEEE Transactions on pattern analysis and machine intelligence, 1986 (6): 679-698. [4] Konishi S, Yuille A L, Coughlan J M, et al. Statistical edge detection: Learning and evaluating edge cues[J]. IEEE Transactions on Pattern Analysis and Machine Intelligence, 2003, 25(1): 57-74. [5] Martin D R, Fowlkes C C, Malik J. Learning to detect natural image boundaries using local brightness, color, and texture cues[J]. IEEE transactions on pattern analysis and machine intelligence, 2004, 26(5): 530-549. [6] P. Dollar, Z. Tu, and S. Belongie. Supervised learning of edges and object boundaries. In CVPR, 2006. [7] J. J. Lim, C. L. Zitnick, and P. Dollar. Sketch tokens: A ´ learned mid-level representation for contour and object detection. In CVPR, 2013. 1, 7 [8] P. Dollar and C. L. Zitnick. Fast edge detection using struc- ´ tured forests. PAMI, 2015. 1, 2, 3, 6, 7, 8 [9] Y. Ganin and V. Lempitsky. N4-fields: Neural network nearest neighbor fields for image transforms. arXiv preprint arXiv:1406.6558, 2014. 1, 2, 3, 7 [10] W. Shen, X. Wang, Y. Wang, X. Bai, and Z. Zhang. Deepcontour: A deep convolutional feature learned by positivesharing loss for contour detection draft version. In CVPR, 2015. 1, 2, 6, 7 [11] G. Bertasius, J. Shi, and L. Torresani. Deepedge: A multiscale bifurcated deep network for top-down contour detection. In CVPR, 2015. 1, 2, 3, 5, 6, 7 [12] J.-J. Hwang and T.-L. Liu. Pixel-wise deep learning for contour detection. In ICLR, 2015. 1, 2, 4, 7 [13] P. Dollar and C. L. Zitnick. Fast edge detection using struc- ´ tured forests. PAMI, 2015. 1, 2, 3, 6, 7, 8 [14] Xie S, Tu Z. Holistically-nested edge detection[C]//Proceedings of the IEEE international conference on computer vision. 2015: 1395-1403. ## 三、成员分工 分工初步定为每个人都全面了解和实现项目,遇到问题再一起解决。同时,对于后续实现过程中,如遇到可以并行协同工作的部分,再进行具体的分工。 ## 四、所用工具和资源 初步预计使用pytorch实现。 ## 五、版本迭代 ### 截止 2023-6-29 - 模型基本调试训练完成,整体上实现了效果。 - 完成实验文档和视频制作。 #### 截止 2023-6-20 - 完成网络搭建,初步实现代码训练。 - 将代码进行模块化。 #### 截止 2023-6-13 - 实现数据集的加载。 - 简单搭建整体代码框架。