스마트폰 흠집 판별 시스템
-최종발표- 팀명
: AIT팀원
:강신욱 김시원 박상인
목차
•
작품소개
•
개발과정
• 데이터
• 모델구현
• UI
•
개발테스트
•
구현영상
작품소개
데이터 -단일 종류 스마트폰-
Broken 사진
Normal 사진
초기 스마트폰 데이터 확보가 어려워서
단일모델 사진에 흠집을 추가하거나
좌우 반전시켜 데이터를 확보하여
단일모델로 테스트
데이터 -여러 종류 스마트폰-
Broken 사진
Normal 사진
데이터 -여러종류 스마트폰-
데이터 혼합 모델
1차 여러 가지 모델들의 데이터를 확보(58장)
2차 각 모델들의 사진에 흡집을 추가하여 데이터 확보(300장)
3차 중복된 사진 및 데이터 축소 진행(150장)
모델구현 -개선-
모델 수정 모델 파라미터 정확도
최초
model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(128,128,3)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu')) model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(128, (3, 3), activation='relu')) model.add(layers.Flatten())
model.add(layers.Dense(64, activation='relu')) model.add(layers.Dense(2, activation='softmax'))
model.compile(optimizer = 'adam', loss='mse', metrics = ['accuracy'])
77%
Layer size 변경 3->5
model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(128,128,3)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(48, (3, 3), activation='relu')) model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu')) model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(96, (3, 3), activation='relu')) model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(128, (3, 3), activation='relu')) model.add(layers.Flatten())
model.add(layers.Dense(64, activation='relu')) model.add(layers.Dense(2, activation='softmax'))
model.compile(optimizer = 'adam', loss='mse', metrics = ['accuracy'])
80%(+3%)
모델구현 -개선2-
모델 수정 모델 파라미터 정확도
필터사이즈 변경 (3,3) ->(5,5)
model.add(layers.Conv2D(32, (5, 5), activation='relu', input_shape=(128,128,3)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(48, (5, 5), activation='relu')) model.add(layers.MaxPooling2D((5, 5)))
model.add(layers.Conv2D(64, (5, 5), activation='relu')) model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(96, (5, 5), activation='relu')) model.add(layers.MaxPooling2D((5, 5)))
model.add(layers.Conv2D(128, (3, 3), activation='relu')) model.add(layers.Flatten())
model.add(layers.Dense(64, activation='relu')) model.add(layers.Dense(2, activation='softmax'))
model.compile(optimizer = 'adam', loss='mse', metrics = ['accuracy'])
73%(-7%)
Layer 5
필터사이즈변경 (3,3) -> (5,5)
model.add(layers.Conv2D(32, (5, 5), activation='relu', input_shape=(128,128,3)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (5, 5), activation='relu')) model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(128, (5, 5), activation='relu')) model.add(layers.Flatten())
model.add(layers.Dense(64, activation='relu')) model.add(layers.Dense(2, activation='softmax'))
model.compile(optimizer = 'adam', loss='mse', metrics = ['accuracy'])
74%(+1%)
모델구현 -개선3-
모델 수정 모델 파라미터 정확도
Layer를 2층 반복실행
model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(128,128,3)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(48, (3, 3), activation='relu')) model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Conv2D(64, (3, 3), activation='relu')) model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(96, (3, 3), activation='relu')) model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(128, (3, 3), activation='relu')) model.add(layers.Flatten())
model.add(layers.Dense(64, activation='relu')) model.add(layers.Dense(2, activation='softmax'))
model.compile(optimizer = 'adam', loss='mse', metrics = ['accuracy'])
75%(+1%)
Layer의 값을 16으로 변경
model.add(layers.Conv2D(16, (3, 3), activation='relu', input_shape=(128,128,3)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(48, (3, 3), activation='relu')) model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu')) model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(96, (3, 3), activation='relu')) model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(128, (3, 3), activation='relu')) model.add(layers.Flatten())
model.add(layers.Dense(64, activation='relu')) model.add(layers.Dense(2, activation='softmax'))
model.compile(optimizer = 'adam', loss='mse', metrics = ['accuracy'])
81%(+6%)
모델 수정