訓練資料前處理實作
*資料前處理是極為龐大且複雜的工作
入坑之前
為了讓資料前處理更有效率,這邊提供幾樣工具,在適當的時機可以派上用場:
GrepWin - 除了可以批次更改檔名外,最厲害的是可以批次更改文件中的文字。
Flexible Renamer - 超強大的更名軟體,可以套用許多規則來大量命名資料夾或檔案。
Ken Rename - 基礎的批次改檔名工具,適合不複雜、較有規律的工作。
跌入坑洞
由於我們蒐集完了馬偕醫院成錠區的 274 種藥品共 39517 張照片,所以資料前處理變成一件極龐大的工作。
Step 1. 照片彙整與檢查
要建立如此大量的照片資料庫,我們一共有 6 位參與拍照的夥伴,在彙整大家的檔案後,我們必須逐一檢查照片的數量、方向、尺寸是否正確。
有缺失、遮擋或損壞的照片,我們就得請負責該藥品的同學回到馬偕將資料補齊;而手機會自動旋轉照片方向的問題,我們也得手動將所有藥品轉正。
也因此,當初我們在拍攝照片時,會在藥品的上方放上一個明顯的物品作為「錨點」,以方便在手動轉向時可以較順利的進行。
Step 2. 資料夾命名
接著,我們得統一大家的資料夾命名規則。
根據馬偕醫院提供的藥品清單,我們將所有資料夾的命名規定為:
<位置>_DrugShortName_<劑量>_<back/front>
而且要去除全型文字與所有特殊符號,並將空格都使用底線來代替。
*為什麼要特別標注 front 或是 back 呢?
因為我們要將藥品的正反面分開訓練,以後我們就可以透過一台攝影機辨識正面、一台攝影機辨識背面,以提高辨識效果。
Step 3. 圖片尺寸重整
在上一份文件,我們有提到「在進行深度學習的 Training 時,如果送入的照片畫質太高,光是靠 YOLO 內建的 Re-Size 就會花費很多時間」。
所以我們使用格式工廠工具,將所有 4:3 的圖片都縮減為寬度為 1000px 的尺寸。
特別注意:使用格式工廠 Re-size 後,有些圖片會被旋轉,有些圖片會被縮成怪怪的尺寸(如變成高度 1000px),所以一定要再檢查並處理一次。
Step 4. Cropping 與 XML 製作
Re-size 後的照片,我們就分配給大家來進行這一步驟的處理。
這裡我們採用實驗室夥伴 rachelchan 的 GitBook 來建立環境,並實作 Cropping 與 XML 檔案的產生。
裡面的步驟有:環境建置 -> Cropping 並產生 txt 檔案 -> 將 txt 檔轉換為 XML 檔案。
Step 5. 上面這個步驟
要花很多時間。
超級多。
超級多。
超級多。
Step 6. 當你快受不了的時候
就代表你快處理完了。
處理完的檔案,會有這些東西:
- 每種藥品都有一堆 Re-size 後的圖檔。(之後會再用到)
- 每種藥品只有一個 txt 檔。(不會再用到)
- 每種藥品都有一堆 XML 檔。(之後會再用到)
Step 7. 順序編號
因為 YOLO 在訓練時,必須將所有訓練圖庫與檔案都放在同一個目錄下,所以我們得將 Re-size 後的圖檔與 XML 檔從數字 1 開始,一路編號到圖檔數量:正面為 1.jpg 到 19761.jpg、反面為 1.jpg 到 19756.jpg。
XML 檔也要用相同的規則編號:正面為 1.xml 到 19761.xml、反面為 1.xml 到 19756.xml。
這邊我們使用 Jeffrey Lin 所撰寫的 Python 工具,可以快速地將階層式資料夾中的所有檔案編號更名完成。你只需要在最後搜尋 .jpg 或 .xml 將編號完的檔案全部拉出來即可。
注意!
1.jpg 對應的圖片資訊,必須是 1.xml。 如果相同檔名的圖片與 XML 檔無法配對,訓練個半死也是不會有結果的!
Step 8. 建置 YOLO 環境
終於!我們完成一半了。
接下來就要跟隨文件中 YOLO 藥品辨識訓練章節的步驟進行。