# 舟骨骨折區域偵測 ## 資料預處理 1. 透過 scaphoid_detection 資料集擷取出骨裂區域的原圖檔 ![image](https://hackmd.io/_uploads/HkS7OqzSJl.png) 2. 將正面與側面的資料分成兩個獨立的資料集:為了將它們分開做訓練 ![image](https://hackmd.io/_uploads/rkut_qGBJx.png) ![image](https://hackmd.io/_uploads/H1SgY5MHkg.png) ## Scaphoid ### 將資料 scaphoid_detection 的資料集轉為 yolo format ![image](https://hackmd.io/_uploads/BJWht2zHJl.png) * example: 00075616-AP0 - json: [{"name": "Scaphoid", "bbox": ["751", "794", "873", "945"]}] - txt: 0 0.6077844311377245 0.4940340909090909 0.09131736526946108 0.08579545454545455 * 撰寫yolo的格式規則 https://docs.ultralytics.com/zh/datasets/detect/#ultralytics-yolo-format ### 檢查 檢查每行的格式是否符合 YOLO 格式 1. 類別編號只有0 2. 是否有正確的 5 個部分:類別編號 + x, y, w, h 3. 檢查座標是否為有效的浮點數 ![image](https://hackmd.io/_uploads/ryMijcIBke.png) ### 分割資料集 ``` output_dirs = { 'train': {'images': './data/train/images', 'labels': './data/train/labels'}, 'valid': {'images': './data/valid/images', 'labels': './data/valid/labels'}, 'test': {'images': './data/test/images', 'labels': './data/test/labels'}, } ``` ``` split_ratio = { 'train': 0.8, 'valid': 0.2, 'test': 0.0 } ``` ### 訓練 問題 ![image](https://hackmd.io/_uploads/BJQbhpfryx.png) ### 預測 ![image](https://hackmd.io/_uploads/HywQt98HJe.png) ![image](https://hackmd.io/_uploads/BJFGK9UHJl.png) ## fracture_detection format: * example: 00075616-AP0 - json: [{"name": "Fracture", "bbox": [[59.04344940185547, 108.83853149414062], [97.82136535644531, 68.68283081054688], [116.95655059814453, 87.16146850585938], [78.17863464355469, 127.31716918945312]]}] - txt: 0 0.483963 0.720785 0.801814 0.454853 0.958660 0.577228 0.640808 0.843160 * 順序:06833612-AP0 左上, 右上, 右下, 左下 ![06833612-AP0](https://hackmd.io/_uploads/BkYjxoMrkl.jpg) * 問題:08838278 R 21M AP0 ![08838278 R 21M AP0](https://hackmd.io/_uploads/ryJUgoMryg.jpg) * 修正: ![image](https://hackmd.io/_uploads/HyHEZsLB1e.png) ![08838278 R 21M AP0](https://hackmd.io/_uploads/SymabiLrJe.jpg) 功能: 超出左邊界 (x < 0) → 設為 0。 超出右邊界 (x > img_width-1) → 設為 img_width-1。 超出上邊界 (y < 0) → 設為 0。 超出下邊界 (y > img_height-1) → 設為 img_height-1。 範例 clamp(-10, 0, 99) → 0(調整到左邊界) clamp(120, 0, 99) → 99(調整到右邊界) clamp(50, 0, 99) → 50(不調整) * 撰寫yolo的格式規則 https://docs.ultralytics.com/zh/datasets/obb/#supported-obb-dataset-formats ``` <class_id> <x1> <y1> <x2> <y2> <x3> <y3> <x4> <y4> ``` ### 分割資料集 ``` output_dirs = { 'train': {'images': './data/train/images', 'labels': './data/train/labels'}, 'valid': {'images': './data/valid/images', 'labels': './data/valid/labels'}, 'test': {'images': './data/test/images', 'labels': './data/test/labels'}, } ``` ``` split_ratio = { 'train': 0.8, 'valid': 0.2, 'test': 0.0 } ```