7/30 Today I Learned -1

boks·2024년 7월 30일
post-thumbnail

📖 학습한 내용

  • CNN 기반 이미지 사전학습 모델

📖 핵심내용

📌 CNN 기반 이미지 사전학습 모델

  • bottle neck

    -> depth를 줄이고 싶을때, 경량화(파라미터수 감소)
    -> 1x1 필터를 적용하고 이전보다 필터수를 감소시켜서 depth를 감소시켜야한다.
    -> 정보 손실이 일어남. 따라서 효율성과의 trade-off 지점을 찾아야한다.

  • 결론
    필터사이즈가 모델의 영향을 주므로 적당히 잘 선택해야한다.

  • inceptionNet

    다양한 사이즈의 필터를 동시에 적용하였다.인셉션모듈 적용
    따라서 파라미터 수(정보량, 계산복잡도 증가)가 매우 증가하여서 이것을 1by1필터를 이용하여 depth를 줄였다.(보틀넥)
    층의 깊이가 깊어지면서 경사소길 문제가 일어나므로 중간에 보조분류기를 넣었다.

  • inceptionNet을 이용했지만, 새로운 이미지를 재훈현하기위해서 넣었을때, 기존에 학습 데이터가 아니지만 데이터가 잘 나왔다.
    모델은 학습한 이미지에 국한되지 않고, 이미지의 특징을 잘 추출하도록 훈련이 된 것이다.
    다시 정리하면, 사전학습 모델의 구조와 가중치는 훈련에 사용된 이미지를 구별하는데 국한되는 것이 아니다. 이때 학습한 것은 이미지의 특징을 잘 구분하는 방법을 학습한 것이다.
    -> 적응성, 일반화성능이 뛰어나다.

ResNet

  • 특징
    잔차블럭을 사용하였다.(Residual block)

    입력과 출력을 직접연결하는 path를 설정하였다. -> 이렇게 바로 있는 path를 skip connection 이라고 부른다.

  • 모델의 성능 비교 - trade off

    -> 레이어가 많을수록 더욱 성능이 좋아진다.
    -> 하지만 경사소실 문제가 있다.

    -> 이터레이션 3 정도 이상부터는 테스트데이터의 성능이 저하되지 않는다. 또한 훈련과 데이터셋의 패턴이 매우 비슷하다. 따라서 과적합 문제는 없다고 말할 수 있다.
    -> degration 문제 -> 20층보다 56층이 더 깊은데 성능이 더 좋지 않다.
    -> 층이 깊을때 성능이 좋지 않다는 것은 경사 소실 문제라고 할 수 있다.

  • residual learning framework

    -> 원래의 입력값을 넣었을때 출럭해야하는 값에서 원래의 입력값을 빼준다. 이때 잔차가 0이 되는 방향으로 학습을 진행한다.
    -> 이때 원래의 입력값이 통과하는 경로를 skip connection 이라고 한다.

MobileNet

  • 정의
    효율성을 극대화한 경량화된 CNN모델 -> 모바일장치에서 사용가능
    메모리와 연산 자원을 적게사용
    Depthwise Separable Convolution 사용


    -> Depthwise Convolution : 피처맵의 전체를 합성곱하는것이아니라, 한층씩 합성곱하고 더한다. 채널별로 따로 필터를 적용한다. -> 파라미터수 감소효과
    -> Pointwise Convolution : 1x1 필터를 조금 사용하여 다운

사전학습모델과 객체인식 모델

  • 사전학습 모델
    이미지 분류
    특징 추출 - avg_pool 으로 특징만 가져와서 다른 테스크에 사용한다.
    전이 학습

  • 객체인식 모델
    객체감지
    인스턴스 분할
    객체추적
    자율주행차량
    보안감시

사전학습모델 적용

  • 언제 사전학습모델 사용하는지
    Task (문제에 적합한가)
    yes : Pretrained Model
    no : Custom Model
    데이터 (충분한 데이터가 있는가)
    yes : Custom Model
    no : Pretrained Model
    컴퓨팅 자원 (충분한 컴퓨팅 자원이 있는가)
    yes : Custom Model
    no : Pretrained Model

  • 사용 예시

  1. 그대로 사용
  2. 전이학습 후 사용
    사전 학습모형이 출력하는 값을 피처로 사용해서 분석(마이닝) 알고리즘 적용
    보통 탑층(특징 추출 부분의 출력층)을 제거하고 사용

※ 특징 추출 단계에서는 피처들을 임베딩(벡터화)하여 좋은 위치에 포지셔닝 하는것.
※ 분류 단계에서는 임베딩된 데이터를 적당한 선으로 나눠서 판별하는 것

📖 이후 학습 계획

  • 사전 학습 모델

기타

코딩테스트

  • 해설
    가장 처음에 데이터의 쉐입을 먼저 확인
    피처의 정보를 하나하나 파악해야함

    문제를 잘 봐야한다.

    트레인과 테스트 데이터의 info()를 확인 -> 테스트 데이터의 형식에 트레인 데이터의 형식을 맞춰야한다.
    describe 로 대략적인 확인해야한다.

    당연히 라벨이 없다면 버려야한다.

    전체적으로 데이터를 살펴봤으면, 피처하나씩 살펴보기

    ID - 환자별 데이터로 묶을 수 있다는 것을 파악
    성별 - 남자 여자에 의해서 몸무게 맥박등 영향을 줄 수 있다는 것을 인지
    -> 근데 코릴레이션에서 안나왔는데?

    결측치 확인
    일단 결측치를 0으로 두고 환자의 피처 플랏
    환자의 그래프를 그려봤는데 분포가 거의 다 정상 범위인 것을 알 수 있다.
    -> 거진 상관관계가 거의 없다는 것을 알 수 있다. 데이터가 좋지 않고 결측치가 많기 때문이다

    결측치 처리
    교차검증을 다 해봐야한다.
    성별/건강상태로 나눠서 처리해야한다.
    데이터가 이렇게 좋지 않다면 모델링이 핵심인것이다.

profile
설계엔지니어의 변신

0개의 댓글