網路城邦
上一篇 回創作列表 下一篇  字體:
作動態辨識軟體最深的恐懼→你的程式當了!
2018/04/20 08:34:16瀏覽1347|回應0|推薦8

因為近年影像畫素大幅提升,影像辨識可以作的事情(辨識的目標)因此暴增之外,大家可能沒意識到的是:因為影像取得來源已經由單張照片的拍攝,變成攝影設備的持續監看!所以辨識軟體不能再停留在單張辨識的水準,任何辨識軟體都必須配合串流影像,持續的動態辨識才能符合客戶的期望。理論上,只要連續擷取停格畫面作單張辨識,輸出辨識的結果,不就是動態辨識了?事實上沒這麼簡單。

首先,串流影像是持續變化的,我們無法預知辨識的目標何時出現?出現在畫面中的停留時間會多久?所以必須盡量密集的擷取影像,然後盡快的完成辨識,以免工作塞車,辨識慢了,想找的目標一閃而逝,軟體辨識不到,客戶就會森77了!所以由靜態到動態辨識第一個挑戰就是軟體辨識速度通常要快很多。

提升速度的方式首先是演算法的效率要提高,因為影像畫素提高,很多傳統的影像辨識演算法中,動不動就作一個完整影像尺度的掃描濾波之類的動作,必須極力避免!每少一個全圖運算程序,你的軟體可能就會快個兩三成!

譬如幾乎所有「影像增強」的處理程序我都是不作的!事實是這類程序原始的目的多半是讓人眼「看得清楚」一點,對於Yes or No的影像辨識目的來說影響不大,在昏暗陰影中的車牌,只要字與背景的亮度差異可以分辨就能辨識,不必先將影像弄亮的!我好像又洩漏了一些商業機密了?

演算法的加速大致上是以幾趴到幾十趴的比例慢慢提升的,電腦CPU每一代產品的時脈頻率提升幅度也差不多,但是多核心電腦與平行運算的技巧提升的速度是以幾倍來算的!我們怎麼能放著不用呢?所以我估計不用平行運算的動態辨識軟體,跑起來一定會像腳踏車與機車賽跑!不能看的!

所以這應該不算商業機密,任何動態辨識軟體一定都會嘗試用多執行緒同時作多張影像的同步辨識!如果你辨識一張百萬畫素的影像時間是0.2秒,原本一秒鐘辨識流量是5張,用四個執行緒呢?理想狀況下就可以變成20張了!我的軟體一秒動輒辨識數十次,就是這麼來的!前些時去參觀展覽,看到其他廠商也都能達到近似的速度,應該就是平行運算的效果。

但是說來容易,高速的擷取影像以及多執行緒程式都是有點超出一般電腦作業系統的「例行」工作,所以常常會出現一些資源衝突的意外當機!因為不是程式邏輯錯誤,所以很難除錯,開著程式跑幾小時都沒事,回家睡覺半夜就忽然說記憶體不足,而且只是「暫時」還「隨機」的!這很像車禍,不會常發生,但也很難保證絕不發生!

但是我們作軟體的人可不能讓軟體上線後三不五時地當機!客戶即使不要我們賠償損失,光是必須即時維護的壓力就會讓我們睡不著覺了!一個月當一次都不行!換言之,靜態辨識軟體像是照相機,偶爾喀擦一下,要壞掉也不容易,但是攝影機24小時在「燒」,品質不穩定就隨時有機會停擺了!這是完全不同等級的技術與品質要求。

軟體方面我們能作的就是盡量寫好所有例外(意外)的處理程序,甚至發現一些變數異常時,直接搶在可能當機之前自己就來個軟體重設!很多這類軟體還會在作業系統執行看門狗程式,發現該軟體當掉時,用別的軟體重新啟動這個軟體,也就是請「鄰居」幫忙關掉重開啦!

所以研究作動態辨識軟體不容易的!這兩年來我的主要研發工作其實是這個,還好漸漸摸熟之後,可能遇到的意外都碰過也處理過,就比較睡得著覺了!但是隱藏內心最深的恐懼還是忽然之間某客戶焦急來電說:「程式當了!」須知我的軟體賣出門,多半就一直在第一線24小時工作,永遠不下班的!恐怖哦!

( 心情隨筆工作職場 )
回應 推薦文章 列印 加入我的文摘
上一篇 回創作列表 下一篇

引用
引用網址:https://classic-blog.udn.com/article/trackback.jsp?uid=yccsonar&aid=111578051