- 訓練環境: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

- 實驗結果2 train 50 epoch


- 可以看到整體有偵測過多物件的狀況發生,推測可能是較大的模型需要更多的資料量去做訓練,小資料及訓練太久可能會有 overfitting 的現象發生
### 實驗二
- 參數設定
- epoch: 50
- dataset: hat helmet
- model: PekingU/rtdetr_r18vd_coco_o365
- 實驗過程資料
- 訓練時間: 5分鐘左右
- 實驗結果

- 部分實驗結果圖



- inference time: 40 ms (最理想上)

- 結論:
- 其實也不能算他錯,因為 GT 中的確在人這個物件裡面沒有標注的很好
- confusion matrix

- 可以看到在實驗結果圖之中,蠻多物件在 GT 沒有標註,但實際在 inference 時卻有辨識到,所以實際的結果要比上面的數據還要更理想
### 實驗三
- 參數設定
- epoch: 50
- dataset: hat helmet
- model: PekingU/rtdetr_r34vd
- 實驗過程資料
- 訓練時間: 7分鐘左右
- 實驗結果




- inference time: 50 ms
- 看起來有一樣的狀況
## YOLOV8 實驗
### 實驗一
- 參數設定
- epoch: 20
- dataset: hat helmet
- model: yolov8s
- conf: 0.3
- 實驗過程資料
- 訓練時間: 1分鐘左右
- 實驗結果
- inference time: 24 ms


### 實驗二
- 參數設定
- epoch: 20
- dataset: hat helmet
- model: yolov8m
- conf: 0.3
- 實驗過程資料
- 訓練時間: 2分鐘左右
- 實驗結果
- inference time: 30 ms



### 實驗三
yolov8s
50 epoch
24ms inference time


### 實驗四
yolov8m
50 epochs


## 10/18, 10/21 實驗結果

- 這邊的實驗結果是採用訓練時的 loss 計算
- 雖然rt-detr18vd 有持續在進步,但可以看到在 100 epochs 時他的精度還卡在 mAP 14 左右,在 rt-detr34vd 上面在 100 epochs 時就已經達到的接近 mAP 60 了,所以在 rt-detr 在小資料集的學習力方面,rt-detr 34vd 的效果勝過 rt-detr 18vd

- 這張圖可以顯示出 rtdetr 34的確在 200 epoch 的預測效果有比 100 epoch 好更多,所以這邊再去多測試一個 300 epoch 是否會再繼續進步,但訓練時間上 YOLO 是大勝 rt-detr 的

- 這個是 rt-detr 在測試資料即時的 mAP 表現
## 10/22 實驗結果
- rtdetr r34 300epochs 的 confusion matrix,目前看起來效果沒有比較好,所以暫時不在往下測 400 epochs

- 我這邊在訓練時有使用 2/3 的 warmuup

- [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 實驗資料整理

- 這邊整體的資料有與上次不一樣的點,這次的 inference time 統一採用 time package 去計時取平均,之前 YoloV8 的 inference time 是採用他們的 package 顯示的結果來填寫的,有發現到他們呈現的與我計算出來的有一段落差,所以採用 time 評估較為公平。


### 實驗結論
1. YoloV8 在訓練時如果太多 epoch 反而不會有太好的效果


第一張圖是 yolov8s 在訓練 75 epochs 的 f1 score 與 confidence 的表現圖,第二張圖片則是 yolov8s 訓練了 100 epochs 的圖,依照這邊的實驗結果,yolov8s 反而不太適合訓練太長的時間
### confusion matrix
1. yolov8s

2. yolov8m

3. rtdetr_r18vd

5. rtdetr_r34vd 200 epoch

### inference 比較圖


## 10/24
新增結論 目前觀測 rt-detr log 中的 eval_map 也就是當作是否除存 model 的 metric
rt-detr34 在訓練之中所得到的 mAP50 最高達到 0.718 而實際最後在 training dataset inference 時只有 0.52 ,目前正在尋找原因中
### confusion_matrix

- ultralytics rtdetr-50

- transformer rtdetr-50

### 結論
- 整體的 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.
```

- 訓練回合: 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


上面是 yolov8m

這個是 rt-detr
## 10/30 的實驗結果

## 11/1 結果整理

- 這邊可以看到當資料的量級提升的時候 100 -> 3700,yolov8m 與 rt-detr 的召回度差異就會顯著縮小
- 10/29 的 confusion matrix 在 left 與 right arrow 上面有明顯的混淆跡象,主要原因為在 data augmentation 上面有 left-right fliping 發生,這邊再關掉後得到 10/30 的結果
### 箭頭

左邊 yolov8m, 右邊 rtdetr
### 雜草

左邊 yolov8m, 右邊 rtdetr
- 這邊主要問題是,雖然 rt-detr 比較不容易漏抓到物件,但相對的也容易抓到背景
### conf 不同的影響

左邊 yolov8m, 右邊 rtdetr
| 改變 conf 0.01-> 0.3 | yolov8m | rt-detr |
| -------- | -------- | -------- |
| mAP50 | 0.851 | 0.848 |
| mAP50-95 | 0.69 | 0.647 |