s t u d y . . ๐Ÿง/AI ์•ค ML ์•ค DL

[CNN] Custom Dataset์œผ๋กœ Pothole detection

H J 2022. 10. 5. 18:09

์บ๊ธ€์—์„œ ๋ฐ์ดํ„ฐ์…‹์„ ๋‹ค์šด ๋ฐ›์•˜๋‹ค

 

Pothole Detection Dataset

Labelled image dataset containing 300+ images of roads containing potholes

www.kaggle.com

๋‹ค๋ฅธ ๋ถ„๋“ค์ด CNN์œผ๋กœ ํฌํŠธํ™€ ํƒ์ง€ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์˜ฌ๋ ค์ฃผ์…”์„œ ๋ณด๋ฉด์„œ ๋”ฐ๋ผํ–ˆ๋‹ค

 

 

ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค import !

import numpy as np
import pandas as pd
import tensorflow as tf
import cv2
import matplotlib.pyplot as plt
from keras.preprocessing.image import ImageDataGenerator
from keras.preprocessing import image

 

์‚ฌ์ง„๋“ค ํ™•์ธํ•ด๋ณด๊ธฐ

plt.imshow(cv2.imread("pothole_dataset/potholes/125.jpg"))

 

training set์ด๋ž‘ validation set์œผ๋กœ ๋‚˜๋ˆ„๊ธฐ !

# data preprocessing

train_datagen = ImageDataGenerator(rescale = 1./255, shear_range = 0.2, zoom_range = 0.2, horizontal_flip = True, validation_split=0.2)
training_set = train_datagen.flow_from_directory('pothole_dataset', target_size = (64, 64), batch_size = 32,class_mode = 'binary',subset='training')
validation_set = train_datagen.flow_from_directory('pothole_dataset', target_size=(64, 64), batch_size=32, class_mode='binary', subset='validation')

 

CNN ๋นŒ๋”ฉ !

# bulding CNN

cnn = tf.keras.models.Sequential()
cnn.add(tf.keras.layers.Conv2D(filters=32, kernel_size=3, activation='relu', input_shape=[64, 64, 3])) # convolution
cnn.add(tf.keras.layers.MaxPool2D(pool_size=2, strides=2)) # pooling

## second conv
cnn.add(tf.keras.layers.Conv2D(filters=32, kernel_size=3, activation='relu'))
cnn.add(tf.keras.layers.MaxPool2D(pool_size=2, strides=2))

cnn.add(tf.keras.layers.Flatten()) # flattening

cnn.add(tf.keras.layers.Dense(units=128, activation='relu')) # full connection
cnn.add(tf.keras.layers.Dense(units=1, activation='sigmoid')) # output layer

 

CNN ํ•™์Šต์‹œํ‚ค๊ธฐ !

# traing CNN

cnn.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy']) # compiling
cnn.fit(x = training_set, validation_data = validation_set, epochs = 25) # training set -> training / validation set -> evaluating

 

test ๊ฒฐ๊ณผ ํ™•์ธํ•˜๊ธฐ !

test_img = 'pothole_dataset/potholes/184.jpg'  # another_images/normal/1.jpg ๋Š” pothole์œผ๋กœ ์ธ์‹๋จ (ํ„ฐ๋„ ์ž…๊ตฌ ๋•Œ๋ฌธ์ธ ๊ฒƒ ๊ฐ™์Œ)
test_image = image.load_img(test_img, target_size = (64, 64))

plt.imshow(cv2.imread(test_img)) # test img ์ถœ๋ ฅ

test_image = image.img_to_array(test_image)
test_image = np.expand_dims(test_image, axis = 0)
result = cnn.predict(test_image)
training_set.class_indices

if result[0][0] == 1:
    prediction = 'pothole'
else:
    prediction = 'normal'
    
print(prediction)

 

 


 

์ผ๋‹จ ๋”ฐ๋ผํ•ด๋ณด๋ฉด์„œ ์ฝ”๋“œ๋ฅผ ์ดํ•ดํ•ด๋ดค๋‹ค

๋งจ๋‚  ๋งคํŠธ๋žฉ์œผ๋กœ๋งŒ ์ธ๊ณต์ง€๋Šฅ ๋จธ์‹ ๋Ÿฌ๋‹ ํ•ด๋ดค์ง€ ํŒŒ์ด์ฌ์œผ๋กœ๋Š” ์ฒ˜์Œ์ธ๋ฐ ์‚ฌ์šฉํ•˜๋Š” ํ•จ์ˆ˜ ๋ช‡๋ช‡๊ฐœ๋งŒ ๋‹ค๋ฅด๊ณ  ํฐ ํ‹€์€ ๋˜‘๊ฐ™์€ ๊ฒƒ ๊ฐ™๋‹ค!!

 

ํŒŸํŒ… !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!