코스포 x 데이콘 자동차 충돌 분석 AI경진대회 채용

Class 분리와 시도해본 방법들을 공유합니다. (Public 0.70229 팁!)

2023.02.10 21:18 2,688 Views

이번 대회는 혼자 잘해먹기보단

많은걸 토론하고 배울 수 있었으면 좋겠어서

시도해본 방법을 조금씩 공유하려 합니다.

하지만 제 방법이 옳은 것이 아닌, 성능 개선에 도움이 된 것 처럼 보이는 것이니

참고만 해주세요!

제 접근 방식은 문제 인식과 문제 해결 방식이며, 많은 기업에서 트러블 슈팅이라는 이름으로 사용하는 접근법입니다!


[문제 인식]


# 1. 13개의 라벨에 대해서 뭐가 제대로 예측되는지 모른다!


>  총 13가지의 라벨을 토크에서 공유된 것 처럼 분해해보려 했습니다.

처음에는 컬럼을 나누어


Crash

0 : 충돌 / 1 : 충돌안함


Ego

0 : 나랑 충돌 / 1 : 나랑 충돌아님


Weather

0 : 맑음  /  1 : 눈  /  2 : 비


Timing

0 : 낮  / 1 : 밤


이렇게 해서, 4가지를 나누어 학습하고, 추론된 결과를 합쳤습니다.

이렇게 나누었을 때의 장점은, Weather과 Ego에 대한 학습이 어렵다는 사실을 알 수 있다는 점이었습니다.


# 2. 분해하고 나니 Weather과 Ego가 학습이 똑바로 안된다.

> 먼저 Ego의 개념부터 다시 생각했습니다.

Ego는 차량과 내가 "충돌했는지"의 여부입니다.

이 경우 아예 충돌이 일어나지 않으면 Ego의 라벨에 혼란이 올 것으로 검토되었습니다.

때문에 Crash가 일어났는지 > 그 후에 Ego의 여부를 나누기 위해

Crash+ego 컬럼으로 묶었습니다.

Crash +  Ego

0 : 충돌 안함 / 1 : 나랑 충돌 / 2 : 나랑 충돌 안함


이렇게 접근하니 Crash + Ego에 대한 예측이 좀 더 정확해 졌습니다.

그 다음은 가장 분류가 힘든 Weather에 대한 문제가 필요합니다.


# 3. Weather에 대한 접근(가설, 진행단계입니다.)

날씨의 경우, 많은 분들이 EDA를 통해 느끼셨겠지만,


눈이 와도 바닥이 젖은 경우가 있고,

바닥이 젖어도 비가 오지 않고 있는 경우가 있습니다.


때문에

1) Weather를 오히려 눈이 왔는가? >

2) 아닌 경우 비가 왔는가 ?

순으로 판단하는 것이

그나마 좋은 결과가 나올 것으로 생각됩니다.


비로 인해 바닥이 젖어있어도, 눈이 쌓여있기만 해도 Snowy로 평가하기에

비로 인한 이미지 요인이 눈보다 하위 판단 요인으로 작용되어 라벨링된 것으로 예상됩니다.


1) 눈이 왔는지(쌓여있는지? 때문에 Object detection도 고려)의 여부를 분류하고,

2) 그 예외인 경우에 비가 왔는지 판단한 후에,

3) 마지막 예외를 노말로 판단하는 것이


가장 유리하다고 보입니다.

당장 점수로는 pretrained model을 쓰지 않아도 확연한 성능 개선이 있었네요!


시각화로 보여드리고 싶지만, 손이 느려서 글로 인사이트를 나눠봅니다!

인공지능 이론으로는 훨씬 뛰어난 데이커분들이 많으시기에 많은 것을 배워보고 싶은 대회입니다.

좋은 토크가 더 이뤄졌으면 합니다. 감사합니다!

로그인이 필요합니다
0 / 1000
EISLab_이희원
2023.02.10 21:29

제가 다른 토크 글에서 Weather 모델을 학습할 때 이미지의 크기를 키워야 한다고 예상했었는데,
실제로 진행해보니 성능이 줄어들었습니다.
아마도 img_size를 128로 고정하고 진행하는 것이 점수가 가장 많이 나올 것 같습니다.

EISLab_이희원
2023.02.10 21:37

지금 상황에서는 이세님이 제시해주신 방법들이 최선인 것 같네요
좋은 아이디어 제공해 주셔서 감사합니다!

이세의인공지능
2023.02.10 21:45

저도 마찬가지입니다. 컴퓨팅 성능을 최대로 끌어서 720픽셀 사이즈로 했는데도, weather점수는 여전히 바닥입니다..
이유는 모르겠으나 img size를 128로 고정하는 방법이 비디오 처리로는 우선이고,
weather를 object detection으로 하려고 한다면, 프레임별로 비디오를 이미지로 찢어서,
하나라도 snowy한 것은 snowy로 처리하는 방식으로 접근하면 img size에 대해 손해를 보지 않아도 될 것 같습니다.
이미지 각각으로 접근한다면 50배는 메모리를 덜먹으니까요!

EISLab_이희원
2023.02.10 21:50

object detection은 비슷한 물체를 인식하는 task라서 적용에 어려움이 있을 것으로 예상합니다.
Scene Recognition 방법이 이 데이터셋에서 적당해 보이네요

이세의인공지능
2023.02.10 23:14

좋은 조언 감사합니다..!

파이썬초보만
2023.02.10 21:31

 좋은 시도네요! 공유 감사드립니다.

이세의인공지능
2023.02.10 21:47

공유해주신 기가 막힌 코드도 열심히 공부하고 있습니다만, 제 실력으론 역시 한참 읽어야 이해가 가겠네요!

파이썬초보만
2023.02.10 21:49

저도 막 가져다 붙인거라 잘 모릅니다 ㅎㅎ

이세의인공지능
2023.02.10 23:14

그것도 대단합니다..!

채찍피티
2023.02.10 21:37

'ego-Involve : 본인 차량의 충돌 사고 연류 여부 (No/Yes)'라고 되어있는데, 말씀하신 대로 본인 차와 충돌 여부가 맞겠죠...?
2571 비디오를 보니까 앞에 있는 트럭이 사고나면서 길을 막는데, 잘못 labeling된 데이터인지 아니면 길이 막혀서 연루되었다고 봐야하는지 애매하네요...

좋은 정보 감사합니다!

EISLab_이희원
2023.02.10 21:40

잘못된 데이터가 몇 개 있는 것 같네요.
잘못된 label이 있으면 학습 시 제외를 시키는 방법이 최선인 것 같네요

다냐니라
2023.02.10 22:32

다른 몇몇 영상도 2571처럼 라벨링이 잘못되어 있는게 있긴한데, 개인적인 생각으로는 영상의 길이가 더 길어지면 내 차와 충돌이 있었을것 같은 장면이 있더라구요. 
아마 영상이 5초로 짤리면서 내 차량과 충돌하는 영상이 짤린거 아닌가라고 개인적으로 생각합니다.

이세의인공지능
2023.02.10 23:17

공감합니다. "충돌이 일어나게 생겼어!" 하는 순간 영상이 끝나는 데이터도 있네요!

채찍피티
2023.02.10 21:40

2571 비디오는 잘못 labeling된 것 맞는 것 같네요. 본인 차와의 충돌 여부가 맞는 것 같아요!

이세의인공지능
2023.02.10 21:46

crash 자체에 대해선 성능이 이미 괜찮게 학습이 되어버려서 문제가 있다는 생각은 전혀 못했네요! 
라벨링 자체에 대한 온전한 신뢰가 또 어려워지는군요!

이세의인공지능
2023.02.10 21:43

최후의 수단으로 crash : 0인 영상에서 weather 를 sudo-labeling 하는 방법도 생각하고 있습니다만...
이전 포디블록 대회에서 데이터 생성 노가다를 너무 해서 몸이 상한 관계로 최후의 수단으로 생각하고 있습니다 ㅎ..

오븐
2023.02.10 22:29

이번 대회 같은 경우 코드를 실행할때 시간이 많이 걸려 여러가지 시도를 하기가 어려운데 혹시 이런 점에선 어떤 식으로 시도하시는지 여쭤봐도 될까요?

이세의인공지능
2023.02.10 23:16

베이스라인에서 조금 발전시킨 가벼운 cnn 모델들을 사용합니다.
혹시 어떤 환경이나 코드를 실행하실까요?
아무래도 5초짜리 50fps 영상이다보니 같은 화질의 이미지라도 250배는 더 메모리를 잡아먹는 것 같습니다.
큰 모델은 쉽게 손댈 수 없겠더라구요!
충돌과 같은 시계열이 중요한 데이터를 빼곤 이미지로 분리해서 학습하는 것도 메모리 부담을 줄이는 방법이 될 것 같습니다.

오븐
2023.02.10 23:25

말씀하신 것 처럼 pretrained 된 모델로 분석을 진행해서 그런 것 같습니다! 답변 정말 감사합니다~

이세의인공지능
2023.02.10 23:27

저는 데이터가 엉망인 것 같은 경우에는 가벼운 모델에서도 조금 나아질 수 있도록 건드려보는 편입니다..!ㅋㅋ
저야말로 감사합니다!

다냐니라
2023.02.10 22:37

역시 믿고 볼만한 글인 것 같습니다. 감사합니다. 
개인적으로 Timing 데이터 보면서 고민 많이 했는데.. 생각보다 잘 분류를 하나 보군요.. 
데이터를 제 눈으로 보면 낮( + 블랙박스 시간도 낮...)인데 밤으로 분류해놓은게 꽤 많아서 걱정이 많았는데..  
Timing의 분류는 잘 하나보네요... 
정보 공유  감사합니다.   :)

이세의인공지능
2023.02.10 23:14

쭉 켜놓고 봤을땐 차량 사고만 나오다가 거의 셀카 영상 같은게 나와서 흠칫 한 기억도 있네요 ㅋㅋ
Timing의 분류는 왜인지 꽤 잘 하는 것으로 보였습니다!
역광으로 인해서 전체적으로 어두운 영상인데도 분류를 해내더라구요!
train validation에 test로 해볼 데이터까지 split해보면 라벨링이 된 데이터로 확신을 얻을 수 있어 조금 더 재밌는 것 같습니다.

ever4red
2023.02.10 22:54

감사합니다 오늘 실험적으로 봤던 결과들이었는데, 생각이 확신으로 바뀐 것 같습니다.

이세의인공지능
2023.02.10 23:17

당연하게도 다양한 의견도 중요하니 맹신은 말아주세요 ㅋㅋ ㅠ 저는 정답이 아닙니다..

ever4red
2023.02.10 23:58

weather에 대해서는 weather관련 이미지로 pre-trained된 모델을 불러와서 fine-tuning 하는 방법을 고려중입니다.

낰낰교수
2023.02.11 18:07

좋은 글 감사합니다 
역시 weather가 가장큰 걸림돌인 걸까요

이세의인공지능
2023.02.11 18:53

네. weather이 라벨링이 잘못된 것 같단 의견이 상당히 많네요..!

중요한건꺾이지않는마음
2023.02.11 22:58

weather에서 잘못된  Labeling을 수정하는것은 룰위반에 해당하는지도 궁금하네요

이세의인공지능
2023.02.12 00:41

train에 있는 잘못된 label을 건드리는 것 + train에 0번 클래스에서 weather를 labeling하는 것이 위반이 되는지 저도 궁금하긴 하네요
아직 직접 손 쓰는건 손목이 고장나서 엄두도 못내고 있습니다...

이세의인공지능
2023.02.12 00:44

일단 sudo labeling으로 train 데이터의 0번 클래스에 대해서 처리를 했는데,  성능이 나아지지 않네요 ㅎㅎㅎㅎ 학습 자체가 조금 문제가 있어보입니다!

중요한건꺾이지않는마음
2023.02.16 15:27

저도 일부데이터에 대해서 labeling을 해봤는데 큰 개선은 없는거 같네요...

이세의인공지능
2023.02.16 15:42

헉 조만간 해보려 했는데 그런 문제가 아닌가보네요..! 분류를 방해하는 문제가 뭔지 다시 돌아와서 논의해봐야 될 것 같습니다 그러면..!

장성
2023.02.13 13:10

너무 좋은 글 감사합니다. 
영상 기반 모델을 구축해야하다보니 시간이 오래걸리는 문제가 있었는데 이런 글을 읽으면서 조금 효율적인 코딩이 될 수 있을 것 같네요 ㅎㅎ
이세님은 현재 가변운 모델을 활용해서 데이터를 정제 및 전처리 하는것에 몰두하고 계신 건가요??

이세의인공지능
2023.02.13 13:32

넵 저는 좋은 모델보다는 데이터 자체의 품질에 항상 집중하고 있습니다.

장성
2023.02.13 13:37

답변 감사합니다 ㅎㅎ
화이팅 하세요 :)

이세의인공지능
2023.02.13 14:05

감사합니다!
좋은 인사이트 많은 공유 부탁드립니다!ㅎㅎㅎ
좋은 하루 되세요!

minyoungxi
2023.02.14 18:52

이세의인공지능님 글보면서 계속 공부하고 있습니다 !! 인사이트가 대단하시네요 :) 
혹시 시간 나중에 클래스 분류하셨던 코드 공유도 가능하실까요 ㅎㅎ

이전 글
쉐도우 EDA
Competition - 스마트 공장 제품 품질 상태 분류 AI 온라인 해커톤
Likes 81
Views 3,631
Comments 12
2년 전
현재 글
Class 분리와 시도해본 방법들을 공유합니다. (Public 0.70229 팁!)
Competition - 코스포 x 데이콘 자동차 충돌 분석 AI경진대회 채용
Likes 38
Views 2,688
Comments 37
2년 전
다음 글
코랩에 수식 작성을 위한 소소한 팁
Competition - 데이크루 4기
Likes 21
Views 3,520
Comments 0
2년 전