농업 환경 변화에 따른 작물 병해 진단 AI 경진대회

이미지로 병해를 분류하는 것인지, 식물 일련번호를 식별하는 것인지의 애매함

2022.02.02 23:24 3,019 조회

안녕하세요, 딥러린이입니다.


딥러닝 공부하면서 많은 분들이 공유해주신 코드와 아이디어들 살펴보면서 잘 배우고 있습니다.

열심히 따라가면서 고민하고 있는 것은 공유하려고 하는데요, 이번에는 많이 늦긴했지만 "분류 vs 식별" 이야기입니다.


아래는 6_b5_1, 시설포도_축과병_초기에 해당하는 이미지 21장입니다.

눈으로 봤을 때 뭐가 문제인지 알 수 없는 애들도 있는데요, 더 특이한 것은 똑같은 포도송이가 여러번 등장한다는 것입니다.


imagenet 같은 데이터셋을 생각해보면 모든 이미지는 각각의 객체의 담고 있는 독립적인 데이터입니다.

딥러닝과 같은 알고리즘을 활용해서 서로 독립적인 이미지에서 패턴을 찾고, 새로운 정보를 담고 있는 새로운 이미지를 잘 분류하는 것이 일반적인 목적이고요.


아래의 두 이미지는 제가 test 데이터에서 눈으로 찾은 두 포도송이 10149, 40002번 인데요, 얘네는 높은 확률로  "6_b5_1"일 겁니다.


다른 분이 환경데이터를 시각화 해주셨는데, 시차를 두고 동일한 값을 갖는 경우가 많습니다.

같은 하우스 시설에 있기도 하지만, 아예 대상이 동일하고 시차만 존재하기도 하기 때문일 겁니다.

매 시간마다 동일한 작물을 촬영하는 것이 누군가의 업무 이거나 어떤 장비의 역할일 수 있는 것이죠.

그리고 매 사진마다 label이 붙은 것이 아니라 특정한 작물이 최종적으로 걸린 병해 정보가 해당 작물의 이미지에 일괄적으로 label로 붙었을 수도 있을 것 같네요.


이 경우, 우리가 만들고 활용하고 있는 알고리즘이 과연 새로운 작물 이미지에도 잘 먹힐까하는 고민이 필요합니다.

그런데 대회는 대회고, 데이터의 특성은 특성이고, 평가는 평가기 때문에 이걸 잘 활용하는 것이 중요해보입니다.


모두에게 몇 번남지 않은 제출기회라서 조심스럽지만, 그래도 10등 안에 들어야 뭐라도 기회가 있으니까요ㅎㅎ

애매한 위치에 있는 분들은 '이미지 분류'보다는 'ID 식별'의 컨셉으로 살짝 과적합을 해보는 것도 괜찮아 보입니다.


특히 f1 macro에 큰 영향을 미치는 건수가 적은 마이너한 병해들은 더더욱 동일한 이미지가 test데이터에 포함되어 있을 가능성이 커보입니다.


augmentation과정에서 많은 랜덤이 들어가는데요, 오히려 덜 랜덤한 것이 더 나을 것 같기도 합니다.


실력도 시간도 부족하지만 저도 이틀동안 바짝 따라 가보겠습니다:)




로그인이 필요합니다
0 / 1000
솔라나
2022.02.02 23:56

아이디어 감사합니다.

Statistics
2022.02.03 11:04

감사합니다.

재색
2022.02.03 08:45

꼼꼼하게 살펴주셔서 감사합니다.
한가지 말씀드리고 싶은 점은 전문가가 아닌 일반인의 눈으로는 병해 여부나 심각도를 정확히 파악하지 못할 가능성이 있어보인다는 점입니다. 특히 병의 초기인 경우에요. 이 경우는 당연히 과적합이 바로 성능 하락으로 이어지지 않을까 합니다.
training 셋에서는 다행히 병해 부위가 표기 되어 있기에 이를 기준으로 판단해야 할 듯 합니다. 문맥 상으로는 training셋에서도 육안 관찰만 하신것 같습니다.

Statistics
2022.02.03 11:17

일반적인 과적합은 당연히 성능하락으로 이어지는데요, 이 문제의 데이터로만 한정지었을 때는 과적합의 이점도 있습니다.
보통 train 데이터셋과 test 데이터셋은 완전히 다른 관측치로 구성되는 것이 일반적이지만, 위에서 등장한 포도처럼 train 데이터셋에 등장하는 바로 그 포도가 test 데이터셋에도 포함되어 있습니다.

그 말은 병해 여부나 심각도를 파악하지 않고 '바로 그 포도'를 식별하는 것만으로도 당장 눈앞의 스코어 개선할 수 있다는 이야기가 됩니다. 
여러 참여자가 공유한 내용을 살펴보면 무난한, robust한 모형을 만들기 위해서 다양한 시도를 했지만 오히려 성능이 떨어지는 경우가 많다는 이야기가 여러번 등장합니다. 저는 그 이유가 오히려 저렇게 너무 뻔한 문제를 괜히 비틀어버려서라고 생각합니다.

그리고 무난히 만든 모형에서 25개 범주별 예측값을 보면 마이너한 클래스임에도 예측 확률이 거의 100%로 찍히는 애들이 있습니다. 
상황을 가정해보면 train 데이터셋에 있던 그 작물의 한 시간뒤 사진일 수 있겠죠.

전체적인 예측 프로세스를 어떻게 설계하는 가에 따라 충분히 활용할 수 있는 여지가 있습니다. 
수능으로 치면 train과 test에 등장하는 똑같이 등장하는 애들은 2점짜리라서 그냥 얻어갈수 있는 기본 점수니까 이걸 놓치지 않는 것이 중요해보입니다.

클로드섀넌
2022.02.03 15:23

"3_a9_1", "3_a9_2", "3_a9_3" 를 구별하는데 말씀해주신 특징이 유용하게 쓰일 수 있을 것 같아 살펴보는 중인데 적용이 어려울 것 같습니다.

10118 은 "3_a9_1" 인데 같은 환경데이터를 같은 csv 를 공유하는 데이터들을 살펴보면 아래와 같습니다.

51716 3_a9_2
67423 3_a9_2
15788 3_a9_3
22849 3_a9_2
42788 3_a9_3
19503 3_a9_1
49938 3_a9_2
23853 3_a9_2
42611 3_a9_1
37506 3_a9_2
64711 3_a9_3
10118 3_a9_1
36387 3_a9_1
14986 3_a9_1
17918 3_a9_2
46143 3_a9_1
56764 3_a9_2

흐.. csv 데이터가 정확히 일치하면 라벨도 정확히 일치해주길 바랬는데 일치가 안되서 (csv 데이터가 정확히 일치한다)  로 얻을 수 있는 특별한 정보는 없는 것 같습니다. 대강 일치하는 패턴정도는 LSTM encoder 가 해결해줄 것 같구요

Statistics
2022.02.03 15:40

같은 환경 데이터의 것들이 모두 3_a9라는게 엄청난 정보 아닐까요?ㅎㅎ
아마도 같은 하우스 안에서 동일한 병해가 발생할 가능성이 크고, 피해정도의 차이가 있어보입니다. 

그런데 말씀 주신 내용을 보면 오히려 (값이 똑같은) 환경 데이터가 너무 많이 관여하면 피해정도 차이를 잘 못 설명할 수 있겠네요.
일단 3_a9까지는 왔으니, 이미지로 피해정도 1,2,3을 가르는 전략이 잘 먹히겠네요!

이미지 하나도 안쓰고 환경 변수로만 lightgbm으로 판별 모형 만들었을 때 F1 macro가 0.8넘게 나오더라구요.

클로드섀넌
2022.02.03 15:36

이미지 하나도 안쓰고 환경 변수로만 lightgbm으로 판별 모형 만들었을 때 F1 macro가  << 그 다음은 뭔가요?! ㅎㅎ

이미지로 피해정도 1,2,3을 가르는 전략이 잘 먹히겠네요! << 이게 진짜 어렵습니다 ㅠㅠ validation 하면 성능이 엉망입니다

Statistics
2022.02.03 15:44

(짤렸네요. 추가했습니다ㅎㅎ)