sol’s blog

Ahmednull/L2CS-Net 모델 오류

sol-commits
sol-commitsApr 28, 2025
Ahmednull/L2CS-Net 모델 오류

    운전자 이상 행동 중 문자 행동을 분류하기 위해 시선의 yaw(수평 각도), pitch(수직 각도)를 계산하는 모델인 L2CS-Net 을 이용하여 문자 를 할 때 시선이 자꾸 밑으로 가는 걸 탐지한다.

    문제점

    원래는 pytorch 에서 공식으로 지원하는 L2CS-Net 을 사용했는데, 값이 이해할 수 없게 나오는 문제가 있다.

    방향과 부호가 이상함

    yaw, pitch 값이 서로 바뀜

    yaw, pitch 값이 뒤바뀐 것 같다고 생각될 때가 많았음

    밑을 바라보고 있는데, 왜 pitch가 0도이고 yaw 가 0.41도 인지..
    밑을 바라보고 있는데, 왜 pitch가 0도이고 yaw 가 0.41도 인지..
    시선 각도가 너무 다른데 두번째 사진과 세번째 사진 모두 yaw가 비슷하다.
    시선 각도가 너무 다른데 두번째 사진과 세번째 사진 모두 yaw가 비슷하다.

    공식 레포의 issue들을 보니 코드 상에서 yaw, pitch가 바뀌었다는 issue도 있음

    실제로 코드 확인해보니 뒤바뀌어있음

    각도의 크기가 너무 작음

    yaw, pitch 값이 0~0.7 사이에 있음
    yaw, pitch 값이 0~0.7 사이에 있음

    L2CS-Net 논문에 따르면 L2CS-Net은 단위를 degree(°) 를 씀

    • classification 기반 모델 yaw, pitch를 90개의 클래스 중 하나로 분류
      • raw output은 클래스 확률 분포 (Softmax 결과)
    • 각 클래스는 일정한 각도 구간을 대표(→ 4도 단위로 90개 구간)
      클래스 0-180도
      클래스 1-176도
      클래스 2-172도
      클래스 89+176도

    →최종적으로 softmax 확률 분포를 기반으로 기댓값을 구하고, 그걸 4를 곱하고 -180을 더해서 degree 단위의 연속값들을 만들어냄 → 최종 결과 단위는 degree(°)

    💡
    최종 결과를 계산하는 공식

    Predicted Angle (degree) = (Softmax Expected Index) * 4 - 180

    • Softmax Expected Index: Softmax 확률분포 전체를 반영해서 부드럽게 평균 내는 것. 가장 높은 확률(=argmax)만 쓰면 뚝뚝 끊기기 때문
    • 프로젝트에 사용한 pipeline.py에는 제대로 계산을 하고 있지만, 반환하는 값의 단위를 raidan으로 변환하여 반환하고 있음을 확인 → 단위가 radian이어서 각도가 작았던 것.

    해결 방안

    다른 모델 사용

    더 개선된 L2CS 레포를 찾음

    • -180 ~ 180도로 반환하는 코드 확인 ✅
    • 이전보다 성능이 개선된 모델 ✅
    *는 이전에 사용한 레포 모델 성능
    *는 이전에 사용한 레포 모델 성능

    Ahmednull/L2CS-Net vs Shohruh72/L2CS-Net

    새로 찾은 모델을 적용시켜서 비교를 해보면..

    Shohruh72/L2CS-Net 참고하여 작성한 코드

    Ahmednull/L2CS-Net 이 더 정확한 것 같음

    Ahmednull/L2CS-Net 모델 반환 값 수정하여 사용

    • 모델이 반환하는 yaw, pitch 값을 원상태로 복구하여 사용
    • 해석하거나 시각화할 때는 radian 를 degree로 변환하여 사용

    🔎 radian vs degree 둘 중 모델 학습에 뭐가 더 적합할까?

    항목radiandegree
    사용 예시수학적 연산 및 신경망 구현에서는 radian이 표준사람에게 익숙
    모델 내부 연산에는 부적합
    값의 범위-pi ~ pi (약 -3.14 ~ 3.14)-180 ~ +180
    초기 학습 안정성더 빠르고 부드럽게 수렴초기 loss가 커서 진동할 수 있음
    미세한 시선 변화 감지작은 값 변화에 민감
    작은 변화도 loss에 작게 반영되어 미세한 조정 가능
    상대적으로 둔감
    작은 변화도 loss가 커서 덜 미세하게 반영

    → 해석하거나 시각화할 때는 degree를 사용하고, 모델에는 radian 을 넣으려고 함.