Bui~ 新系列博文將專注AI相關領域,想要學習高通藍牙相關知識請查看之前的系列或關注大博主聲波電波就看今朝
在CV(computer vision)中,Object detection是其中的一個核心任務,它可以在輸入圖像或視頻中識別並框出目標。這種應用在生活中應用很多,例如停車場的車牌識別,監控的物體識別,智能駕駛的車道車輛識別等等。平常我們不會看到它是怎麼框出識別物的,但是在debug模式下我們經常會看到下圖這樣的識別,識別到特定物體後會框出來並顯示他的類別和置信度,直觀得表現模型的準確性。
(圖片來自於Prediction - Deci AI Documentation Hub)
這種框框就是Object detection輸出的結果,這和我們訓練數據時提供的label數據差不多,只是少了置信值。模型通過對比輸出結果和輸入label的差異來調整模型參數。因此label的輸入準不準確,決定了模型輸出準不準確。因為不同的模型要求label的格式會有所不同,目標類型、標記方框坐標這些數據的排序;label存儲的方式;有時訓練數據的文件架構也要考慮,這些設置都要和訓練框架匹配好才能訓練出正確的模型。因此在模型訓練的時候,我們要留意訓練模型的要求,根據要求去調整label數據的格式。
首先我們來了解一下label數據包含的主要數據——目標類型和標記方框坐標。目標類型主要用索引值的方式保存;方框坐標就有多種表達方式:
- 左上角右下角(XYXY):這種是最直觀的方式,通過對角坐標畫一個矩形
- 左上角寬高(XYWH):這種只有一個左上角坐標,加上寬和高之後得到右下角坐標,就能畫出矩形了
- 中心點寬高(CXCYWH):這種只有一個中心點坐標,加減一半的寬和高之後也能得到左上角坐標和右下角坐標
除了格式不一樣之外,還有一些會對坐標數據先進行normalized處理,還原坐標時只需要乘上圖片對應的寬和高即可。例如一個數據集的坐標格式是CXCYWH,其中一個圖片寬高是200*100,有一個label坐標是【0.63 0.66 0.24 0.22】,要將它轉成左上右下坐標,
- 將CX乘上圖片的寬得到實際中心點x:63 * 200 = 126
- 將CY乘上圖片的高得到實際中心點y:66 * 100 = 66
- 將W乘上圖片的寬得到實際方框w:24 * 200 = 48
- 將H乘上圖片的高得到實際方框h:22 * 100 = 22
label的數據格式不固定的,目標類型和標記方框坐標也可以互相調換位置。再來是文件保存格式,一般是保存在文本文檔或json文檔中。如果是文檔格式不兼容的話,可以用python腳本去轉換,現在很多訓練框架也有提供轉換接口。方框坐標也是這樣處理。如果是在意文件架構的,也有腳本去整理。如果框架沒提供方法,網絡也能找到大量的例程。
Object detection的label格式大概是這樣,不同的模型或框架有不同的要求。在訓練時,甄別出來,用框架api或自寫腳本去設置裝換。下一篇將介紹pytorch如何準備訓練數據,包含label數據在哪進行轉換哦。
以上是本期博文的全部內容,如有疑問請在博文下方評論留言,我會儘快解答(o´ω`o)و。謝謝大家瀏覽,我們下期再見。
FAQ 1:數據集的格式沒寫明,要怎麼判斷他的坐標格式?
A1:標誌這種也能判斷:Pascal-VOC format(xyxy)COCO format(xywh)YOLO format(cxcywh)。再不行就在那張圖片上把坐標畫上去看看
FAQ 2:圖像數據格式要匹配嗎?
A2:要的,但基本是那三個通道調一下
FAQ 3:有些數據集的json文件還有別的參數,要怎麼用?
A3:要根據數據集的說明再去處理
FAQ 4: json文件的label類型用了字符串表示
A4: 如果框架不能識別,就要寫一張表,把字符串轉成索引,這樣模型才好訓練
FAQ 5:為什麼有些數據集的json文件只有一個,而有些是一張圖片對應一個文件
A5: 只有一個文件時,文件裡面會記錄每個sample的文件名字和對應的label數據,必要時提取出來即可
評論