Thu Thập Dữ Liệu Cho Deep Learning && Giới Thiệu Về Imagenet
Có thể bạn quan tâm

Dataset Acquisition for Deep Learning
Computer Vision (CV) là một ngành khoa học với mục đích giúp cho máy tính nhận dạng, hiểu và xử lý được các dữ liệu hình ảnh, video từ đó trích xuất được các thông tin và dữ liệu theo yêu cầu. CV đã có những bước tiến lớn lao nhờ vào Deep Learning, IoT và Cloud Computing, các models ngày nay đã có độ chính xác và tính tin cậy khá cao trong nhiều bài toán như phân loại ảnh (classification), nhận diện khoanh vùng đối tượng (object detection), phân vùng đối tượng (segmentation) và các bài toán về sinh ảnh (generation). Đây là tiền đề để xây dựng và phát triển các ứng dụng AI về sau.
Về cơ bản thì các bước để giải quyết một bài toán Deep Learning trong CV như sau:
1. Thu thập dữ liệu cho bài toán. (Collecting Dataset)
2. Các bài toán trong CV đa phần là Supervised Learning nên cần đánh nhãn dữ liệu thu thập được (Labeling Dataset).
3. Chọn các Deep Learning models phù hợp với bài toán-> Tiến hành training -> Tiến hành kiểm thử và đánh giá (Test and Evaluate Model)
4. Lặp lại các bước trên cho đến khi thỏa mãn yêu cầu của bài toán (Satisfying acceptable quality).
Chúng ta đa số đều chú tâm tới bước 3 của bài toán, tức là ở bước chọn các models và các phương pháp cải thiện model hyperparameters (dựa vào metrics, optimizers, activation functions…) mục đích nhằm đạt được error rate thấp nhất (finding a better algorithm to make a better decisions).
Một điều quan trọng thường bỏ qua khi bắt đầu một bài toán CV Deep Learning là bước thu thập dữ liệu để training cho model. Ví dụ đơn giản là các labeled-trainning images (ngoài image thì còn có videos, 3D point cloud) cho các bài toán binary, multiclass, hay multi-label classification, tức là tìm một tập các bức ảnh đã được đánh nhãn thuộc các classes khác nhau (ví dụ các nhãn như chó, mèo, gà v.v…). Đa phần trong quá trình học CV hay Deep Learning, chúng ta làm việc trên những dataset thu sẵn đã được đánh nhãn. Nhưng thực tế, tùy thuộc vào bài toán mà cần thu thập dữ liệu khác nhau và ít khi tương quan với những dataset sẵn có!
Các Deep Learning models không thể hoạt động nếu thiếu data, trường hợp dataset quá nhỏ thì dể dẫn đến overfitting và model không thể học được đầy đủ các features cho các trường hợp tổng quan hay nói khác đi là model thiếu khả năng tổng quan hóa — generalization. Một cách khác là dùng data augmentation cho existing training data, nhưng vấn đề là các generated images ít nhiều đã được “remix” từ các pixels sẵn có (still inter-correlated) do đó model cũng khó thoát khỏi overfitting (cần áp dụng thêm nhiều phương pháp khác như weight decay, dropout…). Vậy làm sao để tìm “đủ” training data và đánh nhãn cho nó? Có thể nói đây là công việc mất nhiều công sức nhất trong CV Deep Learning — an expensive task! Trong bài viết này mình sẽ đề cập tới một số kỹ thuật tìm và collect một bộ training dataset đủ “ngon” để các bạn có thể tiến hành training và kiểm thử model của mình. Ngoài ra mình sẽ nói qua về một dataset rất phổ biến trong cộng đồng Deep Learning, đó là ImageNet.
Lưu ý: Thu thập dữ liệu xong thì cần tiến hành tiền xử lí vì hầu như dữ liệu thu thập được đều là dữ liệu thô (raw data) với height, width, ratio… khác nhau nên không thể đưa thẳng vào Deep Learning Models! Thường thì chúng ta sẽ sử dụng các thư việc có sẵn như OpenCV, Scikit-Image… để preprocessing image.
“Data is like garbage. You’d better know what you are going to do with it before you collect it.” — Mark Twain
Bước 1: Thu thập dữ liệu (Collecting Dataset)
Trước tiên chúng ta cần phải hiểu và nắm được bài toán cần giải quyết là gì? Business value của nó để có thể tìm kiếm chính xác dữ liệu training cho bài toán! Với các bài toán classification có thể dựa vào tên các classes để tạo thành các keywords và sử dung các công cụ crawling data từ Internet cho việc tìm ảnh. Hoặc có thể tìm ảnh, videos từ các trang mạng xã hội, ảnh vệ tinh trên Google, free collected data từ camera công cộng hay xe hơi (Waymo, Tesla), thậm chí có thể mua dữ liệu từ bên thứ 3 (lưu ý tính chính xác của dữ liệu). Cũng cần phải biết đến những dataset đã được tổng hợp sẵn có thể liên quan đến bài toán của chúng ta, ở dưới là một số dataset phổ biến:
· Common Objects in Context (COCO)
· ImageNet
· Google’s Open Images
· KITTI
· The University of Edinburgh School of Informatics’ CVonline: Image Databases
· Yet Another Computer Vision Index To Datasets (YACVID)
· mldata.io
· CV datasets on GitHub
· ComputerVisionOnline.com
· Visualdata.io
· mighty.ai
· UCI Machine Learning Repository
· Udacity Self driving car datasets
· Cityscapes Dataset
· Autonomous driving dataset by Comma.ai
· MNIST handwritten datasets
Bước 2: Đánh nhãn dữ liệu (Labeling data)
Đây là bước khá quan trọng vì sẽ đánh giá mô hình chúng ta làm việc tốt hay không! Đánh nhãn sai dữ liệu sẽ làm cho model dự đoán và đánh giá sai -> tốn nhiều thời gian và công sức bỏ ra cho quá trình training. Có hai vấn đề cần lưu ý là:
· Làm thế nào để đánh nhãn dữ liệu?
· Ai sẽ đánh nhãn dữ liệu?
Chúng ta sẽ lần lượt đi qua từng vấn đề!
Vấn đề 1 — Làm thế nào để đánh nhãn dữ liệu? Sau khi đã tìm được dataset cho bài toán, cần xác định xem bài toán thuộc dạng nào? Ví dụ classification, object detection, segmentation… Từ đó có thể tiến hành process data để đánh nhãn cho phù hợp! Trường hợp classification thì các labels chính là các keywords dùng trong quá trình tìm và crawling data từ Internet. Trường hợp instance segmentation cần có nhãn cho từng pixel của ảnh. Lúc này chúng ta cần phải sử dụng tools để tiến hành image annotation (tức là set label và metadata cho ảnh). Các tools phổ biến có thể kể đến là Comma Coloring, Annotorious, LabelMe… Các tool này sẽ hỗ trợ GUI cho việc đánh label từng segment của ảnh. Ví dụ:

Nguồn: http://labelme.csail.mit.edu/Release3.0/
Tuy nhiên công việc này khá thủ công và tốn rất nhiều thời gian! Một cách khác nhanh hơn bằng cách sử dụng algorithms như Polygon-RNN++ (https://arxiv.org/abs/1803.09693) hay Deep Extreme Cut (https://arxiv.org/abs/1711.09081). Polygon-RNN++ nhận input là object trong image và cho ra output là các polygon points (điểm đa giác) bao quanh object để định hình các segments trong ảnh, từ đó thuận lợi hơn cho việc đánh label. Nguyên lý làm việc của Deep Extreme Cut cũng tương tự như Polygon-RNN++ nhưng với số polygon là 4. Chi tiết hơn có thể xem qua ở đây https://www.youtube.com/watch?v=evGqMnL4P3E
Ngoài ra còn có thể sử dụng phương pháp tranfer learning để đánh nhãn dữ liệu. Bằng việc sử dụng pre-trained models trên các large-scale dataset như ImageNet, Open Images. Các pre-trained models đã “học” rất nhiều features từ hàng triệu bức ảnh khác nhau nên tính chính xác khá cao. Dựa vào các models này, chúng ta có thể tìm và đánh label cho các bounding box của từng object trong ảnh. Cần lưu ý là các pre-trained models này phải có tính tương đồng với collected dataset để có thể tiến hành feature-extraction hay fine-turning.
“The snowball effect” — sau khi dùng dữ liệu trên để train model cho bài toán, chúng ta lại có thể sử dụng lại chính model này để đánh nhãn cho các dữ liệu mới.
Vấn đề 2 — Ai sẽ đánh nhãn dữ liệu? Có 2 dạng khác nhau:
In-house: chính bạn sẽ là người đánh nhãn, hoặc nhờ người thân, bạn bè giúp đỡ! Nếu dư giả hơn thì bạn có thể lập team để tiến hành đánh nhãn dữ liệu. Ưu: dễ kiểm soát tính chính xác của dữ liệu, chi phí thấp. Nhược: tốn khá nhiều thời gian cho việc collect và label data.
Out-source: nhờ bên thứ 3, có thể là các công ty và dịch vụ chuyên cung cấp data theo yêu cầu nghiệp vụ. Ưu: dữ liệu có khả năng tổng hợp nhanh. Nhược: dữ liệu cần minh bạch và có tính chính xác, tốn nhiều chi phí!
Ngoài ra chúng ta còn có thể sử dụng online workforce resources như Amazon Mechanical Turk (https://www.mturk.com/) hay Crowdflower (http://www.crowdflower.com/). Nói ngắn gọn là nhờ cộng đồng mạng đánh nhãn data giúp mình, thường thì có thu phí. Đây cũng là cách mà các big dataset như ImageNet hay Microsoft Coco ra đời. Tuy nhiên tính chính xác và cách tổ chức của dữ liệu là vấn đề mà chúng ta cần quan tâm.
Tùy theo điều kiện và yêu cầu của mỗi bài toán mà cần lựa chọn những phương án phù hợp!
Từ khóa » Cuộc Thi Ilsvrc
-
ImageNet - Blog
-
Tìm Hiểu Mạng AlexNet, Mô Hình Giành Chiến Thắng Tại Cuộc Thi ...
-
[Paper Explain] [Deep Neural Network] -ImageNet Classification With ...
-
Giới Thiệu Mạng ResNet - Viblo
-
ImageNet - Wikimedia Tiếng Việt
-
The ImageNet Large Scale Visual Recognition Challenge (ILSVRC)
-
CNN Architectures - Kiến Trúc Mạng CNN Thông Dụng
-
Một Số Kiến Trúc CNN Thông Dụng - 123doc
-
Lược Sử Về Deep Learning. - Dl_ap
-
Bài Toán Object Detection - Khoa Học Dữ Liệu
-
Bài 35: Lược Sử Deep Learning - Machine Learning Cơ Bản
-
Google Sắp “nhìn” được Như Con Người
-
SIU AI LAB