【毕业设计】低复杂度图像压缩算法研究 矢量量化

目录

前言

设计思路

一、课题背景与意义

二、算法理论原理

2.1 卷积神经网络

2.2 矢量量化

三、检测的实现

3.1 数据集

3.2 实验环境搭建

3.3 实验及结果分析

最后


前言

       📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过和节省时间与精力投入到更重要的就业和考试中去,学长分享优质的选题经验和毕设项目与技术思路。

        🚀对毕设有任何疑问都可以问学长哦!

         选题指导:

        最新最全计算机专业毕设选题精选推荐汇总

        大家好,这里是海浪学长毕设专题,本次分享的课题是

        🎯低复杂度图像压缩算法研究 

设计思路

一、课题背景与意义

        目前存在的许多算法在高压缩比下效果不佳且复杂度较高,难以应用于资源有限且实时性要求高的系统。为了解决这个问题,深入研究了压缩比高且复杂度小的重叠变换和矢量量化等算法,并在嵌入式系统PDA上进行了实现。

二、算法理论原理

2.1 卷积神经网络

        卷积神经网络中,卷积层的计算量集中在卷积操作上,需要遍历特征图多次进行卷积,导致计算速度较慢。为了加速卷积层计算过程,可以将卷积层转化为图域的表示,借助图信号处理中的图移和图滤波操作进行建模。通过构建邻接矩阵,将卷积核与输入特征块的关系转化为图的边连接关系,实现卷积操作的并行化,从而加速计算过程。

【毕业设计】低复杂度图像压缩算法研究 矢量量化

        在传统卷积过程中,每个特征图值经过卷积层作用后的输出结果是其本身与周围值的线性组合。这与图滤波中顶点信号经过滤波后的新信号值也是由周围顶点信号的线性组合构成的特性相似。通过将卷积核参数映射到滤波器矩阵中的非零项,并结合已创建的邻接矩阵,可以将卷积层的操作转化为矩阵向量相乘的形式,实现卷积层到图滤波的转变。这种联系为优化卷积计算提供了一种新的思路和方法。

【毕业设计】低复杂度图像压缩算法研究 矢量量化

        卷积层的图域表示算法流程:

  • 根据输入特征图大小和输出特征图维度确定是否需要填充;
  • 根据处理后的输入大小 in_size,确定邻接矩阵大小为 in_size x in_size,并初始化为全零矩阵;
  • 根据卷积过程中遍历特征图的过程,在邻接矩阵中相应位置改为 1;
  • 若存在填充,删除邻接矩阵中对应填充元素所在列;
  • 根据邻接矩阵中非零元素的位置映射卷积核参数,得到图滤波矩阵 H;
  • 将输入特征图 imgF 转化为图信号向量 imgS。

相关代码示例:

def convolution_in_graph_domain(imgF, h, out_size):
    # Step 1: Padding
    if need_padding(imgF, out_size):
        imgF = pad(imgF)

    # Step 2: Construct adjacency matrix
    in_size = calculate_input_size(imgF)
    adjacency_matrix = create_adjacency_matrix(in_size)

    # Step 3: Set adjacency matrix entries based on convolution process
    set_adjacency_entries(adjacency_matrix)

    # Step 4: Remove columns in adjacency matrix for padding elements
    if need_padding(imgF, out_size):
        adjacency_matrix = remove_padding_columns(adjacency_matrix)

    # Step 5: Map convolution kernel parameters to graph filter matrix H
    H = map_kernel_to_filter_matrix(h, adjacency_matrix)

    # Step 6: Convert input feature map imgF to graph signal vector imgS
    imgS = convert_to_graph_signal_vector(imgF)

    return imgS, H

2.2 矢量量化

        传统的低比特数值量化方法可以在一定程度上压缩网络模型、减少计算时间并提高推理速度。然而,这种方法没有考虑同一卷积层中多个卷积核之间的关系。如果考虑到多个卷积核之间的关系,可以进一步压缩模型,使其更适用于资源有限的移动设备上。在这方面,矢量量化是一种常用的技术,它用于语音信号和图像压缩编码。矢量量化是标量量化的一种推广,它将多个采样值组合成一个k维的矢量,然后对该矢量进行量化。与标量量化不同,标量量化得到的是标量量化值,而矢量量化得到的是矢量码字。在矢量量化完成后,码字可以用于近似表示周围的矢量。

【毕业设计】低复杂度图像压缩算法研究 矢量量化

        LBG算法是一种常用的矢量量化算法,用于将卷积核向量集合进行压缩。该算法使用距离相关的失真测度作为优化目标,并设定一个阈值,当某次迭代中失真测度的相对变化小于阈值时停止迭代,得到最终的码书结果。

【毕业设计】低复杂度图像压缩算法研究 矢量量化

        卷积核空域量化过程:

  1. 收集卷积核向量集合。
  2. 使用LBG算法对卷积核向量集合进行矢量量化操作。
  3. 初始化码矢集合,可以采用不同的初始化方式。
  4. 使用LBG算法迭代更新码矢集合,直到满足停止条件(例如失真测度相对变化小于阈值)。
  5. 得到最终的码书,其中每个码矢代表一个卷积核。
  6. 将原始的六个卷积核用三个新的卷积核表示,实现一倍的权值压缩。

相关代码示例:

def lbg_algorithm(kernel_vectors, codebook_size, threshold):
    # Step 1: Initialization
    codebook = initialize_codebook(codebook_size, len(kernel_vectors[0]))

    while True:
        # Step 2: Assign vectors to the nearest codebook vectors
        assignments = assign_vectors_to_codebook(kernel_vectors, codebook)

        # Step 3: Update codebook vectors
        new_codebook = update_codebook(kernel_vectors, assignments, codebook)

        # Step 4: Calculate distortion measure
        distortion = calculate_distortion(kernel_vectors, assignments, new_codebook, codebook)

        # Step 5: Check stopping criteria
        if check_stopping_criteria(distortion, threshold):
            break

        # Step 6: Update codebook
        codebook = new_codebook

    return codebook

三、检测的实现

3.1 数据集

        由于网络上没有现有的合适的数据集,我决定自己进行图像压缩算法的研究,并制作了一个全新的数据集。这个数据集包含了各种图像样本,涵盖不同的内容和特征,包括不同的场景、物体和纹理。通过自己进行图像采集,我能够捕捉到真实世界中的多样性和复杂性,这将为我的图像压缩算法研究提供更准确、可靠的数据。我特别关注图像的冗余信息和压缩效果,因此在数据集中包含了具有不同压缩难度和情况的图像样本。

3.2 实验环境搭建

【毕业设计】低复杂度图像压缩算法研究 矢量量化

3.3 实验及结果分析

        在LBG算法中,码矢的初始化方式会对最终结果产生影响。我们选择了一种初始化方式,即将码矢集合初始化为与设定数量相同的码矢,只需要一次迭代即可完成量化过程。初始化时,码矢被设置为训练矢量中两两相邻矢量的平均值。在算法迭代过程中,通过观察所有卷积核权值构成的训练向量与各自对应的码矢的误差平方和变化图,可以看到误差平方和呈现不断下降的趋势。这符合通过不断迭代更新码矢以减小码矢代替卷积核训练矢量时产生的误差的预期。

【毕业设计】低复杂度图像压缩算法研究 矢量量化

        在量化后的重构图像中,原图像的外围黑色部分出现了灰度值,这可能是由于量化过程中的信息损失导致的。由于黑色部分在整张图片中占据了较大比例,这导致PSNR值和SSIM值下降。然而,原图像中包含信息的部分在量化重构图像中的细节比较清晰。卷积核空域量化方法在处理图像时可能会出现黑色部分灰度值的问题,但对于包含信息的部分,该方法能够保留细节。通过进一步处理无用的黑色部分,可以提高重构图像的质量评估指标,从而进一步提升该方法的效果。

【毕业设计】低复杂度图像压缩算法研究 矢量量化

相关代码示例:

# 获取重构图像的边界
_, reconstructed_contours, _ = cv2.findContours(reconstructed_image.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
reconstructed_contour_mask = np.zeros_like(reconstructed_image)
cv2.drawContours(reconstructed_contour_mask, reconstructed_contours, -1, 255, thickness=cv2.FILLED)

# 获取有效区域的掩码
valid_mask = cv2.bitwise_and(original_contour_mask, reconstructed_contour_mask)

# 通过掩码获取有效区域的图像
original_valid = cv2.bitwise_and(original_image, valid_mask)
reconstructed_valid = cv2.bitwise_and(reconstructed_image, valid_mask)

# 计算有效区域的PSNR和SSIM
psnr = peak_signal_noise_ratio(original_valid, reconstructed_valid)
ssim = structural_similarity(original_valid, reconstructed_valid)

创作不易,欢迎点赞、关注、收藏。

毕设帮助,疑难解答,欢迎打扰!

最后

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值