Sử dụng Tensorflow API cho bài toán Object Detection
Chào tất cả mọi người, hôm nay mình sẽ chia sẻ cách trainning model Object Detection đơn giản nhất sử dụng Tensorflow API . Image classification sử dụng mạng CNN ngày nay khá dễ dàng, đặc biệt có sự hỗ trợ của Keras với TensorFlow back-end. Nhưng khi bạn muốn xác định nhiều hơn một đối tượng ...
Chào tất cả mọi người, hôm nay mình sẽ chia sẻ cách trainning model Object Detection đơn giản nhất sử dụng Tensorflow API.
Image classification sử dụng mạng CNN ngày nay khá dễ dàng, đặc biệt có sự hỗ trợ của Keras với TensorFlow back-end. Nhưng khi bạn muốn xác định nhiều hơn một đối tượng trong một hình ảnh thì sao? Vấn đề này được gọi là “object localization and detection" . Bài toán này khó khăn hơn nhiều so với bài toán phân loại hình ảnh đơn giản. Hình 1: nguồn: CS231n Lecture 8 (2016)
Bài toán* Object Detection* chắc sẽ không xa lạ với chúng ta, những người đã và đang quan tâm đến lĩnh vực này. Vậy Object Detection là gì? *Object Detection là một kỹ thuật máy tính liên quan tới thị giác máy tính (computer vision) và xử lý ảnh liên quan đến việc phát hiện các trường hợp của các đối tượng ngữ nghĩa của một lớp nhất định (như: con người, đồ vật hay xe ô tô, ...) trong các hình ảnh hoặc video. Object Detection được áp dụng trong nhiều lĩnh vực của * Computer Vision, bao gồm Image retrieval và video surveillance. Bài toán này đã được sử dụng rộng rãi để phát hiện khuôn mặt, phát hiện xe, đếm số người đi bộ, hệ thống bảo mật và xe không người lái.
Mọi thứ trông rất thú vị và bạn cảm thấy quá khó khăn trong việc code. Đừng lo, đã có TensorFlow API giúp bạn! Mọi công việc nặng nhọc khó khăn đã được thực hiện, việc của chúng ta là chuẩn bị data có cấu trúc giống với đầu vào yêu cầu. TensorFlow cũng cung cấp pre-trained model, được trained trên bộ MS COCO, Kitti, hoặc tập dữ liệu Open Images. Hình 2: ví dụ về Object Detection sử dụng TensorFlow API Nhưng, nếu bạn muốn detect vật gì mà không có trong danh sách các classs. Thì cùng theo dõi bài viết này nhé. Ở đây sẽ hướng dẫn cho các bạn tạo chương trình phát hiện đối tượng của riêng bạ, sử dụng một ví dụ thú vị của Quidditch từ vũ trụ Harry Potter!
Đầu tiên clone Repo Github này. Sử dụng cái này sẽ đơn giản hơn khi dùng Repo này của TensorFlow. Khi clone xong thì cùng cài đặt theo file requirements.txt:
pip install -r requirements.txt
API này sử dụng Protobufs để cấu hình và train các tham số mô hình. Chúng ta cần compile các thư viện Protobuf trước khi sử dụng:
sudo apt-get install protobuf-compiler
và
protoc object_detection/protos/*.proto --python_out=.
Sau đó nhớ copy đường dẫn vào nữa nha:
export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim
Chúng ta cùng chuẩn bị file label_map.pbtxt. Trong file này chứa tất cả các tên của label mà mong muốn là đầu ra cũng như IB cho mỗi label. Chú ý rằng nên đánh ID cho mỗi label bắt đầu từ 1. Ví dụ nếu như 3 label của bạn là "snitch, quaffle và bludger" thì sẽ được đánh label như dưới đây nhé:
item { id: 1 name: 'snitch'}
item { id: 2 name: 'quaffle'}
item { id: 3 name: 'bludger'}
Nếu các bạn có tập data và các nhãn khác thì chỉ cần thay đổi ở file label_map.pbtxt là ok nhé. Ở đây tác giả sử dụng tập ảnh được lấy từ video phim Harry Potter dùng OpenCv để lấy các frame trong video này. Sau khi đã xong tác giả lấy ngẫu nhiên 300 bức ảnh được lấy ngẫu nhiên. Mình đã thử với dữ liệu để detect "head" và những cái khác head tuy nhiên vì máy mình hiện giờ đang sử dụng hơi gà nên mình dùng luôn tập data của tác giả nhé mn