Skip to content

Latest commit

Β 

History

History
120 lines (102 loc) Β· 3.31 KB

File metadata and controls

120 lines (102 loc) Β· 3.31 KB

μ‹œλ‹ˆμ–΄ 이상행동 μ˜μƒ μ „μ²˜λ¦¬

ν™˜κ²½ μ„€μ •

μš”κ΅¬ 사항

  • Python (3.8 ~ 3.10)
  • Anaconda3 (ꢌμž₯, Miniconda μ‚¬μš© κ°€λŠ₯)
  • CUDA ν™˜κ²½ (골격 데이터 μΆ”μΆœ 가속)

단계

1. 클립 μΆ”μΆœ

원본 λΉ„λ””μ˜€μ—μ„œ νƒ€μž„μŠ€νƒ¬ν”„ 기반으둜 행동 클립을 μΆ”μΆœν•œλ‹€.

2. 골격 데이터 μΆ”μΆœ

MMPose의 HRNet 기반으둜 Top down Pose Estimation을 μˆ˜ν–‰ν•˜μ—¬ COCO-Keypoint ν˜•μ‹ 17 ν‚€ν¬μΈνŠΈλ₯Ό μΆ”μΆœν•œλ‹€. 결과물은 각 클립에 λŒ€ν•œ .pkl νŒŒμΌμ΄λ‹€.

3. μ΅œμ’… 데이터 생성

각 클립 .pkl을 μŠ€ν”Œλ¦Ώ(train or val) λ‹¨μœ„λ‘œ λ¬Άμ–΄ μ΅œμ’… 데이터셋을 μƒμ„±ν•œλ‹€.

μ°Έκ³ : 데이터 포맷

μ‹œλ‹ˆμ–΄ 이상행동 μ˜μƒ 라벨 (JSON)

{
	"annotations": {
		"duration": "00:05:00",
		"resourceId": "JFID_002330967",
		"resource": "FD_In_H11H22H31_0001_20201016_20.mp4",
		"resourcePath": ".//PID_000001857/",
		"fps": 29.97,
		"totFrame": 0,
		"resourceSize": 381141978,
		"object": [
			{
				"startPosition": {
					"x": "1968.2953307735665",
					"y": "377.0414201183432",
					"keyFrame": 7801.0
				},
				"endPosition": {
					"x": "2083.3255773772166",
					"y": "939.4082840236686",
					"keyFrame": 7860.0
				},
				"startFrame": 7801.0,
				"endFrame": 7860.0,
				"actionType": "ABNOR_H",
				"actionName": "H11H22H31"
			}
		]
	}
}
  • duration: μ˜μƒ 총 길이
  • fps: μ˜μƒ FPS
  • object: 이상행동 νƒ€μž„μŠ€νƒ¬ν”„
    • startPosition: 행동 μ‹œμž‘ μ‹œ μœ„μΉ˜ (κ°€μŠ΄ 쀑앙)
    • endPosition: 행동 μ’…λ£Œ μ‹œ μœ„μΉ˜ (κ°€μŠ΄ 쀑앙)
    • startFrame: 행동 μ‹œμž‘ μ‹œ ν”„λ ˆμž„
    • endFrame: 행동 μ’…λ£Œ μ‹œ ν”„λ ˆμž„
    • actionType: 이상행동 νƒ€μž…
      • ABNOR_H: 낙상
      • ABNOR_W: 배회
      • ACT_I_TYPE: μΌμƒμƒν™œ

골격 데이터 포맷 (Pickle)

{
    "split":
        {
            "train": ["S001C001P001R001A001", ...],
            "val": ["S001C001P003R001A001", ...],
            ...
        }
    "annotations":
        [
            {
                {
                    "frame_dir": "S001C001P001R001A001",
                    "label": 0,
                    "img_shape": (1080, 1920),
                    "original_shape": (1080, 1920),
                    "total_frames": 103,
                    "keypoint": array([[[[1032. ,  334.8], ...]]])
                    "keypoint_score": array([[[0.934 , 0.9766, ...]]])
                },
                {
                    "frame_dir": "S001C001P003R001A001",
                    ...
                },
                ...
            }
        ]
}
  • split: Dictionary, ν‚€λŠ” μŠ€ν”Œλ¦Ώ 이름, 값은 ν•΄λ‹Ήν•˜λŠ” μŠ€ν”Œλ¦Ώμ— λŒ€ν•œ 클립 고유 이름을 λͺ¨μ€ 리슀트
  • annotations: List of Dictionary, 각 λ”•μ…”λ„ˆλ¦¬λŠ” 클립별 행동 정보λ₯Ό 포함
    • frame_dir: 클립의 고유 이름
    • label: μ •μˆ˜ν˜• 클래슀
    • img_shape: μ˜μƒμ˜ 크기, (Height, Width) ν˜•μ‹
    • original_shape: img_shape와 κ°™μŒ
    • total_frames: 클립 총 길이
    • keypoint: List of Tuple, ν‚€ν¬μΈνŠΈ 정보
      • ν‚€ν¬μΈνŠΈμ˜ μ’Œν‘œ, (X, Y) ν˜•μ‹
      • (μ‚¬λžŒ 수, ν”„λ ˆμž„, 17, 2)
    • keypoint_score: ν‚€ν¬μΈνŠΈ 점수
      • (μ‚¬λžŒ 수, ν”„λ ˆμž„, 17)

주의

  • μ˜μƒ(.mp4, .avi), 골격 데이터(.pkl)λ₯Ό 직접 μ—…λ‘œλ“œν•˜μ§€ 말 것.
    • git add ., git add * μ‚¬μš© μ§€μ–‘