[TIL]KDT팀프로젝트2021/03/15
total / validation loss score 계산하고 플롯 그리는거, 추론 시간 측정 추가해서 커밋 했다.
커스텀 hook와 커스텀 trainer를 새로 만들고, 파라미터로 들어가는 부분들을 args로 묶어서 처리했다. 설정한 iteration마다 loss validation를 계산하고 metrics.json에 저장되기 때문에 AP, loss그래프를 쉽게 그릴 수 있다.
코드 주석 달아두었다. 파이참으로 주석을 달면 편리하다. def 함수이름(): 아래에 “””입력하고 엔터 치면 그 함수에서 쓰인 파라미터, 리턴 등등 필요한 주석이 자동생성된다.
annotation이 포함된 incorrect mask 데이터셋을 찾아봤다. 생각보다 너무 찾기 힘들다. 어렵게 찾은 것들은 지금 보유해둔 incorrect 라벨들과 중복되는걸 제거하면 백 몇개 정도나 더 추가될 듯 하다.ㅠㅠ
당장 incorrect 분류 학습 문제는 보류해두고, 이렇게 적은 데이터셋으로 어떻게 2step학습을 할 수 있는지 조만간 여쭤봐야겠다.
멘토님 질의응답 정리:
Q1. Total loss와 AP 그래프를 봤을 때 오버피팅 여부를 알 수 있겠는가?
- 그래프상으로는 overffiting은 아닌거 같다. Q2. Total loss는 줄어들지 않고 일정하게 진동하는데, AP는 수렴하긴 하지만 증가하는 경향이 있다. 이런 경우가 흔한지
- AP가 계속 올라가는 추이인 것을 보면 계속 학습을 더 진행해보셔도 될 것 같다. 괜찮게 잘 나온 것 같다.
- 프로젝트 시나리오상 첫번째(웹캠 사진으로 처리하는 것)는 faster rcnn, 두번째(cctv영상 처리하는 것)는 cascade rcnn으로 가는거 좋을 것 같다. 실제 시나리오에서는 cascade가 잘 나올 수 있다.
Q3. 모델 성능이 가장 좋은 지점을 저장할 수 있는 방법이 있는가? - 모델 학습하면서 AP 스코어가 최고점인 지점을 저장할 수 있는 방법이 있는데 한번 찾아보시라.(옵션이 있음)
Q4. 마스크 착용/미착용으로 구분된 큰 데이터셋에 대해서 먼저 학습을 하고, 마스크 착용/미착용/잘못 착용으로 구분된 작은 데이터셋에 대해 2step으로 학습을 어떻게 진행하는지? - transfer러닝처럼 적용해라. 마스크를 잘못 쓴 것은 결국 마스크를 착용한 것에 대해 학습한 것과 특징을 잡아내는것은 비슷할 것이다.(둘다 마스크를 쓰고 있긴 하니까) 따라서 마스크 착용/미착용에 대해 학습한 것에서 객체를 잡아내서, 분류하는 단에서 학습을 시키면 된다. (많은 객체를 먼저 학습한 후 용도에 맞게 fine tune하는 것)
- backbone은 고정해서 학습을 안하고, classifier부분에서 마스크 잘못 쓴거에 대한 분류 학습을 시키면 충분할 것 같다. (torch같은걸로 클래시파이어만 학습시키듯이 디텍트론도 그럴 수 있는 옵션이 있다.)