You are on page 1of 25

HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG

BÀI TẬP LỚN

KĨ THUẬT ĐỒ HỌA
(Nhóm 02)

Đề tài: Phân loại ảnh dùng mạng Neuron tích chập

Giảng viên: Trịnh Thị Vân Anh


Sinh viên thực hiện: Ngô Thị Giang
Mã Sinh viên: B17DCCN185
Lớp: D17CQCN05-B

1
MỤC LỤC

MỤC LỤC.......................................................................................................2
LỜI NÓI ĐẦU................................................................................................4
CHƯƠNG I: GIỚI THIỆU ĐỀ TÀI................................................................5
CHƯƠNG II: NỘI DUNG ĐỀ TÀI................................................................6
I.1 KHÁI QUÁT VỀ CNN.....................................................................6
I.1.1.Một số khái niệm:.......................................................................6
I.1.2. Các hướng tiếp cận phân vùng ảnh............................................6
I.1.3. Các công đoạn chính của phân vùng ảnh:..................................6
I.1.4 Một số phương pháp phân vùng ảnh...........................................7
I.2 CẤU TRÚC CỦA CNN....................................................................7
I.2.1 Trường tiếp nhận cục bộ............................................................7
I.2.2. Trọng số chia sẻ.........................................................................7
I.2.3. Lớp tổng hợp..............................................................................7
II.3 PHÂN VÙNG ẢNH DỰA TRÊN PHƯƠNG PHÁP PHÂN LỚP. .8
II.3.1. Khái quát về phương pháp phân lớp.........................................8
II.3.2. Phân lớp các điểm ảnh trong không gian thuộc tính một chiều8

CHƯƠNG III: ỨNG DỤNG CNN TRONG BÀI TOÁN PHÂN LOẠI ẢNH35
ĐÁNH GIÁ:..............................................................................................35
KẾT LUẬN:..............................................................................................35
TÀI LIỆU THAM KHẢO:............................................................................36

CHƯƠNG I. GIỚI THIỆU ĐỀ TÀI


2
“ Phân loại ảnh dùng mạng nơ ron tích chập”

Bài toán phân loại hình ảnh - image classification là một trong những bài toán
thuộc vào loại phổ biến nhất trong lĩnh vực Computer Vision-Thị giác máy tính .
Image Classification hay hiểu đơn giản là phân loại hình ảnh là một trong những
nhiệm vụ phổ biến trong Computer Vision. Mục tiêu chính của bài toán này đó
chính là phân loại một hình ảnh đầu vào (input) thành một nhãn (label) đầu ra
(output).

VD: Một ví dụ đơn giản chúng ta cần phân biệt bức ảnh đầu vào là con chó hay
con mèo.

Những năm gần đây, có nhiều thành tựu vượt bậc trong ngành Thị giác máy tính.
Các hệ thống xử lí ảnh hớn như Facebook, Google.. đã đư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 hiện xe
hơi tự lái hay giao hàng tự động…có sử dụng đến kĩ thuật phân loại ảnh.

Convolutional Neural Network(CNNs- Mạng nơ ron tích chập) là 1 trong những


mô hình Deep Learning tiên tiến giúp cho chúng ta xây dựng được những hệ thống
thông minh với độ chính xác cao như hiện nay.

Trong bài tập này, em xin được tóm tắt khái quát về CNNs cũng như ứng dụng của
nó trong bài toán phân loại ……….

3
CHƯƠNG II. MẠNG NEURAL TÍCH CHẬP

II.1 Mạng nơ-ron tích chập (Convolutional Neural Network)

Mạng nơ-ron tích chập (CNN hay ConvNet) là mạng nơ-ron phổ biến nhất được
dùng cho dữ liệu ảnh. Bên cạnh các lớp liên kết đầy đủ (FC layers), CNN còn đi
cùng với các lớp ẩn đặc biệc giúp phát hiện và trích xuất những đặc trưng - chi tiết
(patterns) xuất hiện trong ảnh gọi là Lớp Tích chập (Convolutional Layers). Chính
những lớp tích chập này làm CNN trở nên khác biệt so với mạng nơ-ron truyền
thống và hoạt động cực kỳ hiệu quả trong bài toán phân tích ảnh.

II.2 Lớp tích chập (Convolutional Layers)

* Lớp tích chập được dùng để phát hiện và trích xuất đặc trưng - chi
tiết của ảnh.
Giống như các lớp ẩn khác, lớp tích chập lấy dữ liệu đầu vào, thực hiện
các phép chuyển đổi để tạo ra dữ liệu đầu vào cho lớp kế tiếp (đầu ra của
lớp này là đầu vào của lớp sau). Phép biến đổi được sử dụng là phép tính
tích chập. Mỗi lớp tích chập chứa một hoặc nhiều bộ lọc - bộ phát hiện
đặc trưng (filter - feature detector) cho phép phát hiện và trích xuất
những đặc trưng khác nhau của ảnh.
Đặc trưng ảnh là những chi tiết xuất hiện trong ảnh, từ đơn giản như
cạnh, hình khối, chữ viết tới phức tạp như mắt, mặt, chó, mèo, bàn, ghế,
xe, đèn giao thông, v.v.. Bộ lọc phát hiện đặc trưng là bộ lọc giúp phát
hiện và trích xuất các đặc trừng của ảnh, có thể là bộ lọc góc, cạnh,
đường chéo, hình tròn, hình vuông, v.v.
*Bộ lọc ở lớp tích chập càng sâu thì phát hiện các đặc trừng càng
phức tạp.
Độ phức tạp của đặc trưng được phát hiện bởi bộ lọc tỉ lệ thuận với độ
sâu của lớp tích chập mà nó thuộc về. Trong mạng CNN, những lớp tích
chập đầu tiên sử dụng bộ lọc hình học (geometric filters) để phát hiện

4
những đặc trưng đơn giản như cạnh ngang, dọc, chéo của bức ảnh.
Những lớp tích chập sau đó được dùng để phát hiện đối tượng nhỏ, bán
hoàn chỉnh như mắt, mũi, tóc, v.v. Những lớp tích chập sâu nhất dùng để
phát hiện đối tượng hoàn hỉnh như: chó, mèo, chim, ô tô, đèn giao thông,
v.v.
*Để dễ hiểu hơn, lớp tích chập có thể coi như 1 cửa sổ trượt (Sliding
Windows) trên một ma trận như mô tả hình dưới:

II.3 Đặc điểm của CNNs:

*CNNs so sánh hình ảnh theo từng mảnh. Các mảnh mà nó tìm được gọi
là các feature. Bằng cách tìm ở mức thô các feature khớp nhau ở cùng vị
trí trong hai hình ảnh, CNNs nhìn ra sự tương đồng tốt hơn nhiều so với
việc khớp toàn bộ bức ảnh.
*Mỗi feature giống như một hình ảnh mini – một mảng hai chiều nhỏ.
Các feature khớp với các khía cạnh chung của các bức ảnh. Trong
5
trường hợp các hình ảnh X, các feature bao gồm các đường chéo và hình
chữ thập, sẽ nắm bắt tất cả những đặc điểm quan trọng của hầu hết các
hình ảnh X. Những feature này có lẽ sẽ khớp với phần cánh và phần
trung tâm của bất kỳ hình ảnh một X nào.
* CNNs chỉ đơn giản gồm một vài layer của convolution kết hợp với các
hàm kích hoạt phi tuyến (nonlinear activation function) như ReLU hay
tanh để tạo ra thông tin trừu tượng hơn (abstract/higher-level) cho các
layer tiếp theo.
Trong mô hình Feedforward Neural Network (mạng nơ-ron truyền
thẳng), các layer kết nối trực tiếp với nhau thông qua một trọng số w
(weighted vector). Các layer này còn được gọi là có kết nối đầy đủ (fully
connected layer) hay affine layer. Trong mô hình CNNs thì ngược lại.
Các layer liên kết đƣợc với nhau thông qua cơ chế convolution. Layer
tiếp theo là kết quả convolution từ layer trước đó.
Nhờ vậy mà được các kết nối cục bộ. Nghĩa là mỗi nơ-ron ở layer tiếp
theo sinh ra từ filter áp đặt lên một vùng ảnh cục bộ của nơ-ron layer
trước đó.
Trong suốt quá trình huấn luyện, CNNs sẽ tự động học được các thông
số cho các filter. Ví dụ trong tác vụ phân lớp ảnh, CNNs sẽ cố gắng tìm
ra thông số tối ưu cho các filter tương ứng theo thứ tự raw pixel > edges
> shapes > facial > high-level features. Layer cuối cùng được dùng để
phân lớp ảnh.
Hình 1.11. Mô hình mạng neural tích chập

6
*CNNs có tính bất biến và tính kết hợp cục bộ (Location Invariance and
Compositionality). Với cùng một đối tượng, nếu đối tượng này được
chiếu theo các gốc độ khác nhau (translation, rotation, scaling) thì độ
chính xác của thuật toán sẽ bị ảnh hưởng đáng kể. Pooling layer sẽ cho
bạn tính bất biến đối với phép dịch chuyển (translation), phép quay
(rotation) và phép co giãn (scaling).
II.4 XÂY DỰNG MẠNG NEURAL TÍCH CHẬP

Mạng tích chập sử dụng 3 ý tưởng cơ bản: các trƣờng tiếp nhận cục bộ (local
receptive field), trọng số chia sẻ (shared weights) và tổng hợp (pooling). Chúng ta
hãy xem xét lần lƣợt từng ý tưởng.

Trường tiếp nhận cục bộ (Local receptive fields): Trong các tầng kết nối đầy đủ
được chỉ ra trước đây, đầu vào đã được mô tả là một đường thẳng đứng chứa các
nơron. Trong mạng tích chập, ta sẽ thay thế các đầu vào là 28 × 28 nơron, giá trị
tương ứng với 28 x28 cường độ điểm ảnh mà chúng ta sử dụng:

7
Như thường lệ chúng ta sẽ kết nối các điểm ảnh đầu vào cho các nơron ở tầng ẩn.
Nhƣng chúng ta sẽ không kết nối mỗi điểm ảnh đầu vào cho mỗi neuron ẩn. Thay
vào đó, chúng ta chỉ kết nối trong phạm vi nhỏ, các vùng cục bộ của bức ảnh.

Để được chính xác hơn, mỗi nơron trong lớp ẩn đầu tiên sẽ đƣợc kết nối với một
vùng nhỏ của các nơron đầu vào, ví dụ, một vùng 5 × 5, tư ơng ứng với 25 điểm
ảnh đầu vào. Vì vậy, đối với một nơron ẩn cụ thể, chúng ta có thể có các kết nối
như sau:

8
Vùng đó trong bức ảnh đầu vào được gọi là vùng tiếp nhận cục bộ cho nơron ẩn.
Đó là một cửa sổ nhỏ trên các điểm ảnh đầu vào. Mỗi kết nối sẽ học một trọng số.
Và nơron ẩn cũng sẽ học một độ lệch (overall bias). Bạn có thể hiểu rằng nơron lớp
ẩn cụ thể là học để phân tích trường tiếp nhận cục bộ cụ thể của nó.

Sau đó chúng ta trượt trường tiếp nhận cục bộ trên toàn bộ bức ảnh. Đối với mỗi
trường tiếp nhận cục bộ, có một nơron ẩn khác trong tầng ẩn đầu tiên . Để minh
họa điều này một cách cụ thể, chúng ta hãy bắt đầu với một trƣờng tiếp nhận cục
bộ ở góc trên bên trái:

9
Sau đó, chúng ta trượt trường tiếp nhận cục bộ trên bởi một điểm ảnh bên phải (tức
là bằng một nơron), để kết nối với một nơron ẩn thứ hai:

Như vậy, việc xây dựng các lớp ẩn đầu tiên. Lưu ý rằng nếu chúng ta có một ảnh
đầu vào 28 × 28 và 5 × 5 trƣờng tiếp nhận cục bộ thì ta sẽ có 24 × 24 nơron trong
lớp ẩn. Có được điều này là do chúng ta chỉ có thể di chuyển các trường tiếp nhận
cục bộ ngang qua 23 nơron (hoặc xuống dưới 23 nơron), trước khi chạm với phía
bên phải (hoặc dưới) của ảnh đầu vào.

Trọng số và độ lệch (Shared weights and biases) : Mỗi một neuron ẩn có một độ
lệch (bias) và 5 × 5 trọng số liên kết với trường tiếp nhận cục bộ. Những gì chúng
10
ta vẫn chưa đề cập đến là chúng ta sẽ sử dụng các trọng số và độ lệch tương tự cho
mỗi nơron ẩn 24 × 24. Nói cách khác, đối với những neuron ẩn thứ j, k, đầu ra là:

Trong đó:

+ σ là hàm kích hoạt neuron - có lẽ là hàm sigmoid chúng ta sử dụng trong


các chƣơng trƣớc.

+ b là giá trị chung cho độ lệch

+ Mwl, m là một mảng 5 × 5 của trọng số chia sẻ

+ axy biểu thị giá trị kích hoạt đầu vào tại vị trí x, y.

Lớp chứa hay lớp tổng hợp (Pooling layer):

Ngoài các lớp tích chập vừa mô tả, mạng nơron tích chập cũng chứa các lớp
pooling. Lớp pooling thường được sử dụng ngay sau lớp tích chập. Những gì các
lớp pooling làm là đơn giản hóa các thông tin ở đầu ra từ các lớp tích chập.

Ví dụ, mỗi đơn vị trong lớp pooling có thể thu gọn một vùng 2 × 2 nơron trong lớp
trƣớc. Một thủ tục pooling phổ biến là max-pooling. Trong maxpooling, một đơn
vị pooling chỉ đơn giản là kết quả đầu ra kích hoạt giá trị lớn nhất trong vùng đầu
vào 2 × 2, như minh họa trong sơ đồ sau:

11
Bởi vì chúng ta có 24 × 24 nơron đầu ra từ các lớp tích chập, sau khi pooling
chúng ta có 12 × 12 nơron. Như đã đề cập ở trên, lớp tích chập thường có nhiều
hơn một bản đồ đặc trƣng. Chúng ta áp dụng max-pooling cho mỗi bản đồ đặc
trưng riêng biệt. Vì vậy, nếu có ba bản đồ đặc trƣng, các lớp tích chập và max-
pooling sẽ kết hợp như sau:

Chúng ta có thể hiểu max-pooling là một cách cho mạng để hỏi xem một đặc trưng
nhất được tìm thấy ở bất cứ đâu trong một khu vực của ảnh. Sau đó nó bỏ đi những
thông tin định vị chính xác. Trực giác là một khi một đặc trƣng đã được tìm thấy,
12
vị trí chính xác của nó là không quan trọng như vị trí thô của nó so với các đặc
trưng khác. Một lợi ích lớn là có rất nhiều tính năng gộp ít hơn (fewer pooled
features), và vì vậy điều này sẽ giúp giảm số lượng các tham số cần thiết trong các
lớp sau.

Max-pooling không phải là kỹ thuật duy nhất được sử dụng để pooling. Một
phương pháp phổ biến khác đƣợc gọi là L2 pooling. Ở đây, thay vì lấy giá trị kích
hoạt tối đa (maximum activation) của một vùng 2 × 2 nơron, chúng ta lấy căn bậc
hai của tổng các bình phƣơng của kích hoạt trong vùng 2 × 2. Trong khi các chi
tiết thì khác nhau, nhưng về trực giác thì tương tự như max-pooling: L2 pooling là
một cách để cô đọng thông tin từ các lớp tích chập. Trong thực tế, cả hai kỹ thuật
đã được sử dụng rộng rãi. Và đôi khi ngƣời ta sử dụng các loại pooling khác.

 Bây giờ chúng ta có thể đặt tất cả những ý tưởng lại với nhau để tạo thành một
mạng tích chập hoàn chỉnh.

13
III. DÙNG CNNs TRONG BÀI TOÁN NHẬN DẠNG ẢNH
Mạng neural tích chập là 1 phương thức rất hay được sử dụng để nhận dạng hình
ảnh, phân loại ảnh, nhận diện đối tượng, nhận diện khuôn mặt,.... CNN thực hiện
phân loại ảnh bằng các bước nhận ảnh đầu vào, xử lý và phân loại nó dưới dạng
các nhãn.

III.1 PHƯƠNG PHÁP

CNNs trong bài toán nhận dạng ảnh thực hiện một số bước như sau:

 Bóc tách các ảnh thành các mảng nhỏ, chồng chéo

 Truyền các ảnh nhỏ sau khi được tách vào một neural nhỏ

 Lưu trữ kết quả vào thành mảng

 Giảm mẫu, tìm các đặc trưng lớn nhất để giữ lại

 Đưa kết quả sau khi giảm mẫu vào một mạng neural khác và dự đoán

14
Hình minh họa

III.2 THUẬT TOÁN


* Máy tính nhìn nhận dữ liệu đầu vào như 1 mảng các pixel dựa trên độ phân giải
của ảnh. Dựa vào nó máy tính nhìn nhận ảnh dưới dạng h x w x d (h: height, w:
width, d: dimension).

VD. 1 ảnh 6x6x3 nghĩa là có 3 kênh màu (RGB) còn ảnh 4x4x1 là grayscale
image.

15
** Để CNN model thực hiện train và test, mỗi ảnh đầu vào sẽ thông qua 1 số lớp
tích chập với bộ lọc (kernel), Pooling, lớp kết nối đầy đủ (fully connected layers)
và thực hiện hàm softmax để phân loại 1 đối tượng. Ảnh bên dưới thể hiện đầy đủ
quá trình từ nhận dữ liệu cho đến phân loại đối tượng.

1. Lớp tích chập:

Tích chập là lớp đầu tiên để nhận dạng các đặc điểm nổi bật từ 1 bức ảnh đầu
vào. Tích chập nhận ra mối tương quan giữa các pixel ảnh bằng cách học các
đặc điểm của ảnh thông qua những ô nhỏ trong dữ liệu đầu vào. Quá trình này
khá đơn giản bằng cách thực hiện toán tích chập. Ta nhân từng ô nhỏ trong ảnh
với 1 bộ lọc.

VD: Ta xét 1 phần ảnh có kích cỡ 5x5 và 1 ma trận bộ lọc có kích cỡ 3x3

16
Ta thực hiện tích chập nhân ma trận 5x5 với ma trận bộ lọc 3x3 và ra được feature map

Thực hiện tích chập 1 ảnh với các bộ lọc khác nhau có thể tạo ra các kết quả khác nhau
như phát hiện các đường biên, làm mờ hay làm nét hơn các chi tiết của ảnh,...

17
2 .Stride
Stride hiểu đơn giản là số bước nhảy mỗi lần ta di chuyển để lấy 1 phần kích cỡ ảnh đầu
vào. Khi stride là 1 thì ta di chuyển bộ lọc đi 1px, stride là 2 thì bước nhảy là 2px. Ảnh
bên dưới mô tả quá trình thực hiện tích chập với bước nhảy bằng 2.

18
Padding
Ta nhận thấy nhược điểm của stride là không thể cover hết bức ảnh 1 cách toàn diện.
Những đặc điểm ngoài biên sẽ được quét ít hơn ở trung tâm. Điều này gây mất mát dữ
liệu khi các đặc điểm quan trọng của bức ảnh nằm hết ở ngoài biên. Tiếp theo là ảnh sẽ
càng ngày càng nhỏ tùy vào bước nhảy của chúng ta Cách giải quyết là thêm 1 hoặc
nhiều lớp biên ngoài cùng với giá trị mỗi pixel bằng 0 sau đó thực hiện tích chập như
bình thường.

Pooling Layer
Pooling layers sẽ giảm kích cỡ hình ảnh sau khi thực hiện tích chập giúp giữ lại các đặc
điểm nổi trội nhất của ảnh. Điều này cho phép giảm mức độ tính toán xuống dần khi ảnh
quá lớn đồng thời không làm mất đi các đặc điểm quan trọng của ảnh. Pooling có nhiều
kiểu

1. Max Pooling
2. Average Pooling
3. Sum Pooling
Max Pooling là kiểu thường được sử dụng nhất. Nó nhận giá trị lớn nhất trong 1 khoảng
nào đó được quy định

19
Thông thường max pooling có kích thước là 2. Nếu lấy giá trị quá lớn thay vì giảm tính
toán thì nó lại làm mất các thông tin quan trọng.

ReLU Layer
ReLu Layer sử dụng các hàm kích hoạt hay còn gọi là activation function ở đây là
max(0,x). Hàm này có tác dụng đưa các giá trị âm về 0. Mục đích của lớp này là đưa ảnh
về 1 ngưỡng để loại bỏ các giá trị âm không cần thiết có thể ảnh hưởng cho các bước tính
toán sau này.

Lớp kết nối đầy đủ


Đến bước này, ta đưa ma trận nhận được sau các bước tích chập, pooling, vào đưa nó vào
mạng kết nối đầy đủ như mạng nơ ron bình thường.

20
Tại lớp này, mỗi 1 nơ ron của layer này sẽ liên kết với các nơ ron của các lớp khác. Để
đưa ảnh từ các layer trước vào ta phải dàn phẳng bức ảnh ra thành 1 vector. Cuối cùng là
sử dụng hàm softmax để thực hiện phân loại đối tượng.

Tổng kết

Các bước để thực hiện nhận dạng đối tượng:

1. Đưa ảnh đầu vào vào trong lớp tích chập

2. Chọn các tham số, áp các bộ lọc với stride, padding nếu cần thiết. Thực hiện tích
chập trên ảnh và thực hiện hàm ReLU.

3. Thực hiện pooling để giảm kích cỡ ảnh

4. Thêm các lớp tích chập nữa cho đến khi đạt được kết quả phù hợp

5. Dàn phẳng kết quả và đưa vào lớp kết nối đầy đủ

6. Thực hiện các activation function và phân loại ảnh.

III.3 NHẬN DẠNG ĐỐI TƯỢNG DÙNG MẠNG NƠRON TÍCH


CHẬP

21
Nhận dạng đối tượng dùng mạng nơron tích chập (CNN Convolution neural network) đạt
được độ chính xác rất cao. Có thể nhận dạng nhiều đối tượng như xe hơi, người, chim,
ngựa….

Chương trình gồm 2 qui trình chính:

+Qui trình 1: Phát hiện đối tượng

+Qui trình 2:Nhận dạng đối tượng

DƯỚI ĐÂY LÀ CODE MINH HỌA, ĐƯỢC XÂY DỰNG BẰNG NGÔN NGỮ PYTHON:

Import các gói package cần thiết:

 numpy

 opencv-python

 Pillow

 sklearn

 tensorflow

 tensorflow-tensorboard

 tkintertable

 imutils

 scipy

#Xây dựng phân tích đối số và phân tích các đối số:

#Khởi tạo danh sách nhãn lớp SSD MobileNet đã được đào tạo để phát hiện, sau đó tạo
một viền màu hình vuông để giới hạn cho mỗi lớp

22
#Load serialized model từ ổ đĩa

#Tải hình ảnh đầu vào và xây dựng một blob đầu vào cho hình ảnh

bằng cách thay đổi kích thước thành 300x300 pixel cố định và sau đó chuẩn hóa nó:

+Đầu vào là 1 video có các đối tượng chuyển động:

#Vượt qua blob qua mạng và có được sự phát hiện và phỏng đoán:

Kết quả nhận dạng:

23
#

24
# hiển thị hình ảnh:

25

You might also like