[TOC] # 11/13 ### 完成事項 :::info 1. 比較yolo-v7、SA-original、SA-patch,==yolo-v7表現較好== 2. Dataset整理,先使用白色手把200張training,9張testing 3. SA都沒使用任何augmentation 4.  ::: ### TODO :::warning - [x] 使用recall、precision、AP和IOU去做評估各模型的performance (Heng) - [x] SA-original加入points的prompt做測試 (Heng) - [x] SA-patch加入points的prompt做測試 (Heng) - [x] Yolo-v7使用patch圖片作為訓練 (YA) - [x] 把不同的anomaly圖片挑出來作為Test照片 (Heng) - [x] 整理所有dataset (YA) ::: # 11/20 ### 完成事項 :::info 1. 測試完SA加入points的prompt的效果 (變更差,不知道原因) 3. 整理完全部的dataset 4. 尋找sota model: * Mask2Former (需要將json檔處理成coco格式) * OneFormer (需要將json檔處理成coco格式) * WinClip (沒有release training code) * 有現成的可以試試看[anomalib](https://github.com/openvinotoolkit/anomalib) * CFA * CFlow * DFKDE * DFM * DRAEM * DSR * EfficientAd * FastFlow * GANomaly * PADIM * PatchCore * Reverse Distillation * STFPM * UFlow 5.  ::: ### TODO :::warning - [x] 統計dataset (Heng、Ya) - [x] 嘗試將label轉為 coco格式 (Heng) - [x] 嘗試將label轉為 yolo格式 (Ya) ::: # 11/27 ### 完成事項 :::info 1. dataset統計完畢 :::spoiler | 類別 | 白色 | 黑色 | |:--------------------------:|:----:|:----:| | BackGround | 0 | 0 | | Pass | 378 | 94 | | Black_point | 131 | 5 | | Border | 64 | 37 | | Severe_scratches | 46 | 81 | | Bright_Marks | 127 | 192 | | Scractches_Blackbackground | 25 | 0 | | Dirty | 401 | 0 | | AnotherColor | 58 | 0 | | Glossy | 27 | 25 | | ⚠️black_Marks | 63 | 0 | | Small_scratches | 72 | 45 | | Friction | 10 | 49 | | ReturnPoint | 11 | 0 | | Assembly | 27 | 0 | | Buttom_scratches | 149 | 49 | | Buttom_Friction | 39 | 45 | | ⚠️Black_Mark | 0 | 69 | | Lightbottom | 0 | 93 | | Buttom_foreign | 0 | 10 | | NeedPeopelCheck | 0 | 7 | | Glossy_Line | 0 | 38 | | 總共數量(張) | 971 | 420 | | 共22個類別 | | | ::: ::: ### TODO :::warning - [x] 訓練Yolo-v7 的Object Detection (Ya) - [x] 訓練Cascade Mask R-CNN (Heng) - [x] 完善Label轉換的code (Heng, Ya) ::: # 12/4 ### 完成事項 :::info 1. Dataset可以自動轉換到想要的format 2. 訓練Yolo-v7 的Object Detection (效果非常差) 3. 訓練Cascade Mask R-CNN (效果很不錯) 4. 統一訓練參數還有評估標準 (Instance Segmentation) 5. 研究mmdetection ::: ### TODO :::warning - [x] 訓練yolo-v7 seg (Heng) - [x] 訂定標準、數據結構等 (Heng) - [x] 畫架構圖 (YA) ::: # 12/11 ### 完成事項 :::info 1. 完成整體的超參數設定、評估標準 2. 完整訓練完yolo-v7的Instance Segmentation 3. 完整訓練完Cascade-Mask RCNN ::: ### TODO :::warning - [x] 取出最好的epoch功能,可以以多種指標來決定(ex: training total loss) (Heng、Ya) - [x] 自動輸出評估數據,可為excel、json等格式 (Heng) - [x] 自動輸出訓練曲線,如recall、precision、loss等 (Heng、Ya) - [x] 自動計算inference time、nms time、preprocessing time (Heng、Ya) ::: # 12/18 ### TODO :::warning - [x] 完成yolov7-obj 的 training & evaluation code (Heng) - [x] subdivision工具 (YA) - [x] class分類統整 (姿伶) - [x] 使用文件 (Heng) ::: # 12/25 ### TODO :::warning - [x] Usage Document 統整訓練過程、提交步驟 (Heng) - [x] 整合training curve generator (Heng) - [x] YOLO-v7 object detection curve generator (YA) - [x] Evaluation 增加 Precision、Recall (Heng) - [x] Subdivision 增加 stride 功能 (YA) ::: # 1/2 ### TODO :::warning - [x] 重新調整evaluation code(Heng) - [x] Mask2Former (Heng) - [x] UI (YA) - [x] Training YOLO-v7 (Heng、Ya) ::: # 1/8 ### TODO :::warning - [x] Inference UI (Ya) - [x] EffcientAD (Ya) - [x] CO-DETR (Heng) - [x] Training YOLO-v7 Object Detection (Heng) - [x] Training Cascade-Mask RCNN (Heng) ::: # 1/15 ### TODO :::warning - [x] Training Mask2Former (Heng) - [x] Training EfficientAD (YA) ::: # 1/22 ### TODO :::warning - [x] Training YOLO-v7 Object Detection其他模型 (Heng) - [x] Evaluation code可以跑0.3~0.9 (Heng) - [x] Training curve顯示到網頁 (YA) - [x] 建立接下來要train的model的表格 (Heng) - [x] 劃出過殺率和檢出率的Curve (Heng) ::: # 1/29 :::warning - [x] 可以將每個epoch的數據記錄成json檔 (YA) - [x] 更改evaluation code (Heng) - [x] YOLOv7加入realtime紀錄檢出、過殺 (Heng) ::: # 2/5 :::warning - [x] 紀錄數據並上傳到網頁 (YA) - [x] training YOLOv7-D6、YOLOv7-E6E (Heng) - [x] YOLOv7 Instance Segmentation加入realtime紀錄檢出、過殺 (Heng) - [x] model如果是patch要進行合併 (Heng) ::: # 2/20 :::warning - [x] Training YOLOv7的E6E在image size 1600 (Heng) - [x] Training YOLOv7在image size 1600、1800、2560 (Heng) - [x] 將patch的輸出進行整合 (Heng) - [x] 調整patch的evaluation code (Heng) ::: # 2/27 :::warning - [x] 取出testing dataset有問題的圖片 (YA) - [x] 改Patch的Evaluation code (Heng) - [x] evaluation code能夠輸出過殺圖片 (Heng) - [x] 取出YOLO-v7 在image size 1600過殺的圖片 (Heng) - [ ] 統計加了生成的資料後,整體的conf情形 (Heng) - [x] YOLO-v7-d6模型在Image size為1600的實驗 (Heng) - [x] YOLO-v7-e6e模型在Image size為1600和patch 1024的實驗 (Heng) - [x] 取出patch有檢測到但是original沒檢測到的 (YA) ::: # 3/8 :::warning - [x] 完善yolov7、sa、cascade mask rcnn功能 (Heng) - [x] 增加coco轉yoloBBOX和coco轉yoloInSeg功能 (YA) - [x] 訓練patch ::: # 3/26 :::warning - [x] Mask2Former的predict API - [x] Segment Anything 模型測試 - [x] 使用patch 1024 訓練 YOLOv7 Instance Segmentation - [x] 撰寫Cascade Mask RCNN 範例程式,用於產生diffusion所需要的mask label - [x] SA加入訓練期間監控檢出率跟過殺率 - [x] 更新Config - [x] 單一瑕疵實驗 - [x] 使用文件 ::: # 重要事項 ## 交接清單 ### 背景知識: * 常見的Object Detection Model (YOLO、DETR) * 常見的Segmentation Model (Cascade-Mask-RCNN、Mask2Former、Segment Anything) * 訓練Model的流程,如會使用到的Augmentation、常用的Loss、評估指標等 * 工具: * git * flask * redis * mmDetection * labelme --- ### 資料前處理: * 理解coco format * 可視化coco dataset (可以呈現bbox、class名稱、mask區域) * 熟悉coco API,並統計coco dataset中的資訊 (類別數量、類別名稱、圖片數量、某類別圖片數量 * 合併2個coco dataset (可以使用[COCO-merger](https://pypi.org/project/COCO-merger/)) * 自己製作一個coco dataset (可能從現有的coco dataset中,抽取某幾個類別出來) --- ### 模型訓練 (在wsl環境中): * 能夠設置config檔,並理解每個參數的意義 * 使用config檔進行訓練 --- ### 模型評估: * 將已訓練好的模型進行檢出率、過殺率的評估 * 對數據進行記錄與分析 * 將評估結果結合可視化的方式,嘗試說出在哪些case上比較好,哪些case上比較不好,為甚麼? * 製作周進度報告並與老師討論 --- ### 單機版框架: * 整體框架理解,如訓練流程、預測流程 * Config框架理解 * 嘗試新增yolo系列模型到單機版中 * server執行方式,如API呼叫 ## 代辦清單 - [x] 修改投影片內容 - [x] 把BC-420進行拆一部分當作訓練跟測試 - [x] 確認wc-1500裡是不是較少淺dirty - [x] 進行fine-tune實驗 - [x] loss.json、redis的port,如果單台電腦一次train兩個模型可能會有錯 - [x] server端錯誤訊息回傳 - [ ] API可以同時Inference在兩張卡上 - [x] Learning rate調整 - [x] val loss - [x] 同時2張卡進行訓練bug - [ ] 完善yolo、sa ## 問題探討 * 為甚麼在較多的真實資料上,加入生成瑕疵的效果沒有提升 * 【調整訓練方式】 1. 生成資料應該針對真實資料集中,較少的類別去添加就好 4. 不需要混和這麼多的生成資料(現在是1200、2400、4800),可以嘗試混100、300、500 2. 二階段訓練: * Stage1 - 生成瑕疵 (較小的Learning Rate) * Stage2 - 真實資料 (較大的Learning Rate) 6. 三階段訓練: * Stage1 - 生成瑕疵 (較小的Learning Rate) * Stage2 - 真實資料 (較大的Learning Rate) * Stage3 - 生成 + 真實 (較小的Learning Rate) * 【調整瑕疵生成方式】 1. 大小更多樣化 (==現階段還不可行==) 2. 再生成更多其他樣式的類別 (Xbox上的刮痕、按鍵上的摩擦、按鍵上的刮痕等) 3. 將瑕疵貼到所有模板上 (假設知道相機的拍攝位置是固定有100個位置,取這100個位置出來做為模板) 4. 一張模板貼多個瑕疵 (現在一張圖片只有貼一個瑕疵) 5. 加入Contrastive Learning 讓生成的瑕疵更接近真實瑕疵 6. ==每個瑕疵可能會出現在特定的地方,可以將生成的瑕疵貼在特定的位置可能會有較好的效果== ## 後續規劃 ~~### 實驗目的: WC-V2-1500若加入單一生成瑕疵,能否接近使用WC-1500訓練的效果~~ * Cascade-Mask-RCNN (==由CD所生成==) * WC-V2-1500 + 白色刮痕(Bright_Marks)、污漬(Dirty)、缺角(Border)、大片髒污(AnotherColor)、刮痕(Severe_scratches)、摩擦(Glossy)、小黑點(Black_point) * ~~Cascade-Mask-RCNN (==由AD所生成==)~~ * WC-V2-1500 + 白色刮痕(Bright_Marks)、污漬(Dirty)、缺角(Border)、大片髒污(AnotherColor)、刮痕(Severe_scratches)、摩擦(Glossy)、小黑點(Black_point) --- ### 實驗目的: 在給定一個真實資料集的情況下,要加入多少的生成瑕疵 * 每個生成瑕疵各加入60張 (對應60個模板),再加入各120張以此類推,看看表現會從甚麼時候開始降低 (==比較簡單且快速的方法==) * 先對每一個生成的類別與真實瑕疵做相似度比較,如t-SNE、SSIM、FID、PSNR、Inception score,然後取Top幾出來進行實驗 --- ### 實驗目的: 確認為甚麼在較多的真實資料上,加入生成瑕疵的效果沒有提升 * 探討是否是類別不平衡導致效果不好 1. ~~先確認WC-500、WC-300、WC-100的類別分佈~~ 2. 針對數量較少的類別進行生成後加入訓練 * 需要測試已經很多數量的類別加入生成瑕疵後,表現不會再有明顯變化的實驗,再測試一個比較少數量的類別加入生成瑕疵後,表現會有明顯提升的實驗 * 探討是否將生成資料作為Pretrain weight,然後Fine-Tune使用真實資料能夠有比較好的效果 (==訓練時間減少或是檢出率提高等==) * 用多少張的生成瑕疵作為Pretrain weight會有比較好的結果? * 當真實資料越多的情況下,已經具有大部分的瑕疵分佈了,生成的瑕疵無法再跳出該分佈外,故效果提升不明顯且有可能因為生成的瑕疵待有noise,反而會導致訓練效果不佳 (==需要一些實驗或可視化的數據來佐證==) --- ### 實驗目的: 降低Cascade-Mask-RCNN在Fine-Tune的過殺率 * 使用混和方式作為Pretrain,並用WC-133進行Fine-Tune後有發現,雖然檢出率有大幅提升,但是過殺相對也變得較高。 :::info 經可視化觀察後,有發現過殺出現在手把部件反光處,其餘則為Label未標註到。 (模型太敏感了) ::: * ~~調整Augmentation參數中的hue、saturation、brightness~~ * 調整模型的Hyper parametert * ==調高neg\_iou\_thr==: 讓較多的候選框被視為負樣本 * ==調高pos\_iou\_thr==: 對於正樣本的條件變得嚴苛 * ==將match\_low\_quality調整為False==: 這一項主要是為了讓每一個GT都匹配到一個預測框,原本設為True,但這樣容易導致對某些品質不好的bbox進行優化 --- ### 實驗目的: 測試使用較大型的Backbone,能否有較好的表現 * CO-DETR * ~~WC-500 (使用ResNet101,==Image size: 1400==)~~ * ~~WC-500 (使用Swin-T,==Image size: 950==)~~ * ~~WC-500 (使用ConvNeXt,==Image size: 950==)~~ * Cascade-Mask-RCNN * WC-500 (使用ResNet101,==Image size: 1600==) * WC-500 (使用ResNeXt101,==Image size: 1600==) * WC-500 (使用ConvNeXt,==Image size: 1600==) --- ### 實驗目的: CD與AD的比較 (都使用相同訓練資料訓練CD和AD) * CO-DETR: ==(維佑負責)== * WC-500 + AD-WC-2400 (8種類別,各300張) * WC-500 + CD-WC-2400 (8種類別,各300張) * Cascade-Mask-RCNN: ==(子恒負責)== * WC-500 + AD-WC-2400 (8種類別,各300張) * WC-500 + CD-WC-2400 (8種類別,各300張,==mask從bbox直接轉換==) * WC-500 + AD-WC-2400 (單一瑕疵) vs WC-500 + CD-WC-2400 (單一瑕疵) --- ### 實驗目的: 測試不同Online Augmentation參數下的表現 * CO-DETR: * WC-500 (HSV數值、旋轉、平移、縮放、剪切、透視變換) * Cascade-Mask-RCNN: * WC-500 (HSV數值、旋轉、平移、縮放、剪切、透視變換) --- ### 實驗目的: 測驗CO-DETR、Cascade-Mask-RCNN在其他手把部位的表現 --- ### 實驗目的: 測試Deformable-DERT、Efficient-Det --- ## Issues 1. ~~YOLOv7 Object Detection在使用第二張顯卡training時,沒辦法評估,會有device_count問題~~ 2. ~~mmdetection在使用Linux作業系統下,不會顯示報錯訊息~~ 3. ~~mmdetection在使用Linux作業系統下,不會載入預訓練的weight~~ 4. mmdetection在使用win10作業系統下,沒辦法選擇其他GPU 5. ~~mmdetection加入訓練時自動評估~~ 7. mmdetection 計算nms time問題,現在其實是post-process time 8. ~~mask2former輸出圖片還沒更新~~ 9. 在evaluation和sa裡面,需要知道pass類別的編號 (不確定廠商之後標註會不會有其他名稱) 10. ~~將coco format自動轉換成yolo format,同時如果有指定yolo格式也可以~~ 11. ~~class名稱、數量,可以不用輸入~~ 12. ~~config整理~~ 13. ~~coco format轉yolo提高速度~~
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up