Skip to content

redleaf-kim/dacon-motion-keypoints

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

[Dacon] 모션 키포인트 검출 AI 경진대회 2위 솔루션



[목차]



[문제정의]

  • 신체에서 24개의 부위를 추정해야함
    • 흔히 키포인트 디텍션의 기준이 되는 Coco Keypoints 데이터셋은 17개의 키포인트만을 대상으로 함

[데이터]

  • 이미지 상에서 사람이 대부분 중앙에 위치함

  • 훈련 데이터

    • 4195장
    • 사람별 A, B, C, D, E 총 5개의 카메라를 이용해 다른 각도에서 촬영
    • 약 100개 정도의 데이터가 키포인트 매칭이 이상하게 존재 → 수동으로 수정해줌
  • 테스트 데이터

    • 1600장
    • 훈련 데이터에는 존재하지 않는 고개 숙인 뒷모습과 같은 포즈가 존재
    • 훈련 기구와 평행하게 놓여진 팔이 자주 등장하고, 기구에 가려진 신체부위가 다수 존재함

[목표]

  • 24개의 키포인트 중 17개의 위치는 일치
  • 때문에 기존에 존재하는 Keypoint detection SOTA 모델에 추가 학습해 주는 것으로 해결 할 수 있다고 판단
  • SOTA 모델을 활용해서 해결해보자

    • Top-down
      • 영상 이미지에서 사람을 먼저 검출하고, 해당 Bbox내에 존재하는 사람의 포즈를 추정하는 방식
    • Bottom-up
      • 영상에 포함된 사람의 키포인트를 모두 추정하고 키포인트들간의 상관관계를 분석하여 포즈를 추정하는 방식
    • 일반적으로 Top-down 방식이 추론 속도가 느리지만 정확도가 더 좋다고 해서 선택함

[학습전략]

  • [데이터의 특징 활용]

    • top-down 방식을 위해서 어떤식으로 사람의 위치를 localize할지 생각해봤음

    • 훈련 데이터

      • keypoints들이 주어진다는 특징을 이용해서 다음 두가지를 시도해봤음
        • 주어진 keyopints들을 활용해서 사람의 중점을 정의하고 해당 중점을 기준으로 affine transformation을 해줬음
        • 주어진 keypoints들을 기준으로 bbox를 구성해 일반적인 crop을함



      • 실제로 다른 top-down방식의 pose-estimation 모델들을 훈련할 때 bbox의 중점을 통해서 affine transformation을 해준다고함

    • 테스트 데이터

      • Yolo-v5모델을 활용하여 사람의 위치를 localize하고
        • 해당 중점을 기준으로 900x900을 뽑아내었음
        • 해당 bbox의 중점을 활용 서 있는 경우 | 앉아 있는 경우 | 누워 있는 경우를 파일 이름으로 구분하고 가로 세로의 비율을 다르게 하여 affine transformation 수행을 해줬음
      • 꼼수이긴 하지만 해당 대회에서의 자세가 위의 세가지 밖에 없었기 때문에 해당 경우들을 나누어서 crop할때의 비율을 바르게 잡아주었음

    • Transforms

      • 운동 동작을 수행하고 있는 사람의 자세가 데이터임 → 운동에 의한 흐려짐 현상을 해결하고자 motionblur, blur, imagecompression, gaussianblur를 사용함
      • 옷의 색상이나, 운동 기구의 색상과 같은 요소에 대한 강인함을 확보하고자 Channelshffule, huesaturation, rgbshift를 사용함
  • [카메라]

    • 학습 데이터에 각 케이스별로 A, B, C, D, E 카메라가 존재
    • 훈련 및 검증 데이터를 나눌 때에 카메라별로 나눠줬을 때 좀더 밸런스있게 학습할 것이라는 가정하에 시도했었고 → 활용했을때 점수가 소폭 상승했었음
  • [추가 데이터]

    • 포즈의 다양성을 추가해주면 Occlusion에도 강인해질 거라는 가설을 세움
    • Kaggle의 [New Yoga Pose Dataset] 을 활용하여 약 50여개의 데이터를 추가해줌

[시도했지만 효과를 보지 못한 기법]

  • [AID]

    • 운동기구에 혹은 카메라 각도에 의해 다른 신체에 의해 신체의 일부가 가려지는 Occlusion현상이 자주 보였음
      • 앉아있는 뒷모습의 경우 자주 팔이 운동기구에 가려져서 예측을 못하는 경우가 종종 보임
      • 고개를 숙이고 서있는 뒷모습의 경우 눈, 코, 귀를 제대로 예측하지 못함

    • 이를 해결하기 위해서 cutout을 사용해 봤지만 오히려 점수가 하락함
      • cutout은 무작위로 데이터에서 사각 영역을 제거함으로 모델이 물체의 덜 중요한 부분에 집중하지 않게 함으로써 네트워크의 일반화 성능을 끌어올림
      • 하지만 반대로 생각해보면, 랜덤으로 정보를 제거하기 때문에 유의미한 정보를 가진 context information 픽셀들을 너무 많이 제거하여 오히려 키포인트의 위치를 정의하기에 충분하지 않은 정보만을 가질 수 있음
      • 또한 제거하는 영역의 크기 또한 랜덤이기 때문에 너무 작은 영역만을 제거하게 된다면 학습에 유의미한 영향을 주지 못할 수 있음

    • 그렇게 찾은 방법이 AID(augmentation by information dropping)이라는 기법으로 연속적인 지역의 과도한 삭제 또는 보존을 피하는 것이 information dropping 방식의 핵심 포인트
    • 하지만 성능이 오히려 하락하는 현상이 발생했음
      • 운동기구에 가려지는 경우는 어느정도 향상됬음 하지만 고개를 숙인 서있는 뒷모습의 경우는 눈과 귀의 예측이 훨씬 엉뚱하게 되어버림
      • 아무래도 훈련 데이터에 없는 자세인데, AID를 통해서 Occlusion에 강하게 학습했고, 때문에 해당 자세를 앞모습이라고 판단하고 뒤에 있는 운동기구를 눈, 코, 귀로 인식하게 되는 것 같음
  • [Different Joints Weights]

    • 뒷모습의 경우 잘 예측하지 못하는 눈, 코, 입이나 운동기구에 가려져서 예측하지 못하는 손목 발목과 같은 부위에 강인하도록 만들기 위해서 해당 키포인트들에 강항 weight를 줘봤음
      • 큰 효과는 없었고, weight를 낮게 준 몸통이나 팔다리의 경우 오히려 성능이 낮아짐
      • 또한 고개를 숙인 뒷모습의 경우에 눈, 코, 입의 예측이 괴랄하게 나와서 폐기

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages