[KT AIVLE] 미니프로젝트 4차
0308 - 0312
미니프로젝트 4차
1일차, 2일차
주제 : 차랑 파손 분류
https://keras.io/api/applications/
Keras documentation: Keras Applications
Keras Applications Keras Applications are deep learning models that are made available alongside pre-trained weights. These models can be used for prediction, feature extraction, and fine-tuning. Weights are downloaded automatically when instantiating a mo
keras.io
데이터셋 : 이미지가 normal, abnormal로 분류되어 들어가 있는 상태
데이터 전처리
- 모델링을 위한 데이터 구조 만들기
- X : 이미지를 array로 변환하기
- Y : 이미지 갯수만큼 normal - 0, abnormal - 1 로 array를 만들기
원본 사이즈로는 모델링이 너무 오래걸려서 이미지 사이즈(128,128)도 조절했다.
전처리 할 때 shape를 확인하고 모델링을 할 수 있도록 reshape하는 과정이 아직까지도 어렵다.
모델링
3가지 방법으로 모델링을 진행하였다.
모델링을 하기 위해서 이미지(Training set, Validation set, Test set)를 배열로 변환하였다.
def x_preprocessing(img_list) :
bin_list = []
for img in tqdm(img_list) :
img = keras.utils.load_img(img, target_size=(128,128), keep_aspect_ratio=True)
img = keras.utils.img_to_array(img)
bin_list.append(img)
return np.array(bin_list)
x_train_arr = x_preprocessing(x_train)
x_valid_arr = x_preprocessing(x_val)
x_test_arr = x_preprocessing(x_test)
print(x_train_arr.shape)
print(x_valid_arr.shape)
print(x_test_arr.shape)
model
activation → swish , relu보다 성능이 좋았다.
모델링 코드 살펴보기
TransferLearning : Inception
base_model = InceptionV3(include_top=False,
weights='imagenet',
input_shape=(128,128,3)
)
base_model.trainable = False
aug = keras.layers.Rescaling(1./255)(i_l)
aug = keras.layers.RandomFlip()(aug)
aug = keras.layers.RandomRotation(0.2)(aug)
Image Augmentation Layer를 통해 데이터를 증강시킨다.
- Rescaling : 입력 이미지의 픽셀 값을 0~1 사이로 정규화한다. (과적합 방지)
- RandomFlip: 입력 이미지를 무작위로 수평 또는 수직으로 뒤집는다.
- RandomRotation : 입력이미지를 최대 20도 범위에서 회전시킨다.
모델을 학습을 시키고 높은 accuracy를 도출하고 마무리했다.

밥을 먹고 팀원들과 함께 근처 메가커피에 가서 아샷추를 포장해왔다. 대면으로 하니까 점심시간이 빨리가긴 즐거웠다.
KT에서 팀원들과 함께 회식 장소까지 걸어갔다! 벚꽃이 피어있는 탄천을 걸어서 기분이 좋았다.
1-2반 처음으로 있었던 회식이었다. 반장님들께서 여러 에이블러님들과 친해질 수 있는 기회를 마련해주셨다. 미니프로젝트 하면서 뵀던 팀원분들도 많았고 뿐만 아니라 새로운 분들을 많이 만날 수 있어서 좋았다.
재밌게 놀고 실수로 버스 거꾸로 타서..... 집에 새벽에 들어갔던 기억이 난다.

3일차
주제 : 쿨루프 여부 판별
파손 차량 판별에 이어서 쿨루프 여부를 판별하는 실습을 진행했다.
두번째 시각지능 실습이라 그런지 조금 더 여유가 생겼고, 막히는 부분에서 팀원 분의 도움을 받아 해결할 수 있었다!
데이터
쿨루프와 일반지붕으로 위성 사진으로 지붕 상태를 파악한다.
우리집 지붕도 데이터로 넣어보았다.
데이터 스플릿 & 파일 이동
- 재현을 위한 난수 고정 : 2024
- 테스트셋 데이터 20%
- 위 설정에 맞게 데이터를 나누고, 위 과정에서 생성한 폴더에 이동
train데이터와 test데이터 폴더로 나누고 이미지를 셔플 한 후, 라벨을 이미지에 맞게 옮겼다.
import yaml
# 클래스 레이블 및 해당 클래스에 대한 정보 정의
data = {
'train': '../train/images',
'test' : '../test/images',
'names' : {0: 'cool_roof', 1: 'generic_roof'},
'nc' : 2,
}
# YAML 파일 경로
yaml_file_path = "/content/dataset/yolo_classes.yaml"
# YAML 파일 작성
with open(yaml_file_path, 'w') as file:
yaml.dump(data, file)
print("YAML 파일이 생성되었습니다.")
yaml 파일을 만들었고 일반 지붕을 1로 설정하였다. (쿨루프 시공이 필요한 타겟값이기 때문이다.)
model = YOLO(model ='/content/dataset/yolo_classes.yaml', task='detect')
학습 후 우리집 지붕은 쿨루프라는 것을 확인했다.