PHÂN TÍCH NỘI DUNG HÌNH ẢNH BẰNG PHƯƠNG PHÁP HỌC SÂU
Trong thời đại hiện nay, khi mà ảnh số trở nên thông dụng hơn bao giờ hết, nó xuất hiện tràn ngập trên internet đặt ra một vấn đề là cần phân tích ngữ nghĩa một cách trực tiếp, đạt độ chính xác cao và tốc độ xử lý nhanh trên các thiết bị di động như smartphone, tablet.... Đó là một bài toán đã đang và sẽ được áp dụng trong nhiều lĩnh vực khác nhau như nông nghiệp (nhận dạng các loại côn trùng, nhận dạng sâu bệnh,...), công nghiệp (nhận dạng chất thải, nhận dạng chất hóa học, ...), trong đời sống xã hội (nhận dạng khuôn mặt, nhận dạng đối tượng, nhận dạng thực phẩm,...),...
Bài toán phân tích nội dung hình ảnh là một cách tiếp cận để tìm ra những đặc trưng cơ bản của hình ảnh để xác định thông tin của ảnh đó muốn truyền đạt đến cho người xem. Việc phân tích nội dung của hình ảnh gắn liền với việc xác định ngữ nghĩa của ảnh. Bài toán phân tích nội dung hình ảnh được sử dụng như một cách thức để giúp cho việc phân tích hình ảnh được đơn giản hơn với mọi người không am hiểu về các kỹ thuật phân tích hình ảnh. Một trong những kỹ thuật phổ biến dùng trong nhận dạng hình ảnh đang bùng nổ những năm gần đây đó là phương pháp học sâu (Deep learning). Trong đó, việc nhận dạng trực tiếp từ hình ảnh là một bài toán thông dụng và gần gũi với người dùng. Để thực hiện việc nhận dạng trực tiếp này, một mô hình được sử dụng đó là mạng nơ-ron tích chập CNN (Convolution Neural Network). Mạng nơ-ron tích chập này được thực hiện bằng cách sử dụng phép tích chập để trích xuất đặc trưng vị trí và đặc trưng không gian. Sau đó, việc nhận dạng và phân lớp đối tượng được thực hiện qua một mạng học sâu DNN (Deep Neural Network)[3]. Có thể thấy, bài toán phân tích hình ảnh đang phát triển và ứng dụng trong đợi sống của chúng ta. Một minh chứng cho sự phát triển của phân tích hình ảnh là đã có những ông lớn công nghệ đã và đang cải thiện kết quả của việc phân tích hình ảnh.
- Mô hình tổng quan cho bài toán
- Mô hình
Mô hình bắt đầu bằng việc chia bộ dữ liệu có sẵn thành hai phần để huấn luyện và để kiểm tra sau khi huấn luyện. Ảnh trong tập dữ liệu đã được chọn lọc trước đó sẽ đi qua các bộ lọc để thực hiện phép tích chập. Sau đó, Nó tiếp tục sử dụng phép giảm mẫu tối đa để dữ lại những đặc trưng tiêu biểu. Thực hiện tích chập và giảm mẫu như vậy cho đến khi ảnh có kích thước đủ nhỏ thì thực hiện làm phẳng nó thành một véc-tơ. Sau đó, véc-tơ đó đi qua lớp liên kết đầy đủ (fully-connected sẽ thu được kết quả là những bộ trọng số. Những con số này được khởi tạo ngẫu nhiên trước khi đưa vào lớp liên kết đầy đủ.
Ở pha huấn luyện, Chúng ta đưa vào một hình ảnh bất kỳ và sử dụng những trọng số học được để kết luận được phân loại của ảnh đó. Mô hình dưới đây cho thấy các bước thực hiện để phân loại hình ảnh.
- Quá trình thực hiện
Pha 1. Huấn luyện:
Bước 1: Thực hiện phép tích chập và giảm mẫu cho ảnh đầu vào.
Bước 2: Tiến hành làm phẳng các ma trận đặc trưng thành các vector đặc trưng.
Bước 3: Huấn luyện mạng DNN dựa trên tập mẫu nhằm giảm sai số phân lớp dựa trên phương pháp giảm Gradient theo trọng số và giá trị hàm lỗi.
Pha 2. Phân Loại ảnh: Đưa ảnh đi qua một bộ trọng số đã được huấn luyện ở pha 1 để tìm ra phân lớp.
Kết quả:
Mô hình thực nghiệm của bài toán gồm 2 pha:
Pha 1 Huấn luyện : Đây là pha tạo tiền đề cho bài toán phân tích nội dung hình ảnh, gồm tất cả các thuật toán để tạo ra một bộ trọng số nhằm phục vụ cho việc phân loại ảnh. Trong mô hình thực nghiệm này chúng ta sẽ sử dụng bộ dữ liệu CIFAR10 làm đầu vào cho hệ thống.
- Tích chập lần 1: Bộ ảnh sẽ đi qua lớp tích chập đầu tiên với 32 kernel có kích thước 3x3, sau đó sử dụng công thức tính tích chập chúng ta có 32 ảnh với kích thước 28x28 (padding = 0, strike = 1). Tiếp theo chúng ta sử dụng max-pooling kích thước 2x2, sau khi giảm mẫu ảnh sẽ giảm kích thước đi một nữa là 14x14 nhưng chiều sâu vẫn giữ nguyên.
- Tích chập lần 2: Ảnh tiếp tục đi qua 64 kernel kích thước 3x3, tích chập xong chúng ta có 64 ảnh với kích thước 10x10. Tiếp tục sử dụng max-pooling kích thướng 2x2 để ra được 64 ảnh kích thước 5x5.
- Flatten: Ở bước này ma trận đặc trưng của ảnh sẽ được làm phẳng thành mảng một chiều và xếp theo chiều dọc gọi là tập vector đặc trưng.
- Phân lớp: Tập vectơ đặc trưng sẽ đi qua một mạng nơ-ron để huấn luyện và cho ra phân lớp của bức ảnh với độ chính xác tùy thuộc vào thời gian huấn luyện.
Pha 2 Phân loại ảnh: Ở pha này hình ảnh đầu vào có thể sử dụng nhiều kích thước khác nhau nhưng sẽ được chuẩn hóa về kích thước 32x32 để phù hợp với mô hình. Sau đó, ảnh sẽ được chuyển sang một ma trận số và và đi qua bộ trọng số để tìm ra phân lớp của ảnh.
Pha huấn luyện mô hình gồm các bước
Chuẩn hóa dữ liệu
Y_train = np_utils.to_categorical(y_train, NB_CLASSES)
Cài đặt mô hình
Huấn luyện
Lưu mô hình và bộ trọng số:
Load mô hình đã lưu:
model_architecture = 'cifar10_architecture.json'
model_weights = 'cifar10_weights.h5'
model = model_from_json(open(model_architecture).read())
model.load_weights(model_weights)
Load một ảnh:
test_image =image.load_img( "ngua.jfif", target_size =(32,32))
test_image =image.img_to_array(test_image)
test_image =np.expand_dims(test_image, axis =0)
result = model.predict(test_image)
print(result)
if result[0][0]==1:
print("Aeroplane")
elif result[0][1]==1:
print('Automobile')
elif result[0][2]==1:
print('Bird')
elif result[0][3]==1:
print('Cat')
elif result[0][4]==1:
print('Deer')
elif result[0][5]==1:
print('Dog')
elif result[0][6]==1:
print('Frog')
elif result[0][7]==1:
print('Horse')
elif result[0][8]==1:
print('Ship')
elif result[0][9]==1:
print('Truck')
else:
print('Error')
Dự đoán:
optim = SGD()
model.compile(loss='categorical_crossentropy', optimizer=optim,
metrics=['accuracy'])
# predict
predictions = model.predict_classes(test_image)
print(predictions)