CNN_MaskMan

안선경·2023년 4월 29일
0

DL_study

목록 보기
17/23

  • 이번에는 CNN을 통해 마스크 착용 유무를 확인하기 위한 과정을 코드해봤다.
  • 먼저 필요한 데이터를 zip을 풀어서 가져오고, 각 module를 불러왔다.
  • 불러온 데이터를 프레임 형태로 정리했다.
  • 데이터의 분포를 확인하니 편향된 것 없이 잘 분포되어 있다.
  • 이제 임의의로 몇개의 데이터를 확인해봤다.

  • 이제 train, test, validation별로 데이터를 구분하고 openCV를 통해 이미지의 스케일을 Gray형태로 바꾸고, 사이즈를 (150, 150)으로 바꿨다.
  • 그리고 마스크를 끼고 있으면 1, 끼고 있지 않으면 0으로 Label을 더해줬다.
  • 이제 Label값을 더한 데이터를 numpy를 통해 shuffle을 해줬는데, 섞은 이유는 데이터 train과정에서 순서를 통한 train을 혹시나 방지하기 위해서다.
  • 이제 데이터와 label을 x, y 변수에 저장하고
  • 8 : 2 사이즈로 train, test 데이터로 구분했다.
  • 그리고 model을 구축하는데
    1. Conv2d

      kernel_size는 filter의 크기인데 n*n크기만큼 짜르고
      strides의 크기만큼 이동하며
      padding은 filter과정에서 이미지의 크기를 유지하기 위해 이미지 데이터의 모서리에 0의 값을 넣어주고
      해당 데이터를 relu방식으로 활성화 함수를 사용해서 150, 150,1의 크기를 입력받고 32개로 출력한다

    2. MaxPool2d

      해당 이미지 데이터를 축소하는 것으로 size만큼에서 max값들만 출력해서 이미지 데이터를 축소하는 역할을 수행한다.

    3. DropOut

      이미지의 과적합을 방지하기 위해서 흐릿하게?만든다는 표현이 맞을지는 모르겠는데 이미지를 일정 부분 망가지게 한다

    4. Flatten

      데이터를 일차원 형태로 만드는데, 이미지 데이터의 경우 다차원이기 때문에 Dense에 입력값을 넣기 위해 일차원으로 펼쳐준다.

  • 이제 만든 모델에 reshape으로 입력형태로 똑같이 만든 데이터를 넣어서 fit시키고, 성능을 테스트한 결과 97%에 가까운 정확도를 보인다.
  • 상대적으로 1에 대한 precision과 0에 대한 recall값이 부족하다
profile
상황을 바꿀 수 없다면, 나를 바꾸자

0개의 댓글