Phân loại hình ảnh bằng TensorFlow

08:24 PM 18/05/2019 In bài viết

Trong thời đại học máy, Transfer Learning là một kỹ thuật cho phép người dùng sử dụng lại mô hình đã được đào tạo và sử dụng nó cho một nhiệm vụ khác. Phân loại hình ảnh là quá trình lấy một hình ảnh làm dữ liệu đầu vào và gán cho nó một lớp với một xác suất. Quá trình này sử dụng các mô hình học sâu là các mạng thần kinh sâu, hoặc chi tiết hơn là Mạng thần kinh chuyển đổi (CNNs -Convolutional Neural Networks). Một CNN được tạo bởi nhiều lớp, mỗi lớp này chịu trách nhiệm tìm hiểu và nhận ra một tính năng cụ thể. Các lớp thấp hơn có thể nhận ra các bộ phận, các cạnh và cứ tiếp tục như vậy. Các lớp cuối cùng xác định loại hình ảnh.

Một mô hình nhận dạng hình ảnh hiện đại có hàng triệu thông số, và nó đòi hỏi rất nhiều sức mạnh tính toán để có thể đào tạo mô hình. Sử dụng Transfer Learning, có thể đào tạo lại lớp cuối cùng của mạng bằng cách sử dụng một bộ hình ảnh tùy chỉnh, và sử dụng lại tất cả các phần còn lại của mô hình mà không thay đổi nó. Sử dụng Transfer Learning có thể giảm thiểu đáng kể thời gian cần thiết để đào tạo một mô hình. Một lợi ích thú vị khác của học máy chính là người dùng không cần một bộ dữ liệu hình ảnh lớn để đào tạo mô hình mới, vì hầu hết tất cả các mô hình đã được đào tạo.

Bài viết này hướng dẫn từng bước cách sử dụng Transfer Learning với TensorFlow.

Cài đặt TensorFlow

Bước đầu tiên là thiết lập môi trường cần thiết để sử dụng trong bài viết này. Có một số cách để bắt đầu sử dụng Tensorflow, cách dễ nhất và nhanh nhất là sử dụng Docker:

Bạn có thể tải Docker từ liên kết này (https://www.docker.com/get-started). Sau khi đã hoàn thành cài đặt docker, bạn đã sẵn sàng để cài đặt TensorFlow. Bạn có thể tải xuống TensorFlow bằng cách sử dụng hub docker.

Sử dụng Tag, bạn có thể chọn phiên bản mình thích. Trong hướng dẫn này, các chuyên gia đang sử dụng phiên bản 1.12.0-devel. Phiên bản này phát triển thêm một số tính năng khác sẽ được sử dụng trong hướng dẫn này. Để cài đặt hình ảnh Tensorflow docker, gõ:

docker pull tensorflow/tensorflow:devel-1.12.0

Chờ cho đến khi cài đặt kết thúc và bạn đã sẵn sàng để sử dụng TensorFlow.

Bộ dữ liệu hình ảnh

Sau khi TensorFlow được cài đặt, đã đến lúc chọn tập dữ liệu mà bạn muốn sử dụng để huấn luyện mô hình của mình. Có một số bộ dữ liệu hình ảnh có sẵn. Một điều thú vị là bạn có thể sử dụng các bước tương tự ngay cả khi thay đổi tập dữ liệu hình ảnh. Để tạo mô hình TensorFlow của mình, các chuyên gia sẽ sử dụng bộ dữ liệu hình ảnh con mèo. Các chuyên gia muốn đào tạo mô hình của mình để nó có thể phân biệt các giống mèo khác nhau. Có một bộ dữ liệu hình ảnh chó và mèo có sẵn tại The Oxford-IIIT Pet Dataset. Bộ dữ liệu hình ảnh này chứa hình ảnh của các loài chó và mèo - là bộ dữ liệu hoàn hảo để huấn luyện mô hình học máy và áp dụng phương pháp Transfer learning. Hãy tải xuống tập dữ liệu hình ảnh và giải nén nó.

Tạo cấu trúc thư mục

Để áp dụng phương pháp Transfer learning, trước hết bạn cần phải nhóm các hình ảnh theo các giống mèo. Hãy tạo một thư mục mới với tên gọi là “tensor”, và dưới thư mục này, một thư mục mới gọi với tên gọi “cat – images” (Hình ảnh mèo). Cấu trúc hình ảnh sẽ như sau:

Tensorflow images structure

Bây giờ, hãy bắt đầu hình ảnh TensorFlow
1 docker run -it -p 6006:6006

2            -v /Users/francesco/Desktop/tensor/:/tensor_flow     

3            your_tensorflow_docker_name

Tạo mô hình máy học tùy chỉnh bằng cách sử dụng TensorFlow

Và bây giờ, bạn đã sẵn sàng để tạo ra các mô hình tùy chỉnh. Hãy sao chép kho lưu trữ tensorflow-for-poets:

1 git clone https://github.com/googlecodelabs/tensorflow-for-poets-2

Theo cách này, bạn đã có kịch bản để tạo mô hình một cách dễ dàng. Hãy bắt đầu đào tạo mô hình của mình:

1 python tensorflow-for-poets-2/scripts/retrain.py

2 --model_dir=/tensor_flow/inception-v3 

3 --output_graph=/tensor_flow/cats_retrained.pb

4 --output_labels=/tensor_flow/cats_labels.txt 

5 --image_dir=/tensor_flow/cat-images/ 

6 --bottleneck_dir=/tensor_flow/cats_bottleneck

Có một số điều quan trọng cần lưu ý:

--model_dir là nơi mô hình sẽ được lưu trữ (trong trường hợp này là tenor_flow)

--output_graph là tên của biểu đồ sẽ được tạo ra (cat_retrained.pb)

--output_labels là tên của các nhãn (cat_labels.txt)

--image_dir là vị trí lưu trữ hình ảnh để huấn luyện mô hình

--bottleneck_dir là nơi nút cổ chai sẽ được tạo

“Bottleneck” (Nút cổ chai) là một thuật ngữ không chính thức được các chuyên gia sử dụng cho layer (lớp) ngay trước layer đầu ra cuối cùng, thực hiện phân loại.

Bước này đòi hỏi rất nhiều thời gian, tùy thuộc vào công suất của máy tính của bạn và số lần lặp bạn sẽ sử dụng.

Phân tích mô hình bằng cách sử dụng bảng TensorFlow

Khi mô hình học máy đã sẵn sàng và quá trình đào tạo hoàn tất, bạn đã có thể phân tích mô hình. Đây là một khía cạnh quan trọng bởi vì bạn có thể đánh giá mô hình mình đã tạo ra. Hãy gõ lệnh sau:

1 tensorboard --logdir /tmp/retrain_logs/

Nó sẽ chạy bảng TensorFlow. Sử dụng trình duyệt và bạn có thể mở bảng điều khiển. Nhập: localhost: 6006 để truy cập vào bảng điều khiển web.

Bây giờ chọn biểu đồ và bạn sẽ thấy mô hình như sau:

Bây giờ, chọn SCALARS trên menu trên cùng để đánh giá mô hình. Đây là độ chính xác:

Độ chính xác của việc đào tạo là độ chính xác phân loại trên các hình ảnh mà hệ thống sử dụng để huấn luyện mô hình. Độ chính xác xác nhận là độ chính xác trên các hình ảnh không được sử dụng trong quá trình đào tạo. Độ chính xác xác nhận là độ chính xác "thực" của mô hình. Thông thường, nó phải nhỏ hơn độ chính xác của việc đào tạo.

Nếu độ chính xác của việc đào tạo cao, trong khi độ chính xác xác nhận thấp, mô hình đã được đào quá mức. Điều đó có nghĩa là mô hình không thực hiện khái quát tốt đối với dữ liệu thử nghiệm. Trong kịch bản ngược lại, mô hình đang bị thiếu và bạn có thể cải thiện nó.

Hình dưới đây thể hiện entropy (Entropy thông tin mô tả mức độ hỗn loạn trong một tín hiệu lấy từ một sự kiện ngẫu nhiên. Nói cách khác, entropy cũng chỉ ra có bao nhiêu thông tin trong tín hiệu, với thông tin là các phần không hỗn loạn ngẫu nhiên của tín hiệu). Đường cong này nên giảm dần.

Cách kiểm tra mô hình TensorFlow

Khi bạn đã hài lòng với mô hình của mình, bạn có thể kiểm tra nó:

1 bazel-bin/tensorflow/examples/label_image/label_image 

2  --graph=/tensor_flow/cats_retrained.pb 

3  --image=/tmp/lab1.jpg 

4  --input_layer=Mul 

5  --output_layer=final_result 

6  --labels=/tensor_flow/cats_labels.txt

Các chuyên gia đã sử dụng hình ảnh này để kiểm tra mô hình:

Kết quả sẽ được hiển thị dưới đây:

Như bạn có thể thấy, mô hình đã phát hiện chính xác giống mèo.

Kết luận

Hy vọng, bạn đã có được kiến thức về cách sử dụng Transfer Learning để tạo mô hình tùy chỉnh của mình, để sử dụng trong ứng dụng học máy. Nếu bạn muốn sử dụng mô hình này trong các tình huống khác, chẳng hạn như ứng dụng di động, bạn nên xem xét sử dụng mô hình kiến trúc khác (ví dụ: Mobilenet).

An Nhiên