- 訓練環境:colab ## rt-detr ### transformer [可選模型](https://huggingface.co/PekingU) - [參照1 roboflow](https://blog.roboflow.com/train-rt-detr-custom-dataset-transformers/) - [參照2 某人的 github](https://github.com/roboflow/notebooks/blob/main/notebooks/train-rt-detr-on-custom-dataset-with-transformers.ipynb) ### 實驗一 - 參數設定 - dataset: hat helmet - model: PekingU/rtdetr_r50vd_coco_o365 - 實驗過程資料 - 訓練時間: 12m - 實驗結果1 train 20 epoch ![截圖 2024-10-11 上午10.25.52](https://hackmd.io/_uploads/SJkanWUJkg.png) - 實驗結果2 train 50 epoch ![截圖 2024-10-11 上午10.55.35](https://hackmd.io/_uploads/SJU3mf8yJe.png) ![image](https://hackmd.io/_uploads/HJoGVzLyJx.png) - 可以看到整體有偵測過多物件的狀況發生,推測可能是較大的模型需要更多的資料量去做訓練,小資料及訓練太久可能會有 overfitting 的現象發生 ### 實驗二 - 參數設定 - epoch: 50 - dataset: hat helmet - model: PekingU/rtdetr_r18vd_coco_o365 - 實驗過程資料 - 訓練時間: 5分鐘左右 - 實驗結果 ![截圖 2024-10-11 上午10.37.27](https://hackmd.io/_uploads/H1Xukf8kyx.png) - 部分實驗結果圖 ![image](https://hackmd.io/_uploads/Bk1tJfLJJx.png) ![image](https://hackmd.io/_uploads/B1IYyfLkJg.png) ![image](https://hackmd.io/_uploads/S1hYyfLJkg.png) - inference time: 40 ms (最理想上) ![截圖 2024-10-11 上午10.42.59](https://hackmd.io/_uploads/H1zpgz8y1x.png) - 結論: - 其實也不能算他錯,因為 GT 中的確在人這個物件裡面沒有標注的很好 - confusion matrix ![image](https://hackmd.io/_uploads/HJi3JzIkke.png) - 可以看到在實驗結果圖之中,蠻多物件在 GT 沒有標註,但實際在 inference 時卻有辨識到,所以實際的結果要比上面的數據還要更理想 ### 實驗三 - 參數設定 - epoch: 50 - dataset: hat helmet - model: PekingU/rtdetr_r34vd - 實驗過程資料 - 訓練時間: 7分鐘左右 - 實驗結果 ![image](https://hackmd.io/_uploads/r1_A8GIkyx.png) ![image](https://hackmd.io/_uploads/HyYtvzIkke.png) ![image](https://hackmd.io/_uploads/HkQqvM8y1e.png) ![截圖 2024-10-11 下午3.48.09](https://hackmd.io/_uploads/Hk_B_IUyJg.png) - inference time: 50 ms - 看起來有一樣的狀況 ## YOLOV8 實驗 ### 實驗一 - 參數設定 - epoch: 20 - dataset: hat helmet - model: yolov8s - conf: 0.3 - 實驗過程資料 - 訓練時間: 1分鐘左右 - 實驗結果 - inference time: 24 ms ![image](https://hackmd.io/_uploads/ByUGQ88yyx.png) ![截圖 2024-10-11 下午3.35.17](https://hackmd.io/_uploads/SyNrr88Jyx.png) ### 實驗二 - 參數設定 - epoch: 20 - dataset: hat helmet - model: yolov8m - conf: 0.3 - 實驗過程資料 - 訓練時間: 2分鐘左右 - 實驗結果 - inference time: 30 ms ![image](https://hackmd.io/_uploads/SJijFIIJJx.png) ![image](https://hackmd.io/_uploads/r1yuv8I1Jg.png) ![截圖 2024-10-11 下午3.49.07](https://hackmd.io/_uploads/ByLtOL81kl.png) ### 實驗三 yolov8s 50 epoch 24ms inference time ![image](https://hackmd.io/_uploads/HJo24wL1Je.png) ![image](https://hackmd.io/_uploads/r1jUrwIkJg.png) ### 實驗四 yolov8m 50 epochs ![image](https://hackmd.io/_uploads/Syhrwv8Jke.png) ![image](https://hackmd.io/_uploads/H1DIwPL11g.png) ## 10/18, 10/21 實驗結果 ![rtdetr 18 vs 34](https://hackmd.io/_uploads/BJAlQS7xJl.png) - 這邊的實驗結果是採用訓練時的 loss 計算 - 雖然rt-detr18vd 有持續在進步,但可以看到在 100 epochs 時他的精度還卡在 mAP 14 左右,在 rt-detr34vd 上面在 100 epochs 時就已經達到的接近 mAP 60 了,所以在 rt-detr 在小資料集的學習力方面,rt-detr 34vd 的效果勝過 rt-detr 18vd ![34vd 100epoch vs 200epoch](https://hackmd.io/_uploads/Skq-RHXxye.png) - 這張圖可以顯示出 rtdetr 34的確在 200 epoch 的預測效果有比 100 epoch 好更多,所以這邊再去多測試一個 300 epoch 是否會再繼續進步,但訓練時間上 YOLO 是大勝 rt-detr 的 ![截圖 2024-10-21 上午11.46.38](https://hackmd.io/_uploads/SyaoArQgkg.png) - 這個是 rt-detr 在測試資料即時的 mAP 表現 ## 10/22 實驗結果 - rtdetr r34 300epochs 的 confusion matrix,目前看起來效果沒有比較好,所以暫時不在往下測 400 epochs ![rtdetr_r34vd_300_confustion_matrix](https://hackmd.io/_uploads/HyV2dc4gJl.png) - 我這邊在訓練時有使用 2/3 的 warmuup ![rtdetr 18 vs 34](https://hackmd.io/_uploads/SJ9GA9Exke.png) - [transformer warm-up paper](https://openreview.net/forum?id=B1x8anVFPr) ## 目前候選的 Dataset 1. [車牌](https://universe.roboflow.com/philippine-license-plates/thesis-license-plates-s4a0t) - 537:233 輕微不平衡、只有兩個類別辨別新舊、車牌 2. [不同車型](https://universe.roboflow.com/weed-detection-mdyo4/camera-security-surveillance) - 24 種類別、資料集需要再做一些處理 在資料集中 pickup, pickup car 是兩個類別,但實際上講的是同一種東西 3. [箭頭](https://universe.roboflow.com/arraws-eh2wg/arrows_obj_det) - 9種類別 每個類別資料落在 80~400 之間,總共有 1k 左右的資料可以用 4. [分辨不同的草](https://universe.roboflow.com/jadepolin01/weeds-detection-7cawa) - 8種類別 每個類別落在 400~500 左右,資料平衡,總資料量 3k 左右 5. [Detected Computer Vision Project](https://universe.roboflow.com/dhimas-hediatma-2ly20/drone-detected) - 偵測無人機 一種類別 1k 左右的資料量 ## 10/23 實驗資料整理 ![截圖 2024-10-23 上午11.49.37](https://hackmd.io/_uploads/BJZDGlUlJe.png) - 這邊整體的資料有與上次不一樣的點,這次的 inference time 統一採用 time package 去計時取平均,之前 YoloV8 的 inference time 是採用他們的 package 顯示的結果來填寫的,有發現到他們呈現的與我計算出來的有一段落差,所以採用 time 評估較為公平。 ![截圖 2024-10-23 上午11.50.42](https://hackmd.io/_uploads/HJzsMgIeyg.png) ![截圖 2024-10-23 上午11.52.44](https://hackmd.io/_uploads/BkRfQxIxyl.png) ### 實驗結論 1. YoloV8 在訓練時如果太多 epoch 反而不會有太好的效果 ![F1_curve](https://hackmd.io/_uploads/BkB5XxLgJg.png) ![F1_curve](https://hackmd.io/_uploads/ByZnXeUlJe.png) 第一張圖是 yolov8s 在訓練 75 epochs 的 f1 score 與 confidence 的表現圖,第二張圖片則是 yolov8s 訓練了 100 epochs 的圖,依照這邊的實驗結果,yolov8s 反而不太適合訓練太長的時間 ### confusion matrix 1. yolov8s ![yolov8s](https://hackmd.io/_uploads/r1oEzbUlye.png) 2. yolov8m ![image](https://hackmd.io/_uploads/ry4aGbIlJx.png) 3. rtdetr_r18vd ![image](https://hackmd.io/_uploads/rktzE-Ie1x.png) 5. rtdetr_r34vd 200 epoch ![image](https://hackmd.io/_uploads/H11e4WLgJe.png) ### inference 比較圖 ![combined_image](https://hackmd.io/_uploads/Hy70_lLxyx.png) ![combined_image](https://hackmd.io/_uploads/HJtx9x8eJl.png) ## 10/24 新增結論 目前觀測 rt-detr log 中的 eval_map 也就是當作是否除存 model 的 metric rt-detr34 在訓練之中所得到的 mAP50 最高達到 0.718 而實際最後在 training dataset inference 時只有 0.52 ,目前正在尋找原因中 ### confusion_matrix ![confusion_matrix](https://hackmd.io/_uploads/BJTd7qwgkl.png) - ultralytics rtdetr-50 ![rtdetr_r50vd_100_confustion_matrix](https://hackmd.io/_uploads/HJ5cX5wgyl.png) - transformer rtdetr-50 ![截圖 2024-10-24 下午5.34.59](https://hackmd.io/_uploads/rJkAVcweyg.png) ### 結論 - 整體的 inference time 沒有差距到太大,所以目前最大的問題點在於,要如何精進訓練的效果 ### call to action 1. 嘗試使用大資料集比較 yolov8 與 RTdetr50 的效果(再比較一次) 2. 調查一下 ultralytics 的超參數與設定到底有哪些,要怎麼樣才能在 transformer 上面有相似的效果 ## 10/25 ```python= !pip install roboflow from roboflow import Roboflow rf = Roboflow(api_key="EhQtt2zGNYR9MPbK0gV7") project = rf.workspace("weed-detection-mdyo4").project("camera-security-surveillance") version = project.version(1) dataset = version.download("yolov8") ``` ### ultralytics data argumentation - 使用新資料集,不同交通工具的紀錄 ``` albumentations: Blur(p=0.01, blur_limit=(3, 7)), MedianBlur(p=0.01, blur_limit=(3, 7)), ToGray(p=0.01, num_output_channels=3, method='weighted_average'), CLAHE(p=0.01, clip_limit=(1, 4.0), tile_grid_size=(8, 8)) A new version of Albumentations is available: 1.4.20 (you have 1.4.15). Upgrade using: pip install -U albumentations. To disable automatic update checks, set the environment variable NO_ALBUMENTATIONS_UPDATE to 1. ``` ![截圖 2024-10-25 下午3.35.27](https://hackmd.io/_uploads/HkJUc6Olke.png) - 訓練回合: 100 epoch - 訓練資料集:[不同汽車](https://universe.roboflow.com/weed-detection-mdyo4/camera-security-surveillance) ```python= !pip install roboflow from roboflow import Roboflow rf = Roboflow(api_key="EhQtt2zGNYR9MPbK0gV7") project = rf.workspace("arraws-eh2wg").project("arrows_obj_det") version = project.version(4) dataset = version.download("yolov8") ``` ## 表格統整 10/29 ![截圖 2024-10-29 上午11.49.13](https://hackmd.io/_uploads/S1mHs0aekl.png) ![confusion_matrix](https://hackmd.io/_uploads/r1UtTJRxke.png) 上面是 yolov8m ![confusion_matrix](https://hackmd.io/_uploads/SyRKayCeyl.png) 這個是 rt-detr ## 10/30 的實驗結果 ![截圖 2024-10-30 下午6.55.23](https://hackmd.io/_uploads/rkChecJZyl.png) ## 11/1 結果整理 ![截圖 2024-11-01 下午1.14.34](https://hackmd.io/_uploads/ryBamJfb1l.png) - 這邊可以看到當資料的量級提升的時候 100 -> 3700,yolov8m 與 rt-detr 的召回度差異就會顯著縮小 - 10/29 的 confusion matrix 在 left 與 right arrow 上面有明顯的混淆跡象,主要原因為在 data augmentation 上面有 left-right fliping 發生,這邊再關掉後得到 10/30 的結果 ### 箭頭 ![yolov8m_arrow_no_flip_confusion_matrix](https://hackmd.io/_uploads/ryhEvkfWkg.png =350x)![rtdetr_arrow_no_flip_confusion_matrix](https://hackmd.io/_uploads/Hk3EvkMZyg.png =350x) 左邊 yolov8m, 右邊 rtdetr ### 雜草 ![yolov8m_weed_no_flip_confusion_matrix](https://hackmd.io/_uploads/BynVvJzZ1g.png =350x)![rtdetr_weeds_no_flip_confusion_matrix](https://hackmd.io/_uploads/BJhNPkGbyl.png =350x) 左邊 yolov8m, 右邊 rtdetr - 這邊主要問題是,雖然 rt-detr 比較不容易漏抓到物件,但相對的也容易抓到背景 ### conf 不同的影響 ![yolov8m_weeds_0.3_confusion_matrix](https://hackmd.io/_uploads/r1qjokMZJg.png =350x)![rtdetr_weeds_0.3_confusion_matrix](https://hackmd.io/_uploads/Skcsskz-ye.png =350x) 左邊 yolov8m, 右邊 rtdetr | 改變 conf 0.01-> 0.3 | yolov8m | rt-detr | | -------- | -------- | -------- | | mAP50 | 0.851 | 0.848 | | mAP50-95 | 0.69 | 0.647 |