
简介这份PDF资源是一篇刊发于《智慧农业导刊》的学术论文主题为基于深度学习的人脸识别系统在智慧农业领域的应用研究。资源面向计算机视觉、深度学习及智慧农业方向的研究者、工程师与高校学生可作为参考文献与专业指导资料。论文从深度学习网络的工作原理入手梳理了包含人脸检测、人脸对齐、人脸识别的主要流程并给出基于深度学习的人脸识别系统设计实例同时结合智慧农业场景讨论了猪脸识别等技术应用及推广中的人才、经济等现实问题有助于读者理解相关算法落地路径。资源包内为1份PDF原文共505KB属于单文件学术文献适合移动端或桌面端直接阅读。该资源目前已有142人学习下载对于需要快速获取该领域完整论述与系统架构参考的读者具有实用价值。1. 深度学习人脸识别在智慧农业里到底解决什么问题很多人一听到人脸识别想到的都是写字楼闸机、手机解锁。但真正把深度学习人脸识别系统装进农业现场的团队都知道智慧农业要解决的第一件事不是“认识人”而是“知道谁在哪、谁干了什么”。农场的核心资产不是几台机器而是流动的人员——固定工、季节工、外包农技员、参观人员。传统打卡机管不住串岗门禁卡会被代刷人工巡检成本又高。而基于深度学习的人脸识别系统能把人员身份识别做得像“刷脸进门”一样自然但要处理的干扰却远比写字楼复杂暴晒、尘土、草帽、口罩、逆光、低分辨率摄像头。这篇实战笔记就是沿着这个标题里的技术路线讲清楚深度学习人脸识别在智慧农业里能做哪些事怎样从零落地参数怎么调哪些坑我替你先踩过。2. 从选型到训练人脸检测、特征提取与ArcFace训练细节2.1 为什么智慧农业场景下不建议直接用门禁机的人脸比对不少农场负责人会问市面上一台人脸识别门禁机两三千块直接装在大门口不就行了我一般会先给看两组产品参数门禁机内置的摄像头一般是200万像素、f2.2光圈工作温度050度而农业现场往往是-10度的冬天大棚、55度暴晒下的露天。更麻烦的是门禁机把人脸比对做成了“黑匣子”你没法改阈值没法换模型也没法接自己的数据做增量训练。一旦季节工里出现长相相近的兄弟俩机器会来回翻车厂商售后只能给你升级固件治标不治本。所以我们自己做系统核心意义不是省钱而是把识别逻辑从“封闭固件”变成“可训练、可调参、可控阈值”的自由度——这才是深度学习落地智慧农业的价值点。选型的基本原则是检测用目标检测网络特征提取用度量学习网络两者串成pipeline。业界最常见组合是YOLOv5或RetinaFace做人脸检测 ArcFace配上iresnet骨干做人脸识别。如果你有充足GPU也可以直接上FaceNet但ArcFace在开集场景下的可辨识度更高——农业场景里人脸的类间差异很小都晒得黑都是农工ArcFace的加性角度间隔能放大不同人的区分度。2.2 检测模型选YOLOv5还是RetinaFace参数怎么设在田间地头的真实图像里人脸检测的召回率往往比识别准确率更影响体验。如果你用的是固定枪机画面里人很小YOLOv5l或者YOLOv5x才能保证远距离召回如果用的是摄像头球机近距离画面占比高YOLOv5s就够推理速度能翻一倍。RetinaFace的优势在于自带人脸关键点输出——眼睛、鼻子、嘴角的坐标这对后续做人脸对齐非常有帮助。我的经验是如果数据里有大量侧脸、低头、仰头不要省关键点的钱直接选RetinaFace它输出的5个关键点能帮你把检测与识别之间那一步的对齐做得更稳。常见做法是两步检测先用YOLOv5做快速粗筛把含人的区域框出来再在该区域内用RetinaFace做精细人脸检测和关键点回归。这个级联结构能让误检率大幅下降因为农田背景里的稻草人、彩绘标语牌很容易被单级检测器误判为人脸。参数上YOLOv5的conf阈值设在0.250.35如果画面中人脸密集conf低一点保证召回而RetinaFace检测置信度可以设到0.7以上因为我们已经缩小了搜索区域。关键点回归的loss权重建议保持默认0.1不要随意调大否则网络会为了对齐关键点而忽略人脸整体特征在小目标上反而更难收敛。# 以YOLOv5官方代码为例推理时用detect.py传入关键参数 python detect.py --weights yolov5m.pt --source field_cam1.mp4 --conf-thres 0.3 --iou-thres 0.5 --img-size 640 # 而后用RetinaFace针对每个检测框做人脸对齐 python predict_retinaface.py --model gathered_model --confidence 0.7 --save_align逻辑说明YOLOv5先把画面里可能的人脸框出来注意这里不是对人的检测而是直接检测人脸RetinaFace再对这些候选框做一次精细判断。--conf-thres 0.3是初步召回宁可多框一些--iou-thres 0.5控制重叠框合并。RetinaFace的--confidence 0.7是二次筛选把误检丢掉。这样两段式设计能让整体误检率低于单模型单独使用的水平。2.3 训练ArcFace的骨干网络与损失函数配置人脸识别模型的核心不是“把脸变成向量”而是“让同一个人不同照片的向量距离足够近不同人的向量距离足够远”。ArcFace在这个基础上给每个类别的角度加了margin使得网络在训练时更有信心区分类内和类间。我使用的训练框架是PyTorch骨干网络选择iresnet50而不是resnet50原因在于iresnet把BatchNorm换成了Instance-based的归一化在光照变化剧烈的农场场景下效果更稳定——同一张脸在不同角度的阳光直射下整个图像的色彩统计差异非常大BatchNorm会对这种统计差异敏感而InstanceNorm对单张图像的自身对比度更鲁棒。关键参数设置特征维度设为512ArcFace的margin m取0.5scale s取64。如果你的数据集只有几百号人m可以调低到0.4防止过拟合如果人员规模上千m调到0.55。学习率用SGD的话初始0.1warmup 5个epoch在第20、30个epoch时衰减为原来的0.1。batch size最好能开到256如果显存不够用梯度累积实现同样效果。# 训练配置示意关键超参数 model IResNet(BLOCK50, layers[3, 4, 14, 3], dims512) metric_fc ArcFace(in_features512, out_featuresnum_classes, s64.0, m0.5) optimizer torch.optim.SGD( [ {params: model.parameters(), weight_decay: 5e-4}, {params: metric_fc.parameters(), weight_decay: 5e-4}, ], lr0.1, momentum0.9, nesterovTrue, ) scheduler torch.optim.lr_scheduler.MultiStepLR(optimizer, milestones[20, 30], gamma0.1)逻辑说明out_featuresnum_classes是训练集里的总人数注意是在这里设置类别数而非向量维度。s64是缩放系数它决定了logit的尺度m0.5是加性角度间隔间隔越大类别可分性越强但太大训练会不收敛。训练时先加载预训练模型在Glint360k或MS1MV3上预训练再冻结前几层只训练高层特征和ArcFace层等loss降下来再解冻全部层微调这样在智慧农业的小样本上不会过拟合太严重。2.4 生成训练集从巡更视频里抽帧和清洗农业场景最大的问题是没有现成数据集。写字楼里的公开人脸数据集都是干净正面照但农场里全是俯仰角大、远处模糊、遮挡多的人脸。所以我一般会先在农场里架一台4K枪机连续录一周的视频然后把视频抽帧。抽帧有讲究不能均匀抽帧因为同一个人从远处走到近处连续的帧几乎一样会造成数据冗余。常见做法是每5秒抽1帧再用场景检测帧差法过滤掉静止画面。抽出来的帧先用检测模型跑一遍把人脸框裁下来再做质量过滤。过滤标准有三个维度人脸框面积小于32×32的丢弃人脸偏航角大于30度的标注为hard sample而不是丢弃模糊程度用Laplacian算子求方差低于阈值的单独放一个集合。我通常把数据分成easy、hard、blur三类easy用于正常训练hard以2倍权重参与采样blur单独训练一个低分辨率专用模型。这样做识别系统在没有高清摄像头的老旧农场里也能维持不错的表现。# 使用OpenCV进行帧差法抽帧并保存人脸小图 import cv2, os cap cv2.VideoCapture(field_day1.mp4) prev_gray None frame_idx 0 while True: ret, frame cap.read() if not ret: break gray cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 用帧差法判断画面变化变化足够大才抽帧避免大量重复近景 if prev_gray is not None: diff cv2.absdiff(gray, prev_gray).mean() if diff 8: # 小于阈值认为画面静止 frame_idx 1 continue interval 5 # 5秒抽1帧假设25fps if frame_idx % (interval * 25) 0: cv2.imwrite(fraw_frames/{frame_idx:06d}.jpg, frame) prev_gray gray frame_idx 1逻辑说明prev_gray保存前一帧灰度图absdiff().mean()计算两帧平均差异只要画面有变化才继续这样不会把静止的仓库监控画面也抽进来。frame_idx % (interval * 25) 0是每5秒25fps下125帧抽1次。如果摄像头实际帧率不是25需要把25替换成实际fps。抽出的帧后续还要做人脸检测和清洗这个步骤只负责降低冗余数据量。清洗时建议几个人工各看一批或者用预训练模型做一次聚类把明显是同一人不同姿态的样本归到一组再人工抽检能省一半时间。3. 部署到田间地头算力选型与模型转换的注意点3.1 边缘设备算力评估Jetson、树莓派还是手机端训练好的PyTorch模型不能直接扔到农场你首先得决定在哪儿跑推理。智慧农业现场常见的做法是边缘计算盒子因为农场网络经常不稳定所有画面传云端再返回结果会导致延迟高、断网时直接瘫痪。我评估过三条路线Jetson Orin Nano约8W功耗、32TOPS算力适合2路1080p摄像头并发树莓派5配上USB加速棒能跑轻量模型但只能支持720p单路手机或平板方案适合巡检但不适合固定机位。比较下来固定场景优先选Jetson系列因为它的GPU能跑TensorRT加速而且自带相机接口省掉一路USB转接的延迟。在算力选型里很多人会忽略功耗和散热。农场没有机房一个铁皮箱里塞设备夏天温度轻松到60度。Jetson的核心跑满时会降频推理延迟从30ms飙到120ms人脸跟踪就卡顿。所以部署时必须配主动散热——我一般会选一个带风扇的铝合金外壳并在软件里限制GPU最大频率为原来80%牺牲一点帧率换稳定性。如果你只有普通PC推理注意别用CPU跑模型一个iresnet50的512维特征提取在CPU上要200msGPU只要5ms。3.2 把PyTorch模型转ONNX再转TensorRT的操作步骤模型部署最常翻车的环节就是格式转换。PyTorch的.pth权重不能直接在Jetson上用需要先转成ONNX再由TensorRT生成engine。转换时要注意三点一是模型的动态维度要显式声明因为摄像头输入尺寸可能变化二是BatchNorm和激活函数一定要融合直接用torch.onnx.export默认不做的需要用TensorRT的优化器配合三是ArcFace那层全连接在推理时其实不需要人脸识别部署时只需骨干网络把脸变成512维特征所以导出前去掉metric_fc层。如果直接导出ONNX会包含分类头后续部署时多一道没用的计算还容易出错。import torch import torch.onnx model IResNet(BLOCK50, layers[3, 4, 14, 3], dims512) state_dict torch.load(arcface_agriculture.pth, map_locationcpu)[model_state] model.load_state_dict(state_dict) model.eval() # 输入尺寸按实际摄像头画面经检测网络裁剪后的人脸分辨率这里默认为112x112 dummy_input torch.randn(1, 3, 112, 112) torch.onnx.export( model, dummy_input, arcface_agriculture.onnx, input_names[input], output_names[embedding_512], dynamic_axes{input: {0: batch}, embedding_512: {0: batch}}, opset_version17, )逻辑说明因为检测网络已经把人脸区域resize成112×112推理时输入维度固定为(1,3,112,112)但为了同时处理多张脸我们把batch维设为动态dynamic_axes让batch可以在116之间变化。opset_version建议17以上旧版本对某些算子支持不全TensorRT能做的优化也少。转换后先用onnxruntime跑一遍确认输出的512维向量的欧氏距离和PyTorch原版误差在1e-5以内再进入TensorRT流程。trtexec --onnxarcface_agriculture.onnx \ --saveEnginearcface_agriculture.engine \ --fp16 \ --maxBatch16 \ --buildOnly参数说明--fp16启用半精度推理大多数边缘GPU在FP16下吞吐量接近翻倍且识别精度几乎不掉只有极端低光照下偶有误差增大所以通常保留一个FP32版本做对照。--maxBatch16限制了动态batch上限超过会报错。--buildOnly只构建engine不执行构建时会做层融合优化耗时可能十几分钟这几分钟值得等。构建好后写一个C或Python推理脚本加载engine注意TensorRT engine和硬件绑定换了Jetson型号或JetPack版本就必须重新构建。3.3 摄像头的架设角度与人脸姿态约束在智慧农业场景里很多项目失败不是算法不行而是摄像头安装角度反人类。人脸识别对角度有隐形的硬约束当人脸偏航角左右转头超过45度检测器能检测到但ArcFace提取的特征与正脸特征的余弦相似度大幅下降极易误识。门禁机之所以好用是因为它要求人正对着屏幕。农场的固定枪机做不到这一点所以架设时要先画一条“人员行走路径”。常见的做法是让摄像头正对通道安装高度2.22.5米向下倾斜1015度这样人脸在画面里的仰角小姿态分布集中。如果通道太宽两支枪机对角安装避免人员斜穿画面。另一个容易被忽略的参数是焦距。如果画面里人脸宽度不足48像素深度学习模型的识别精度会骤降。用4mm镜头在3米外拍人脸宽度大约只有20像素。我一般会用6mm或8mm镜头把通道入口的画面“拉近”保证人员进入时在画面中留下至少50像素的人脸。如果现场条件限制不能换镜头就在入口前设置一米长的人形排队护栏让人必须在特定位置停留2秒这个“物理约束”比任何算法都管用。部署时最好在现场用手机连上相机预览站在行走路径上反复模拟通过观察人脸检测框是不是能稳定框住整张脸。4. 智慧农业里的真实场景人员定位、考勤与陌生人预警4.1 养殖场通道的人脸识别考勤流程设计养殖场最常见的诉求是“谁进了产房谁回了宿舍”因为生物安全要求所有人必须消毒更衣。传统办法是纸质登记但根本没法验证。人脸识别考勤流程可以设计成人员进入通道人脸检测触发抓拍丢给ArcFace计算512维特征与本地人员库比对相似度超过阈值则打卡成功同时联动闸机开门未匹配的人脸会触发陌生人告警并拍下全景照。关键点在于本地人员库不能每次刷全量库几百人只有几百次对比但养殖场形状识别场景人员会随时间增长库里的人脸特征向量最好用Redis或SQLite存成索引比对时先按特征向量做粗排序再取Top50精确计算这样查询延迟能控制在10ms以内。这里需要注意考勤打卡不等于只认人脸还要绑定防代刷机制。常见做法是加入活体检测——要求完成一次指定动作眨眼或转头或者部署时选择3D摄像头做深度校验。农业场景很多员工不愿意配合做动作但不做活体又容易被人拿照片打卡。我的折中方案是“二次验证”人脸识别通过后要求员工走到通道内的指纹机按一下指纹两者都通过才算打卡。这样既保留人脸识别的无感体验又增加了安全性。不过指纹机在养殖场里容易受粉尘影响要选防水防尘等级IP65以上的型号。4.2 果园/大棚作业区的无感通行方案和养殖场不同果园作业区域大、出入口多员工一天要进出几十次不适合做“拦停并验证”的强交互考勤。更合适的方案是“无感通行”在作业区外围围墙安装部署多路枪机对每一路画面跑人脸检测跟踪当同一人脸在画面中出现累计超过5秒就认为该人员在该区域工作而后把人员ID和出现时段写入数据库。这套逻辑其实是对视频流做后处理不需要与人交互。我一般会选用DeepSORT作为多目标跟踪器它用检测框之间的IoU和特征相似度做关联能在一个摄像头下稳定跟踪多个人再用一个人脸ID映射表做去重。无感通行方案里最核心的参数是“最短出勤时长”。没有这个参数一个路过的工人也会被记成干活考勤数据就没有意义。最短出勤时长根据作业区域面积来定大棚内单人作业通常连续待30分钟以上所以我设10分钟露天采摘区人员走动频繁设5分钟。另一个参数是“离开判定间隔”跟踪丢失超过60秒认为人员离开防止信号抖动造成重复进出记录。这套逻辑需要多摄像头时间同步因为同一个人从A画面消失到出现在B画面会有几秒间隙如果各摄像头时间不一致人员轨迹会断成好几段。4.3 与农业物联网平台对接的数据协议人脸识别系统不能只做一个孤岛它最终要把人员考勤、陌生人告警、区域停留时长等数据发给农业物联网平台。我建议不直接往平台数据库里写而是通过MQTT协议发送JSON消息让平台方面订阅主题做二次处理。原因在于智慧农业平台种类很多私有化部署、阿里云IoT、各类组态软件MQTT是公认最松耦合的方式。消息结构上我会设计两种一种是person/attendance主题内容包含person_id、person_name、timestamp、scene另一种是person/stranger用于陌生人预警。如果有摄像头位置信息还需要加一个camera_id方便平台做GIS定位。{ topic: person/attendance, payload: { person_id: A003, person_name: 张师傅, timestamp: 2025-06-18T08:32:1008:00, scene: pig_house_1, camera_id: cam_05, face_quality: 0.88 } }参数说明face_quality是套用质量评估网络得到的0~1之间的分数低于0.6的数据可以在下游统计时剔除避免被帽子边缘、半张脸等低质量特征干扰了考勤结果。平台端订阅主题后可以保存原始数据并建立员工出勤报表。如果平台只支持HTTP接口也可以用边缘网关把MQTT消息转成POST请求但这样断网时会丢数据我一般会先在本地保存一份SQLite网络恢复后回传避免少算工时引发劳资纠纷。5. 避坑指南光照、遮挡、模型漂移的排查记录5.1 现象逆光下人脸检测率骤降农场里的摄像头多数装在门口朝外早晨和傍晚太阳直射镜头人脸完全黑成剪影检测框时有时无识别直接失效。原因是相机默认自动曝光背景天空亮人脸区域严重欠曝画面上人脸几乎没有纹理。解决分两步第一步是硬件侧改用带宽动态WDR功能的摄像机并把曝光中心调节到人脸所在区域。有些相机SDK可以单独设置曝光权重我把画面下半部分权重调到60%上半部分调到40%减少天空过曝的影响。第二步是软件侧训练检测与识别模型时对训练集做模拟逆光增强——把人脸区域的亮度随机降低50%80%同时给背景加亮。做完这两步后逆光场景下的人脸检测率能从45%提升到85%以上。5.2 现象戴草帽/口罩后识别变成随机农业工作者夏天戴草帽、冬天戴口罩是常态而人脸识别模型要么检测不到帽子以下的脸要么把帽檐阴影当作特征参与识别导致同一个人摘帽前后相似度只有0.5。原因在于我们训练时没有专门加入“局部遮挡”样本。解决办法是数据增强在训练时随机裁剪人脸上部或下部区域并填充黑色模拟草帽和口罩遮挡。同时部署时的策略要调整——不要把整张人脸特征拿去比对而是分别提取上半脸和下半脸特征哪个部分可见就比对哪个部分。我用ArcFace骨干网络最后几层输出前加入一个mask分支来强制网络关注可见区域效果比简单抠图好得多。如果只是临时应对可以设置一个阈值切换普通人脸相似度0.6以上即匹配但戴口罩情况下降到0.45并额外要求设备端发送的就是下半脸特征。注意这个妥协只适用于“员工考勤记录”不适合陌生人预警否则误报会很多。5.3 现象模型上线两周后误识率上升这是所有深度学习落地中最隐蔽的坑模型上线时表现很好两周后开始把A识别成B。排查后发现三方面原因一是季节变化员工肤色深浅变化、发型变化同时光线角度也变了模型没有见过这些新分布二是现场增加了新的临时工注册库里的特征还是老员工的新员工特征没有及时补充导致相似度阈值附近的混淆三是模型在边缘端只有推理没有训练等于一个静态模型在对抗动态环境必然漂移。解决可以从数据侧出发每周从摄像头画面里自动采集检测到的人脸如果与库中最高相似度低于0.8就作为“待确认样本”存下来由管理员每周抽一次确认为某个员工后把这一批样本提取出的特征做增量更新把新旧特征做加权平均。这个机制叫“连续注册”能明显降低误识率漂移。但不是所有人脸都能自动入库要防止把陌生人的脸也自动加到库里所以必须有人工确认环节。5.4 现象设备温度过高导致推理变慢Jetson等边缘设备在无空调的农业现场很容易过热。表现为启动后前10分钟速度正常之后推理一帧的耗时从20ms变成100ms人脸轨迹乱跳严重时进程直接退出。原因是GPU温度超过85度后NV控制策略强制降频。除了加装散热风扇和通风滤网外软件层有一个后悔药在Jetson上用nvpmodel限制CPU/GPU频率和工作模式例如设为NVHPC模式并锁定GPU最大频率为70%这样虽然峰值算力下降但温度控制在70度以内算力输出更平稳。我还会在代码里加一个温度保护读取/sys/devices/virtual/thermal/thermal_zone1/temp超过80度时降低视频抽帧率、暂停非关键任务比如把录像从30fps降到15fps优先保证识别通道不中断。这套机制上线后设备宕机率从每周2次降到0。6. 进阶验证用A/B测试评估识别准确率并做模型迭代6.1 如何搭建一个离线评估集不要只在现场“看起来差不多了”就上线。一个合格的人脸识别系统必须有离线评估集并且评估集要独立于训练集。我在每个农场项目里都会建立三个子集套餐A叫“标准集”包含100人每人10张正面清晰照用来测基础精度套餐B叫“困难集”包含50人每人5张侧面、遮挡、逆光照用来测退化场景套餐C叫“负样本集”包含100个与员工无关的陌生人用来测误识率。评估时把这三组人脸特征向量先提取好然后在内存里做相似度矩阵统计同一人的正样本对相似度和不同人的负样本对相似度画出相似度分布曲线。注意评估要用和部署时完全相同的特征提取代码不能因为训练时用的batch模式就改变推理时的数据预处理。6.2 关键指标等错误率与误识率阈值的取舍很多初学者只看准确率但人脸识别实战中最要紧的是“阈值”。阈值设0.7误识率低但漏识率高员工打不了卡会跑来骂门禁阈值设0.4识别很爽但可能会把A识别成B造成严重考勤纠纷。我一般用等错误率EER作为基线在评估集上算出误识率FAR和拒识率FRR两条曲线交点处的阈值就是等错误率阈值。但实际生产不会直接用EER阈值而是根据业务场景往偏向安全或偏向便利的方向偏移。智慧农业考勤场景我选FAR1e-4对应的阈值——也就是一万次陌生人比对最多允许1次被误认为内部员工。而陌生人预警场景则选FAR1e-3因为预警可以人工复核漏报比误报更危险。import numpy as np # 假设有正样本相似度数组pos_sim和负样本相似度数组neg_sim thresholds np.linspace(0.2, 0.9, 70) for th in thresholds: far (neg_sim th).mean() # 陌生人相似度超过阈值 - 误识 frr (pos_sim th).mean() # 本人相似度低于阈值 - 拒识 if far 1e-4 and last_far 1e-4: print(阈值取为, th, 此时FAR, far, FRR, frr) break last_far far逻辑说明这段代码不是严格求EER而是找一个“FAR不超过1e-4的最小阈值”。neg_sim是陌生人对的特征相似度pos_sim是同人脸对的特征相似度。我们从小到大遍历阈值当第一次出现FAR低于1e-4时那个阈值就是可用安全阈值。如果找不到说明特征区分度不足需要回去加数据处理。这个阈值要在每轮模型迭代后重新计算不能沿用旧值。6.3 让模型在农业场景持续学习的小技巧模型迭代不可能每次都从零训练。我常用“增量微调”路线每周把新确认的样本和旧样本混合只更新ArcFace骨干的最后一层或者全部层但用很小学习率1e-4同时把旧数据重放比例保持在70%避免灾难性遗忘。另一个技巧是维护一份“混淆对”名单——比如双胞胎、两位相似度本来就高的员工在比对结果中如果出现这种混淆对命中的情况系统自动记录并发送人工确认。每个月看一次混淆名单把混淆对的高特征相似度样本挑出来加入训练集增强这些人的区分度。最后所有模型版本要保留下来不要覆盖因为每轮微调都可能引入新的偏差能随时回滚到上一个版本才是成熟系统该有的样子。我自己的习惯是每季度做一次完整评估把新版模型和旧版模型同时部署到一台备用设备上分别跑一遍同样的视频流比较FRR和FAR。只有在新模型在三个子集上都不差于旧模型时才会正式切换。这个流程看起来繁琐但能让你避开很多“越迭代越差”的尴尬。人脸识别是深度学习落地里少有的“算法能力只占一半、工程稳定性占一半”的方向希望这种谨慎的态度能帮你在智慧农业这类非标准环境里少走点弯路——希望帮到你。本文还有配套的精品资源点击获取