top of page

工作內容

工作環境介紹

工作環境介紹

我們主要在家裡做專題的進度,並於每週二17:10在R1616與教授Meeting,針對這週學習進度和專題進度討論,遠距之後就把實體meeting取消,並改由線上Teams討論的方式進行。

老師在暑假時提供了一台新的server供我們使用,伺服器中有RTX3080顯卡,讓我們在做機器學習訓練時更加順利。並且我們的meeting時間改為星期五下午。

工作詳述

工作詳述

AI-CUP競賽「尋找花中君子-蘭花種類辨識及分類競賽」

在實習開始的前兩週,我們各自發想這次專題的題目,在meeting時報告想法和預計功能,老師也以專業的觀點向我們分析了我們各個提案的可行度和預計功能執行解說,也提醒我們要想一下資料的來源和這些資料和研究是否會牽涉到隱私權和道德倫理的問題,這些都是我們當初所沒有考慮到的。起初我們決定以辨識高速公路上的車輛為主題,使用和老師本身就有的影像進行分析,此時老師也提供另一個想法-AI-CUP的比賽資訊,經過討論後我們決定參加此次AI-CUP比賽中的辨識蘭花項目當作我們專題的題目,並試試看這次比賽。

準備比賽,學習基礎知識

由於從我們報名(3/7)到比賽截止(6/2)只有短短三個月的時間,我們必須從沒有接觸過影像辨識/機器學習到能成功訓練出一個可用的模型,老師說:我們能完成越多進度越好,比賽結束後可以繼續研究比賽的題目,並更精進我們的研究。這樣讓我們的壓力比較沒有那麼大了。我們的學習方式是,理解一個知識後,老師就會在meeting時給我們一個新的關鍵字讓我們繼續研究,依此類推,就可以慢慢地從基礎到進階。

剛開始我們先從基礎的CNN (Convolutional Neural Network卷積神經網路)開始學習,並學了使用它來辨識手寫數字,之後我們就陸續學習了更多的網路架構,並接觸到了YOLOv4,最終我們決定使用YOLOv4來處理比賽內容。

初學習YOLO-口罩辨識

首先我們先從Github上使用別人已經寫好的範例來嘗試YOLOv4,我們嘗試著辨識一個人是否有戴著口罩,經過了約10幾小時,2000張圖,在Google Colab上的訓練,我們成功的將模型訓練完成,並實際測試有著約90%的準確度。

​收斂曲線圖

實際辨識結果測試

實際辨識蘭花 – 比賽期間

實際辨識蘭花的過程前置作業非常多,主辦方所給的訓練資料有2190張蘭花照片以及一個CSV檔紀錄每個檔名所對應的class,共有218類,老師建議我們先將檔案的名稱做更改,將檔案的名稱上加上類別名,方便我們人辨識,以及之後讓電腦讀取時方便許多。

我們寫了一個簡單的Python檔,讀取CSV檔中的class欄位,並透過Python的rename()函數將檔案重新命名加上class。

前面訓練辨識口罩模型時是使用Google Colab做訓練,但我們發現在上面訓練時會遭遇到許多問題,例如時常斷線,尖峰時段會被踢出之類的。所以我們研究了一下,將Google Colab上的程式碼搬到我的電腦local上,好處是訓練比較穩定,但壞處就是當我在訓練時我的電腦性能會被吃滿,讓我不太能用電腦做其他的事情。

由於yolo訓練時不能只有單純每張圖的label,必須要自行在圖內標註框框,讓電腦知道某一個class在圖片的精確位置。但是有2190張照片,人工標註所要花費的時間會非常多,所以我們先自行訓練一個能辨識花的模型,再使用那個模型去辨識花,再使用Darknet內建的Pseudo-labelling功能,將每張圖去產生一個yolo格式的label檔,但這樣會造成一個問題就是每張圖的類別都只有一個,因為當初訓練時所用的class只有「花」一個,所以我們再透過一個python程式去讀取檔名的class,並將yolo格式的label檔更改為正確的class,這樣就完成前置作業了。

接著我們使用YOLOv4直接對2190張圖片做訓練,但是由於class過多,這樣會導致訓練時間非常長,當時預估要跑800小時,由於實在是太長了所以我們使用了另一個model-YOLOv4-tiny,YOLOv4-tiny只需要90小時,相比之下省了許多時間,我們另外還利用了更快的YOLO-fastest來訓練,並利用data-augmentation來產生更多資料以利我們的訓練,最後總共訓練出了YOLOv4-tiny、YOLO-fastest、YOLO-fastest(含有augmentation的)三個模型來參與比賽。

比賽的結果我們模型的準確率約63%。

下圖為我們實際的流程圖:

依據上圖,比賽共上傳5個解答:

C+D1: 63.4%

C+D2: 63.3%

D+D1: 52.4%

E+D1: 60.3%

E+D2: 60.1%

 

以YOLOv4-tiny所訓練出來的效果最佳

​比賽過後-優化流程

比賽參與過後,我們欲使用GAN來對模型做更進一步的加強,原本是想使用GAN生成更多訓練集,但中途遇到了幾個瓶頸,訓練效果不如預期,第一個,訓練出來的效果十分不好。接著遇到的問題是訓練成功之後解析度過低,只有64*64,於是我們就沒有將GAN所產出的結果作為訓練及使用,而是直接將它做為測試集,去測試我們之前所訓練出來的模型(主辦方沒有提供正確答案,所以我們只能這樣做測試)。

接著我們有研究出新的方法:StyleGan能產生解析度較大的圖片(256*256),於是我們透過它來產生8類的圖片,並用其當作測試集做測試,準確度有達到95.5%

接下來的目標,我們將辨識花分為兩個步驟,先將要辨識的花擷取裁切出來,然後再做辨識,我們希望這樣子能讓辨識時圖片其他非花的區域的干擾降到最低。

實習期間完成之進度

實習期間完成之進度

1.     練習用基礎CNN模型、AlexNet、Inceptionv1對MNIST資料集做辨識。

2.     了解Inceptionv1 ~ Inceptionv4 、AlexNet、Resnet模型架構。

3.     利用YOLOv4、YOLOv4-tiny、YOLO-fastest完成蘭花辨識。

4.     利用GAN生成新的蘭花圖片以做測試。

5.     Python程式設計。

DEMO

DEMO

DEMO程式截圖
DEMO影片
bottom of page