程式碼重要資訊講解#

以下將會提醒使用模型的注意事項,請詳閱以下說明

(一) Training_object_detection_model#

Training_object_detection_model_resultbook 中有以下資訊需要注意

1. 登入 Roboflow 並填上資料集#

%cd {HOME}

import roboflow
from roboflow import Roboflow

roboflow.login()

rf = Roboflow()

Project_name = "nanshang_tomb"  # 請登入 roboflow 並寫上您的資料集名稱 和 版本
Version = 10

project = rf.workspace().project(Project_name)
dataset = project.version(Version).download("yolov5")
  • 請在 Project 中填入您所用的專案名稱,且在 Version 中填入您所要用得 roboflow 版本

2. 填入 SCORE_THRSHOLD、 BATCH_SIZE、 MAX_EPOCHS#

MODEL_ARCH = 'yolo_nas_l'
MODEL_ARCH = 'yolo_nas_l'
BATCH_SIZE = 10
MAX_EPOCHS = 40
SCORE_THRSHOLD = 0.6
CHECKPOINT_DIR = f'{HOME}/checkpoints'
EXPERIMENT_NAME = project.name.lower().replace(" ", "_")
  • SCORE_THRSHOLD 控制著模型的嚴格程度。該值越高 -> bounding box 的數量越少 -> 模型的 recall 值越低。 最好調出最理想的 SCORE_THRSHOLD,以達到最高的 F1 值

  • MAX_EPOCHS 會影響模型運行時間和精準度,務必填妥

  • BATCH_SIZE 會影響 Colab 中的 RAM 的使用大小。如果不幸 RAM 的使用量超出 Colab 限制,可以嘗試降低 BATCH_SIZE 大小

3. 訓練模型後務必將 checkpoint 資料夾的 average_model.pth 下載下來,此檔案將在下一份 workbook 中使用到#

import locale
locale.getpreferredencoding = lambda: "UTF-8"
%cp "/content/checkpoints/nanshang_tomb/average_model.pth" "/content/drive/MyDrive/project_NanShang/resources/average_modelv10.pth"
  • 除了將資料載到本機,也可以使用以上程式碼將資料轉移到 google 雲端硬碟 (記得先連接雲端硬碟在執行此程式碼)

(二) Predicting_mask_for_tifimage#

Predicting_mask_for_tifimage 中的 inputs 有 10 個嵾數要填妥,分別如下

inputs = {
      # 模型權重
      "object_detection_model_checkpoint_path": "/content/drive/MyDrive/project_NanShang/resources/average_modelbest.pth",
      "sam_checkpoint_path": "/content/drive/MyDrive/project_NanShang/resources/sam_vit_h_4b8939.pth",

      # dataset class 數目 和 照片來源檔案
      "num_classes": 2,
      "source_tiffile": "/content/drive/MyDrive/project_NanShang/resources/NanShang_Tomb_cp.tif",

      # 物件偵測精準度控制
      "confidence_threshold": 0.65,
      "tile_size": 700,

      # 照片經緯度資訊
      "top_left_lat": 22.97494,           # tif 檔左上角的緯度
      "top_left_lon": 120.19544,          # tif 檔左上角的經度
      "below_right_lat": 22.96717,         # tif 檔右下角的緯度
      "below_right_lon": 120.19775,        # tif 檔右下角的經度

      "device": 'cuda' if torch.cuda.is_available() else "cpu",
      "model_arch": 'yolo_nas_l',
      "sam_encoder_version": "vit_h",

}

1. 模型權重#

  • “object_detection_model_checkpoint_path” : 在本欄位中,應填入從 Training_object_detection_model 所得到的 “average_model.pth” 檔案。 或許您當時已將檔案存到 google drive,那請您開啟 google drive,並填入該檔案之位置

  • “sam_checkpoint_path” : 在本欄位中,應填入 segment-anything-model 的模型權重。或許您已從上方的程式碼下載檔案, 那請你將 “sam_vit_h_4b8939.pth” 地址複製到該位置

2. dataset class 數目 和 照片來源檔案#

  • “num_classes” : 資料集中類別的數目

  • “source_tiffile” : 欲分析的 tif 檔

3. 物件偵測精準度控制#

  • “confidence_threshold” : confidence score 代表模型的嚴格程度,分數值越高代表模型判斷物件的嚴格程度越高

  • “tile_size” : tile size 代表 tif 檔分割的圖片大小。要知道的是,圖片大小適中才能確保模型判斷準確。如果圖片太大那物件本身會太小而看不清楚 ,反之如果圖片太小那物件本身會被切割成不好判讀的形狀。所以使用前請先測試適當大小在丟入模型

4. 照片經緯度資訊#

在將 mask 轉回 shp 檔時,我們會需要將 tif 檔 georefernce 成 geotiff。這時候我們就會需要 tif 檔的經緯度

  • “top_left_lat” : tif 檔左上角的緯度

  • “top_left_lon” : tif 檔左上角的經度

  • “below_right_lat” : tif 檔右下角的緯度

  • below_right_lon” : tif 檔右下角的經度