Image Classification with Python

Namsanthie A
4 min readAug 12, 2020

--

Image Classification

Image Classification (การจำแนกประเภทข้อมูลภาพ)หมายถึง การแยกแยะภาพที่มีคุณลักษณะเดียวกันออกเป็นกลุ่มๆ(class)

โดยทั่วไป model สำหรับงาน image classification จะประกอบไปด้วย ส่วนของ Deep Convolutional Neural Network (DCNN) หรือส่วน body ของ model ซึ่งเป็นส่วนที่สร้างขึ้นมาจาก Convolutional neural network (CNN) หลายๆ layer โดย layer ตื้นๆ จะเรียนรู้รูปทรงพื้นฐานในรูปภาพ

Convolutional Neural Network คืออะไร

Convolutional Neural Network (CNN) หรือ โครงข่ายประสาทแบบคอนโวลูชัน เป็นโครงข่ายประสาทเทียมหนึ่งในกลุ่ม bio-inspired โดยที่ CNN จะจำลองการมองเห็นของมนุษย์ที่มองพื้นที่เป็นที่ย่อยๆ และนำกลุ่มของพื้นที่ย่อยๆมาผสานกัน เพื่อดูว่าสิ่งที่เห็นอยู่เป็นอะไรกันแน่

การมองพื้นที่ย่อยของมนุษย์จะมีการแยกคุณลักษณะ (feature) ของพื้นที่
ย่อยนั้น เช่น ลายเส้น และการตัดกันของสี ซึ่งการที่มนุษย์รู้ว่าพื้นที่ตรงนี้เป็นเส้นตรงหรือสีตัดกัน เพราะมนุษย์ดูทั้งจุดที่สนใจและบริเวณรอบ ๆ ประกอบกัน

Requiment

เราจะใช้ Python และ Tensorflow ในการทำ ซึ่งมี 2 ทางเลือก คือ

  1. Google colab ที่มีทุกอย่างพร้อม และทำผ่าน Web browser ซึ่งเป็น Saas ของ Google นั่นเอง
  2. Jupyter Notebook ที่ทำใน Client ของเรา

ทั้งหมดจะทำผ่าน Jupyter Notebook ในตัวเครื่อง Local ของเรานะครับ ซึ่งจะมีสิ่งที่จำเป็น 3 อย่างดังนี้

  • Cuda
  • CuDNN
  • Tensorflow, Tensorflow- gpu

วิธีลงมือทำ

เริ่มต้นหาข้อมูลทำ data set ด้วยการหาภาพของผลไม้ 4 ชนิด ได้แก่ ส้ม กล้วย สับประรด และ แตงโม อย่างละ 30 ภาพ

เปิดใช้โปรแกรม Jupyter notebook

  • ทำการ import Libary และใช้คำสั่ง เพื่อ version ของ tensorflow

และ config tensorflowด้วยGPU

Data Preparation

เตรียมข้อมูล โดยเราจะนำโฟลเดอร์ที่เก็บรูปภาพมาใช้ โดยคำสั่งนี้จะใช้Library Pathlib ในการชี้ไปยัง Path ของ ผลไม้ต่างๆ และแสดงผลลัพธ์ว่าในโฟลเดอร์มีรูปภาพทั้งหมดเท่าไร โดยใช้ คำสั่ง

ต่อไปเราต้องกำหนดรูปภาพให้มีขนาดรูปทุกรูปเท่ากัน

batch_size คือ ค่าที่กำหนดขนาดของการอ่านข้อมูล

img_rows คือ ความสูงของรูปภาพ

img_cols คือ ความกว้างของรูปภาพ

ต่อด้วย Trainning Model

ตรวจสอบว่ามีทั้งหมดกี่ class และมีชื่ออะไรบ้าง

ต่อมาเขียนคำสั่งแสดงรูปภาพในข้อมูล Train ออกมา

ต่อไปทำการเช็กข้อมูลว่ามีขนาดเท่ากับที่เราตั้งค่าไว้หรือไม่

Normalization Color

เราจะทำการนำรูปภาพทั้งหมดมา Normalization เพื่อแปลงค่าสีจาก 255 ในแต่ละ Chanal ให้เป็นค่า 0–1

เตรียมข้อมูลได้ตามที่ต้องการก็ทำขั้นตอนต่อไป

Define Model

Train Model

Save Model

Load Model

เป็นการเรียกโมเดลมา โดยที่เราไม่ต้องทำการ Train โมเดลใหม่ทุกครั้งได้ โดยใช้คำสั่ง

ผลลัพธ์เป็นกราฟแสดงค่า Loss กับ จำนวนในการ Train

สามารถเรียกใช้ผลของการ Train ให้ออกมาเป็นภาพกราฟ หรือ Visualization ได้ดังนี้

Prediction

เป็นขั้นตอนสุดท้าย ในการพยากรณ์ ความแม่นยำของรูปภาพว่าสิ่งที่เราทำมาทั้งหมด

import requests
from IPython.display import Image
from io import BytesIO
# test_url = "https://Users/admind/Desktop/Ai/banana/120283.jpg"
# test_path = tf.keras.utils.get_file('fruit_test', origin=test_url)test_path = ("F:/code/AI/train_fruit/test/t21.jpg")img = keras.preprocessing.image.load_img(
test_path, target_size=(img_height, img_width)
)
img_array = keras.preprocessing.image.img_to_array(img)
img_array = tf.expand_dims(img_array, 0) # Create a batchpredictions = predict_model.predict(img_array)
score = tf.nn.softmax(predictions[0])print("แตงโม",score[0],"กล้วย",score[1],"สับประรด",score[2],"ส้ม",score[3])
display(Image(filename=test_path,width=180, height=180))if score[0]==np.max(score) :
fruit = "แตงโม"
elif score[1]==np.max(score) :
fruit = "กล้วย"
elif score[2]==np.max(score) :
fruit = "สับประรด"
elif score[3]==np.max(score) :
fruit = "ส้ม"print(
"มีความมั่นใจว่าจะเป็น {} {:.2f}%."
.format(fruit, 100 * np.max(score))
)

ค่าความถูกต้อง 80.45% ก็แม่นอยูนะ!!! จบการทำ Image Classification ขอบคุณครับ

--

--

No responses yet