• 검색 결과가 없습니다.

스마트폰 흠집 판별 시스템

N/A
N/A
Protected

Academic year: 2023

Share "스마트폰 흠집 판별 시스템"

Copied!
14
0
0

로드 중.... (전체 텍스트 보기)

전체 글

(1)

스마트폰 흠집 판별 시스템

-최종발표- 팀명

: AIT

팀원

:

강신욱 김시원 박상인

(2)

목차

작품소개

개발과정

데이터

모델구현

UI

개발테스트

구현영상

(3)

작품소개

(4)

데이터 -단일 종류 스마트폰-

Broken 사진

Normal 사진

초기 스마트폰 데이터 확보가 어려워서

단일모델 사진에 흠집을 추가하거나

좌우 반전시켜 데이터를 확보하여

단일모델로 테스트

(5)

데이터 -여러 종류 스마트폰-

Broken 사진

Normal 사진

(6)

데이터 -여러종류 스마트폰-

데이터 혼합 모델

1차 여러 가지 모델들의 데이터를 확보(58장)

2차 각 모델들의 사진에 흡집을 추가하여 데이터 확보(300장)

3차 중복된 사진 및 데이터 축소 진행(150장)

(7)

모델구현 -개선-

모델 수정 모델 파라미터 정확도

최초

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%)

(8)

모델구현 -개선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%)

(9)

모델구현 -개선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%)

모델 수정

Optiimizer -> Adam, 모멘텀

Loss -> Mse, rmse, cross entropy 사용

(10)

최종 모델

(11)

개발 -UI-

개발자 화면

사용자 화면

(12)

개발테스트

UI

흠집판별

순번 요구사항 ID 요구사항 명칭 개발진도(O,

∆, X)

개발가능여부(O, X)

1

UC1-REQ-1

사진 업로드 X O

순번 요구사항 ID 요구사항 명칭 개발진도(O,

∆, X)

개발가능여부(O, X)

1

UC2-REQ-1 스마트폰 사진

객체 추출 불필요 불필요

2

UC2-REQ-2 흠집 탐지

O O

3

UC2-REQ-3 흠집 길이 측정

X X

4

UC2-REQ-4 흠집 두께 측정

X X

5

UC2-REQ-5 흠집 개수 층정

X X

6

UC2-REQ-6 등급 평가 ∆

O

(13)

모델

전처리

훈련된 모델

순번 요구사항 ID 요구사항 명칭 개발진도(O,

∆, X)

개발가능여부(O, X) 1

UC3-REQ-1

스마트폰 사진

객체 추출 불필요 불필요

2

UC3-REQ-2

흠집 탐지 테스트 O O

순번 요구사항 ID 요구사항 명칭 개발진도(O,

∆, X)

개발가능여부(O, X)

1

UC4-REQ-1 데이터 수집 ∆

O

2

UC4-REQ-2 스마트폰 사진

객체 추출 불필요 불필요

3

UC4-REQ-3 모델 훈련

O O

(14)

최종구현영상

참조

관련 문서