feat(ceus,segment): 任务书 02 第二阶段——分割和后半段算法
- ceus 迁入 polygons、dark_region、reference_region、tic_fitting、tic、anchor_frames、 perfusion_metrics、trajectory、tic_curves、tic_plot、overlay,旧测试照搬(改 import 与配置读取)。 - 对外两段接口:prepare_segmentation(第 1–2 步)与 quantify_case(第 4–9 步)。 - 第 3 条:删掉 D1 取医生标注时刻的模式,D1 只从拟合曲线算。 - 第 4 条:F1/F2 取视频第 20−X、60−X 秒(X 为视频第 0 秒时已推注的秒数),落在视频外记未定位。 - 绿框融合权重、紫圈颜色阈值照搬;关键帧容差窗口的出处写进 ceus.yaml 注释。 - segment:同一进程调用 MedSAM2,设置写进 ceus.yaml 的 segment 段,全部必填;gpu 测试真跑通过。 - 依赖加 scipy、matplotlib、medsam2(可编辑安装,不编译 CUDA 扩展);uv 只解析 linux x86_64。 - 导入契约:只有 segment 引用 torch、sam2;segment 不引用其他 cadx 模块。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
+39
-13
@@ -1,7 +1,8 @@
|
||||
# CEUS 定量的配置,给 scripts/ceus_quant.py 用。
|
||||
#
|
||||
# 分三段:paths(位置)、segment(分割设置,任务书 02 第二阶段加)、ceus(算法参数)。
|
||||
# ceus 段的字段定义和校验在 src/cadx/ceus/_config.py;paths 段和最外层由 scripts/ceus_quant.py 定义。
|
||||
# ceus 段的字段定义和校验在 src/cadx/ceus/_config.py,segment 段在 src/cadx/segment/_config.py;
|
||||
# paths 段和最外层由 scripts/ceus_quant.py 定义。路径都相对仓库根目录。
|
||||
# 每个字段必填,可以没有的值写 null。
|
||||
#
|
||||
# ceus 段的数值逐个照抄旧项目 config/ceus_roi_default.yaml,没有改动(待定问题/02:参数何时冻结)。
|
||||
@@ -17,6 +18,14 @@ paths:
|
||||
runs_root: runs/ceus # 每次运行一个子目录,只追加不删
|
||||
work_root: work # 可删掉重算的中间文件(分割缓存)
|
||||
|
||||
segment: # 分割设置,字段定义在 src/cadx/segment/_config.py。出自旧项目 debugs/medsam2_local_track.py
|
||||
medsam2_dir: reference/MedSAM2 # MedSAM2 代码,提交号从它的 .git 读。旧脚本是远程 /home/wangwenhan/MedSAM2
|
||||
checkpoint: models/MedSAM2_latest.pt # 权重。旧脚本是 MedSAM2/checkpoints/MedSAM2_latest.pt
|
||||
sam2_config: configs/sam2.1_hiera_t512.yaml # 模型配置的 Hydra 名(相对 sam2 包)。照旧脚本 DEFAULT_MEDSAM2_CFG
|
||||
device: cuda # 照旧脚本 DEFAULT_DEVICE
|
||||
offload_video_to_cpu: false # 照旧脚本:t1_local_debug.py 调它时没开这个开关
|
||||
offload_state_to_cpu: false # 同上
|
||||
|
||||
ceus:
|
||||
config_version: "4" # 参数口径版本号,由人改。出自旧项目:Lognormal-v2 参数口径(design/0044)
|
||||
|
||||
@@ -65,6 +74,12 @@ ceus:
|
||||
threshold_offset: 0 # 出自旧项目 findings §3.8
|
||||
min_area: 300 # findings §2A:非代码默认 64。出自旧项目 findings §3.8
|
||||
min_area_ratio: 0.015 # findings §2A:非代码默认 0.0。出自旧项目 findings §3.8
|
||||
# 下面四项旧 schema 里没有,旧 dark_region.py 用 getattr(..., 默认值) 读,这里照旧值写出来。
|
||||
# 旧项目工程侧定的,无出处
|
||||
max_regions: null # 每帧最多保留几块暗区,null 不限
|
||||
max_contours_per_region: null # 每块暗区最多取几条外轮廓,null 不限
|
||||
preferred_area_ratio_range: null # 暗区占 ROI 面积的偏好区间 [lo, hi],null 时面积分偏好占一半
|
||||
prompt_exclude_dilate: 3 # 剔绿框色前对绿色像素的膨胀核边长(与 tic_analysis 那个是两个独立的数)
|
||||
preserve_holes: true # 出自旧项目 findings §3.8
|
||||
fill_holes: false # 出自旧项目 findings §3.8
|
||||
morphology_kernel: 5 # 出自旧项目 findings §3.8
|
||||
@@ -129,9 +144,11 @@ ceus:
|
||||
estimated_baseline_lookback_s: 10.0 # 允许 t0 位于视频起点前,但截图不外推。出自旧项目 design/0044
|
||||
maximum_perf_area_step_fraction: 0.15 # 相邻帧去暗区面积比例最大变化。出自旧项目 design/0044
|
||||
parameter_boundary_fraction: 0.001 # 形状参数贴边判据占允许区间的比例。出自旧项目 design/0044
|
||||
anchor_frames: # 7 张关键帧定位。出自旧项目 design/0040 决策二
|
||||
anchor_frames: # 7 张关键帧定位(第 8 步)。出自旧项目 design/0040 决策二
|
||||
# 下面这批数旧项目注明镜像自 Linear《临床口径契约》(2026-08-25 版,同步日期 2026-09-01),
|
||||
# 动任何一个之前先去那边核对。各容差窗口的出处在第二阶段迁移关键帧模块时逐个再核对。
|
||||
# 动任何一个之前先去那边核对。容差窗口的出处任务书 02 第二阶段逐个核对过(旧 yaml 注释、
|
||||
# 旧 research-wiki/explanation/tic-quantification-encoding.md 第 8、9 节、
|
||||
# 旧 research-wiki/reference/glossary.md「锚点帧」两张表、旧 design/0030 的「已定的事」表)。
|
||||
arrival: # 到达判据,门槛取两个候选的高者。出自旧项目:《临床口径契约》5.2
|
||||
baseline_sd_multiplier: 3.0 # 候选一:基线抖动 ×3.0。出自旧项目:《临床口径契约》5.2
|
||||
relative_peak_threshold: 0.10 # 候选二:峰高 ×0.10。出自旧项目:《临床口径契约》5.2
|
||||
@@ -139,17 +156,26 @@ ceus:
|
||||
# 主峰突出度门槛:基线抖动 ×3。与到达判据那个 3.0 是两个独立的数,改一个不连带改另一个。
|
||||
# 出自旧项目:《临床口径契约》第六节
|
||||
peak_prominence_baseline_sd_multiplier: 3.0
|
||||
baseline_frame_backoff_s: 0.3 # B0 锚点 = 到达时刻再往前 0.3 秒。出自旧项目:《临床口径契约》5.11
|
||||
d1_window_after_s: 0.5 # D1 窗 [锚点, 锚点+0.5]。出自旧项目:《临床口径契约》第 12 题
|
||||
d2_window_s: 0.3 # D2 窗 ±0.3 秒。出自旧项目:《临床口径契约》第 12 题
|
||||
d3_window_s: 0.5 # D3 窗 ±0.5 秒。出自旧项目:《临床口径契约》第 12 题
|
||||
# D4 窗 ±0.5 秒:契约空着、第 12 题委托工程侧。旧项目工程侧定,理由是 D4 与 D2/D3 同属曲线
|
||||
# 形状锚点,洗出段比洗入段平缓、导数极值定位误差更大,取 D2/D3 中较宽的一档。无外部出处
|
||||
baseline_frame_backoff_s: 0.3 # B0 锚点 = 到达时刻再往前 0.3 秒。出自旧项目:《临床口径契约》5.11(临床方原规范 §13.2)
|
||||
# D1 窗 [锚点, 锚点+0.5 秒](不许取到达之前)。出自旧项目:《临床口径契约》第 12 题四个容差之一,
|
||||
# 对应临床方原规范 §13.3
|
||||
d1_window_after_s: 0.5
|
||||
d2_window_s: 0.3 # D2 窗 ±0.3 秒。出自旧项目:《临床口径契约》第 12 题,临床方原规范 §13.4
|
||||
d3_window_s: 0.5 # D3 窗 ±0.5 秒。出自旧项目:《临床口径契约》第 12 题,临床方原规范 §13.5
|
||||
# D4 窗 ±0.5 秒:临床方原规范 §13.6 只给约束(晚于主峰、不许用最后一帧)不给窗口,契约第 12 题
|
||||
# 委托工程侧。旧项目工程侧定,理由是 D4 与 D2/D3 同属曲线形状锚点,洗出段比洗入段平缓、导数
|
||||
# 极值定位误差更大,取 D2/D3 中较宽的一档。无外部出处
|
||||
d4_window_s: 0.5
|
||||
b0_window_s: 0.5 # B0 窗 ±0.5 秒:契约空着,旧项目工程侧取与 D4 同档,无外部出处
|
||||
# B0 窗 ±0.5 秒:临床口径只说「视频开始到到达前 0.3 秒之间挑帧」,没给窗口。旧项目工程侧取与 D4
|
||||
# 同档,无外部出处
|
||||
b0_window_s: 0.5
|
||||
late_phase:
|
||||
preferred_time_s: 60.0 # F2 锚点:推注后 60 秒。出自旧项目:《临床口径契约》
|
||||
tolerance_s: 2.0 # F2 容差 ±2 秒。出自旧项目:《临床口径契约》第 12 题
|
||||
# F2 锚点:推注后 60 秒。出自旧项目:《临床口径契约》,临床方 2026-08-16 定(旧 glossary 记 HAI-75)
|
||||
preferred_time_s: 60.0
|
||||
# F2 容差 ±2 秒(只属于 F2)。出自旧项目:《临床口径契约》第 12 题四个容差之四,临床方原规范
|
||||
# §10.1、§13.7
|
||||
tolerance_s: 2.0
|
||||
# F1 锚点:推注后 20 秒。出自旧项目:《临床口径契约》(08-16 口头定)。
|
||||
# F1 没有容差键:旧项目工程侧暂定「无上限,取最近的一帧」,无出处
|
||||
# F1 没有容差键:旧项目工程侧暂定「无上限,在视频有效帧范围内取最近的一帧」(旧
|
||||
# tic-quantification-encoding.md 第 8 节),临床方没给容差,无外部出处
|
||||
f1_anchor_s: 20.0
|
||||
|
||||
Reference in New Issue
Block a user