24.11.13

마스터클래스

inference 결과를 보고 error case가 얼마나 score에 영향을 끼치는지 볼 것 -> 우선순위가 재정비 됨

kaggle - 의료 활발

채널 구성할 때
depth 인식을 시켜주기위해 depth를 잘라서 채널에 넣는다.
512x512가 depth 64라고 가정하면,

0번째와 첫번째 depth는 비슷할 수 밖에 없다.
붙어있는 값은 유사하다.
당시 사람들이 생각한 idea는 채널 영역에 비슷한 영역에 있는 depth를 넣으면 첫번째에서 예측을 못했더라도 두번째나 그 근처를 보면서 다른 depth영역을 통해서 예측의 정확도를 높일 수 있을 것이다.
이걸 2.5D Channel라고 불렀던 기법이다.

채널은 RGB.. 1channel은 grey.
depth는 이거와 다른 축 사이의 값

지난 경진대회 리뷰


hard voting .. 가장 많이 등장한걸 선택하는 방식을 채택

EDA with DeepLab+++


validation #1

Radius
Best performance at epoch: 2, 0. -> 0.0065

validation #3

finger-1    : 0.0000
finger-2    : 0.0000
finger-3    : 0.0000
finger-4    : 0.0000
finger-5    : 0.0000
finger-6    : 0.0000
finger-7    : 0.0000
finger-8    : 0.0000
finger-9    : 0.0000
finger-10   : 0.0000
finger-11   : 0.0219
finger-12   : 0.0000
finger-13   : 0.0000
finger-14   : 0.0000
finger-15   : 0.0000
finger-16   : 0.0000
finger-17   : 0.0000
finger-18   : 0.0000
finger-19   : 0.0000
Trapezium   : 0.0000
Trapezoid   : 0.0000
Capitate    : 0.0000
Hamate      : 0.0000
Scaphoid    : 0.0000
Lunate      : 0.0000
Triquetrum  : 0.0000
Pisiform    : 0.0000
Radius      : 0.8451
Ulna        : 0.3122

finger-11, Radius, Ulna
Best performance at epoch: 4, 0.0065 -> 0.0407

validation #5

finger-1    : 0.0000
finger-2    : 0.4215
finger-3    : 0.7073
finger-4    : 0.0000
finger-5    : 0.0000
finger-6    : 0.2102
finger-7    : 0.7508
finger-8    : 0.0000
finger-9    : 0.0001
finger-10   : 0.6774
finger-11   : 0.6737
finger-12   : 0.0000
finger-13   : 0.0000
finger-14   : 0.5053
finger-15   : 0.2594
finger-16   : 0.0000
finger-17   : 0.0000
finger-18   : 0.0000
finger-19   : 0.7035
Trapezium   : 0.0000
Trapezoid   : 0.0000
Capitate    : 0.0641
Hamate      : 0.0000
Scaphoid    : 0.0000
Lunate      : 0.0000
Triquetrum  : 0.0000
Pisiform    : 0.0000
Radius      : 0.8407
Ulna        : 0.8641
Best performance at epoch: 6, 0.0407 -> 0.2303

finger-2, finger-3, finger-6, finger-7, finger-9(0.001이지만), finger-10, finger-11, finger-14, finger-15, finger-19, Capitate, Radius, Ulna
Best performance at epoch: 6, 0.0407 -> 0.2303

여기서 잠깐!

지금까지의 진행 상황을 바탕으로 앞으로 방향성에 대해 생각해보자~!
Radius와 Ulna는 초기 학습 단계에서도 높은 정확도를 보인다.
반면에 finger는 정확도가 낮게 나타난다.

제안

성능이 낮게 나타난 뼈들(특히 손가락뼈들)을 중심으로 시각화를 진행
-> 성능이 낮게 나타난 뼈들(특히 손가락뼈들)을 중심으로 시각화를 진행
-> 손가락뼈에 특화된 데이터 증강 기법(Cutout, Mixup)

모든 뼈에 대해 정확도를 각각 계산하여 각 뼈마다 성능의 차이를 상세히 분석
-> 성능이 낮은 뼈에 대해 추가적인 데이터 증강이나 손실 함수 조정


Radius와 Ulna는

validation # 7
finger-1    : 0.0000
finger-2    : 0.6705
finger-3    : 0.8605
finger-4    : 0.0000
finger-5    : 0.1990
finger-6    : 0.8264
finger-7    : 0.8776
finger-8    : 0.0000
finger-9    : 0.6196
finger-10   : 0.8857
finger-11   : 0.8856
finger-12   : 0.0000
finger-13   : 0.0693
finger-14   : 0.8534
finger-15   : 0.8520
finger-16   : 0.0000
finger-17   : 0.0000
finger-18   : 0.5184
finger-19   : 0.8735
Trapezium   : 0.3531
Trapezoid   : 0.0000
Capitate    : 0.6840
Hamate      : 0.5285
Scaphoid    : 0.3729
Lunate      : 0.3421
Triquetrum  : 0.1914
Pisiform    : 0.0000
Radius      : 0.9428
Ulna        : 0.9296

Best performance at epoch: 8, 0.2303 -> 0.4599
안됨: finger-1, finger-4, finger-8, finger-12, finger-16, finger-17, Trapezoid, Pisiform

validation # 9
finger-1    : 0.6278
finger-2    : 0.8718
finger-3    : 0.9109
finger-4    : 0.0000
finger-5    : 0.7590
finger-6    : 0.9208
finger-7    : 0.9134
finger-8    : 0.3540
finger-9    : 0.8672
finger-10   : 0.9381
finger-11   : 0.9366
finger-12   : 0.0000
finger-13   : 0.7793
finger-14   : 0.9150
finger-15   : 0.9271
finger-16   : 0.0000
finger-17   : 0.1219
finger-18   : 0.8722
finger-19   : 0.9250
Trapezium   : 0.7682
Trapezoid   : 0.5237
Capitate    : 0.8404
Hamate      : 0.7969
Scaphoid    : 0.7587
Lunate      : 0.7417
Triquetrum  : 0.7582
Pisiform    : 0.4029
Radius      : 0.9635
Ulna        : 0.9542

Best performance at epoch: 10, 0.4599 -> 0.6948
안됨: finger-4, finger-12, finger-16

validation #11
finger-1    : 0.7894
finger-2    : 0.9067
finger-3    : 0.9418
finger-4    : 0.7264
finger-5    : 0.8952
finger-6    : 0.9538
finger-7    : 0.9353
finger-8    : 0.7990
finger-9    : 0.9198
finger-10   : 0.9479
finger-11   : 0.9264
finger-12   : 0.6790
finger-13   : 0.8527
finger-14   : 0.9337
finger-15   : 0.9219
finger-16   : 0.3947
finger-17   : 0.6682
finger-18   : 0.9033
finger-19   : 0.9360
Trapezium   : 0.8172
Trapezoid   : 0.7046
Capitate    : 0.8435
Hamate      : 0.8361
Scaphoid    : 0.8062
Lunate      : 0.8034
Triquetrum  : 0.8212
Pisiform    : 0.6801
Radius      : 0.9601
Ulna        : 0.9521

Best performance at epoch: 12, 0.6948 -> 0.8364

Start validation #15
finger-1    : 0.8332
finger-2    : 0.8772
finger-3    : 0.9050
finger-4    : 0.8472
finger-5    : 0.8736
finger-6    : 0.9104
finger-7    : 0.8898
finger-8    : 0.8746
finger-9    : 0.9003
finger-10   : 0.9017
finger-11   : 0.8816
finger-12   : 0.8452
finger-13   : 0.8647
finger-14   : 0.9012
finger-15   : 0.8883
finger-16   : 0.8266
finger-17   : 0.8272
finger-18   : 0.8669
finger-19   : 0.8945
Trapezium   : 0.8249
Trapezoid   : 0.7521
Capitate    : 0.8456
Hamate      : 0.8303
Scaphoid    : 0.8372
Lunate      : 0.8064
Triquetrum  : 0.8146
Pisiform    : 0.6985
Radius      : 0.9128
Ulna        : 0.8962

Best performance at epoch: 16, 0.8364 -> 0.8561

validation #17
finger-1    : 0.8898
finger-2    : 0.9220
finger-3    : 0.9347
finger-4    : 0.8935
finger-5    : 0.9130
finger-6    : 0.9449
finger-7    : 0.9321
finger-8    : 0.9199
finger-9    : 0.9384
finger-10   : 0.9453
finger-11   : 0.9210
finger-12   : 0.8883
finger-13   : 0.9109
finger-14   : 0.9385
finger-15   : 0.9215
finger-16   : 0.8857
finger-17   : 0.8675
finger-18   : 0.9170
finger-19   : 0.9256
Trapezium   : 0.8781
Trapezoid   : 0.8201
Capitate    : 0.8869
Hamate      : 0.8679
Scaphoid    : 0.8871
Lunate      : 0.8482
Triquetrum  : 0.8500
Pisiform    : 0.7430
Radius      : 0.9465
Ulna        : 0.9326

Best performance at epoch: 18, 0.8561 -> 0.8990

Start validation #39
finger-1    : 0.9431
finger-2    : 0.9728
finger-3    : 0.9762
finger-4    : 0.9637
finger-5    : 0.9695
finger-6    : 0.9829
finger-7    : 0.9774
finger-8    : 0.9664
finger-9    : 0.9750
finger-10   : 0.9820
finger-11   : 0.9720
finger-12   : 0.9507
finger-13   : 0.9686
finger-14   : 0.9799
finger-15   : 0.9699
finger-16   : 0.9522
finger-17   : 0.9512
finger-18   : 0.9711
finger-19   : 0.9732
Trapezium   : 0.9160
Trapezoid   : 0.8900
Capitate    : 0.9421
Hamate      : 0.9262
Scaphoid    : 0.9437
Lunate      : 0.9326
Triquetrum  : 0.9311
Pisiform    : 0.8597
Radius      : 0.9864
Ulna        : 0.9844

Best performance at epoch: 40, 0.9497 -> 0.9555

Start validation #41
finger-1    : 0.9568
finger-2    : 0.9769
finger-3    : 0.9800
finger-4    : 0.9676
finger-5    : 0.9710
finger-6    : 0.9834
finger-7    : 0.9801
finger-8    : 0.9682
finger-9    : 0.9764
finger-10   : 0.9834
finger-11   : 0.9732
finger-12   : 0.9539
finger-13   : 0.9715
finger-14   : 0.9815
finger-15   : 0.9724
finger-16   : 0.9575
finger-17   : 0.9576
finger-18   : 0.9763
finger-19   : 0.9766
Trapezium   : 0.9239
Trapezoid   : 0.8980
Capitate    : 0.9450
Hamate      : 0.9344
Scaphoid    : 0.9446
Lunate      : 0.9276
Triquetrum  : 0.9333
Pisiform    : 0.8649
Radius      : 0.9876
Ulna        : 0.9859

Best performance at epoch: 42, 0.9555 -> 0.9589

Best performance at epoch: 60, 0.9609 -> 0.9637

멘토세미나

사람에 거의 가까워졌다는 느낌을 받아서 ai가 할 수 있는 전부를 하는게 아닌가? 하는 생각이 들기도 한다.

한교 로장공대
랜드마크 도서관

OpenAI의 논문을 소개해주실 예정


보통 chatGPT같은 생성형 AI는 이렇게 크게 두 단계로 진행된다.
조금 더 구체적으로는 강화학습을 통해서, (human feedback)
사람의 intention에 맞게 조정을 해준다.

계속 iteration을 돌면서 모델이 점점 똑똑해진다.

  1. 사람이 평가한다.
  2. DPO 어떻게 사람이 평가해준 데이터를 가지고 학습을 하는지
  3. (가정) human annotation의 질이 좋다.

    사람이 못한다는건 그쪽의 전문가들도 레이블링 하기 힘든다는 것이다.
    지금 superhuman 모델을 가지고 있지 않으니까 프레임워크를 , week모델이 strong모델이 더 똑똑해지는 프레임워크를 만드는 것이 논문의 목표이다.

예를 들면

어려운 데이터에 대해서(사람이 이해하기에도 어려운)

레이블이 완벽하지 않고 틀릴 때도 있을 것이다.

차례로 알렉스넷, 피쳐추출잘하는애(ViT)같은.. 왼 오 이다.
gt를 가지고 weak모델 학습시킨다. 그러면 데이터에 대해서 좀 알게 되겠지만 잘 알지는 못한다.
(AlexNet이 그러듯이..)
세개가 있다.
모델이

  1. 1->4
  2. 2->4
  3. 3->4


weak supervision을 있는 그대로 써야하고
(사람이라는 가정이 있기 때문에) 사람이 예측하는 순간부터 시작이 된다.

1.2배 똑똑한 모델을 먼저 만들고, 단계적으로 그 모델에서 1.5배 똑똑한 모델 만들고.. 이런식으로 단계적으로 사용

또 다른 아이디어로

자기 자신과, weak task를 함께 써보자는 아이디어도 있다.

weak모델을 사람이라고 생각했을 때,
보라색은 technic을 썼을 때 좀 더 상승시키는게 가능하더라..

신경을 쓰면 좀 더 사람에 가까운 모델을 만들 수 있다.

세번째는 나이브한걸 썼을 때보다 보라색을 만들 수 있더라(?)
이게 OpenAI의 발견
우리가 이 가능성을 열어놨으니까 다들 해보자?

strong모델과 weak모델이 얼마나 잘하는 정도로

질문

위크모델이 사람이라서 다시 학습이 불가능하다하셨는데 그럼 아까 말씀하신 부트스트래핑을 할 떄 위크모델이 점점 달라지는 것 아닌가요? 그럼 위크 모델이 바뀌는 것 이니까 학습이 가능한 것이 아닌가 궁금합니다! -> 답변 주셨는데, 그럼 요 부분에서 스트롱 모델이 다시 위크 모델을 학습해서 위크모델이 스트롱 모델보다 똑똑해지는 방법은 없을까요?
사람이기때문에 weak모델은 학습하지 않는다고 가정.

중간에 있는 애는 학습이 되는데 맨 왼쪽 애는 학습이 안되는 것
조금씩 답이 달라질 수 있다.

우리가 1000개의 이미지(이미지넷)
한번에 맞추려면 모델을 학습시키는게 힘들 수 있다.

co-supervise 혼자 100장 읽긴 힘들지만! 20장씩 나눠읽자!


질문하면 답이 나오는데
좀 더 correction으로 고쳐주는 aligner가 존재한다.


사람의 annotation 없이 모델을 학습시킬 수 있다면,
weak 모델 없이도 가능한거 아닌가??!!

unsupervised(사람의 label이 없어도 되는)

두번째는 모델이 스스로 자기를 똑똑하게 만드는 방

결론