LECTURE 2: Mô hình Convolution neural network (2 buổi)
Phép toán convolution và các tham số của phép toán convolution
Các loại layer trong mô hình CNN
Các mô hình CNN nổi tiếng: VGG, ResNet, MobileNet …
Dự án mẫu: Giải bài toán Image classification
1. Giới thiệu thư viện OpenCV
1.1. Giới thiệu thư viện OpenCV
Giới thiệu thư viện OpenCV
OpenCV là một thư viện rất mạnh mẽ để giải quyết các bài toán thị giác máy tính.
OpenCV chứa một số mô hình giải quyết các bài toán Object Detection, Face Detection. Tuy nhiên OpenCV mạnh nhất trong xử lý ảnh.
OpenCV được xây dựng trên ngôn ngữ lập trình C để tăng tốc độ xử lý.
Cài đặt thư viện OpenCV
Pip:
pip install opencv-python
Conda
conda install conda-forge::opencv
Các hướng dẫn sử dụng OpenCV
Chi tiết tại đây
Chú ý
Nên sử dụng OpenCV cho các trường hợp xử lý dữ liệu nhanh tuy nhiên để tạo ra những ứng dụng phức tạp hơn nhanh hơn vì OpenCV hỗ trợ tính toán trên GPU chưa tốt.
Một số thư viện tượng tự OpenCV
Pillow: https://pillow.readthedocs.io/en/stable/ tuy nhiên bộ tính năng không đầy đủ bằng OpenCV
Torch Vision: https://pytorch.org/vision/stable/index.html tuy nhiên thư viện này khá mới và nhiều xử lý chưa hỗ trợ
Albumentations: https://albumentations.ai/ thiên nhiều về xử lý ảnh tuy nhiên không đa nhiệm như OpenCV ví dụ tích hợp các mô hình học sâu.
1.2. Đọc ảnh với OpenCV và chú ý về hệ màu
Đọc ảnh với OpenCV
Dữ liệu OpenCV đọc là Numpy Array
OpenCV không quan trọng hình ảnh là màu sắc như thế nào, có thể đen trắng có thể là ảnh màu, có giá trị opacity thế nào (độ mờ).
import cv2
import matplotlib.pyplot as plt
# Read image
image = cv2.imread('image.jpg')
# Display image with OpenCV
cv2.imshow('Image', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
Chú ý quan trọng
Chiều ma trận đọc vào. (Chiều cao, Chiều rộng, Số kênh)
Mặc định kênh màu openCV đọc dưới định dạng BGR (B - Blue, G - Green, R - Red). Rất nhiều thư viện mặc định là RGB.
Khi đào tạo mạng thì lúc train dùng hệ màu nào thì khi inference cũng phải dùng hệ màu tương tự. OpenCV cung cấp hàm chuyển hệ màu.
# Convert BGR to RGB
image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
# Display image with Matplotlib
plt.imshow(image_rgb)
plt.show()
Truy cập vào các kênh:
# Access individual color channels
blue_channel = image[:, :, 0]
green_channel = image[:, :, 1]
red_channel = image[:, :, 2]
Trong dự án thực tế nếu không cài đặt đúng sẽ dẫn đến kết quả không tốt.
Một số thư viện không làm việc tốt trên ảnh có chất lượng cao như thư viện Pillow. Lỗi này có tên truncation.
1.3. Các hàm cơ bản của OpenCV
Hàm thay đổi kích cỡ
w = 300
h = 200
resized_image = cv2.resize(rgb_image, (w, h))
Hàm vẽ hình dạng
top_left_x = 530
top_left_y = 1050
bottom_right_x = 2150
bottom_right_y = 1705
color = (255, 0, 255) # BGR
thickness = 10
rgb_image = cv2.rectangle(rgb_image, (top_left_x, top_left_y), (bottom_right_x, bottom_right_y), color, thickness)
Hàm phát hiện cạnh
edges_image = cv2.Canny(rgb_image, threshold_1, threshold_2)
Hàm đọc video
Hàm này sử dụng tương tự Generator trong Python. Xử lý đến đâu sẽ đọc đến đó thay vì xử lý tất cả các frame.
ret là kết quả frame có được đọc thành công hay không
frame là ảnh của frame hiện tại
Hàm
video.read
sẽ liên tục các frame tiếp theo khi chạy hàm này.
Hàm
video.release
là giải phóng bộ nhớ khi đọc video