戰(zhàn):改進(jìn)Faster R-CNN與部署優(yōu)化)
1. 跌倒檢測的難點(diǎn)不在檢測在區(qū)分蹲下與摔倒1.1 場景需求的反推甲方真正要的不是框是報(bào)警判斷做監(jiān)控視覺項(xiàng)目久了會發(fā)現(xiàn)一個(gè)規(guī)律客戶報(bào)的需求和實(shí)際要的東西經(jīng)常是兩回事。拿這套人員跌倒檢測系統(tǒng)來說需求文檔上寫的是檢測人員跌倒但到了現(xiàn)場溝通才發(fā)現(xiàn)普通行人檢測器他們早就試過了也能檢測到人卻完全沒辦法區(qū)分一個(gè)人是摔倒了、蹲下了、還是單純躺下睡覺。真正要解決的不是檢測人而是判斷行為狀態(tài)。我這次做的項(xiàng)目主要覆蓋養(yǎng)老機(jī)構(gòu)和獨(dú)居老人家庭兩類場景。攝像頭裝在墻角離地2.5米左右斜向下俯視覆蓋一個(gè)客廳或者雙人病房。這類場景有幾個(gè)共同特征室內(nèi)家具多、遮擋頻繁、光線不穩(wěn)定黃昏和夜間尤其麻煩而且老人行動本來就慢很多起臥動作和跌倒的靜態(tài)姿態(tài)長得非常像。比如蹲下?lián)鞏|西如果鏡頭角度偏一點(diǎn)人在畫面里的寬高比變化幅度其實(shí)比想象中大再比如從椅子上滑落坐地的過程前幾幀和主動坐下的動作幾乎無法區(qū)分。所以在設(shè)計(jì)算法之前必須先定義一個(gè)關(guān)鍵問題跌倒檢測到底檢測什么我的答案是檢測一個(gè)狀態(tài)變化過程而不是檢測一個(gè)靜態(tài)的人躺在地上的姿態(tài)。這個(gè)思路決定了后面所有技術(shù)選型的方向。1.2 單幀視覺上跌倒的本質(zhì)是形態(tài)突變從畫面特征來看一個(gè)能穩(wěn)定站立的人檢測框通常高度大于寬度寬高比大約在0.4到0.6之間而人倒地后檢測框會變成寬度遠(yuǎn)大于高度寬高比可能直接翻到1.8甚至2.5以上同時(shí)檢測框的中心高度會顯著下移。這是最直接的靜態(tài)特征。還有一個(gè)容易被忽略的特征是下落過程中的速度突變。人在非故意跌倒時(shí)從站立姿態(tài)到接觸地面基本發(fā)生在0.5秒到1秒內(nèi)頭部和軀干在畫面中的位移速度遠(yuǎn)超正常行走或者蹲下的速度。但速度特征必須靠多幀計(jì)算如果框架里沒有時(shí)序概念單幀模型只能依賴形態(tài)特征和上下文信息兜底。此外跌倒樣本里通常伴隨一條隱含規(guī)律人在跌倒后往往會保持一段時(shí)間的靜止或低幅度掙扎狀態(tài)不會立刻站起來。這個(gè)特性在報(bào)警策略上特別有價(jià)值它允許我們用一個(gè)延遲觸發(fā)機(jī)制來換取誤報(bào)率的大幅下降。后面我在模型結(jié)構(gòu)里專門設(shè)計(jì)了一個(gè)輕量級的時(shí)序投票模塊就是基于這個(gè)觀察。1.3 通用檢測器在跌倒場景下的三個(gè)硬傷第一通用檢測器輸出的是人的框不區(qū)分行為狀態(tài)哪怕分類頭里有person這一個(gè)類別它也只是一個(gè)粗粒度語義標(biāo)簽根本沒法回答這個(gè)人狀態(tài)是否安全的問題。第二通用檢測器的訓(xùn)練數(shù)據(jù)分布和跌倒場景差異太大。日常數(shù)據(jù)集里的行人大多是站立、行走、騎車等常規(guī)姿態(tài)跌倒樣本占比極低模型對于橫躺、蜷縮、形態(tài)扭曲的人體幾乎沒有先驗(yàn)。第三姿態(tài)估計(jì)方案在部分遮擋和俯視角度下非常脆弱。跌倒時(shí)人體會大面積接觸地面膝蓋、肘部、面部經(jīng)?;ハ嗾趽跫由弦巫雍筒鑾渍趽蹶P(guān)鍵點(diǎn)丟失情況嚴(yán)重姿態(tài)骨架殘缺后整個(gè)行為判斷邏輯基本就廢了。所以最終的選型方向很明確以通用目標(biāo)檢測器為底座在框級特征上做針對性的分類疊加用檢測框的寬高比、中心點(diǎn)位置、多幀變化趨勢這些信息去擬合跌倒行為特征。這條路在工程上更穩(wěn)也與接下來要說的模型選型邏輯一脈相承。2. 基線模型選型復(fù)盤從YOLO和姿態(tài)估計(jì)繞回Faster R-CNN的原因2.1 單階段、雙階段和姿態(tài)方案的一次橫向比較我在項(xiàng)目早期其實(shí)把三條技術(shù)路線都過了一遍單階段檢測器YOLO系速度確實(shí)快在邊緣設(shè)備上輕松跑到實(shí)時(shí)幀率但在小目標(biāo)和遮擋目標(biāo)的定位精度上明顯弱于雙階段方法。跌倒場景中經(jīng)常出現(xiàn)半個(gè)身體被沙發(fā)擋住的情形這種樣本在單階段模型里很容易漏檢。姿態(tài)估計(jì)方案前面說了俯視角度下關(guān)鍵點(diǎn)遮擋嚴(yán)重不好用。只在側(cè)面視角、人體相對完整時(shí)才可靠不符合這個(gè)項(xiàng)目的安裝約束。雙階段檢測器Faster R-CNN系速度慢一些但RPN會先生成大量候選區(qū)域再做逐區(qū)域分類對遮擋、小目標(biāo)、極端姿態(tài)的容錯(cuò)能力明顯高而且分類頭和回歸頭分離后期針對跌倒類別做優(yōu)化時(shí)能改動的空間更大。跌倒檢測屬于典型的高代價(jià)事件漏檢一次跌倒的后果遠(yuǎn)比多花幾十毫秒推理嚴(yán)重得多。這個(gè)場景天然需要犧牲幀率換召回率所以雙階段方案一下子就變成最優(yōu)解了。2.2 為什么用Faster R-CNN而不是另外幾類雙階段模型Faster R-CNN的RPN模塊把候選框生成和區(qū)域分類耦合進(jìn)同一個(gè)網(wǎng)絡(luò)共享權(quán)重、端到端訓(xùn)練這是它相比老式選擇性搜索方案的最大優(yōu)勢。實(shí)際使用中RPN的召回率直接決定了最終模型對跌倒樣本的敏感度所以我格外關(guān)注RPN的Anchor設(shè)計(jì)這一部分我在下一章會詳細(xì)寫。從硬件指標(biāo)看原始Faster R-CNN配上ResNet-50和FPN在單張主流顯卡上單幀推理大約40到60毫秒在邊緣推理引擎優(yōu)化后可以壓到30毫秒上下。對于跌倒報(bào)警場景來說這個(gè)速度完全夠用——人的跌倒過程至少有0.5秒以上預(yù)警延遲1秒之內(nèi)都具備救助意義不需要像自動駕駛那樣追求毫秒級響應(yīng)。2.3 基線網(wǎng)絡(luò)的結(jié)構(gòu)配置我選的基線結(jié)構(gòu)是ResNet-50作為骨干網(wǎng)絡(luò)加上FPN后面接標(biāo)準(zhǔn)RPN和兩層的檢測頭。原始模型的輸出類別數(shù)是80我需要把它改成兩個(gè)類別正常狀態(tài)的person和跌倒?fàn)顟B(tài)的fall。初始權(quán)重用COCO預(yù)訓(xùn)練模型做遷移學(xué)習(xí)這一步很重要因?yàn)樽约簭念^訓(xùn)練一個(gè)雙階段檢測器數(shù)據(jù)量不夠的話收斂速度極慢泛化能力也差。這里有一個(gè)細(xì)節(jié)要注意修改輸出類別后最后的全連接層維度變了加載預(yù)訓(xùn)練權(quán)重時(shí)不能直接把整個(gè)head都load進(jìn)來否則參數(shù)形狀不匹配。我當(dāng)時(shí)的處理是凍結(jié)骨干和RPN的權(quán)重只隨機(jī)初始化最后的分類/回歸層先跑10個(gè)epoch讓新層收斂再全網(wǎng)絡(luò)一起微調(diào)。這個(gè)做法比初始化就全量微調(diào)穩(wěn)定得多也避免了一開始梯度震蕩導(dǎo)致的loss不降問題。3. 三個(gè)核心改進(jìn)Anchor重設(shè)計(jì)、多層特征融合與時(shí)序后處理3.1 基于K-means聚類重設(shè)計(jì)Anchor尺寸分布Faster R-CNN原版的Anchor是按9種比例在每層特征圖上生成的默認(rèn)比例通常覆蓋了1:1、1:2、2:1這幾類寬高比。用于通用目標(biāo)檢測時(shí)沒有問題但跌倒場景的數(shù)據(jù)分布很不一樣站立時(shí)人體框高大于寬跌倒后寬大于高而且由于俯視鏡頭的透視畸變離攝像頭近的人比遠(yuǎn)處的人大很多同一個(gè)姿態(tài)在畫面不同位置的尺度差異也非常明顯。我把訓(xùn)練集所有跌倒目標(biāo)框的坐標(biāo)拿出來做了寬高統(tǒng)計(jì)結(jié)果寬高分布明顯呈雙峰結(jié)構(gòu)一個(gè)峰是站立狀態(tài)的縱向框高寬比大約1.6到2.2另一個(gè)峰是倒地狀態(tài)的橫向框?qū)捀弑却蠹s1.8到3.0。直接用原版Anchor后一個(gè)峰的召回率會偏低因?yàn)镽PN生成的候選框大多偏向縱向。改進(jìn)方案是跑一次基于IoU距離的K-means聚類把訓(xùn)練集里所有人形框含正常和跌倒聚成9個(gè)簇用簇中心代表新的Anchor寬高比然后按尺寸大小分配到FPN的不同層。野外實(shí)測效果很直接因?yàn)楹蜻x框更貼合真實(shí)目標(biāo)RPN階段需要的候選框數(shù)量甚至可以適度下調(diào)減少了后面檢測頭的計(jì)算壓力推理速度反而沒有因?yàn)榻Y(jié)構(gòu)變復(fù)雜而明顯下降。3.2 特征金字塔的基礎(chǔ)上疊加了一條自下而上的路徑原版FPN的top-down路徑只做了從上往下的語義傳遞高層語義信息傳給淺層。問題在于跌倒目標(biāo)的檢測需要兩樣?xùn)|西同時(shí)在線淺層的高分辨率位置信息用來精確定位人的輪廓高層抽象的語義信息用來判斷這個(gè)姿態(tài)是不是跌倒?fàn)顟B(tài)。但如果只靠FPN的top-down單向傳遞淺層特征里的細(xì)節(jié)紋理在逐層傳遞中被稀釋掉了直接后果是檢出框的貼合度差尤其對蜷縮、弓背這種邊緣形態(tài)。我的做法是在標(biāo)準(zhǔn)FPN之外對稱地加了一條bottom-up通路讓淺層的位置細(xì)節(jié)也往深層聚合——形式上類似PANet的結(jié)構(gòu)把淺層的強(qiáng)定位信息和深層的強(qiáng)語義信息做一個(gè)雙向融合。檢測頭同時(shí)讀取多個(gè)層級的輸出最后融合后的特征做分類和回歸。消融實(shí)驗(yàn)顯示這條結(jié)構(gòu)改進(jìn)給mAP帶來了約4到5個(gè)百分點(diǎn)的提升特別是對小體積的遠(yuǎn)端跌倒目標(biāo)如攝像頭斜對角位置的人檢出率改善明顯。3.3 時(shí)序投票模塊用3幀判決替代單幀硬分類單幀的跌倒檢測必然伴隨噪聲因?yàn)閺囊曈X上下蹲瞬間和跌倒前傾瞬間的某一幀可能長得完全一樣。解決這類問題的工業(yè)級手段不是把單幀分類器練得無限強(qiáng)而是引入幀間關(guān)聯(lián)和時(shí)間連續(xù)性判斷。我在模型后處理階段加了一個(gè)非常輕量的模塊核心邏輯只有三句話對相鄰幀檢測出的person框和fall框做IoU匹配匹配成功則視為同一個(gè)目標(biāo)。連續(xù)3幀內(nèi)同一目標(biāo)的fall置信度穩(wěn)定超過0.6才判定為一次真正的跌倒事件。報(bào)警觸發(fā)后系統(tǒng)會等待1到2秒再做最終確認(rèn)確認(rèn)期間如果檢測框消失人已經(jīng)站起來則自動取消報(bào)警。這個(gè)設(shè)計(jì)不需要訓(xùn)練額外的時(shí)序網(wǎng)絡(luò)完全基于檢測框后處理實(shí)現(xiàn)CPU上也能跑成本幾乎為零。它的價(jià)值是把誤報(bào)率從一個(gè)不可用的水平壓到了可接受的水平實(shí)測數(shù)據(jù)中加了時(shí)序模塊后誤報(bào)率下降了約70%而召回率幾乎沒有損失。代價(jià)是報(bào)警延遲增加了大約0.3到0.5秒在跌倒救助場景中完全在容忍范圍內(nèi)。4. 數(shù)據(jù)工程跌倒樣本的采集、標(biāo)注規(guī)范與難例挖掘4.1 公開數(shù)據(jù)集與自采樣本的搭配策略跌倒檢測不像行人檢測那樣有現(xiàn)成的海量數(shù)據(jù)公開可用的跌倒數(shù)據(jù)集規(guī)模都不大視角類型也比較單一。我從公開渠道收集了若干跌倒相關(guān)的視頻片段作為基座數(shù)據(jù)大約覆蓋了正面、側(cè)面、斜俯視幾個(gè)常用視角但數(shù)量和多樣性都遠(yuǎn)遠(yuǎn)不足以支撐訓(xùn)練。所以自采數(shù)據(jù)成了重頭戲。我當(dāng)時(shí)的做法是找一個(gè)空房間布置成客廳環(huán)境用模擬人偶擺放各種跌倒后的靜態(tài)姿勢正躺、側(cè)臥、蜷縮、半倒在沙發(fā)邊再用志愿者模擬從站立到跌倒的動態(tài)過程。志愿者不用真的摔傷可以在接近地面時(shí)用手撐地放慢速度前半段的加速下墜形態(tài)和真實(shí)跌倒幾乎一致后段的著地姿態(tài)由模擬人偶補(bǔ)拍兩者在訓(xùn)練時(shí)按幀混合使用。最終數(shù)據(jù)規(guī)模大約是兩萬張含人的圖像中跌倒正樣本約6000張覆蓋室內(nèi)多角度混合了白天、黃昏、夜間開燈三種光照條件。如果項(xiàng)目預(yù)算允許建議再增加真實(shí)老年人跌倒的視頻片段因?yàn)槟贻p志愿者的跌倒動作在速度和形態(tài)上和老人有明顯差異。4.2 什么是跌倒標(biāo)注規(guī)范與框體定義數(shù)據(jù)標(biāo)注是這個(gè)項(xiàng)目里最容易被低估的環(huán)節(jié)。標(biāo)注規(guī)范如果不提前定清楚后面訓(xùn)練出來的模型會在邊界行為上表現(xiàn)得很混亂。我最終采用的規(guī)范是fall類別只標(biāo)身體已經(jīng)與地面或床面發(fā)生大面積接觸或者身體主干軸線與地面夾角小于45度的狀態(tài)。下蹲、半蹲、坐椅子、躺床休息即使看起來像跌倒也只標(biāo)為person。跌倒發(fā)生的過渡幀即身體還在空中但已經(jīng)明顯失去平衡、傾斜角度很大的幀也歸為fall但置信度標(biāo)注為弱標(biāo)簽讓模型知道這些幀是模糊地帶。對于遮擋嚴(yán)重的跌倒目標(biāo)只要完整檢測框內(nèi)包含超過一半的身體主干就正常標(biāo)注只露出一條腿或一只手的碎片不標(biāo)注。這個(gè)規(guī)范相比隨意標(biāo)注要嚴(yán)格得多但訓(xùn)練出的模型邊界行為非常干凈部署后蹲下誤報(bào)跌倒的比例低了很多。標(biāo)注時(shí)用的工具是開源標(biāo)注工具直接導(dǎo)出成通用檢測數(shù)據(jù)集格式為了統(tǒng)一類別ID我把person設(shè)為1、fall設(shè)為2訓(xùn)練時(shí)強(qiáng)制忽略官方背景類別。4.3 難例挖掘與樣本均衡第一版模型跑起來之后誤報(bào)最嚴(yán)重的不是背景雜物而是兩類像跌倒但不是跌倒的目標(biāo)蹲下?lián)鞏|西的人以及從坐姿突然站起來的人站起來瞬間身體軸線的傾斜角度變化和跌倒前傾太像了。這些誤報(bào)樣本被專門收集出來單獨(dú)打標(biāo)后加入訓(xùn)練集讓分類器重點(diǎn)學(xué)習(xí)這些難例的判別邊界。另外一個(gè)非常容易踩的坑是時(shí)間相鄰幀的樣本重復(fù)度太高。直接從視頻連續(xù)抽幀前后幾幀的形態(tài)幾乎一樣模型會在重復(fù)樣本上過擬合在真正的新場景上表現(xiàn)反而差。我的做法是每段視頻每隔10幀抽取一幀作為訓(xùn)練樣本并用關(guān)鍵幀狀態(tài)的切換站立幀、起勢幀、倒下幀、著地幀對樣本做分層抽樣保證每種狀態(tài)都有覆蓋。數(shù)據(jù)增強(qiáng)上也有一點(diǎn)要特別提醒垂直翻轉(zhuǎn)不能用。把一張站立的人垂直翻轉(zhuǎn)畫面里就變成倒立的人姿態(tài)完全不符合物理常識水平翻轉(zhuǎn)可以用能擴(kuò)展跌倒方向左倒/右倒的多樣性。此外還可以做隨機(jī)亮度和對比度的抖動模擬不同時(shí)間的室內(nèi)光照變化這對夜間場景的魯棒性幫助尤其明顯。5. 訓(xùn)練配置、評測指標(biāo)與改進(jìn)前后的實(shí)測對比5.1 超參設(shè)置與訓(xùn)練流程訓(xùn)練用了一張24GB顯存的主流GPU深度學(xué)習(xí)框架用的是PyTorch檢測模型基于常見的開源檢測框架搭建。輸入尺寸方面長邊限制在1333像素短邊限制在800像素在這個(gè)分辨率下跌倒目標(biāo)的細(xì)節(jié)足夠清晰同時(shí)不至于讓推理速度掉出可用范圍。優(yōu)化器選SGDmomentum設(shè)為0.9初始學(xué)習(xí)率0.02批大小8。學(xué)習(xí)率采用帶warmup的余弦退火策略前500步做warmup避免早期震蕩總共訓(xùn)練80個(gè)epoch。骨干網(wǎng)絡(luò)和FPN部分用COCO預(yù)訓(xùn)練權(quán)重初始化但新加的特征融合分支和修改后的分類頭使用較低的初始學(xué)習(xí)率約0.002防止預(yù)訓(xùn)練權(quán)重被破壞。一輪完整的訓(xùn)練時(shí)間大約是18個(gè)小時(shí)。在這個(gè)訓(xùn)練配置下loss曲線通常在30個(gè)epoch左右開始明顯下降50個(gè)epoch穩(wěn)定后續(xù)epoch主要是邊界樣本的擬合。如果顯存緊張優(yōu)先縮小輸入尺寸而不是減小batch因?yàn)樾atch在BN層的統(tǒng)計(jì)估計(jì)上會更敏感。5.2 評測方法不要只看mAP盯住召回率和誤報(bào)率通用目標(biāo)檢測社區(qū)習(xí)慣看mAP0.5和mAP0.5:0.95但跌倒檢測項(xiàng)目必須額外關(guān)注兩個(gè)指標(biāo)跌倒召回率和每小時(shí)誤報(bào)次數(shù)。前者關(guān)系到真實(shí)報(bào)警的靈敏度后者關(guān)系到整個(gè)系統(tǒng)在業(yè)務(wù)上能不能落地。我把測試集按場景切成了三類單一通暢場景、帶家具遮擋場景、夜間光照場景。各模型版本在測試集上的表現(xiàn)對比如下模型版本mAP0.5跌倒召回率單幀推理耗時(shí)誤報(bào)次數(shù)/小時(shí)原始Faster R-CNN基線0.7478.5%58ms2.4基線 Anchor重設(shè)計(jì)0.7984.2%55ms1.8基線 Anchor 特征融合0.8490.1%61ms1.1完整模型含時(shí)序模塊0.8589.7%62ms0.4注意表格里最后一行加時(shí)序模塊后召回率反而比上一行略低了一點(diǎn)因?yàn)閭€(gè)別傾斜程度處于模糊邊界的樣本在連續(xù)3幀判定中沒通過。但從業(yè)務(wù)角度看這是完全合理的交換——少報(bào)一個(gè)模糊邊界樣本換來誤報(bào)率降低六成以上報(bào)警系統(tǒng)的可用性大幅提升。5.3 典型失敗案例和應(yīng)對在測試集上我專門做了一次badcase分析把漏檢和誤報(bào)的樣本全部攤開發(fā)現(xiàn)三處高發(fā)點(diǎn)第一跌倒發(fā)生的瞬間運(yùn)動模糊。跌倒速度越快單幀畫面里身體邊緣的拖影越嚴(yán)重邊界框回歸就不穩(wěn)定。這個(gè)問題的緩解方式是數(shù)據(jù)增強(qiáng)中疊加隨機(jī)運(yùn)動模糊讓模型提前適應(yīng)模糊的身體算跌倒。 第二老人坐在床邊雙腿垂地的姿態(tài)。從斜俯視視角看這種狀態(tài)和半跌倒在寬高比上高度重疊。我的處理是在難例集中大量增加床邊坐姿樣本讓分類頭學(xué)會用人體中心高度和地面參照物的相對位置來區(qū)分兩者。 第三有輪椅或助行器的場景。金屬框架和人體在圖像上產(chǎn)生大量交叉邊緣檢測框很容易被帶歪。這是純數(shù)據(jù)問題只能靠現(xiàn)場自采樣本補(bǔ)充沒有捷徑。6. 部署階段繞不開的量化加速、幀率分配與誤報(bào)處置6.1 模型導(dǎo)出與推理加速的取舍訓(xùn)練完的PyTorch模型不能直接上邊緣設(shè)備我們的處理流程是先導(dǎo)出成ONNX再用邊緣推理引擎做轉(zhuǎn)換和優(yōu)化。這里有一個(gè)重要的經(jīng)驗(yàn)FP16量化基本無損精度誤差在0.5個(gè)百分點(diǎn)以內(nèi)但推理速度能提升約40%INT8量化速度快一半但精度可能掉1到2個(gè)點(diǎn)對跌倒這種小目標(biāo)檢測來說掉點(diǎn)主要出現(xiàn)在遠(yuǎn)距離小目標(biāo)上。所以我的建議是算力允許時(shí)優(yōu)先用FP16只有在設(shè)備算力實(shí)在不夠的情況下再用INT8而且INT8量化必須用專門的校準(zhǔn)集來做校準(zhǔn)集要覆蓋各種光照和遮擋情況否則會導(dǎo)致某些場景下的召回率斷崖式下跌。在項(xiàng)目中實(shí)測FP16模型在邊緣設(shè)備上單幀推理約35毫秒INT8約22毫秒對單路視頻來說都足以保證每秒25幀的實(shí)時(shí)鏈路。6.2 多路視頻流的幀率分配策略這套系統(tǒng)實(shí)際要同時(shí)接8路攝像頭如果每路都全幀率做檢測邊緣設(shè)備的算力直接打滿跑不動。我的做法是把檢測做成一個(gè)幀分級處理的流程第一級是輕量的運(yùn)動檢測每隔一幀計(jì)算畫面差異只有畫面存在顯著變化的通道才送入檢測模型。畫面完全靜止的通道比如老人長時(shí)間坐在同一個(gè)位置看書可以大幅降低檢測頻率節(jié)省計(jì)算資源。 第二級是當(dāng)RPN階段出現(xiàn)了fall類別的候選框時(shí)系統(tǒng)自動切換到該通道的優(yōu)先處理模式把該路攝像頭的檢測頻率提升到最高并進(jìn)入時(shí)序確認(rèn)邏輯。 第三級是檢測出事件后把報(bào)警信息推送業(yè)務(wù)平臺同時(shí)保存報(bào)警前后各10秒的視頻片段用于人工復(fù)檢和證據(jù)留存。這套策略下來8路視頻同時(shí)在線時(shí)的平均推理資源占用大約只有滿載的40%重要事件的響應(yīng)速度反而更快了因?yàn)樗懔Ρ粍討B(tài)調(diào)度到了真正需要關(guān)注的通道上。6.3 報(bào)警業(yè)務(wù)的兜底設(shè)計(jì)模型永遠(yuǎn)會有失誤所以在業(yè)務(wù)層面必須留兜底。我在這套系統(tǒng)里做了兩個(gè)機(jī)制一個(gè)是延遲確認(rèn)。檢測到疑似跌倒后系統(tǒng)進(jìn)入確認(rèn)狀態(tài)不直接觸發(fā)報(bào)警而是等待時(shí)序投票模塊的結(jié)果。如果確認(rèn)期間目標(biāo)移動恢復(fù)正常比如其實(shí)只是蹲下又站起來了報(bào)警自動撤銷。這個(gè)機(jī)制能擋住大部分瞬時(shí)誤報(bào)代價(jià)是報(bào)警延遲約0.5秒。另一個(gè)是事件回看與人工復(fù)核。所有觸發(fā)報(bào)警的事件都附帶一段視頻片段閾值調(diào)參時(shí)以這些歷史樣本為準(zhǔn)做新一輪難例挖掘擴(kuò)充訓(xùn)練集。換句話說這個(gè)系統(tǒng)具備一個(gè)持續(xù)進(jìn)化的閉環(huán)現(xiàn)場出現(xiàn)的每一個(gè)誤報(bào)和漏報(bào)都會沉淀成下一個(gè)版本模型的訓(xùn)練數(shù)據(jù)。最后說一個(gè)項(xiàng)目經(jīng)理不會告訴你、但做這類項(xiàng)目早晚會碰上的實(shí)話整個(gè)項(xiàng)目的工期里訓(xùn)練模型只占一小部分真正消耗時(shí)間的其實(shí)是標(biāo)注規(guī)范的反復(fù)打磨、現(xiàn)場場景的樣本采集和部署后誤報(bào)的持續(xù)調(diào)優(yōu)。模型結(jié)構(gòu)的改進(jìn)能帶來精度上限但數(shù)據(jù)質(zhì)量才決定系統(tǒng)在真實(shí)環(huán)境里到底能不能用。希望這套從選型到改進(jìn)再到部署的完整路徑能幫你少走幾步冤枉路。