基于机器学习的食品质量保证解决方案
一、食品质量保证前期考量
在选择食品质量保证目标和用例时,需要考虑多方面因素。首先,为机器学习模型收集大量、可靠且高质量的数据集至关重要,因为模型的性能很大程度上取决于输入数据的质量。比如,若想创建一个识别特定工厂食品安全服装和设备的模型,可能首次尝试时无法获取足够大的数据集来成功训练出高精度的分类模型。不过,通过“主动学习”等技术,可以先部署一个精度欠佳的模型到工厂,随着新数据和设备位置的环境背景信息的摄入,模型会逐渐得到改进。
同时,还需考虑设备的位置以及各种传感器和设备要求:
1. 初始数据收集阶段的设备位置。
2. 部署后的设备位置。
3. 供电方式,如电池供电、USB 供电或永久电源线供电。
4. 环境要求,像水、雾、灰尘等环境因素可能会影响传感器的正常使用或损坏设备。
5. 传感器的更换频率,是否有降解生命周期。
6. 传感器是否需要一直开启才能达到正常运行参数,例如气体传感器的预烧规范。
7. 传感器达到正常记录状态所需的时间,如温度升温时间等。
二、食品浪费问题及影响
随着世界人口的持续增长,食品浪费问题日益严重。据估计,全球生产的食品中有超过三分之一被浪费,每年达到 13 亿吨!这不仅是资源的巨大浪费,还对环境产生了重大影响。食品浪费是温室气体排放的主要来源之一,当食物在垃圾填埋场腐烂时,会释放出比二氧化碳更具温室效应的甲烷。减少食品浪费是减少对地球影响和减缓全球气候变化的最简单、最有效的方法之一。
此外,减少食品浪费对我们的健康也有积极影响。尽早发现食品变质或疾病可以避免食物中毒、沙门氏菌和其他食源性疾病的爆发。减少食物过敏原和交叉污染将改善致命食物过敏患者的生活。提高食品生产线上的食品安全和质量有利于工人的人身安全和最终消费者的整体健康。质量控制检查员在确保我们所吃的食物安全和高质量方面发挥着至关重要的作用。当尽快识别出食品质量问题时,减少所有资源的浪费,识别并去除食物过敏原可以挽救生命。
三、食品质量保证解决方案概述
(一)项目目标
本项目旨在通过识别和分类三文鱼鱼片的新鲜度和变质情况,提供一个端到端的食品质量保证解决方案,以减少食品浪费。
(二)机器学习类别定义
我们选择食品变质检测用例,并使用机器学习传感器数据分类,项目的机器学习类别为“变质”、“购买日期”和“环境”。以下是不同食品质量用例的机器学习类别示例:
| 用例 | 训练数据 | 类别标签 |
| — | — | — |
| 食品变质检测 | 气体 | 变质、新鲜、环境 |
| 食品安全服装检测 | 带边界框的图像 | 安全服装或个人防护设备(PPE) |
| 检测包装过期日期 | 带边界框的图像 | 过期日期 |
| 检测食品包装泄漏 | 水位、湿度、水分 | 正常、泄漏 |
| 食品熟度/质量控制 | 温度、气体 | 熟透、未煮熟、煮过头、环境 |
(三)数据集收集
可以通过多种策略收集数据集:
1. 结合公共研究数据集。
2. 使用社区驱动的数据收集网站(如 Kaggle)上现有的传感器数据集。
3. 寻求同事的帮助,为协作的 Edge Impulse 项目收集样本。
(四)Edge Impulse 平台
需要创建一个免费的 Edge Impulse 账户来完成后续操作。Edge Impulse 提供了大量官方支持的开发平台,具有各种集成传感器驱动程序和开源固件。为了简化项目并收集食品质量保证气体传感器数据,我们将使用带有板载博世 BME688 气体传感器的 Arduino Nicla Sense ME。
(五)硬件配置
Arduino Nicla Sense ME 的板载 BME688 气体传感器可以检测十亿分之一(ppb)范围内的挥发性有机化合物(VOCs)、挥发性硫化合物(VSCs)以及一氧化碳和氢气等其他气体。为了提高食品质量保证模型在特定环境、用例和项目预算等方面的准确性,还可以考虑以下其他传感器类型:
1. 其他气体:氨、甲烷、氧气、一氧化碳等。
2. 温度。
3. 压力。
4. 湿度。
5. 雷达。
6. 空气质量。
传感器融合是嵌入式系统中一种流行的技术,通过组合不同传感器的数据,可以更全面、准确地了解设备周围的环境。
(六)数据收集流程
1. 数据摄入固件
为了从 Arduino Nicla Sense ME 摄入数据,需要从 Arduino CLI 向设备闪存数据摄入草图。首先,在计算机上创建一个新目录“food”,并创建一个新文件“food.ino”,代码如下:
/**
* Configure the sample frequency. This is the frequency used to send the data
* to the studio regardless of the frequency used to sample the data from the
* sensor. This differs per sensors, and can be modified in the API of the sensor
*/
#define FREQUENCY_HZ 10
/* Include ----------------------------------------------------------------- */
#include "Arduino_BHY2.h"
/* Constants --------------------------------------------------------------- */
#define INTERVAL_MS (1000 / FREQUENCY_HZ)
#define CONVERT_G_TO_MS2 9.80665f
/* Forward declarations ---------------------------------------------------- */
void ei_printf(const char *format, ...);
/* Private variables ------------------------------------------------------- */
static unsigned long last_interval_ms = 0;
Sensor gas(SENSOR_ID_GAS);
void setup() {
/* Init serial */
Serial.begin(115200);
Serial.println("Edge Impulse sensor data ingestion\r\n");
/* Init & start gas sensor */
BHY2.begin(NICLA_I2C);
gas.begin();
}
void loop() {
BHY2.update();
delay(INTERVAL_MS);
ei_printf("%.2f", gas.value());
ei_printf("\r\n");
}
/**
* @brief Printf function uses vsnprintf and output using Arduino Serial
*
* @param[in] format Variable argument list
*/
void ei_printf(const char *format, ...)
{
static char print_buf[1024] = { 0 };
va_list args;
va_start(args, format);
int r = vsnprintf(print_buf, sizeof(print_buf), format, args);
va_end(args);
if (r > 0) {
Serial.write(print_buf);
}
}
然后,使用 Arduino CLI 编译并上传草图到 Arduino Nicla Sense ME 板,命令如下:
$ cd food
$ arduino-cli core install arduino:mbed_nicla
$ arduino-cli lib install Arduino_BHY2
$ arduino-cli lib install ArduinoBLE
$ arduino-cli compile --fqbn arduino:mbed_nicla:nicla_sense --output-dir . --verbose
$ arduino-cli upload --fqbn arduino:mbed_nicla:nicla_sense --input-dir . --verbose
2. 上传数据到 Edge Impulse
使用 Edge Impulse CLI(edge-impulse-data-forwarder)登录项目并连接设备,将数据从计算机的串口摄入到 Edge Impulse 项目中。命令如下:
$ edge-impulse-data-forwarder
Edge Impulse data forwarder v1.16.0
Endpoints:
Websocket: wss://remote-mgmt.edgeimpulse.com
API: https://studio.edgeimpulse.com
Ingestion: https://ingestion.edgeimpulse.com
? Which device do you want to connect to? /dev/tty.usbmodemE53378312 (Arduino)
[SER] Connecting to /dev/tty.usbmodemE53378312
[SER] Serial is connected (E5:33:78:31)
[WS ] Connecting to wss://remote-mgmt.edgeimpulse.com
[WS ] Connected to wss://remote-mgmt.edgeimpulse.com
? To which project do you want to connect this device?
AI at the Edge / Use Case: Food Quality Assuran [SER] Detecting data frequency...
[SER] Detected data frequency: 10Hz
? 1 sensor axes detected (example values: [9513]). What do you want to call them?
Separate the names with ',': gas
? What name do you want to give this device? Nicla Sense
[WS ] Device "Nicla Sense" is now connected to project "Use Case: Food Quality
Assurance"
[WS ] Go to https://studio.edgeimpulse.com/studio/115652/acquisition/training
to build your machine learning model!
将 Nicla Sense ME 靠近变质或新鲜(购买日期)的食物(如三文鱼)或放置在房间的环境中。从项目的“数据采集”选项卡中,在“记录新数据”下设置以下参数,然后点击“开始采样”:
- 标签:变质、购买日期或环境。
- 样本长度(ms):1200000。
- 传感器:具有 1 个轴的传感器(气体)。
- 频率:10Hz。
重复此过程,直到训练数据集和测试数据集每个机器学习类别至少有 20 - 60 分钟的数据。还可以使用浏览器自动化进行自动采样,在浏览器的开发者控制台中使用 JavaScript 调用,每 22 分钟(或 1320000 毫秒)自动重新点击“开始采样”按钮:
const delay = ms => new Promise(res => setTimeout(res, ms));
while(1) {
document.getElementById("input-start-sampling").click();
await delay(1320000);
};
(七)数据集清理
由于气体传感器样本是以 20 分钟的长度记录的,为了更清楚地查看每个样本的内容,将样本分割成多个 30000 毫秒(或本例中的 29880 毫秒)的子样本。从“数据采集”选项卡中,选择样本的三点下拉菜单,然后点击“分割样本”。也可以通过选择样本名称旁边下拉菜单中的“裁剪样本”选项来裁剪样本。
(八)数据集许可和法律义务
如果直接上传和使用从家用和个人 Nicla Sense 设备通过计算机串口收集的数据,通常不需要考虑数据集许可和法律问题。但如果除了自己设备的气体数据外,还使用了公共来源的气体数据或其他传感器数据,在上传数据到训练/测试数据集并使用由此训练的模型之前,需要仔细确定数据使用规则和归属要求。
(九)DSP 和机器学习工作流程
1. 脉冲设计
将所有图像上传到训练和测试数据集后,需要使用数字信号处理(DSP)方法提取原始数据的最重要特征,然后训练机器学习模型以识别传感器数据提取特征中的模式。Edge Impulse 将 DSP 和 ML 训练工作流程称为“脉冲设计”。在 Edge Impulse 项目的“脉冲设计”选项卡中设置如下参数,然后点击“保存脉冲”:
- 时间序列数据:
- 窗口大小:10000 毫秒。
- 窗口增加:500 毫秒。
- 频率(Hz):10。
- 零填充数据:勾选。
- 处理块:Flatten。
- 学习块:分类(Keras)。
2. 数字信号处理块
本项目使用 Edge Impulse Studio 中默认包含的数字信号处理算法 Flatten 处理块,该代码可在 Edge Impulse GitHub 存储库“processing-blocks”中获取。设置 Flatten 块的参数如下:
- 缩放:
- 缩放轴:0.001。
- 方法:
- 平均值:勾选。
- 最小值:勾选。
- 最大值:勾选。
- 均方根:勾选。
- 标准差:勾选。
- 偏度:不勾选。
- 峰度:不勾选。
设置完成后点击“保存参数”,然后点击“生成特征”查看数据的特征浏览器。
3. 机器学习块
有多种方法可以在 Edge Impulse 中训练模型,最简单的是可视化(或 Web GUI)编辑模式。也可以在 Edge Impulse 中使用专家模式上传自己的代码或编辑现有块代码。在可视化模式下,设置神经网络分类器的块配置如下:
- 训练周期数:50。
- 学习率:0.0005。
- 验证集大小:20%。
- 自动平衡数据集:不勾选。
- 神经网络架构:
- 密集层(8 个神经元)。
- 密集层(4 个神经元)。
- 扁平化层。
设置完成后点击“开始训练”,模型训练完成后,可以在“模型:上次训练性能”视图中查看迁移学习结果。
(十)模型测试
可以从“实时分类”选项卡直接测试连接的 Arduino Nicla Sense ME 的单个测试样本。
通过以上步骤,我们可以构建一个基于机器学习的食品质量保证系统,有效减少食品浪费,提高食品安全和质量。
四、总结与流程梳理
(一)整体流程回顾
为了更清晰地理解整个基于机器学习的食品质量保证解决方案,我们可以梳理一下整体流程,以下是 mermaid 格式的流程图:
graph LR
A[食品质量保证前期考量] --> B[数据集收集]
B --> C[选择设备与平台]
C --> D[数据收集与上传]
D --> E[数据集清理]
E --> F[DSP 和机器学习工作流程]
F --> G[模型测试]
(二)关键步骤总结
- 前期考量 :要重视数据集质量对模型性能的影响,同时考虑设备位置、供电方式、环境要求等因素。
- 数据集收集 :可结合公共研究数据集、使用社区网站现有数据集以及寻求同事帮助等方式。
- 设备与平台选择 :选择 Arduino Nicla Sense ME 搭配 Edge Impulse 平台,利用其板载 BME688 气体传感器收集数据。
- 数据收集与上传 :通过编写数据摄入固件、使用 Arduino CLI 上传草图,再利用 Edge Impulse CLI 连接设备并上传数据。
- 数据集清理 :将长时长的气体传感器样本分割成子样本,还可进行裁剪操作。
- DSP 和机器学习工作流程 :包括脉冲设计、数字信号处理块设置和机器学习块训练。
- 模型测试 :从“实时分类”选项卡测试连接设备的单个测试样本。
(三)实际应用建议
在实际应用中,需要根据具体的食品类型、生产环境和项目预算等因素,灵活调整传感器类型和模型参数。例如,如果是检测易腐的生鲜肉类,可能需要增加对特定气体(如硫化氢)的检测;如果生产环境湿度较大,要考虑传感器的防潮性能。
同时,持续关注模型的性能表现,定期更新数据集和调整模型参数,以确保模型能够准确地检测食品质量。还可以将该系统与生产线上的其他设备集成,实现自动化的食品质量检测和控制,提高生产效率和产品质量。
五、拓展与优化思路
(一)多传感器融合拓展
目前我们主要使用了气体传感器,为了进一步提高食品质量检测的准确性,可以考虑融合更多类型的传感器。例如,结合图像传感器可以直观地检测食品的外观变化,如颜色、形状等;使用温度传感器可以实时监测食品的储存温度,确保其处于适宜的环境中。多传感器融合的流程如下:
1. 选择合适的传感器组合,根据食品的特点和检测需求确定。
2. 对不同传感器的数据进行同步采集,确保数据的时间一致性。
3. 使用数据融合算法将不同传感器的数据进行整合,提取更全面的特征。
4. 将融合后的数据输入到机器学习模型中进行训练和预测。
(二)模型优化策略
- 调整神经网络架构 :可以尝试增加或减少神经元数量、改变层的类型和顺序等,以找到更适合当前数据集的架构。例如,增加卷积层可以更好地处理图像数据,提高食品安全服装检测和包装过期日期检测的准确性。
- 优化训练参数 :如调整学习率、训练周期数、验证集大小等。学习率过大可能导致模型无法收敛,过小则训练速度过慢;训练周期数过少可能导致模型欠拟合,过多则可能过拟合。
- 使用更复杂的机器学习算法 :除了 Keras 分类器,还可以尝试使用支持向量机、随机森林等算法,比较不同算法的性能,选择最优的算法。
(三)系统集成与自动化
将食品质量检测系统与生产线上的其他设备进行集成,实现自动化的检测和控制。例如,当模型检测到食品变质或包装泄漏时,自动触发警报并停止生产线,避免不合格产品进入市场。还可以将检测结果与企业的管理系统集成,实现数据的实时监控和分析,为企业决策提供支持。
六、常见问题与解决方案
(一)数据收集问题
- 传感器数据不准确 :可能是传感器故障或校准不准确导致。可以定期对传感器进行校准,检查传感器的工作状态,如有故障及时更换。
- 数据采集频率不一致 :可能会影响模型的训练效果。可以在代码中明确设置采样频率,并确保设备按照设置的频率采集数据。
(二)模型训练问题
- 模型过拟合 :表现为在训练集上准确率很高,但在测试集上准确率较低。可以通过增加数据集的多样性、正则化方法(如 L1、L2 正则化)、早停策略等方式来解决。
- 模型欠拟合 :即模型在训练集和测试集上的准确率都较低。可以尝试增加模型的复杂度,如增加神经元数量或层的数量,或者调整训练参数。
(三)系统部署问题
- 设备连接不稳定 :可能是网络问题或设备驱动问题导致。可以检查网络连接是否正常,更新设备驱动程序。
- 数据上传失败 :可能是服务器问题或数据格式问题。可以检查服务器的状态,确保数据格式符合要求。
通过以上的拓展与优化思路以及常见问题解决方案,可以进一步完善基于机器学习的食品质量保证系统,使其在实际应用中发挥更大的作用,为保障食品安全和减少食品浪费做出贡献。
超级会员免费看
2018

被折叠的 条评论
为什么被折叠?



