Tải bản đầy đủ (.pdf) (16 trang)

Báo cáo môn học máy: Phân loại ảnh

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (893.42 KB, 16 trang )

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG

HỌC MÁY
ĐỀ TÀI:
Phân loại ảnh với Mạng Noron Tích Chập Convolutional Neural Networks(CNNs)
Giáo viên hướng dẫn: TS. Thân Quang Khoát
Sinh viên thực hiện:
Nguyễn Thị Phương Hằng
Đỗ Khắc Linh
Nguyễn Hoài Nam
Nguyễn Anh Tuấn

20131345
20130614
20132674
20144898

Hà Nội tháng 12 năm 2017
1


Mục lục
Lời nói đầu.......................................................................................................................... 3
I.

Bài toán ....................................................................................................................... 4

II.

Phương pháp sử dụng và tập dữ liệu ....................................................................... 4


CNNs(Convoluntional Neural Network) - Mạng nơ-ron tích chập ....................... 4

1.

2.

1.1

Mạng nơ-ron thông thường ................................................................................ 4

1.2

Convolutional Neural Network (CNNs/ ConvNet – Mạng nơ-ron tích chập) .... 5
Tập dữ liệu CIFAR 10 ............................................................................................ 9

III.

Chức năng chính của hệ thống ............................................................................. 10

IV.

Thử nghiệm ............................................................................................................ 10

V.

Vấn đề gặp phải và hướng mở rộng ....................................................................... 14

VI.

Danh sách tài liệu tham khảo ............................................................................... 15


VII.

Hướng dẫn cài đặt .............................................................................................. 15

Kết luận............................................................................................................................. 16

2


Lời nói đầu
Thế giới phát triển cùng với sự bùng nổ của công nghệ thông tin,đặc biệt
của dữ liệu, những khái niệm AI, NLP, Machine learning , Deep
Learning,..ra đời để phân tích dữ liệu, học tập nguồn tri thức trợ giúp con
người đưa ra những quyết định từ nguồn dữ liệu khổng lồ.
Trong kỳ học này, chúng em được học tập và tiếp thu kiến thức để hiểu
thêm về học máy. Trong đó bài toán phân loại hình ảnh đang được ứng
dụng rất phổ biến như trong hệ thống xử lý ảnh lớn như Facebook,
Google hay Amazon đã đưa vào sản phẩm của mình những chức năng
thông minh như nhận diện khuôn mặt người dùng, phát triển xe hơi tự lái
hay drone giao hàng tự động.
Chúng em lựa chọn đề tài này nhằm nghiên cứu và hiểu thêm về mô hình
CNN, cũng như hệ thống xử lý ảnh hiện nay.Hệ thống của chúng em hy
vọng sẽ nhận diện được hình ảnh từ nguồn đưa vào. Do kiến thức còn
hạn chế, kinh nghiệm không nhiều nên còn nhiều sai sót mong nhận được
sự góp ý từ thầy!
Chúng em chân thành cảm ơn!

3



I. Bài toán
- Phân loại ảnh là một bài toán nền tảng trong thị giác máy tính, muốn có
những ứng dụng thị giác máy tính thông minh và hữu dụng --> cần phải
phân loại ảnh
- Có rất nhiều ứng dụng trong thực tế:
- Phân loại ảnh y tế, hàng không….
- Nhận diện cử chỉ, cảm xúc…
- Thiết lập thị giác cho robot
- Đặc điểm: Trích rút đặc trưng từ ảnh tương đối khó. Nếu dùng ảnh thô
thì kết quả khá tồi → Mạng Convolutional Neural Network
Input: Hình ảnh đưa vào
Output: Nhận diện được sự vật trong bức ảnh
II. Phương pháp sử dụng và tập dữ liệu
1. CNNs(Convoluntional Neural Network) - Mạng nơ-ron tích chập
1.1Mạng nơ-ron thông thường

Neural Networks nhận được đầu vào (một vector đơn), và chuyển nó qua
các lớp ẩn. Mỗi lớp ẩn được tạo thành bởi một tập các nơ-ron, nơi mà
mỗi nơ-ron được kết nối hoàn toàn với tất cả các nơ-ron trong lớp trước,
và các nơ-ron trong một lớp hoạt động hoàn toàn độc lập và không chia
sẻ bất kỳ kết nối nào. Lớp được kết nối hoàn chỉnh cuối cùng được gọi là

4


"lớp out put".Đầu ra là tín hiệu đầu ra của một nơron, với mỗi nơron sẽ
có tối đa là một đầu ra.
1.2Convolutional Neural Network (CNNs/ ConvNet – Mạng nơ-ron tích
chập)

Tích chập là gì? Convolution (tích chập)
Tích chập được sử dụng đầu tiên trong xử lý tín hiệu số (Signal
processing). Nhờ vào nguyên lý biến đổi thông tin, các nhà khoa học đã
áp dụng kĩ thuật này vào xử lý ảnh và video số. Để dễ hình dung, ta có
thể xem tích chập như một cửa sổ trượt (sliding window) áp đặt lên một
ma trận. Bạn có thể theo dõi cơ chế của tích chập qua hình minh họa bên
dưới.

Mạng no-ron tích chập

CNNs là một trong những kỹ thuật hiện đại nhất hiện nay (state of the
art) cho bài toán phân loại ảnh nói riêng và lĩnh vực thị giác máy tính nói
chung
CNNs đầu vào bao gồm các hình. Đặc biệt,khác với mạng nơ-ron thông
thường , các lớp của một ConvNet có no-rons sắp xếp theo 3 chiều: chiều
rộng, chiều cao, chiều sâu. (Lưu ý rằng chiều sâu ở đây đề cập đến kích
thước thứ ba của khối lượng kích hoạt).
Ví dụ, các hình ảnh đầu vào trong CIFAR- 10 là một khối lượng đầu vào
của kích hoạt, và khối lượng có kích thước 32x32x3 (chiều rộng, chiều
cao, chiều sâu tương ứng). Như chúng ta thấy, các nơ-ron trong một lớp
sẽ chỉ được kết nối với một vùng nhỏ của lớp trước nó, thay vì tất cả các
nơ-ron theo cách kết nối hoàn toàn. Hơn nữa, lớp đầu ra cuối cùng cho
CIFAR-10 có kích thước 1x1x10, bởi vì cuối kiến trúc ConvNet, chúng
ta sẽ làm giảm toàn bộ hình ảnh thành một vector duy nhất, sắp xếp theo
chiều sâu. Đây là một hình ảnh:

5


Như chúng ta đã mô tả ở trên, một ConvNet đơn giản là một dãy các lớp

chuyển đổi thông qua hàm kích hoạt phi tuyến. Ta sử dụng ba loại lớp
chính để xây dựng kiến trúc ConvNet: Lớp cộng hưởng(Convolutional
Layer), lớp tổng hợp(Pooling Layer), và lớp được kết nối hoàn toàn
(Fully-Connected Layer )(chính xác như trong mạng nơ-ron thường).
Xếp chồng các lớp này tạo thành kiến trúc đầy đủ.
1.2.1 Convolutional Layer
Lớp này chính là nơi thể hiện tư tưởng ban đầu của mạng nơ-ron tích
chập. Thay vì kết nối toàn bộ điểm ảnh, lớp này sẽ sử dụng một bộ các bộ
lọc (filters) có kích thước nhỏ so với ảnh (thường là 3×3 hoặc 5×5) áp
vào một vùng trong ảnh và tiến hành tính tích chập giữa bộ filter và giá
trị điểm ảnh trong vùng cục bộ đó.
- Dùng các filter đặt dọc theo chiều sâu nhìn tầng phía trước, mỗi tầng sử
dụng một bộ trọng số riêng → Thấy được các đặc trưng riêng của tầng
phía trước.
- Dùng các receptive field trượt trên bề mặt của tầng trước, nhưng nhìn
thấu hết dọc theo chiều sâu của tầng trước.
- Chia sẻ tham số với các neural trên cùng một filter.
Như vậy với một bức ảnh 32×32 và một filter 3×3, ta sẽ có kết quả là một
tấm ảnh mới có kích thước 32×32 (với điều kiện đã thêm padding vào
ảnh gốc để tính tích chập cho các trường hợp filter quét ra các biên cạnh)
là kết quả tích chập của filter và ảnh. Với bao nhiêu filter trong lớp này
thì ta sẽ có bấy nhiêu ảnh tương ứng mà lớp này trả ra và được truyền vào
lớp tiếp theo. Các trọng số của filter ban đầu sẽ được khởi tạo ngẫu nhiên
và sẽ được học dần trong quá trình huấn luyện mô hình.

6


1.2.2 Lớp RELU – rectified linear unit
Lớp này thường được cài đặt ngay sau lớp Convolutional. Lớp này sử

dụng hàm kích hoạt f(x) = max(0,x)f(x)=max(0,x). Nói một cách đơn
giản, lớp này có nhiệm vụ chuyển toàn bộ giá trị âm trong kết quả lấy từ
lớp Convolutional thành giá trị 0. Ý nghĩa của cách cài đặt này chính là
tạo nên tính phi tuyến cho mô hình.
Tương tự như trong mạng truyền thẳng, việc xây dựng dựa trên các phép
biến đổi tuyến tính sẽ khiến việc xây dựng đa tầng đa lớp trở nên vô
nghĩa. Có rất nhiều cách để khiến mô hình trở nên phi tuyến như sử dụng
các hàm kích hoạt sigmoid, tanh, … nhưng hàm f(x) =
max(0,x)f(x)=max(0,x) dễ cài đặt, tính toán nhanh mà vẫn hiệu quả.
1.2.3 Pooling Layer
Lớp này sử dụng một cửa sổ trượt quét qua toàn bộ ảnh dữ liệu, mỗi lần
trượt theo một bước trượt (stride) cho trước. Khác với lớp Convolutional,
lớp Pooling không tính tích chập mà tiến hành lấy mẫu (subsampling).
Khi cửa sổ trượt trên ảnh, chỉ có một giá trị được xem là giá trị đại diện
cho thông tin ảnh tại vùng đó (giá trị mẫu) được giữ lại.
Các phương thức lấy phổ biến trong lớp Pooling là MaxPooling ( lấy giá
trị lớn nhất), MinPooling (lấy giá trị nhỏ nhất) và AveragePooling (lấy
giá trị trung bình).
Xét một ảnh có kích thước 32×32 và lớp Pooling sử dụng filter có kích
thước 2×2 với bước trượt stride = 2, phương pháp sử dụng là
MaxPooling. Filter sẽ lần lượt duyệt qua ảnh, với mỗi lần duyệt chỉ có
giá trị lớn nhất trong 4 giá trị nằm trong vùng cửa sổ 2×2 của filter được
giữ lại và đưa ra đầu ra. Như vậy sau khi qua lớp Pooling, ảnh sẽ giảm
kích thước xuống còn 16×16 (kích thước mỗi chiều giảm 2 lần).
Lớp Pooling có vai trò giảm kích thước dữ liệu. Với một bức ảnh kích
thước lớn qua nhiều lớp Pooling sẽ được thu nhỏ lại tuy nhiên vẫn giữ
được những đặc trưng cần cho việc nhận dạng (thông qua cách lấy mẫu).

7



Việc giảm kích thước dữ liệu sẽ làm giảm lượng tham số, tăng hiệu quả
tính toán và góp phần kiểm soát hiện tượng quá khớp (overfitting).

1.2.4 Fully-Connected Layer
Lớp này tương tự với lớp trong mạng nơ-ron truyền thẳng, các giá trị ảnh
được liên kết đầy đủ vào node trong lớp tiếp theo. Sau khi ảnh được xử lý
và rút trích đặc trưng từ các lớp trước đó, dữ liệu ảnh sẽ không còn quá
lớn so với mô hình truyền thẳng nên ta có thể sử dụng mô hình truyền
thẳng để tiến hành nhận dạng.
Tóm lại, lớp fully-connected đóng vai trò như một mô hình phân lớp và
tiến hành dựa trên dữ liệu đã được xử lý ở các lớp trước đó.
Mô hình hoạt động như thế nào
Một mạng nơ-ron tích chập được hình thành bằng cách ghép các lớp nêu
trên lại với nhau. Mô hình bắt đầu với lớp Convolutional.
Lớp RELU thường luôn được cài đặt ngay sau lớp Convolutional hoặc
thậm chí kết hợp cả hai lớp này thành một lớp. Các lớp tiếp theo có thể là
Convolutional hay Pooling tùy theo kiến trúc mà ta muốn xây dựng. Cuối
cùng sẽ là lớp fully-connected để tiến hành phân lớp.
Để xem mô hình này hoạt động như thế nào ta có thể xét một kiến trúc
sau đây:
Conv1 (with RELU) – Pooling – Conv2 (with RELU) – Pooling – FC –
FC
Ví dụ: Một ConvNet đơn giản để phân loại tập dữ liệu trong CIFAR-10
có thể có kiến trúc [INPUT - CONV - RELU - POOL - FC]. Chi tiết hơn:
 INPUT [32x32x3] sẽ giữ giá trị pixel thô của hình ảnh, trong
trường hợp này là hình ảnh có chiều rộng 32, chiều cao 32 và với
ba kênh màu R, G, B.
 CONV lớp sẽ tính toán đầu ra của các nơ-ron được kết nối với các
vùng địa phương trong đầu vào, mỗi sản phẩm tính toán giữa trọng

số của chúng và một khu vực nhỏ mà được kết nối vào trong

8


trọng lượng đầu vào. Điều này có thể dẫn đến kết quả như
[32x32x12] nếu ta quyết định sử dụng 12 bộ lọc.
 RELU sẽ áp dụng một hàm kích hoạt yếu tố, chẳng hạn như
ngưỡng tối đa (0, x) max (0, x) ở mức 0. Điều này làm cho kích
thước của volume không thay đổi ([32x32x12]).
 Lớp POOL sẽ thực hiện hoạt động lấy mẫu dựa trên không gian
(chiều rộng, chiều cao), kết quả là [16x16x12].
 Lớp FC (tức là kết nối hoàn chỉnh) sẽ tính điểm của lớp, kết quả là
khối lượng của kích thước [1x1x10], trong đó mỗi con số trong số
10 tương ứng với điểm số của lớp, chẳng hạn như trong số 10 loại
của CIFAR-10. Giống như các mạng nơ-ron thường ,mỗi nơ-ron
trong lớp này sẽ được kết nối với tất cả các số trong volume trước
đó.

2. Tập dữ liệu CIFAR 10
Bộ dữ liệu CIFAR-10 bao gồm 60000 hình ảnh màu 32x32 trong 10 lớp,
với 6000 hình ảnh cho mỗi lớp.
Training Data: Gồm 50000 ảnh kích thước 32*32*3 cho dưới dạng ma
trận 50000 x 3072, tương ứng với 10 lớp ( 5000 ảnh cho mỗi lớp)
Test Data: Gồm 10000 ảnh với số lượng ảnh mỗi lớp không biết trước.
Bộ dữ liệu được chia thành năm đợt huấn luyện và một đợt thử nghiệm,
mỗi cái có 10000 hình ảnh. Các lô thử nghiệm chứa chính xác 1000 hình
ảnh được lựa chọn ngẫu nhiên từ mỗi lớp. Các đợt huấn luyện có chứa

9



các hình ảnh còn lại theo thứ tự ngẫu nhiên, nhưng một số đợt học có thể
chứa nhiều hình ảnh hơn từ một lớp khác. Giữa chúng, các đợt học chứa
chính xác 5000 hình ảnh từ mỗi lớp.
Dưới đây là các lớp trong tập dữ liệu, cũng như 10 hình ảnh ngẫu nhiên
từ mỗi lớp :
Airplane
Automobile
bird
cat
deer
dog
frog
horse
ship
truck
Các lớp không có sự trùng lặp, không chồng chéo nhau.
III.

Chức năng chính của hệ thống

Chức năng chính của hệ thống
Nhận diện hình ảnh thông qua CNNs
IV.

Thử nghiệm

- Công nghệ sử dụng: TensorFlow Framework, Keras (với Backend
TensorFlow)

- Tính toán trên CPU
- Loss Function: Dùng hàm Cross Entropy

10


- Tiến xử lý:
Quy chuẩn mỗi pixel về khoảng [0,1]
Mean Zero mỗi pixel để có trung bình mỗi pixel tại mỗi vị trí của bức
ảnh là 0, nó sẽ giúp quá trình tối ưu theo graident decent hoạt động tốt
hơn.
Thử nghiệm với mạng Neural Networks thông thường:
Tập train được chia ra thành 45000 ảnh cho training và 5000 ảnh cho
validate (500 ảnh lấy từ mỗi lớp).
Sử dụng mạng neural một tầng ẩn với số lượng node ở tầng ẩn là 2048,
sử dụng kỹ thuật MiniBatch Gradient decent với kích thước Batch là 128,
sau 20000 step kết quả chạy được như sau:

Nhận xét: Kết quả này còn khá hạn chế, do mạng neural thông thường
không thể tự học được các đặc trưng của ảnh.

11


- Với mạng 2 tầng ẩn với số lượng node tương ứng là 2048 và 1024 thì
kết quả cũng không được cải thiện thậm chí còn giảm không rõ lý do tại
sao.

Thử nghiệm với mạng CNN cỡ nhỏ
Tương tự, tập train được chia ra thành 45000 ảnh cho training và 5000

ảnh cho validate (500 ảnh lấy từ mỗi lớp)
Kiến trúc của mạng:

- Mạng gồm 2 lớp convolution với stride 1, receptive field size 3*3, số
lượng filter (depth) là 16, xen kẽ vào đó là 2 lớp avarage pooling, cuối
cùng là một lớp fully-connected với số lượng hidden node là 128 node.
Sử dụng bộ tối ưu là gradient decent với learning rate ban đầu là 0.03 và
sẽ giảm theo hàm mũ sau mỗi 1000 bước với hệ số giảm là 0.95.
Kết quả thu được như sau:

12


Nhận xét: Độ chính xác đã được tăng lên đáng kể, mặc dù thời gian
training không lâu hơn so với mạng neural network thông thường, tuy
nhiên vẫn còn khá thấp.

13


V. Vấn đề gặp phải và hướng mở rộng
Khó khăn gặp phải:
 Thời gian để training rất lâu
 Thiếu thiết bị tốt để chạy(GPU)
 Khó có thể validate được hết các tham số do số lượng các tham số là quá
lớn.
 Chưa đủ kỹ năng để cài đặt được những mạng phức tạp
Hướng mở rộng
 Training trong một số lượng epochs lớn hơn với learning thấp hơn
 Fake dữ liệu (data augmentation) với các kỹ thuật như lấy đối xứng

gương, tịnh tiến ảnh, xoay, làm mờ, làm nhòe,....
 Sử dụng những mạng sâu hơn, với nhiều tham số hơn ( Resnet, VGG,
Inception)

14


VI. Danh sách tài liệu tham khảo
- />- />- khóa học Deep learning của udacity
- />- />Tutorials/blob/master/cifar10.py
Hướng dẫn cài đặt
Cài đặt Python
Cài đặt TensorFlow dành cho CPU trên window tại địa chỉ
/>Cài đặt Keras bằng Pip với câu lệnh trên command prompt: pip install
keras
File cifar-10.py chứa các hàm để nhập dữ liệu cho từng kiểu mạng
File one_hidden_layer.py và two_hidden_layer.py tương ứng với mạng
nn thông thường
File convolution_nn mạng convolution mà nhóm em cài đặt, thời gian
training tùy thuộc vào từng tham số cấu hình trên mỗi file.

VII.

15


Kết luận
Trong một khoảng thời gian học tập dưới sự giảng dạy của thầy Thân
Quang Khoát, nhóm chúng em đã hoàn thiện bài toán phân loại ảnh với
mạng no-ron tích chập (Convolution Neural Networks), kết quả nhóm em

đạt được còn chưa tốt,do thiếu kiến thức và kinh nghiệm trong phân loại
ảnh nên còn nhiều thiếu sót mong nhận được sự góp ý từ thầy và các bạn!
Chúng em chân thành cảm ơn!

16



×