深度网络模型压缩综述:参数稀疏化促进性能优化与硬件部署

需积分: 0 0 下载量 39 浏览量 更新于2024-01-01 收藏 1.18MB PDF 举报
深度学习在近年来在计算机视觉任务上不断刷新传统模型的性能,已逐渐成为研究热点。然而,深度模型尽管性能强大,但由于参数数量庞大、存储和计算代价高,依然难以部署在受限的硬件平台上,比如移动设备。在这种情况下,深度网络模型的压缩成为一个备受关注的问题,其目的是减少模型的参数数量和计算量,以便在资源受限的环境中进行有效部署。 本综述对国内外学者在深度网络模型压缩上取得的成果进行了概述。首先,我们探讨了深度网络模型压缩的背景和意义,介绍了当前深度学习模型的挑战和压缩的必要性。接着,我们系统地总结了深度网络模型压缩的方法和技术,包括参数量化、剪枝、知识蒸馏、低秩近似等。其中,参数量化通过减少参数的位数来降低模型的存储开销和计算开销;剪枝通过去除模型中的冗余参数和连接来减小模型的尺寸;知识蒸馏通过从一个复杂模型中提取知识,然后将该知识迁移至一个简化模型中;低秩近似通过使用低秩矩阵来近似原模型的权重矩阵,以降低模型的复杂度和存储开销。 接着,我们对深度网络模型压缩的评估方法进行了概述。由于模型压缩可能会对模型的性能产生一定的影响,因此评估压缩后模型的性能变得至关重要。我们介绍了静态评估和动态评估两种评估方法,并对它们进行了详细的分析和比较。 最后,我们探讨了深度网络模型压缩领域的研究趋势和未来挑战。在当前研究状况的基础上,我们提出了一些可能的研究方向,包括结合多种压缩方法的混合压缩方法、进一步提高压缩后模型的性能等。此外,我们也指出了模型压缩领域存在的一些挑战,比如如何在不影响模型性能的前提下实现更大幅度的压缩、模型压缩与硬件优化的协同设计等。 总的来说,深度网络模型压缩是一个备受关注的研究领域,通过对模型参数进行压缩,可以在一定程度上降低模型的存储开销和计算开销,从而实现在资源受限的硬件平台上进行有效部署的目的。我们相信随着该领域研究的不断深入,将会有更多的创新性方法和技术涌现,为深度学习模型的实际应用带来更多的可能性。

static int fread_frame_rate(play_para_t *p_para) { int average_count; if (p_para->frame_count < 0) { p_para->frame_count = 0; p_para->mread_frame_rate.last_frame_times = 0; } if (p_para->mread_frame_rate.last_frame_times == 0) { p_para->mread_frame_rate.last_frame_times = av_gettime(); p_para->mread_frame_rate.in_count = 0; } int normal_read_framerate = am_getconfig_int_def("media.amplayer.normal_read_framerate", 50); if (av_gettime() - p_para->mread_frame_rate.last_frame_times >= 200000) { p_para->mread_frame_rate.in_count++; p_para->mread_frame_rate.last_frame_times = av_gettime(); int in_count = p_para->mread_frame_rate.in_count; if (in_count <= READ_FRAME_RATE_TIMES) { p_para->mread_frame_rate.mread_frame_info[in_count-1].read_frame_count = p_para->frame_count; p_para->mread_frame_rate.mread_frame_info[in_count-1].read_frame_time = av_gettime(); } else { int i; for (i = 0; i < (READ_FRAME_RATE_TIMES-1); i++) { p_para->mread_frame_rate.mread_frame_info[i].read_frame_count = p_para->mread_frame_rate.mread_frame_info[i+1].read_frame_count; p_para->mread_frame_rate.mread_frame_info[i].read_frame_time = p_para->mread_frame_rate.mread_frame_info[i+1].read_frame_time; } p_para->mread_frame_rate.mread_frame_info[i].read_frame_count = p_para->frame_count; p_para->mread_frame_rate.mread_frame_info[i].read_frame_time = av_gettime(); } if (in_count < READ_FRAME_RATE_TIMES) { average_count = normal_read_framerate; } else { average_count = get_average_count(p_para->mread_frame_rate.mread_frame_info); } p_para->cur_frame_rate = average_count; } else { if (p_para->mread_frame_rate.in_count < READ_FRAME_RATE_TIMES) { p_para->cur_frame_rate = normal_read_framerate; } average_count = p_para->cur_frame_rate; } return average_count; }

2023-06-14 上传