init
This commit is contained in:
106
README.md
Normal file
106
README.md
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
# Homework 01: Survey & Design of 3D Multi-view Human Pose Estimation System
|
||||||
|
|
||||||
|
调研现有的多视角单人 (multiple view of single person) 多视角多人 (multi-view multi-person)
|
||||||
|
人体姿态估计系统/管线
|
||||||
|
|
||||||
|
## 参考答案
|
||||||
|
|
||||||
|
AI 生成的架构图, 不代表我此刻的实际想法, which changes every moment.
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
flowchart TD
|
||||||
|
%% =========================
|
||||||
|
%% Multi-view 2D stage
|
||||||
|
%% =========================
|
||||||
|
subgraph VIEWS["Per-view input (cameras 1..N)"]
|
||||||
|
direction LR
|
||||||
|
C1["Cam 1\n2D detections: 133×2 (+conf)"] --> T1["2D latest tracking cache\n(view 1)"]
|
||||||
|
C2["Cam 2\n2D detections: 133×2 (+conf)"] --> T2["2D latest tracking cache\n(view 2)"]
|
||||||
|
C3["Cam 3\n2D detections: 133×2 (+conf)"] --> T3["2D latest tracking cache\n(view 3)"]
|
||||||
|
C4["Cam 4\n2D detections: 133×2 (+conf)"] --> T4["2D latest tracking cache\n(view 4)"]
|
||||||
|
end
|
||||||
|
|
||||||
|
%% =========================
|
||||||
|
%% Cross-view association
|
||||||
|
%% =========================
|
||||||
|
subgraph ASSOC["Cross-view data association (epipolar)"]
|
||||||
|
direction TB
|
||||||
|
EPI["Epipolar constraint\n(Sampson / point-to-epiline)"]:::core
|
||||||
|
CYCLE["Cycle consistency / view-graph pruning"]:::core
|
||||||
|
GROUP["Assemble per-target multi-view observation set\n{view_id → 133×2}"]:::core
|
||||||
|
EPI --> CYCLE --> GROUP
|
||||||
|
end
|
||||||
|
|
||||||
|
T1 --> EPI
|
||||||
|
T2 --> EPI
|
||||||
|
T3 --> EPI
|
||||||
|
T4 --> EPI
|
||||||
|
|
||||||
|
%% =========================
|
||||||
|
%% Geometry / lifting
|
||||||
|
%% =========================
|
||||||
|
subgraph GEOM["3D measurement construction"]
|
||||||
|
direction TB
|
||||||
|
RT["Camera models\nK, [R|t], SO(3)/SE(3)"]:::meta
|
||||||
|
DLT["DLT / triangulation (init)"]:::core
|
||||||
|
NN["Optional NN lifting / completion"]:::core
|
||||||
|
BA["Optional reprojection refinement\n(1–5 iters)"]:::core
|
||||||
|
Y["3D measurement y(t)\nJ×3 positions (+quality / R / cov)"]:::out
|
||||||
|
RT --> DLT --> NN --> BA --> Y
|
||||||
|
end
|
||||||
|
|
||||||
|
GROUP --> DLT
|
||||||
|
|
||||||
|
%% =========================
|
||||||
|
%% Tracking filter + lifecycle
|
||||||
|
%% =========================
|
||||||
|
subgraph FILTER["Tracking filter (per target)"]
|
||||||
|
direction TB
|
||||||
|
GATE["Gating\n(Mahalanobis / per-joint + global)"]:::core
|
||||||
|
IMM["IMM (motion model bank)\n(CV/CA or low/med/high Q)"]:::core
|
||||||
|
PRED["Predict\nΔt, self-propagate"]:::core
|
||||||
|
UPD["Update\nKF (linear)\nstate: [p(3J), v(3J)]"]:::core
|
||||||
|
MISS["Miss handling & track lifecycle\n(tentative → confirmed → deleted)"]:::meta
|
||||||
|
|
||||||
|
GATE --> IMM --> PRED --> UPD --> MISS
|
||||||
|
end
|
||||||
|
|
||||||
|
Y --> GATE
|
||||||
|
|
||||||
|
%% Optional inertial fusion
|
||||||
|
IMU["IMU (optional)"]:::meta --> INERT["EKF/UKF branch (optional)\nwhen augmenting state with orientation"]:::meta --> IMM
|
||||||
|
|
||||||
|
%% =========================
|
||||||
|
%% IK + optional feedback
|
||||||
|
%% =========================
|
||||||
|
subgraph IKSTAGE["IK stage (constraint / anatomy)"]
|
||||||
|
direction TB
|
||||||
|
IK["IK optimization target\n(minimize joint position error,\nadd bone length / joint limits)"]:::core
|
||||||
|
FB["Optional feedback to filter\npseudo-measurement z_IK with large R"]:::meta
|
||||||
|
IK --> FB
|
||||||
|
end
|
||||||
|
|
||||||
|
UPD --> IK
|
||||||
|
FB -.-> GATE
|
||||||
|
|
||||||
|
%% =========================
|
||||||
|
%% SMPL / mesh fitting
|
||||||
|
%% =========================
|
||||||
|
subgraph SMPLSTAGE["SMPL / SMPL-X fitting"]
|
||||||
|
direction TB
|
||||||
|
VP["VPoser / pose prior"]:::core
|
||||||
|
SMPL["SMPL(θ, β, root)\nfit to joints / reprojection"]:::core
|
||||||
|
JR["JR: Joint Regressor\nmesh → joints (loop closure)"]:::core
|
||||||
|
OUT["Outputs\nmesh + joints + pose params"]:::out
|
||||||
|
VP --> SMPL --> JR --> OUT
|
||||||
|
JR -. residual / reproject .-> SMPL
|
||||||
|
end
|
||||||
|
|
||||||
|
IK --> SMPL
|
||||||
|
|
||||||
|
classDef core fill:#0b1020,stroke:#5eead4,color:#e5e7eb,stroke-width:1.2px;
|
||||||
|
classDef meta fill:#111827,stroke:#93c5fd,color:#e5e7eb,stroke-dasharray: 4 3;
|
||||||
|
classDef out fill:#052e2b,stroke:#34d399,color:#ecfeff,stroke-width:1.4px;
|
||||||
|
```
|
||||||
|
|
||||||
|
如果图片不能正确预览, 见 [fig/fig.svg](fig/fig.svg)
|
||||||
93
fig.mermaid
Normal file
93
fig.mermaid
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
flowchart TD
|
||||||
|
%% =========================
|
||||||
|
%% Multi-view 2D stage
|
||||||
|
%% =========================
|
||||||
|
subgraph VIEWS["Per-view input (cameras 1..N)"]
|
||||||
|
direction LR
|
||||||
|
C1["Cam 1\n2D detections: 133×2 (+conf)"] --> T1["2D latest tracking cache\n(view 1)"]
|
||||||
|
C2["Cam 2\n2D detections: 133×2 (+conf)"] --> T2["2D latest tracking cache\n(view 2)"]
|
||||||
|
C3["Cam 3\n2D detections: 133×2 (+conf)"] --> T3["2D latest tracking cache\n(view 3)"]
|
||||||
|
C4["Cam 4\n2D detections: 133×2 (+conf)"] --> T4["2D latest tracking cache\n(view 4)"]
|
||||||
|
end
|
||||||
|
|
||||||
|
%% =========================
|
||||||
|
%% Cross-view association
|
||||||
|
%% =========================
|
||||||
|
subgraph ASSOC["Cross-view data association (epipolar)"]
|
||||||
|
direction TB
|
||||||
|
EPI["Epipolar constraint\n(Sampson / point-to-epiline)"]:::core
|
||||||
|
CYCLE["Cycle consistency / view-graph pruning"]:::core
|
||||||
|
GROUP["Assemble per-target multi-view observation set\n{view_id → 133×2}"]:::core
|
||||||
|
EPI --> CYCLE --> GROUP
|
||||||
|
end
|
||||||
|
|
||||||
|
T1 --> EPI
|
||||||
|
T2 --> EPI
|
||||||
|
T3 --> EPI
|
||||||
|
T4 --> EPI
|
||||||
|
|
||||||
|
%% =========================
|
||||||
|
%% Geometry / lifting
|
||||||
|
%% =========================
|
||||||
|
subgraph GEOM["3D measurement construction"]
|
||||||
|
direction TB
|
||||||
|
RT["Camera models\nK, [R|t], SO(3)/SE(3)"]:::meta
|
||||||
|
DLT["DLT / triangulation (init)"]:::core
|
||||||
|
NN["Optional NN lifting / completion"]:::core
|
||||||
|
BA["Optional reprojection refinement\n(1–5 iters)"]:::core
|
||||||
|
Y["3D measurement y(t)\nJ×3 positions (+quality / R / cov)"]:::out
|
||||||
|
RT --> DLT --> NN --> BA --> Y
|
||||||
|
end
|
||||||
|
|
||||||
|
GROUP --> DLT
|
||||||
|
|
||||||
|
%% =========================
|
||||||
|
%% Tracking filter + lifecycle
|
||||||
|
%% =========================
|
||||||
|
subgraph FILTER["Tracking filter (per target)"]
|
||||||
|
direction TB
|
||||||
|
GATE["Gating\n(Mahalanobis / per-joint + global)"]:::core
|
||||||
|
IMM["IMM (motion model bank)\n(CV/CA or low/med/high Q)"]:::core
|
||||||
|
PRED["Predict\nΔt, self-propagate"]:::core
|
||||||
|
UPD["Update\nKF (linear)\nstate: [p(3J), v(3J)]"]:::core
|
||||||
|
MISS["Miss handling & track lifecycle\n(tentative → confirmed → deleted)"]:::meta
|
||||||
|
|
||||||
|
GATE --> IMM --> PRED --> UPD --> MISS
|
||||||
|
end
|
||||||
|
|
||||||
|
Y --> GATE
|
||||||
|
|
||||||
|
%% Optional inertial fusion
|
||||||
|
IMU["IMU (optional)"]:::meta --> INERT["EKF/UKF branch (optional)\nwhen augmenting state with orientation"]:::meta --> IMM
|
||||||
|
|
||||||
|
%% =========================
|
||||||
|
%% IK + optional feedback
|
||||||
|
%% =========================
|
||||||
|
subgraph IKSTAGE["IK stage (constraint / anatomy)"]
|
||||||
|
direction TB
|
||||||
|
IK["IK optimization target\n(minimize joint position error,\nadd bone length / joint limits)"]:::core
|
||||||
|
FB["Optional feedback to filter\npseudo-measurement z_IK with large R"]:::meta
|
||||||
|
IK --> FB
|
||||||
|
end
|
||||||
|
|
||||||
|
UPD --> IK
|
||||||
|
FB -.-> GATE
|
||||||
|
|
||||||
|
%% =========================
|
||||||
|
%% SMPL / mesh fitting
|
||||||
|
%% =========================
|
||||||
|
subgraph SMPLSTAGE["SMPL / SMPL-X fitting"]
|
||||||
|
direction TB
|
||||||
|
VP["VPoser / pose prior"]:::core
|
||||||
|
SMPL["SMPL(θ, β, root)\nfit to joints / reprojection"]:::core
|
||||||
|
JR["JR: Joint Regressor\nmesh → joints (loop closure)"]:::core
|
||||||
|
OUT["Outputs\nmesh + joints + pose params"]:::out
|
||||||
|
VP --> SMPL --> JR --> OUT
|
||||||
|
JR -. residual / reproject .-> SMPL
|
||||||
|
end
|
||||||
|
|
||||||
|
IK --> SMPL
|
||||||
|
|
||||||
|
classDef core fill:#0b1020,stroke:#5eead4,color:#e5e7eb,stroke-width:1.2px;
|
||||||
|
classDef meta fill:#111827,stroke:#93c5fd,color:#e5e7eb,stroke-dasharray: 4 3;
|
||||||
|
classDef out fill:#052e2b,stroke:#34d399,color:#ecfeff,stroke-width:1.4px;
|
||||||
BIN
fig/.DS_Store
vendored
Normal file
BIN
fig/.DS_Store
vendored
Normal file
Binary file not shown.
1
fig/fig.svg
Normal file
1
fig/fig.svg
Normal file
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 57 KiB |
Reference in New Issue
Block a user