---
# System prepended metadata

title: EfficientNet Anomaly Detection 操作文件

---

# 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'
```