
2025_01_06
Chapter 03. Mask man classification
16. dive to CNN17. Mask man118. Mask man219. Mask man3


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




- Conv 레이어에서 출력

- feature_map


- 위 과정을 함수로 만들기


- 모델의 채널 증가


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에서 데이터셋 다운로드

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


폴더 확인하기



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






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

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






데이터
shuffle



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


- 학습 모델 생성


layers를 보면 출력은 1이고 활성화함수는 sigmoid인 것을 바라보았을 때.... 결국 0과 1 사이의 값 1개가 출력(결과)로 나온다는 것을 알 수 있다.생성한 모델의 설명









fit진행


예측확인

--> 0.0000005091385.. 이므로 0 이다.
일단 46개가 틀렸다.



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는 OpenCV(Open Source Computer Vision Library)의 파이썬 인터페이스 모듈로, 컴퓨터 비전과 이미지 처리 작업을 위한 강력하고 유연한 도구를 제공합니다. OpenCV는 C++로 작성된 라이브러리이며, cv2는 이를 파이썬에서 사용할 수 있도록 제공하는 모듈입니다.
이미지 처리:
필터 적용(블러, 샤프닝 등)
이미지 변환(확대, 축소, 회전 등)
엣지 검출(Canny, Sobel 등)
비디오 처리:
실시간 비디오 캡처 및 분석
프레임 추출 및 변환
객체 검출 및 추적:
얼굴 검출(Haar Cascade, DNN 기반 검출)
이동 물체 추적
기하학적 변환:
이미지 자르기 및 리사이즈
원근 변환 및 투영 변환
기계 학습 및 DNN:
딥러닝 기반 이미지/비디오 처리
사전 학습된 모델 사용
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()