Try   HackMD

有時候,結果錯並不完全是壞事--至少它讓我們有重新審視演算法的機會,並更加了解AI模型做了什麼和沒做到什麼。

Image Not Showing Possible Reasons
  • The image was uploaded to a note which you don't have access to
  • The note which the image was originally uploaded to has been deleted
Learn More →

這張圖片是一個使用OpenVINO的範例,它的功能是讀取照片中gauge(中文多稱為儀表)的數值。我們可以簡單想像,如果一間傳統工廠並不想大幅度的更新他們的儀表系統,又想讓AMR進工廠做定時的抄表作業時,這個已經量化過的程式就可能派上用場。

當然,眼尖的各位肯定發現問題了,這個讀值並不準確--實際上或許36.3會比較正確?

發生錯誤時,我們首先檢視演算法:一張照片經過三個步驟來判讀數據,第一個步驟是抽取出包含儀表的區域(SSD);第二個步驟是將指針和刻度標記出來,這會使用到圖像分割技術;第三個步驟就很單純了,把分割完的部分拉平,計算是第幾個刻度。我們使用手動指定刻度的上下限(因OCR本身運算太耗時):上限120下限0,共60個刻度,讓計算加速到可以邊緣部署的等級。

獲取圖片

SSD切割出區域

圖像分割出刻度和指針

計算指針位於第幾個刻度

輸出數值

我們看到流程之後首先可以確定,SSD部分肯定是沒有問題的。因此,嘗試檢查圖像分割的部分,我們分別用白色顯示被標記為刻度的像素,並以紅色顯示被標記為指針的像素:

Image Not Showing Possible Reasons
  • The image was uploaded to a note which you don't have access to
  • The note which the image was originally uploaded to has been deleted
Learn More →

恩,發現問題了,我們注意到在圖片的左下角,也就是圖片中的這個地方:

Image Not Showing Possible Reasons
  • The image was uploaded to a note which you don't have access to
  • The note which the image was originally uploaded to has been deleted
Learn More →

這邊由於使用方框代表0刻度,致使實際上的刻度和我們手動指定的有落差,而要修正這個錯誤有幾個方式可以進行:

  1. 將影像分割能讀取到的刻度範圍設為上限120下限2,共59個刻度
  2. 加入OCR,以區間的方式讀取刻度。以這例子為例就是OCR後,知道指針在20~40間,10個刻度的第8個刻度後一點點。
  3. 如果有額外資訊,比方說位置資訊,加上額外的演算法在這類儀表讀取時補上一個刻度
  4. 直接把錶面那格塗黑(?)
  5. 依靠OCR取出最大最小值的角度,再抓指針的角度內插數據

當然,我們可以依照實際狀況選擇使用哪一種方式來補全這個漏洞,而這就是人類能做GPT很難做到的事情了。