๐Ÿ‘ฉโ€๐ŸŽจ ๊ธฐ๊ณ„ํ•™์Šต๊ธฐ์ดˆ ์ˆ˜์–ด ํ”„๋กœ์ ํŠธ

๊น€์ˆ˜์ง„ยท2025๋…„ 11์›” 23์ผ

0. ํ”„๋กœ์ ํŠธ ๋ฐฐ๊ฒฝ

NIA ์ˆ˜์–ด ๋ฐ์ดํ„ฐ์…‹์„ ๊ฐ€์ง€๊ณ  keypoint ๊ธฐ๋ฐ˜ ์ˆ˜์–ด ์ธ์‹ ๋ชจ๋ธ์„ ๋งŒ๋“œ๋Š” ํŒ€ํ”Œ์„ ์ง„ํ–‰ํ–ˆ๋‹ค. ์šฐ์„  ๋‚ด๊ฐ€ ๋งก์€ ์—ญํ™œ์€ ๋ฐ์ดํ„ฐ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ + ๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌ์ด๋‹ค. ๋ชจ๋ธ๋ง์„ ํ•˜๊ธฐ ์ „, ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์„ ๋งก์€ ๊ฒƒ์ด๋‹ค..

์ฒ˜์Œ์—๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋„ ์ž˜ ๋ชจ๋ฅด๊ณ , ์ผ๋‹จ ๋Œ์•„๊ฐ€๊ฒŒ์— ์ง‘์ค‘ํ–ˆ๋‹ค๊ฐ€,
์ค‘๊ฐ„๋ฐœํ‘œ ์ดํ›„์—๋Š” ์ง„์งœ ๊ดœ์ฐฎ์€ ์ „์ฒ˜๋ฆฌ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๊ตฌ์กฐ๋ฅผ ์™„์ „ํžˆ ์†๋ดค๋‹ค.

1. REAL์ด 5๊ฐœ๋ผ๊ณ  ๋ฏฟ๋˜ ์‹œ์ ˆ (๋ฐ์ดํ„ฐ์…‹์ด 5๊ฐœ ๋ฐ–์— ์—†๋Š” ์ค„ ์•Œ์•˜์Šจ...)

1-1. ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ์˜คํ•ด: REAL=5

์ฒ˜์Œ์—๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์ด๋ ‡๊ฒŒ ์ดํ•ดํ–ˆ๋‹ค.

WORD0001~0160 ร— REAL01~05 ร— F ๋ฒ„์ „

๊ทธ๋ž˜์„œ ์‹ค์ œ REAL์ด 16๊ฐœ๋ผ๋Š” ๊ฑธ ๋ชจ๋ฅด๊ณ ,
REAL 01~05๋งŒ ๋Œ€์ƒ์œผ๋กœ keypoint๋ฅผ ์ถ”์ถœํ–ˆ๋‹ค.

for z in "$SRC"/*.zip; do
  for i in $(seq -f "%04g" 1 160); do
    unzip -qq "$z" "*/NIA_SL_WORD${i}_REAL0[1-5]_F*" -d "$DST"
  done
done

์ง€๊ธˆ ์™€์„œ ๋ณด๋ฉด,
๋ฐ์ดํ„ฐ 16๊ฐœ์ธ ์ค„ ๋ชจ๋ฅด๊ณ  5๊ฐœ๋งŒ ์“ฐ๋ฉด์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋„ˆ๋ฌด ์ ๋‹ค๊ณ  ๊ณ ๋ฏผํ•˜๊ณ  ์žˆ์—ˆ๋˜ ์‹œ๊ธฐ์˜€๋‹ค.

1-2. โ€œ๋ฐ์ดํ„ฐ๊ฐ€ ๋„ˆ๋ฌด ์ ๋‹คโ€ โ†’ ๋ฐ์ดํ„ฐ ์ฆ๊ฐ•๋ถ€ํ„ฐ ๊ณ ๋ฏผ

REAL์ด 5๊ฐœ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋‹ˆ๊นŒ, ๋‹จ์–ด๋ณ„ ์ƒ˜ํ”Œ ์ˆ˜๊ฐ€ ๋‹น์—ฐํžˆ ๋งค์šฐ ์ ์–ด ๋ณด์˜€๋‹ค.

๊ทธ๋ž˜์„œ ์ด๋•Œ๋Š” ์ „์ฒ˜๋ฆฌ ์ „๋žต์˜ ํฌ์ปค์Šค๊ฐ€

โ€œ๋ฐ์ดํ„ฐ๊ฐ€ ์ ์œผ๋‹ˆ โ†’ ์–ด๋–ป๊ฒŒ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ๋Š˜๋ฆฌ์ž(์ฆ๊ฐ•)โ€

์— ๋งž์ถฐ์ ธ ์žˆ์—ˆ๋‹ค.

์ง€๊ธˆ ์ƒ๊ฐํ•ด๋ณด๋ฉด,

๋ฐ์ดํ„ฐ๊ฐ€ ์ ๋‹ค โ†’ ์ฆ๊ฐ•! ์ด๋ผ๋Š” ์ƒ๊ฐ ์ž์ฒด๋Š” ๋‚˜์˜์ง€ ์•Š์•˜์ง€๋งŒ,
๊ทธ ์ „์— ๋ฐ์ดํ„ฐ๊ฐ€ ๋ช‡๊ฐœ์ธ์ง€๋ถ€ํ„ฐ ์ž˜ ํ™•์ธํ–ˆ์—ˆ์–ด์•ผ ํ–ˆ๋‹ค.

1-3. StandardScaler ์ ์šฉ โ€“ skeleton์—๋Š” ์•ˆ ๋งž๋Š” ์„ ํƒ

1์ฐจ ๋ฒ„์ „์—์„œ ๋˜ ํ•˜๋‚˜ ํ–ˆ๋˜ ์„ ํƒ์ด StandardScaler์˜€๋‹ค.


from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train.reshape(-1, X_train.shape[-1]))
X_train_scaled = X_train_scaled.reshape(X_train.shape)

๋‹น์‹œ์—๋Š”:

๋”ฅ๋Ÿฌ๋‹ ์ „์— feature scaling์€ ๊ธฐ๋ณธ์ด๋ผ๋Š” ์ƒ๊ฐ์œผ๋กœ,

์ขŒํ‘œ ๊ฐ’ ์ „์ฒด๋ฅผ ํ‰๊ท  0, ๋ถ„์‚ฐ 1๋กœ ๋งž์ถ”๋Š” StandardScaler๋ฅผ ์ ์šฉํ–ˆ๋‹ค.

๊ทผ๋ฐ skeleton ์ขŒํ‘œ์— StandardScaler๋ฅผ ์“ฐ๋ฉด ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๋‹ค.

๊ฐ joint์˜ ์ƒ๋Œ€์ ์ธ ์œ„์น˜ ์ •๋ณด๊ฐ€ ์™œ๊ณก๋˜์—ˆ๋‹ค.

๋˜, (x,y)์˜ โ€œ๊ฑฐ๋ฆฌ ๊ตฌ์กฐโ€๊ฐ€ ํํŠธ๋Ÿฌ์ ธ์„œ, Mid-Hip ๊ธฐ์ค€ ๊ฑฐ๋ฆฌ, ์ƒํ•˜/์ขŒ์šฐ ๊ด€๊ณ„๊ฐ€ ๊นจ์ ธ๋ฒ„๋ ธ๋‹ค.

1์ฐจ ๋ฒ„์ „์—์„œ๋Š” ์ด๊ฑธ ํฌ๊ฒŒ ์ธ์ง€ํ•˜์ง€ ๋ชปํ–ˆ๊ณ , โ€œ์ˆ˜์น˜๊ฐ€ ์ž˜ ์ •๊ทœํ™”๋˜์—ˆ๋‹คโ€ ์ •๋„๋กœ๋งŒ ๋ณด๊ณ  ๋„˜์–ด๊ฐ”๋‹ค.

1-4. 1์ฐจ ๋ฒ„์ „์˜ ํ•œ๊ณ„ ์ •๋ฆฌ

์ •๋ฆฌํ•ด๋ณด๋ฉด, REAL=5๋ผ๊ณ  ๋ฏฟ๋˜ ์‹œ์ ˆ์˜ ์ „์ฒ˜๋ฆฌ๋Š” ์ด๋Ÿฐ ๋А๋‚Œ์ด์—ˆ๋‹ค.

ํ•œ ์ผ

  • REAL 01~05๋งŒ ๊ฐ€์ง€๊ณ  ์ „์ฒ˜๋ฆฌ/ํ•™์Šต
  • ๋ฐ์ดํ„ฐ๊ฐ€ ์ ๋‹ค๊ณ  ํŒ๋‹จ โ†’ ๋ฐ์ดํ„ฐ ์ฆ๊ฐ• ๋„์ž…
  • StandardScaler๋กœ ์ขŒํ‘œ ์ „์ฒด ์Šค์ผ€์ผ๋ง

ํ•œ๊ณ„

  • REAL์„ 5๊ฐœ๋ผ๊ณ  ์ž˜๋ชป ์ดํ•ดํ•ด ์ „์ฒด ๋ฐ์ดํ„ฐ์˜ 1/3๋งŒ ์‚ฌ์šฉ
  • ๋ฐ์ดํ„ฐ๊ฐ€ ์ ๋‹ค๊ณ  ํŒ๋‹จํ•ด ์ฆ๊ฐ•(๋…ธ์ด์ฆˆยทํ”„๋ ˆ์ž„ ๋Š˜๋ฆฌ๊ธฐ ๋“ฑ) ์ ์šฉ
  • skeleton ์ขŒํ‘œ์— ๋ถ€์ ์ ˆํ•˜๊ฒŒ StandardScaler๋ฅผ ์ ์šฉํ•ด์„œ ๊ตฌ์กฐ๊ฐ€ ์™œ๊ณก๋˜์—ˆ๊ณ ,
  • confidence๋Š” frame ์ขŒํ‘œ๋“ค(x์™€ y)๊ณผ ๋’ค์„ž์ธ ์ฑ„๋กœ ์ฒ˜๋ฆฌ๋˜์–ด, ์ ˆ๋ฐ˜ ์ด์ƒ์ด 0์ธ ๋ฐ์ดํ„ฐ๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉ
  • 137๊ฐœ full keypoint ์ „์ฒด๋ฅผ ์ž…๋ ฅ์œผ๋กœ ๋„ฃ์–ด ์ฐจ์› ํผ

์ด ์ƒํƒœ๋กœ๋„ ์ผ๋‹จ ๋Œ์•„๊ฐ€๋Š” ๋ชจ๋ธ์€ ๋งŒ๋“ค ์ˆ˜ ์žˆ์ง€๋งŒ,
๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์ œ๋Œ€๋กœ ์ดํ•ดํ•˜๊ณ  ์“ฐ๋Š” ์ˆ˜์ค€์€ ์•„๋‹ˆ์—ˆ๋‹ค.

2. ์ค‘๊ฐ„ ๋ฐœํ‘œ ์ดํ›„ โ€“ โ€œ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ถ€ํ„ฐ ๋‹ค์‹œ ๋ณด์žโ€๋กœ ์ „ํ™˜

์ค‘๊ฐ„ ๋ฐœํ‘œ์—์„œ ๋‚˜์™”๋˜ ๊ต์ˆ˜๋‹˜์˜ ํ•ต์‹ฌ ํ”ผ๋“œ๋ฐฑ:

  • keypoint ์ฐจ์› ์ถ•์†Œ
  • confidence ๊ฐ’์ด 0์ธ frame ์ฒ˜๋ฆฌ

์ด๊ฑธ ๊ณ„๊ธฐ๋กœ ์ „์ฒ˜๋ฆฌ ํŒŒ์ดํ”„๋ผ์ธ์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ์งฐ๋‹ค.

2-1. REAL=16 ์ „์ฒด ์‚ฌ์šฉ์œผ๋กœ ์ „ํ™˜

๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ๋‹ค์‹œ ๋ณด๋‹ˆ, ์•Œ๊ณ  ๋ณด๋‹ˆ REAL์€ 5๊ฐœ๊ฐ€ ์•„๋‹ˆ๋ผ 16๊ฐœ์˜€๋‹ค.
5๊ฐœ์ฒ˜๋Ÿผ ๋ณด์˜€๋˜ ๊ฑด โ€˜์ดฌ์˜ ๊ฐ๋„โ€™์˜€๊ณ , ๊ทธ ์•„๋ž˜์— ์‹ค์ œ ์ดฌ์˜๋ณธ REAL01~REAL16์ด ์กด์žฌํ–ˆ๋‹ค.

์ด๊ฑธ ๋’ค๋Šฆ๊ฒŒ ์ดํ•ดํ•ด์„œ zip ํŒŒ์ผ์„ ์ „๋ถ€ ๋‹ค์‹œ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ , ํŒจํ„ด์„ ๋‹ค์‹œ ์žก์•„ ์ „์ฒด 160 ร— 16 ร— F ๋ฒ„์ „์„ ์ •ํ™•ํžˆ ์ถ”์ถœํ•˜๋Š” ์ž‘์—…์„ ๋‹ค์‹œ ํ–ˆ๋‹ค.

2-2. morpheme & keypoint ๋งค์นญ ๋‹ค์‹œ ํ•˜๊ธฐ (fast_index ์žฌ๊ตฌ์„ฑ)

๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ ๋งค์นญํ•˜๋Š”๋ฐ๋งŒ 10์‹œ๊ฐ„์ •๋„ ๊ฑธ๋ ธ๋‹ค.. ใ…œใ…œ

keypoint(frame๋ณ„ ์ขŒํ‘œ๊ฐ’์„ ๋‹ด๊ณ  ์žˆ๋Š” jsonํŒŒ์ผ)์™€ morpheme(์ˆ˜์–ด์˜์ƒ ์‹œ์ž‘๊ณผ ๋์˜ ์‹œ๊ฐ„ & ๋‹จ์–ด์˜๋ฏธ๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” json ํŒŒ์ผ)๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ๋งค์นญํ•˜๊ธฐ ์œ„ํ•ด
fast_index๋ฅผ ๋‹ค์‹œ ๋งŒ๋“ค์—ˆ๋‹ค.

word_id = filename.split("_")[2].replace("WORD", "")
real_id = filename.split("_")[3].replace("REAL", "")

key = f"{word_id}_{real_id}"
fast_index[key] = {
    "keypoint": keypoint_path,
    "morpheme": morpheme_path
}

ํŒŒ์ผ์ด๋ฆ„์„ ๊ธฐ์ค€์œผ๋กœ WORD / REAL ๊ธฐ์ค€์œผ๋กœ ์ •ํ™•ํ•œ ๋งค์นญ์„ ํ•˜์˜€๊ณ , ์‹ค์ œ๋กœ 1757๊ฐœ segment๋ฅผ ์•ˆ์ •์ ์œผ๋กœ ํ™•๋ณดํ–ˆ๋‹ค.

2-3. padding โ†’ (N, T, 137, 3) ๊ธฐ๋ณธ ํ˜•ํƒœ ๋งŒ๋“ค๊ธฐ

keypoint_data_list = [item["frames"] for item in data_json]

padded_data = pad_sequences(
    keypoint_data_list,
    padding='post',
    dtype='float32'
)

raw_data = np.array(padded_data)  # (N, T, 137, 3)

๋ชจ๋“  sequence๋ฅผ ๊ฐ™์€ ๊ธธ์ด T๋กœ ๋งž์ถ”์—ˆ๋‹ค.
๊ฐ ํ”„๋ ˆ์ž„๋งˆ๋‹ค 137๊ฐœ keypoint ร— (x, y, conf) ๊ตฌ์กฐ๋กœ ํŒŒ์•…๋˜์—ˆ๋‹ค.

2-4. Mid-Hip ์ƒ๋Œ€์ขŒํ‘œ (x, y๋งŒ ๋ณ€ํ™˜)

์ด๋•Œ๋ถ€ํ„ฐ๋Š” Mid-Hip ๊ธฐ์ค€ ์ƒ๋Œ€์ขŒํ‘œ๋ฅผ ์ œ๋Œ€๋กœ ์ ์šฉํ–ˆ๋‹ค.

def apply_midhip_relative(raw):
    N, T, F = raw.shape
    num_points = F // 3
    arr = raw.reshape(N, T, num_points, 3)

    REF = 0  # Mid-Hip
    ref_xy = arr[:, :, REF, :2]      # (N, T, 2)
    ref_xy = ref_xy[:, :, None, :]   # (N, T, 1, 2)

    arr[:, :, :, :2] -= ref_xy       # x,y๋งŒ ์ƒ๋Œ€์ขŒํ‘œ ๋ณ€ํ™˜
    return arr.reshape(N, T, F)

์ค‘์š”ํ•œ ์ :

์ด์ „ ๋ฒ„์ „๊ณผ ๋‹ฌ๋ฆฌ, confidence๋Š” ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š์•˜๋‹ค. (x์™€ y์™€ conf ํ—ท๊ฐˆ๋ฆฌ์ง€๋ง์ž!!)
(x, y)๋งŒ Mid-Hip์„ ๊ธฐ์ค€์œผ๋กœ ์ด๋™์‹œ์ผฐ๋‹ค.

2-5. ํ•ต์‹ฌ keypoint๋งŒ ์ถ”์ถœ (18๊ฐœ โ†’ 54์ฐจ์›)

๊ต์ˆ˜๋‹˜ ํ”ผ๋“œ๋ฐฑ ์ค‘ ํ•˜๋‚˜๊ฐ€:

๋ฐ์ดํ„ฐ์— ๋น„ํ•ด input ์ฐจ์›์ด ๋„ˆ๋ฌด ํฌ๋‹ค.

์˜€๋‹ค. ๊ทธ๋ž˜์„œ 137๊ฐœ ์ „์ฒด keypoint๋ฅผ ์“ฐ๋Š” ๋Œ€์‹ ,
์˜๋ฏธ ์žˆ๋Š” ์ผ๋ถ€๋งŒ ๋ฝ‘๋Š” ์ „๋žต์œผ๋กœ ๊ฐ”๋‹ค.

POSE_IDXS = [0,1,2,3,4,5,6,7]
HAND_IDXS = [4,8,12,16,20]

def select_keypoints(frame_137x3):
    pose = frame_137x3[:25]
    lh   = frame_137x3[25:46]
    rh   = frame_137x3[46:67]

    selected = []
    for idx in POSE_IDXS: selected.append(pose[idx])
    for idx in HAND_IDXS: selected.append(lh[idx])
    for idx in HAND_IDXS: selected.append(rh[idx])

    return np.array(selected).reshape(-1)   # 18 ร— (x,y,conf) = 54

์ด๋ ‡๊ฒŒ ํ•ด์„œ:

์ƒ์ฒด + ์–‘์†์˜ ํ•ต์‹ฌ ํฌ์ธํŠธ๋งŒ ์‚ฌ์šฉํ–ˆ๋‹ค.

์ฐจ์› ์ˆ˜๋ฅผ ํ™• ์ค„์ด๋ฉด์„œ, ์˜๋ฏธ ์žˆ๋Š” ๊ด€์ ˆ ์ •๋ณด๋Š” ์œ ์ง€ํ•˜๋Š” ์ตœ์ƒ์˜ ๋ฐฉ๋ฒ•์ด์˜€๋‹ค.

2-6. ๊ฐ€์žฅ ํฐ ์ด์Šˆ์˜€๋˜ confidence = 0 ๋ฌธ์ œ โ†’ ๋ณด๊ฐ„์œผ๋กœ ํ•ด๊ฒฐ

๋ฐ์ดํ„ฐ๋ฅผ ์ž์„ธํžˆ ๊นŒ๋ณด๋‹ˆ,
confidence๊ฐ€ 0์ธ ๊ฐ’์ด ์ „์ฒด์˜ ๊ฑฐ์˜ ์ ˆ๋ฐ˜์ด์—ˆ๋‹ค.

์›์ธ:

์ฐจ์›์„ ์ถ•์†Œํ•˜๋‹ค๋ณด๋‹ˆ, ์†์ด ๊ฐ€๋ ค์ง„ frame๋“ค์ด ๋งŽ์•˜๊ณ , confidence๊ฐ’์ด 0์ธ frame๋“ค์ด ์—ฐ์†์œผ๋กœ ๋‚˜์˜ค๋Š” ๊ฒฝ์šฐ, ๋‹จ์ง€ interpolation์œผ๋กœ๋Š” ๋ณด๊ฐ„์ด ๋ถˆ๊ฐ€ํ–ˆ๋‹ค.

ํ•ด๊ฒฐ ์ „๋žต: ๋ณด๊ฐ„(interpolation) v2

3๋‹จ๊ณ„๋กœ ์„ค๊ณ„ํ–ˆ๋‹ค.

(1) forward-fill

for t in range(1, T):
    if conf[t] < th and conf[t-1] >= th:
        x[t] = x[t-1]
        y[t] = y[t-1]
        conf[t] = conf[t-1]

๋ฐ”๋กœ ์ด์ „ ํ”„๋ ˆ์ž„์ด ์‹ ๋ขฐ ๋†’์œผ๋ฉด โ†’ ๊ทธ ๊ฐ’์„ ํ˜„์žฌ 0 ์œ„์น˜์— ๋ณต์‚ฌ

(2) backward-fill

for t in range(T-2, -1, -1):
    if conf[t] < th and conf[t+1] >= th:
        x[t] = x[t+1]
        y[t] = y[t+1]
        conf[t] = conf[t+1]

๋’ค์—์„œ๋ถ€ํ„ฐ ์Šค์บ”ํ•˜๋ฉด์„œ, ๋’ค์— valid ๊ฐ’์ด ์žˆ์œผ๋ฉด ์•ž์ชฝ ๋นˆ ์นธ์„ ์ฑ„์›€

(3) ๊ตฌ๊ฐ„ ๋‹จ์œ„ ์„ ํ˜• ๋ณด๊ฐ„

for s, e in zip(seg_starts, seg_ends):
    prev_t = s - 1
    next_t = e + 1
    if prev_t < 0 or next_t >= T:
        continue

    for t in range(s, e+1):
        ratio = (t - s + 1) / (e - s + 2)
        x[t] = (1-ratio) * x[prev_t] + ratio * x[next_t]
        y[t] = (1-ratio) * y[prev_t] + ratio * y[next_t]
        conf[t] = max(conf[prev_t], conf[next_t])

์—ฐ์† zero ๊ตฌ๊ฐ„ ์ „์ฒด๋ฅผ ์•ž/๋’ค ํ”„๋ ˆ์ž„์œผ๋กœ ๋ถ€๋“œ๋Ÿฝ๊ฒŒ ์ฑ„์›€, ์†์ด ์ž ๊น ์‚ฌ๋ผ์กŒ์–ด๋„ trajectory๊ฐ€ ๋Š๊ธฐ์ง€ ์•Š๊ฒŒ ๋งŒ๋“ค์–ด์คŒ

๊ฒฐ๊ณผ

์ด ๊ณผ์ •์„ ๊ฑฐ์น˜๊ณ  ๋‚˜์„œ,

confidence ์ตœ์†Œ๊ฐ’: 1.0 
์ตœ๋Œ€๊ฐ’: 1.0 
0์ธ ๊ฐ’ ๋น„์œจ: 0%

์ฆ‰,

confidence ๊ตฌ๋ฉ(0) ๋ฌธ์ œ๋Š” ์™„์ „ํžˆ ํ•ด๊ฒฐํ–ˆ๋‹ค.

2-7. ์ตœ์ข… ์ž…๋ ฅ: confidence ์ œ๊ฑฐ + ๋‹จ์ˆœ ์Šค์ผ€์ผ๋ง

๋ณด๊ฐ„๊นŒ์ง€ ๋๋‚œ ํ›„, ์ตœ์ข…์ ์œผ๋กœ๋Š” confidence๋ฅผ ์ž…๋ ฅ์—์„œ ์•„์˜ˆ ์ œ๊ฑฐํ–ˆ๋‹ค.

def remove_confidence(X):
    N,T,F = X.shape
    P = F//3
    coords = X.reshape(N,T,P,3)[:,:,:,:2]   # x,y๋งŒ
    return coords.reshape(N,T,P*2)          # 36์ฐจ์›

๊ทธ๋ฆฌ๊ณ  ๊ฐ’์ด ๋„ˆ๋ฌด ํฌ์ง€ ์•Š๋„๋ก 1000์œผ๋กœ ๋‚˜๋ˆ„์—ˆ๋‹ค.

X_xy /= 1000.0

๊ฒ€์ฆ ๊ฒฐ๊ณผ:


์ตœ์ข… x,y ๋ฒ”์œ„: ์•ฝ [-1.01 ~ +1.30]

3-sigma ๊ธฐ์ค€ ์ด์ƒ์น˜ ๋น„์œจ: 0.0024% (๊ฑฐ์˜ ์—†์Œ)

3. 1์ฐจ vs 2์ฐจ ์ „์ฒ˜๋ฆฌ ์ •๋ฆฌ

1์ฐจ (REAL=5)

  • REAL01~05๋งŒ ์‚ฌ์šฉ โ†’ ๋ฐ์ดํ„ฐ ์–‘ ์ž์ฒด๊ฐ€ ์ค„์–ด๋“  ์ƒํƒœ
  • ๋ฐ์ดํ„ฐ ์ ๋‹ค๊ณ  ํŒ๋‹จํ•ด์„œ ์ฆ๊ฐ• ์ชฝ์— ์ง‘์ค‘
  • StandardScaler๋กœ ์ขŒํ‘œ ์ „์ฒด๋ฅผ ํ‰๊ท  0, ๋ถ„์‚ฐ 1๋กœ ์Šค์ผ€์ผ๋ง
  • confidence / keypoint ํ’ˆ์งˆ์— ๋Œ€ํ•œ ๊ณ ๋ฏผ์ด ๋ถ€์กฑ

2์ฐจ (REAL=16)

  • REAL01~16 ์ „์ฒด ์‚ฌ์šฉ
  • keypointโ€“morpheme๋ฅผ fast_index๋กœ ์ •ํ™•ํžˆ ๋งค์นญ
  • Mid-Hip ๊ธฐ์ค€ (x,y) ์ƒ๋Œ€์ขŒํ‘œ๋งŒ ์ ์šฉ
  • ํ•ต์‹ฌ keypoint 18๊ฐœ๋งŒ ์„ ํƒํ•ด์„œ ์ฐจ์› ์ถ•์†Œ
  • forward/backward + ์„ ํ˜• ๋ณด๊ฐ„์œผ๋กœ confidence 0 ๊ตฌ๊ฐ„ ๋ณด์™„
  • confidence๋Š” ์ตœ์ข… ์ž…๋ ฅ์—์„œ ์ œ๊ฑฐ
  • StandardScaler ์ œ๊ฑฐ, ์ขŒํ‘œ๋Š” 1000์œผ๋กœ ๋‚˜๋ˆˆ ๋‹จ์ˆœ ์Šค์ผ€์ผ๋ง
    -> ์ตœ์ข… ์ขŒํ‘œ ๋ฒ”์œ„, ์ด์ƒ์น˜, ๋ถ„ํฌ ๋ชจ๋‘ ๊น”๋”ํ•˜๊ฒŒ ์ •๋ฆฌ

๋งˆ๋ฌด๋ฆฌ

์ฒ˜์Œ์—๋Š” โ€œREAL์ด 5๊ฐœ์ธ ์ค„ ์•Œ์•˜๋˜ ์‹œ์ ˆ์˜ ์ „์ฒ˜๋ฆฌโ€๊ฐ€ ์žˆ์—ˆ๊ณ ,
๊ทธ ์œ„์— ์ฆ๊ฐ•๊ณผ StandardScaler๋ฅผ ์˜ฌ๋ ค์„œ ์–ด๋–ป๊ฒŒ๋“  ๋Œ์•„๊ฐ€๋Š” ๋ชจ๋ธ์„ ๋งŒ๋“ค๋ ค๊ณ  ํ–ˆ๋‹ค.

์ค‘๊ฐ„๋ฐœํ‘œ ์ดํ›„์—๋Š”:

๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ์ดํ•ดํ•˜๊ณ , keypoint ํ’ˆ์งˆ๊ณผ confidence๋ฅผ ์ฑ™๊ธฐ๊ณ , Mid-Hip, ํ•ต์‹ฌ keypoint ์„ ํƒ, ๋ณด๊ฐ„, ์Šค์ผ€์ผ๋ง๊นŒ์ง€ ํ•˜๋‚˜์”ฉ ๋…ผ๋ฆฌ์ ์œผ๋กœ ์Œ“์•„ ์˜ฌ๋ฆฌ๋ฉด์„œ ์ง€๊ธˆ์˜ ์ „์ฒ˜๋ฆฌ ํŒŒ์ดํ”„๋ผ์ธ v2๋ฅผ ์™„์„ฑํ–ˆ๋‹ค.

๋ฐ์ดํ„ฐ๋ฅผ ์ „์ฒ˜๋ฆฌํ•˜๋Š”๊ฒƒ๋„ ๋งค์šฐ ์ค‘์š”ํ•˜์ง€๋งŒ, ๋ฐ์ดํ„ฐ ์ˆ˜๊ฐ€ ๋งŽ์„ ๋•Œ๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ๋จผ์ € ํŒŒ์•…ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€