Mask man Classification #1

갱갱·2025년 1월 14일

ZB_DeepLearning

목록 보기
8/12
post-thumbnail

2025_01_06

Chapter 03. Mask man classification

  • 16. dive to CNN
  • 17. Mask man1
  • 18. Mask man2
  • 19. Mask man3


Chapter 03. Mask man classification

dive to CNN

MNIST 데이터셋



모델 summary, layers



아직 학습하지 않은 conv 레이어의 웨이트(W) 평균




학습 진행



  • Conv 레이어에서 출력



  • feature_map



  • 위 과정을 함수로 만들기



  • 모델의 채널 증가





Mask man 1~3

LeNet-5의 이해 참고자료

LeNet는 이미지 분류용 CNN 중에 조상격으로 CNN초기에 CNN의 기본 구조를 잘 정립하였다. LeNet의 다양한 버전들(LeNet-1, LeNet-2,...)이 있으나 최종 버전은 LeNet-5이다.
LeNet은 CNN을 처음으로 개발한 얀 르쿤(Yann Lecun) 연구팀이 1998년에 개발한 CNN 알고리즘의 이름이다. original 논문 제목은 "Gradient-based learning applied to document recognition"이다.

진행할 실습은 마스크 쓴 사람의 이미지 데이터를 통해 분류하는 실습 (마스크 쓴 사람, 안쓴사람 데이터)



데이터 읽기

kaggle에서 데이터셋 다운로드



파이썬에서 압축관리하는 툴 사용



관련 모듈 IMPORT



사전 파일 정리

폴더 확인하기

그러면 위 처럼 파일결로, 폴더명 등으로 데이터를 저장할 수 있다.
그러면 아래처럼 조금 더 효율적으로 데이터 개수 등을 탐색할 수 있다.



어떤 그림이 있는지 확인



Train-test-split

굳이 모듈을 이용해서 train-test-split 할 필요는 없다. 이미 나누어져 있다.


Train / Test / Validation 데이터의 분포 확인



Train 데이터 Index 정리



데이터 전처리


데이터 shuffle



다시 데이터 확인 (잘 변경되었는지?)

기본적으로 일반 사진이나 영상은 가로X세로에서 가로가 1000px 이상은 넘어간다...
mnist 데이터셋 같은 건 28X28이기때문에... 사실 상당히 작은 데이터셋이다.
위 데이터도 150X150으로 적용했다.
이는 결국 이미지의 원본이 크다라고 하더라도 이를 축소시키거나 작게 만드는 것이 좋다.



X, y 데이터로 분리저장



모델생성 (tf)

  • 학습 모델 생성

  • 일단 마지막 layers를 보면 출력은 1이고 활성화함수는 sigmoid인 것을 바라보았을 때.... 결국 0과 1 사이의 값 1개가 출력(결과)로 나온다는 것을 알 수 있다.

생성한 모델의 설명










Compile 진행

fit 진행



Prediction

예측확인

--> 0.0000005091385.. 이므로 0 이다.



어떤 사진을 틀렸는지 확인

일단 46개가 틀렸다.







참고_glob 모듈

glob 모듈 주요 함수

  • glob.glob(pattern, recursive=False)
    지정된 패턴에 따라 파일 및 디렉토리 목록을 반환합니다.
    기본적으로 하위 디렉토리를 탐색하지 않지만, recursive=True로 설정하면 하위 디렉토리까지 탐색합니다.
  • 와일드카드 예시:
    • * : 모든 파일
    • ? : 단일 문자와 일치
    • [abc] : 문자 집합과 일치
import glob

# 현재 디렉토리의 모든 .txt 파일 검색
files = glob.glob("*.txt")
print(files)

# 하위 디렉토리 포함 모든 .txt 파일 검색
files_recursive = glob.glob("**/*.txt", recursive=True)
print(files_recursive)

  • glob.iglob(pattern, recursive=False)
    glob.glob()과 동일하지만, 결과를 이터레이터로 반환하여 메모리 사용량을 줄입니다.
import glob

# 현재 디렉토리의 모든 .py 파일 검색 (이터레이터 반환)
for file in glob.iglob("*.py"):
    print(file)

  • glob.escape(pathname)
    패턴에 포함된 특수 문자를 이스케이프 처리하여 안전하게 검색합니다.
import glob

# [test].txt 파일을 정확히 검색하려면 이스케이프 필요
escaped = glob.escape("[test].txt")
print(glob.glob(escaped))  # 실제 파일 이름에 []이 포함된 경우 검색

응용 예제

import glob

# 모든 .csv 파일 검색
csv_files = glob.glob("data/*.csv")
print(csv_files)

------------------------------------------------------------------------
import glob

# 모든 하위 디렉토리에서 .jpg 파일 검색
images = glob.glob("images/**/*.jpg", recursive=True)
print(images)

------------------------------------------------------------------------
import glob

# 특정 패턴 파일 검색 및 처리
for filepath in glob.iglob("logs/*.log"):
    print(f"Log file: {filepath}")


cv2 모듈

cv2는 OpenCV(Open Source Computer Vision Library)의 파이썬 인터페이스 모듈로, 컴퓨터 비전과 이미지 처리 작업을 위한 강력하고 유연한 도구를 제공합니다. OpenCV는 C++로 작성된 라이브러리이며, cv2는 이를 파이썬에서 사용할 수 있도록 제공하는 모듈입니다.

  • OpenCV 주요 기능
  1. 이미지 처리:
    필터 적용(블러, 샤프닝 등)
    이미지 변환(확대, 축소, 회전 등)
    엣지 검출(Canny, Sobel 등)

  2. 비디오 처리:
    실시간 비디오 캡처 및 분석
    프레임 추출 및 변환

  3. 객체 검출 및 추적:
    얼굴 검출(Haar Cascade, DNN 기반 검출)
    이동 물체 추적

  4. 기하학적 변환:
    이미지 자르기 및 리사이즈
    원근 변환 및 투영 변환

  5. 기계 학습 및 DNN:
    딥러닝 기반 이미지/비디오 처리
    사전 학습된 모델 사용

  6. 3D 비전:
    스테레오 매칭
    카메라 캘리브레이션 및 3D 재구성



모듈 설치

pip install opencv-python
pip install opencv-contrib-python

예제

import cv2

# 이미지 읽기
image = cv2.imread('example.jpg')

# 이미지 표시
cv2.imshow('Image', image)
cv2.waitKey(0)  # 키 입력 대기
cv2.destroyAllWindows()  # 창 닫기

--------------------------------------------------------------------

# 이미지를 그레이스케일로 변환
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
cv2.imshow('Gray Image', gray_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

--------------------------------------------------------------------

# 웹캠에서 프레임 캡처
cap = cv2.VideoCapture(0)

while True:
    ret, frame = cap.read()
    if not ret:
        break
    cv2.imshow('Webcam', frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):  # 'q' 키를 누르면 종료
        break

cap.release()
cv2.destroyAllWindows()

--------------------------------------------------------------------

# Haar Cascade를 사용한 얼굴 검출
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')

# 이미지 읽기
image = cv2.imread('face.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 얼굴 검출
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))

# 검출된 얼굴 표시
for (x, y, w, h) in faces:
    cv2.rectangle(image, (x, y), (x + w, y + h), (255, 0, 0), 2)

cv2.imshow('Faces', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
profile
(hellow. world)

0개의 댓글