stm32 智能垃圾分类系统

这个智能垃圾分类系统就是给垃圾分个类。我们用了异构计算架构,核心是FPGA做并行计算,STM32负责控制决策。前端那个OV5640摄像头,把1024×768分辨率的视频数据给采集下来。这个数据先存在FPGA的片内FIFO里,再存到SDRAM里面。处理的时候,有两路操作:一路直接通过HDMI输出到显示终端,供人实时看;另一路进到FPGA里,经过滤波去噪、边缘锐化还有下采样压缩,最后就变成32×32像素的特征图。 针对生活垃圾里那种椒盐噪声和高斯噪声,我们设计了一个完整的流程。首先是中值滤波去噪,用3×3滑动窗口把RGB三通道分别处理一遍,把边缘模糊率控制在5%以下。这样能保留纸张褶皱和塑料瓶轮廓这些关键细节。然后用Sobel边缘锐化算法,算出水平和垂直方向的梯度幅值,再把特征图和原图加权叠加,这样果皮纹理和腐烂边缘这些判别性特征就出来了。最后用双线性插值把图像从1024×768压缩到32×32像素,利用邻近4个像素的灰度平均值确定输出值。这个方法既避免了锯齿效应,又在大幅度减少数据量的同时保留了关键特征。 为了适配FPGA的特点和板载带宽限制,我们把经典的LeNet网络给裁剪优化了一下。只留了1个卷积层和2个下采样层,把全连接层拓展成了3层。这样既减少了计算量和参数量,又通过密集连接的非线性映射加强了全局特征整合能力。为了让模型在FPGA上跑得高效,我们还采用了INT16量化策略,把所有参数和中间结果都变成16位有符号整数。通过伸缩因子和逐层缩减因子把数据范围控制在[-32768,32767]之间,还引入了错位机制来防止溢出风险。 基于Kaggle那个Garbage Dataset重建的数据集,我们做了好多实验验证。验证损失稳定在0.9左右,准确率稳定上升到了70%,比其他四个模型都要好。资源占用方面也挺不错的:FPGA核心逻辑资源LUT、FF、DSP这些都没超过45%,CLB利用率高达90%。 最后再来说说结果吧:这个系统在Kaggle的那个数据集上达到了83.33%的准确率,处理一张图片只需要40毫秒。 作者王智鹏和李文斌是中国科学院大学的学生还有中国科学院成都计算机应用研究所的人员组成。