# EfficientNet Anomaly Detection 操作文件 ## Outline * 執行環境 * BIOS 虛擬化 * Docker 下載 * 建立 Docker環境 * EfficientNet 程式目錄 * 參數定義 * 資料集位置 * 執行程式 ## 執行環境 | 作業系統 | Windows 10 | | -------- | -------- | | CPU | Intel i7-9700 | | GPU | GeForce RTX 2080 SUPER | | 記憶體 | 16 GB * 2 / DDR4 / 2666 MHz | ## BIOS 虛擬化 首先必須確認 BIOS 開啟虛擬化功能,各主機板不同,須上網查詢 在此提供為 Intel 主機板的設定方式 https://www.asus.com/tw/support/FAQ/1043786/ 在 Windows作業系統下,BIOS虛擬化功能若有開啟請至工作管理員確定 打開工作管理員->效能-> CPU 模擬會顯示 : 已啟用(如下圖紅框部分) ![](https://i.imgur.com/qStYcJi.png) ## Docker 下載 1. 上列工作確認完成後,於下方連結下載 Docker desktop https://drive.google.com/file/d/1k611NcwD2mlq-5YB7stdsWy-Nz6KXOmx/view?usp=sharing 2. 安裝皆選取默認選項 ![](https://i.imgur.com/XHSvJUl.png) ![](https://i.imgur.com/TCCW2nK.png) 3. 下載完成後,顯示視窗如下,點選 Close ![](https://i.imgur.com/9xJ85iT.png) 4. 並於桌面找到 Docker Desktop 捷徑並點選後開啟 ![](https://i.imgur.com/LysJ2Tc.png) 5. 開啟 docker desktop 依以下步驟安裝 ![](https://i.imgur.com/53SGaPb.png) 6. 等待 Docker Desktop starting ![](https://i.imgur.com/kYDiK8u.png) 7. 點選Skip tutorial ![](https://i.imgur.com/qAgyspG.png) ## 建立 Docker環境 1. 在程式目錄中確認有 Dockerfile 檔案 ![](https://i.imgur.com/eVvxwLL.png) 2. 在程式目錄中打開 Terminal ![](https://i.imgur.com/FHFXzhk.png) 3. 使用下列指令建立 Docker image ```shell= $ docker build . -t meadml/cuda10.1-cudnn7-devel-ubuntu18.04-python3.6_efficientnet ``` 顯示FINISHED ![](https://i.imgur.com/c2EZgJT.png) 4. 使用下列指令建立container 以下指令路徑需與配合程式路徑做更改 ( C:\Users\MVCLAB\Desktop\NTUST\jet_project\ ) ```shell= $ docker run -t -i --name EfficientNet --gpus all -v C:\Users\MVCLAB\Desktop\NTUST\jet_project\EdgeFinal\:/EdgeFinal --shm-size 120G meadml/cuda10.1-cudnn7-devel-ubuntu18.04-python3.6_efficientnet ``` 5. 完成後即進入Container ![](https://i.imgur.com/XtsvXpP.png) 6. 輸入以下指令便會看到程式目錄名稱 EdgeFinal ```shell= $ ls ``` ![](https://i.imgur.com/p3fwoV6.png) 7. 輸入以下指令進入程式目錄內 ```shell= $ cd EdgeFinal ``` 8. 即可輸入下列指令開始訓練 ```shell= $ python3 train.py ``` ## EfficientNet 程式目錄 ![](https://i.imgur.com/jnJ5S44.png) ### 樹狀結構 ![](https://i.imgur.com/yGKwpQV.png) | 檔案或資料夾名稱 | 檔案功能| | -------- | -------- | | dataset | 內含使用的資料目錄 | | model| Output出的所有資料(包含Log、ROC Curve、pth參數檔) | | wandb| Weights & Biases參數檔 | 其餘皆為訓練模型用檔案 ## 參數定義 參數修改於 train.py | 參數 | 設定數值 | 參數定義 | | -------- | -------- | -------- | | at| 0.48 | Threshold值 | | input_size | 224 | 輸入照片的大小 | | bs | 8 | Batch的大小 | | lr | 0.001 | 學習率 | | classnum | 2 | 分類的數目 | | warm_iter | 2,000 | Warm up iteration | | pre_epoch | 0 | 訓練的Epoch範圍 | | epoch | 20 | 訓練的Epoch範圍 | | test_err_image | "./txt/misclassified.txt" | 紀錄 Predict 錯誤的資料路徑 | | data_path | "./dataset/JET_C+R_Classification/Training_set" | Training set 的資料路徑 | |easy_val_data_path|"./dataset/JET_C+R_Classification/EasyValidation_set"|Validation set 的資料路徑| |is_load_check_point|False|是否訓練到一半時中斷| |test_data_path|"./TestData"|要測試的檔案資料夾| |inference_model_path|"./inference_model/net_020.pth"|使用的 pth 權重檔| |inference_result_path|"./predict_result.txt"|利用 pth 測試出來的測試結果| | results_path | "./model/test_C+R_all" | 輸出的資料夾目錄路徑 | | plot_path | "/output/plot.png" | Loss與 Accuracy 的曲線圖路徑(如下圖一) | | acc_txt_path | "/txt/acc.txt" | 記錄每個 Epoch 精確率的txt路徑(如下圖二) | | log_txt_path | "/txt/log.txt" | 紀錄每個batch的Loss 值learning rate、精確度(如下圖三) | | best_txt_path | "/txt/best_acc.txt" | 紀錄最高精確度的Epoch路徑 | |wandb_name|"jet_artifact_anil"|Weight and Biases 的目錄名稱| | tstdataset | 'Resistance' | 要檢測的Dataset名稱 | | tst_txt_name | 'testScore.txt' | 每個Epoch的檢測結果(如下圖四)| | 圖一 | 圖二 | |:------------------------------------:|:-----------------------------------:| | ![](https://i.imgur.com/fsVp7OM.png) | ![](https://i.imgur.com/CfMpKvj.png) | | 圖三 | 圖四 | |![](https://i.imgur.com/Iv2qPKz.png)|![](https://i.imgur.com/6c0Wx5B.png)| 1. 圖一 : 顯示每個Epoch的Loss值及Accurancy (精確度)的曲線圖 2. 圖二 : 顯示每個Epoch的Accurancy (精確度)的文字檔 3. 圖三 : 顯示每個Epoch的Learning rate、Loss值及Accurancy (精確度)的文字檔 4. 圖四 : 顯示每個Epoch的混淆矩陣評估指標值及比率以及Threshold ## 資料集位置 "~/EdgeFinal/dataset/ ![](https://i.imgur.com/6NOZm0t.png) ## 執行程式 1. 打開Terminal,並執行以下指令 ```shell= $ docker start EfficientNet ``` 2. 使用以下指令查看 CONTAINER ID ![](https://i.imgur.com/sTR42ob.png) ```shell= $ docker ps -a ``` 3. 進入 Container ```shell= $ docker exec -it 434fd0682dd0 bash ``` ![](https://i.imgur.com/kW6kZYu.png) 4. 輸入以下指令便會看到程式目錄名稱 EdgeFinal ```shell= $ ls ``` ![](https://i.imgur.com/p3fwoV6.png) 5. 輸入以下指令進入程式目錄內 ```shell= $ cd EdgeFinal ``` 6. 即可輸入下列指令開始訓練(若不訓練可省略) ```shell= $ python3 train.py ``` ![](https://i.imgur.com/KghkN3F.png) 7. 輸入下列指令開始測試 ```shell= $ python3 train.py --mode 'test' ```