No description
- Created a new pixi.toml file to manage project dependencies and tasks. - Defined workspace metadata including authors, channels, name, platforms, and version. - Specified tasks for preprocessing, PSO, DE, and other scripts. - Listed dependencies for Python and various libraries with specific versions. - Configured additional PyPI options for PyTorch installation from a custom index. |
||
|---|---|---|
| .kilo/agents | ||
| .vscode | ||
| config | ||
| core | ||
| imaging | ||
| references | ||
| results | ||
| utils | ||
| visualization | ||
| .gitattributes | ||
| .gitignore | ||
| __init__.py | ||
| AGENTS.md | ||
| experiment.ipynb | ||
| optimization_benchmark_results_DE.csv | ||
| optimization_benchmark_results_NM.csv | ||
| optimization_benchmark_results_PSO.csv | ||
| pixi.lock | ||
| pixi.toml | ||
| progress.json | ||
| README.md | ||
| run_all_cases.py | ||
| run_benchmark.py | ||
| run_de.py | ||
| run_pso.py | ||
| structure.txt | ||
| xfr_cbt_native.py | ||
| xfr_check_spinous.py | ||
| xfr_de.py | ||
| xfr_inverse_transform.py | ||
| xfr_migrate_crop.py | ||
| xfr_orig_labels.py | ||
| xfr_plot_level.py | ||
| xfr_preprocess.py | ||
| xfr_pso.py | ||
| xfr_record_planes.py | ||
| xfr_reprocess_ap.py | ||
| xfr_rerender_spinous.py | ||
CBT_project(Cortical Bone Trajectory)
在腰椎 CT(L1–L5)上自動規劃椎弓根螺絲(pedicle screw)軌跡的研究程式:把螺絲建模為圓柱體,用 PSO / DE / Nelder-Mead 最佳化在骨頭分割結果上評分,求得每節脊椎左/右最佳螺絲的位置、角度與尺寸,再映回 native CT 空間輸出可視化結果。
管線
CTSpine1K 原始 CT + label
│
▼
xfr_preprocess.py 裁切 / 0.5mm 重取樣 / 方向正規化
│ (symmetry plane、upper endplate plane)
▼
xfr_pso.py / xfr_de.py 每 level 左/右螺絲軌跡最佳化(GPU)
│ 圓柱 × 骨頭 mask 評分(皮質骨、VBODY、
│ tip 處罰、入口端 0.5mm 豁免)
▼
xfr_check_spinous.py 棘突檢查 / 驗證
xfr_cbt_native.py 映回 native CT → cbt.nii.gz + X 光投影片
- 最佳化參數:
pos = [z, y, x, azimuth°, altitude°, 直徑 mm, 長度 mm],直徑/長度吸附到臨床允許值。 - 評分函數:
core/objective.py的OptimizationContext+make_objective_function[_xfr]。 - 映回 native 以各 volume 的
transform.json仿射鏈為單一事實來源(imaging/transforms.py)。
環境
- Python 環境管理:pixi(
pixi.toml;conda envcbt已棄用) - 首次建置 / 更新:
pixi install - 主要依賴:
torch(CUDA 12.6 wheel)、SimpleITK、scipy、scikit-learn、numpy、nibabel、tinydb、pyswarm、matplotlib - 多 GPU 批次:
run_all_cases.py --gpu N --total_gpus M
執行
入口腳本皆有 pixi task(pixi run <task> -- <args>,見 pixi.toml 的 [tasks]);或 pixi shell 後直接執行(腳本 shebang 為 #!/usr/bin/env python):
# 預處理(全部 volume;或 --max-images 取前 N 支)
pixi run preprocess -- [--max-images N] [--output-dir DIR]
# 最佳化(缺省跑標準化目錄內所有 volume 的 L1–L5)
pixi run pso -- [volume_id [level]] [--screw-shape cone|cylinder]
pixi run de -- [volume_id [level]]
# 棘突檢查
pixi run check-spinous
# 映回 native CT(run_id 為最佳化輸出的日期時間目錄)
pixi run cbt-native -- <run_id> [volumes...] [--date D]
資料路徑(CTSpine1K 原始檔、標準化輸出、最終輸出)hardcode 在各 xfr_*.py 頂部,跨機器/世代執行時先確認這些常數;元數據存於 xfr_image_metadata.json(TinyDB),日誌在 logs/,結果 CSV 在 results/。
目錄結構
| 路徑 | 說明 |
|---|---|
core/ |
圓柱生成(torch)、中心線相交、評分(scoring.py)、objective、optimizer(PSO/DE/NM) |
imaging/ |
NIfTI I/O、預處理、重取樣、仿射、方向正規化、分割、transform 鏈 |
visualization/ |
四視角螺絲圖(res_bone_figure)、3D 繪圖、圓柱存 NIfTI / overlay 到 CT |
config/ |
constant.py(LABEL_MAP、螺絲尺寸、OVERLAP_THRESH、spacing)、device.py |
utils/ |
NFS 重試、唯一檔名、輔助函數 |
xfr_*.py |
現世代管線入口腳本 |
run_*.py |
舊世代多 GPU 批次 / benchmark 腳本 |
references/ |
參考文獻 PDF |
experiment.ipynb |
實驗 notebook |
輸出
- 每 volume 的螺絲:標準化目錄下
Output/<run_id>/<vol>/的四視角 PNG 與 CSV。 - Native 空間:
Output_dir/<run_date>/<vol>/cbt.nii.gz(label 1–10 = L1L…L5R)與 x-ap / x-lat / z-ap / z-lat X 光投影片(含螺絲標註版)。 - 驗收標準見
xfr_cbt_native.pydocstring(螺絲柱 in-label ≥ 92%、2-voxel 膨脹 ≥ 98%)。