You are on page 1of 61

BỘ GIÁO DỤC VÀ ĐÀO TẠO

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ TP. HCM

ĐỒ ÁN CHUYÊN NGÀNH

ỨNG DỤNG HỌC CHUYỂN ĐỔI CHO MẠNG ĐỐI


SINH

Ngành: CÔNG NGHỆ THÔNG TIN.


Chuyên ngành: CÔNG NGHỆ PHẦN MỀM.

Giảng viên hướng dẫn : ThS. Dương Thành Phết


Sinh viên thực hiện: MSSV: Lớp:
Đoàn Nguyễn Chí Thiện 1911061452 19DTHE4

TP. Hồ Chí Minh, 2022


PHIẾU PHÂN CÔNG NHIỆM VỤ

STT MSSV/ Họ Tên Nội dung công việc thực hiện Tự đánh giá tỉ
lệ và điểm số
1 1911061452 - Xây dựng mô hình 100%
Đoàn Nguyễn Chí Thiện - Huấn luyện mô hình (9đ)
- Đánh giá mô hình
- Tìm kiếm dữ liệu
- Lọc dữ liệu
- Tiền xử lý dữ liệu
- Hậu xử lý dữ liệu
- Xây dựng giao diện
- Viết báo cáo

2
LỜI CAM ĐOAN

Em xin cam đoan rằng đồ án cơ sở với đề tài “Ứng dụng học chuyển đổi cho
mạng đối nghịch tạo sinh” là nghiên cứu độc lập của nhóm. Đồng thời những số
liệu được cung cấp từ báo cáo đều là kết quả nghiên cứu hoàn toàn trung thực,
không sao chép từ bất kì một công trình nghiên cứu khác nào. Những tài liệu trích
dẫn đều đã được ghi rõ nguồn gốc.
Những phần có sử dụng tài liệu tham khảo có trong đồ án đã được liệt kê và
nêu rõ ra tại phần tài liệu tham khảo. Đồng thời những số liệu hay kết quả trình
bày trong đồ án đều mang tính chất trung thực, không sao chép, đạo nhái.
Em xin chịu hoàn toàn trách nhiệm trước giảng viên hướng dẫn đồ án chuyên
ngành ThS.Dương Thành Phết và khoa Công Nghệ Thông Tin trường Đại học
Công nghê Tp.HCM nếu trường hợp phát hiện ra bất cứ sai phạm hay vấn đề sao
chép nào trong đề tài này.

3
LỜI CẢM ƠN
Để có được những kiến thức và sự chỉnh chu trong một đồ án. Đòi hỏi ở chúng
em phải có nhiều kỹ năng, kiến thức vững vàng. Tuy nhiên để có những kỹ năng,
kiến thức đó thì chúng ta cần đến sự hỗ trợ của Thầy (Cô) trong khoa. Và những
Thầy (Cô) đã giảng dạy chúng em qua từng bộ môn để có thể hoàn thiện dần bản
thân mình.
Đối với đồ án này. Nhóm Em đã nhận được sự hỗ trợ tận tình từ Thầy Dương
Thành Phết, Thầy đã hỗ trợ và giảng dạy cho nhóm em rất nhiều trong đồ án này.
Cũng như là Thầy đã đưa ra những góp ý, nhận xét sâu sắc và hướng đến một đồ
án mang tính thực tế để nhóm em có thể sửa đổi và rút kinh nghiệm nhiều hơn.
Không chỉ vậy, Thầy còn chia sẻ cho nhóm em một số tài liệu tốt, cũng như
một số phần mềm mới để nhóm em có thể sử dụng. Và ứng dụng vào đồ án, có
thể làm cho đồ án trở nên đẹp hơn và tối ưu hơn.
Và cuối cùng nhóm em cảm ơn Thầy rất nhiều. Vì Thầy đã tận tình và nhiệt
huyết giảng dạy em trong suốt hai tháng vừa qua. Hai tháng hơn tuy ngắn ngủi
nhưng lại mang lại cho nhóm em nhiều điều bổ ích. Không chỉ vậy, với sự nhiệt
huyết của Thầy đã giúp em hiểu biết thêm được nhiều điều và tích lũy cho bản
thân nhóm em nhiều kiến thức bổ ích và kỹ năng cần có trong một bài đồ án.
Trong quá trình học tập và quá trình làm bài báo cáo do trình độ lý luận cũng
như kinh nghiệm thực tiễn của nhóm em còn nhiều hạn chế và thiếu sót. Nên bài
báo cáo không thể tránh khỏi những thiếu sót không mong muốn. Vì vậy, nhóm
em rất mong nhận được những ý kiến đóng góp của Thầy để có thể có nhiều kinh
nghiệm hơn và sẽ có thể làm cho nhóm em rất mong nhận được ý kiến đóng góp
của Thầy để nhóm em học thêm được nhiều kinh nghiệm. Để nhóm em có thể
hoàn thiện nhiều hơn và có nhiều kinh nghiệm hơn trong những báo cáo và những
đồ án tiếp theo.

4
Mục Lục

Chương 1 TỔNG QUAN ...................................................................................................... 7


1.1 Giới thiệu đề tài: .............................................................................................................. 7
1.1.1 Mô tả đề tài:.............................................................................................................. 7
1.1.2 Lý do chọn đề tài: ..................................................................................................... 7
1.2 Cấu trúc đồ án: ................................................................................................................. 7
Chương 2 CƠ SỞ LÝ THUYẾT – CÔNG NGHỆ SỬ DỤNG ............................................. 9
2.1 Cơ sở lý thuyết: ............................................................................................................ 9
2.1.1 Giới thiệu về deep learning: ................................................................................. 9
2.1.2 Mạng tích chập – Convolutional Neural Network: ............................................ 12
2.1.3 Cấu trúc mạng tích chập ..................................................................................... 25
2.1.4 Mạng Tích chập được huấn luyện sẵn ................................................................ 27
2.1.5 Mạng đối sinh – Aderversial Neural Network (GAN): ...................................... 31
2.1.6 Mô hình CycleGAN: .......................................................................................... 35
2.1.7 Học chuyển đổi ................................................................................................... 39
2.2 Công nghệ sử dụng: ....................................................................................................... 43
2.2.1 Ngôn ngữ Python: .................................................................................................. 43
2.2.2 Thư viện tensorflow: .............................................................................................. 43
2.2.3 Thư viện OpenCV: ................................................................................................. 46
2.2.4 Thư viện QT: .......................................................................................................... 47
2.2.5 Google Colab: ........................................................................................................ 48
Chương 3 : THỰC NGHIỆM VÀ KẾT QUẢ ..................................................................... 49
3.1 Thiết lập mô hình huấn luyện .................................................................................... 49
3.1.1 Generator ............................................................................................................ 49
3.1.2 Discriminator: ..................................................................................................... 51
3.1.3 Hàm mục tiêu ..................................................................................................... 51
3.2 bộ dữ liệu ................................................................................................................... 53
3.3 Tài nguyên huấn luyện mô hình ................................................................................ 54
3.4 kết quả huấn luyện ..................................................................................................... 54
3.5 Chức năng ứng dụng: ................................................................................................. 54
3.5.1 Màn hình chính: .................................................................................................. 55
3.5.2 Chức năng chọn ảnh từ thiết bị:.......................................................................... 55
3.5.3 Chức năng chuyển đổi ảnh: ................................................................................ 56
3.5.4 Chức năng xóa ảnh: ............................................................................................ 56
3.5.5 Chức năng xem chi tiết 1 ảnh bất kì: .................................................................. 57
3.5.6 Chức năng lưu ảnh sau khi chuyển về thiết bị: ................................................... 58
Chương 4 KẾT LUẬN VÀ KIẾN NGHỊ ............................................................................ 59
4.1 Kết luận ...................................................................................................................... 59
4.2 Kiến nghị.................................................................................................................... 59
TÀI LIỆU THAM KHẢO ........................................................................................................ 60

5
NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................

6
Chương 1 TỔNG QUAN
1.1 Giới thiệu đề tài:
1.1.1 Mô tả đề tài:
Cùng với sự phát triển của các công nghệ hiện đại với khả năng tính toán
khổng lồ, các mô hình deep learning cũng phát triển 1 cách thần tốc, đặc biệt là
mô hình sinh dữ liệu, một mô hình mà cần khả năng tính toán khổng lồ mới có
thể đảm đương được. Ngoài đầu tư tài nguyên cho việc thiết kế các mô hình
sinh dữ liệu mới, thì việc tận dụng lại các mô hình phổ biến đã được huấn luyện
sẵn và áp dụng nó đã tiết kiệm một lượng tài nguyên khổng lồ và cũng đang là
một hướng nguyên cứu được các nhà khoa học đặc biệt quan tâm.
Thế giới ngày càng phát triển nên nhu cầu con người về mặt nghệ thuât cũng
phát triển theo, hiện nay có rất nhiều phần mềm chỉnh sửa ảnh, người dùng có
thể tùy biến các thông số như độ sáng, đồ thị màu, độ tương phản, độ mờ đục,…
để cho ra các tấm ảnh đúng theo sở thích người dùng.
Kết hợp cả hai lý do trên nên chúng em quyết định thực hiện đề tài này.
1.1.2 Lý do chọn đề tài:
Nghiên cứu về những mô hình lớn và cách áp dụng chúng vào mạng đối nghịch
tạo sinh phục vụ cho các tác vụ chuyển đổi ảnh,….
1.2 Cấu trúc đồ án:
• Chương 1: Tổng quan
- Tên đề tài.
- Mô tả đề tài.
- Lý do chọn đề tài.
• Chương 2: Cơ sở lý thuyết và công nghệ sử dụng
- Các lý thuyết áp dụng.
- Các công nghệ sử dụng.
• Chương 3: Thực nghiệm
- Thiết kế mô hình.
- Tìm kiếm dữ liệu.
- Kết quả huấn luyện.
- Phần mềm demo.

7
• Chương 4: Kết luận
- Ưu điểm của mô hình
- Nhược điểm của mô hình.
- Hướng phát triển.
- Tài liệu tham khảo.

8
Chương 2 CƠ SỞ LÝ THUYẾT – CÔNG NGHỆ SỬ
DỤNG

2.1 Cơ sở lý thuyết:

2.1.1 Giới thiệu về deep learning:

2.1.1.1 Khái niệm:


Deep learning được bắt nguồn từ thuật toán Neural network vốn xuất phát chỉ
là một ngành nhỏ của Machine Learning. Deep Learning là một chi của ngành
máy học dựa trên một tập hợp các thuật toán để cố gắng mô hình dữ liệu trừu
tượng hóa ở mức cao bằng cách sử dụng nhiều lớp xử lý với cấu trúc phức tạp,
hoặc bằng cách khác bao gồm nhiều biến đổi phi tuyến. Tương tự như cách chúng
ta học hỏi từ kinh nghiệm thuật toán, deep learning sẽ thực hiện một nhiệm vụ
nhiều lần mỗi lần tinh chỉnh nhiệm vụ một chút để cải thiện kết quả. Deep
Learning chỉ đơn giản là kết nối dữ liệu giữa tất cả các tế bào thần kinh nhân tạo
và điều chỉnh chúng theo dữ liệu mẫu.
Tương tự như cách chúng ta học hỏi từ kinh nghiệm thuật toán, deep learning
sẽ thực hiện một nhiệm vụ nhiều lần mỗi lần tinh chỉnh nhiệm vụ một chút để cải
thiện kết quả. Deep Learning chỉ đơn giản là kết nối dữ liệu giữa tất cả các tế bào
thần kinh nhân tạo và điều chỉnh chúng theo dữ liệu mẫu.

Hình 2.1: Kiến trúc mạng deep learning


Càng có nhiều tế bào thần kinh được thêm vào thì kích thước của dữ liệu sẽ
càng lớn. Nó tự động có tính năng học tập ở nhiều cấp độ trừu tượng. Qua đó cho

9
phép một hệ thống học hàm ánh xạ phức tạp mà không phụ thuộc vào bất kỳ thuật
2 toán cụ thể nào. Không ai thực sự biết những gì xảy ra trong một mạng lưới
thần kinh nhân tạo. Vì vậy, hiện tại bạn có thể gọi Deep Learning là một cái hộp
đen.
Deep Learning đã giúp máy tính thực thi những việc tưởng chừng như không
thể vào 15 năm trước: phân loại cả ngàn vật thể khác nhau trong các bức ảnh, tự
tạo chú thích cho ảnh, bắt chước giọng nói và chữ viết của con người, giao tiếp
với con người, hay thậm chí cả sáng tác văn, phim, ảnh, âm nhạc.

2.1.1.2 Cách thức hoạt động:


Cách thức hoạt động của thuật toán Deep Learning diễn ra như sau: Các dòng
thông tin sẽ được trải qua nhiều lớp cho đến lớp sau cùng. Lấy quy trình học của
con người làm ví dụ cụ thể. Qua các lớp đầu tiên sẽ tập trung vào việc học các
khái niệm cụ thể hơn trong khi các lớp sâu hơn sẽ sử dụng thông tin đã học để
nghiên cứu và phân tích sâu hơn trong các khái niệm trừu tượng . Quy trình xây
dựng biểu diễn dữ liệu này được gọi là trích xuất tính năng.
• Ví dụ về việc nhận diện con vật:
Nhiệm vụ của máy tính lúc này là nhận biết hình ảnh đã cho là hình của con
mèo hay là của con chó nếu bạn dạy máy tính nhận diện hình ảnh một con mèo
thì chúng ta sẽ lập trình ra nhiều lớp trong mạng thần kinh nhân tạo mỗi lớp có
khả năng xác định một đặc điểm cụ thể của con mèo như râu, vuốt, chân sau đó,
cho máy tính xem hàng ngàn bức ảnh mèo khác nhau (và chỉ ra rằng “Đây là con
mèo”) cùng hàng ngàn bức ảnh không phải mèo (và chỉ ra rằng “đây không phải
mèo”).
Mạng thần kinh nhân tạo này xem hết các bức ảnh các lớp (còn gọi node) của
nó sẽ dần nhận ra râu, vuốt, chân…nó có thể biết lớp nào là quan trọng, lớp nào
không quan trọng. Nó cũng sẽ nhận ra rằng mèo luôn có chân nhưng những con
vật không phải mèo cũng có chân. Vì vậy, khi cần xác định mèo máy tính sẽ tìm
chân và đi kèm với những đặc điểm khác như móng vuốt hay râu…Deep
Learning sẽ tự động tìm ra đặc điểm nào quan trọng nhất để phân loại mục tiêu.
Trong khi đối với Machine Learning những đặc điểm này phải được đưa ra bởi
con người.

10
Hình 2.2: Ví dụ về nhận dạng con vật

2.1.1.3 Ứng dụng thực tế:

• Ứng dụng deep learning vào hệ thống gợi ý:


Các nền tảng lớn hiện nay như Facebook, Lazada, Tiki…đều có hệ thống gợi
ý rất mạnh giúp tăng đáng kể độ tương tác của người dùng chúng dựa trên các dữ
liệu của người dùng phát sinh ra khi sử dụng và tương tác trên các thiết bị có kết
nối internet để gợi ý thêm những sản phẩm họ sẽ thích. Ví dụ như trên các nền
tảng mua sắm, gợi ý các bài quảng cáo hoặc được tài trợ như trên Facebook hay
các khóa học mà người học quan tâm như trên các nền tảng học online.
• Ứng dụng deep learning vào ứng dụng nhận diện hình ảnh:
Mục tiêu của công nghệ nhận diện ảnh là nhận biết và xác định các đối tượng
trong ảnh cũng như hiểu được nội dung và ngữ cảnh trong đó. Ví dụ dịch vụ nhận
diện và xác định khuôn mặt của AlchemyVision có khả năng phân biệt hai khuôn
mặt tương tự nhau giữa nam diễn viên Will Ferrell và tay trống của Red Hot Chili
Peppers, Chad Smith. Công nghệ nhận diện hình ảnh cũng được đưa vào
Facebook để gợi ý người dùng tag mặt bạn bè hay ứng dụng vào khoa học tội
phạm và điều tra.
• Ứng dụng deep learning vào trong y khoa:
Chương trình phần mềm trí tuệ nhân tạo có tên là Watson của IBM đã phát
hiện ra một loại bệnh mà các bác sĩ đã không thể tìm ra ở một nữ bệnh nhân.

11
Bằng cách so sánh bộ gen của người phụ nữ này với hơn 20 triệu kết quả nghiên
cứu bệnh khác. Watson đã đưa ra kết quả là một chứng Leukemia cực kỳ hiếm
gặp chỉ trong 10 phút. Và vẫn còn rất nhiều ứng dụng hữu ích khác của deep
learning trong thực tế.

2.1.2 Mạng tích chập – Convolutional Neural Network:

2.1.2.1 Khái niệm:


Convolutional Neural Network (CNNs – Mạng nơ-ron tích chập) là một
trong những mô hình Deep Learning tiên tiến. 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. CNN được
sử dụng nhiều trong các bài toán nhận dạng các object trong ảnh.
CNN cũng có lịch sử khá lâu đời. Kiến trúc gốc của mô hình CNN được giới
thiệu bởi một nhà khoa học máy tính người Nhật vào năm 1980. Sau đó, năm
1998, Yan LeCun lần đầu huấn luyện mô hình CNN với thuật toán
backpropagation cho bài toán nhận dạng chữ viết tay. Tuy nhiên, mãi đến năm
2012, khi một nhà khoa học máy tính người Ukraine Alex Krizhevsky (đệ của
Geoffrey Hinton) xây dựng mô hình CNN (AlexNet) và sử dụng GPU để tăng
tốc quá trình huấn luyện deep nets để đạt được top 1 trong cuộc thi Computer
Vision thường niên ImageNet với độ lỗi phân lớp top 5 giảm hơn 10% so với
những mô hình truyền thống trước đó, đã tạo nên làn sóng mãnh mẽ sử dụng deep
CNN với sự hỗ trợ của GPU để giải quyết càng nhiều các vấn đề trong Computer
Vision.

2.1.2.2 Các thành phần trong mạng tích chập

2.1.2.2.1 Lớp tích chập(Convolution)


Convolution là một cửa sổ trượt (Sliding Windows) trên một ma trận.

12
Hình 2.3: Cách hoạt động của lớp tích chập
Các convolutional layer có các parameter(kernel) đã được học để tự điều chỉnh
lấy ra những thông tin chính xác nhất mà không cần chọn các feature.
Trong hình ảnh ví dụ trên, ma trận bên trái là một hình ảnh trắng đen được số
hóa. Ma trận có kích thước 5×5 và mỗi điểm ảnh có giá trị 1 hoặc 0 là giao điểm
của dòng và cột.
Convolution hay tích chập là nhân từng phần tử trong ma trận 3. Sliding
Window hay còn gọi là kernel, filter hoặc feature detect là một ma trận có kích
thước nhỏ như trong ví dụ trên là 3×3.
Convolution hay tích chập là nhân từng phần tử bên trong ma trận 3×3 với ma
trận bên trái. Kết quả được một ma trận gọi là Convoled feature được sinh ra từ
việc nhận ma trận Filter với ma trận ảnh 5×5 bên trái.

2.1.2.2.1.1 Đệm(padding)
một vấn đề rắc rối khi áp dụng các tầng tích chập là việc chúng ta có thể
mất một số điểm ảnh trên biên của ảnh. Vì chúng ta thường sử dụng các hạt nhân
nhỏ, với một phép tích chập ta có thể chỉ mất một ít điểm ảnh, tuy nhiên sự mất
mát này có thể tích lũy dần khi ta thực hiện qua nhiều tầng tích chập liên tiếp.
Một giải pháp đơn giản cho vấn đề này là chèn thêm các điểm ảnh xung quanh
đường biên trên bức ảnh đầu vào, nhờ đó làm tăng kích thước sử dụng của bức
ảnh. Thông thường, chúng ta thiết lập các giá trị của các điểm ảnh thêm vào là 0.

13
ta đệm một đầu vào 3x3, làm tăng kích thước lên thành 5×5. Đầu ra tương ứng
sẽ tăng lên thành một ma trận 4×4.

2.1.2.2.1.2 Bước trượt( Stride)


Trong tích chập, stride được hiểu là khoảng cách mỗi lần trược của cửa sổ
trượt, stride càng cao, khoảng cách mỗi lần trược càng lớn và bản đồ đặc trưng
đầu ra càng nhỏ, sử dụng stride sẽ giúp giảm thiểu thời gian tính toán, và tránh
được việc lặp các đặc trưng quá nhiều lần.

2.1.2.2.2 Hàm chuẩn hoá( normalization)


Hàm chuẩn hoá(normalization) là hàm dùng để biến đổi phân phối đầu
vào theo kì vọng bằng 0 và phương sai bằng . Normalization luôn là lĩnh vực
nghiên cứu tích cực trong Deep Learning. Các phương pháp Normalization có
thể giúp mô hình huấn luyện nhanh và kết quả tốt. một số lợi ích của hàm chuẩn
hoá có thể kể đến như:

14
- Chuẩn hóa dữ liệu mỗi feature sẽ giữ được sự đóng góp của mọi
feature trong quá trình huấn luyện trong trường hợp giá trị một số features cao
hơn nhiều so với các feature còn lại. Với cách làm này sẽ làm mô hình unbiased
(đối với các feature có giá trị cao)
- làm giảm Internal Covariate Shift. Việc mô hình càng sâu sẽ có
nhiều layer cùng với đó là có nhiều hàm kích hoạt, nó sẽ làm biến đổi đi phân
phối của dữ liệu. Do đó chúng ta cần chuẩn hóa lại nó để có được sự đồng bộ
phân phối của dữ liệu trong quá trình huấn luyện. Khái niệm về Internal Covariate
Shift mình lấy từ paper này, để hiểu rõ hơn các bạn đọc paper đấy nhá.
- Normallization có thể làm bề mặt hàm loss trở nên mịn màng hơn
(i.e. nó giới hạn độ lớn của gradients chặt chẽ hơn nhiều ). Đại khái là việc tối ưu
hàm mục tiêu sẽ trở nên dễ dàng và nhanh chóng hơn.
- Việc tối ưu sẽ trở nên nhanh hơn bởi vì normalization không cho
phép việc bùng nổ (explode) weights và nó giới hạn chúng trong một vùng nhất
định.
- Một lợi ích nữa nằm ngoài mục đích của normalization là nó giúp
mô hình Regularization(chỉ một ít, không đáng kể ).

2.1.2.2.2.1 batch normalization


Batch normalization là một trong các phương thức normalization được sử
dụng phổ biến trong mô hình deep learning. Nó cho phép đào tạo nhanh hơn và
ổn dịnh các mạng nơ-ron sâu bằng cách ổn định sự phân bố của các đầu vào các
layer trong quá trình huấn luyện. Cách tiếp cận này chủ yếu liên quan đến Internal
Covariate Shift (ICS). Để cải thiện việc huấn luyện mô hình, điều quan trọng là
phải giảm ICS bằng cách kiểm soát means và variances của dữ liệu đầu vào các

15
layer, nôm na là điều chỉnh phân phối của dữ liệu cho đồng bộ trên toàn mô hình.
Batch normalization là một phương thức chuẩn hóa các hàm kích hoạt trong mạng
qua một mini-batch theo kích thước được định nghĩa trước đó. Với mỗi feature,
batch normalization tính toán trung vị và phương sai của feature đó trong một
mini-batch. Sau đó, nó trừ đi giá trị trung bình và chia cho độ lệch chuẩn của
mini-batch đó. Công thức sẽ được biểu diễn như sau:

Các vấn đề của batch normalization


- Variable batch size: Nếu batch size là 1, thì phương sai sẽ bằng 0, lúc này
thì batch norm không hoạt động được. Hơn nữa, nếu ta cho mini-batch nhỏ thì
nó sẽ thành nhiễu và ảnh hưởng đến quá trình huấn luyện mô hình.Cũng có vấn
đề trong lúc huấn luyện. Như là, nếu bạn đang tính toán trên các máy khác nhau
thì bạn phải có batch size giống nhau vì tham số γ và β sẽ khác nhau đối với các
hệ thống khác nhau
- Recurrent Neural Network -> Trong RNN, các kích hoạt lặp lại của mỗi
bước thời gian sẽ có một câu chuyện khác nhau để kể (tức là số liệu thống kê).
Điều này có nghĩa là chúng ta phải phù hợp với các layer batch norm riêng biệt
cho mỗi time-step. Điều này làm cho mô hình phức tạp hơn và tốn không gian
hơn vì nó buộc chúng ta phải lưu trữ số liệu thống kê cho từng bước thời gian
trong quá trình đào tạo.
Các lợi ích của batch normalization
- Làm giảm internal covariate shift (ICS) và tăng tốc độ huấn luyện cho mô
hình deep learning.

16
- Cách tiếp cận này làm giảm sự phụ thuộc của gradients vào tỉ lệ của các
tham số hoặc giá trị ban đầu của chúng, dẫn đến learning rate cao hơn mà không
có nguy cơ phân kỳ.
- Batch normalization giúp bạn có thể sử dụng các chế độ phi tuyến bão hòa
bằng cách ngăn mạng khỏi bị kẹt trong các chế độ bão hòa.

2.1.2.2.2.2 Weight normalization


Weight normalization là một quá trình đánh giá lại các trọng số vector trong
một mạng neural sâu hoạt động bằng cách tách độ dài của các vectơ trọng lượng
đó khỏi hướng của chúng. Nói một cách dễ hiểu, chúng ta có thể định nghĩa chuẩn
hóa trọng số như một phương pháp để cải thiện tính tối ưu của các trọng số của
mô hình mạng nơ-ron. Weight normalization đánh giá lại các trọng số như sau:

Việc tách các vector trọng số ra khỏi hướng của nó, điều này tương tự như cách
hoạt động của batch normalization với phương sai. Điều khác biệt duy nhất ở đây
là biến thể thay vì hướng. Về giá trị trung bình, các tác giả của bài báo này đã
khéo léo kết hợp trung bình batch normalization và chuẩn hóa trọng lượng để có
được giá trị mong muốn ngay cả trong các lô nhỏ nhỏ. Có nghĩa là chúng trừ đi
giá trị trung bình của mini-batch nhưng không chia cho phương sai. Cuối cùng,
họ sử dụng chuẩn hóa trọng số thay vì chia cho phương sai. Lưu ý: Trung bình ít
nhiễu hơn so với phương sai (ở trên có nghĩa là một lựa chọn tốt so với phương
sai) do quy luật số lớn. Bài báo chỉ ra rằng weight normalization kết hợp với
batch normalization đạt được kết quả tốt nhất trên CIFAR-10.
Các lợi ích của weight normalization:
- Weight normalization cải thiện điều kiện của vấn đề tối ưu cũng như tăng
tốc độ hội tụ sự giảm dần của SGD.
- Nó có thể áp dụng tốt cho mô hình hồi quy như là LSTM cũng như là mô
hình reinforcemnet learning,...

2.1.2.2.2.3 Layer normalization

17
Layer normalization là một phương thức để cải tiển tốc đố huấn luyện với
các mô hình neural nerworks đa dạng. Không giống như batch normalization,
phương pháp này ước tính trực tiếp số liệu thống kê chuẩn hóa từ các đầu vào
tổng hợp đến các nơ-ron bên trong một lớp ẩn. Layer normalization về cơ bản
được thiết kế để khắc phục những hạn chế của batch normalization như phụ
thuộc vào các mini-batch, v.v. Layer normalization chuẩn hóa đầu vào trên các
layers thay vì chuẩn hóa các features đầu vào trên từng batch trong batch
normalization.

Một mini-batch bao gồm nhiều ví dụ với cùng một số tính năng. Mini-
batch là ma trận (hoặc tenxơ) trong đó một trục tương ứng với lô và trục kia (hoặc
các trục) tương ứng với các kích thước đặc trưng.

Trong các bài báo, các tác giả tuyên bố rằng layer normalization hoạt động tốt
hơn batch normalization trong các bài toán RNN,..

Các lợi ích của layer normalization:

- Layer normalization có thể dễ dàng áp dụng cho mô hình RNN bởi vì nó tính
toán thống kê chuẩn hóa riêng biệt trên từng time-step.
- Cách tiếp cận này có hiệu quả trong việc ổn định các trạng thái ẩn trong các mạng
hồi quy.

18
2.1.2.2.2.4 Instance normalization

Layer normalization và instance normalization rất tương tự nhau nhưng sự


khác biệt giữa chúng là instance normalization chuẩn hóa qua mỗi channel trong
mỗi ví dụ huấn luyện thay vì chuẩn hóa qua các features đầu vào trong một ví dụ
huấn luyện. Không giống như batch normalization,lớp instance normalization
được áp dụng trong quá trình thử nghiệm rất tốt ( do không phụ thuộc vào mini-
batch ), được áp dụng cho toàn bộ loạt ảnh thay vì một ảnh duy nhất

Trong đó, x∈ ℝ T ×C×W×H là đầu vào tensor chứa một batch của T ảnh.
Gọi xₜᵢⱼₖ biểu thị phần tử tijk-th của nó, trong đó k và j mở rộng kích thước không
gian (Chiều cao và Chiều rộng của hình ảnh), i là kênh đặc trưng (kênh màu nếu
đầu vào là hình ảnh RGB) và t là chỉ số của hình ảnh trong lô.

Các lợi ích của instance normalization:

- Việc chuẩn hóa này đơn giản hóa quá trình huấn luyện của mô hình.
- Instance normalization có thể áp dụng trong quá trình thử nghiệm mô hình.

2.1.2.2.2.5 Group normalization

Group normalization có thể nói là một giải pháp thay thế cho batch
normalization. Cách tiếp cận này hoạt động bằng cách chia các kênh (channels)
thành các nhóm và tính toán trong mỗi nhóm giá trị trung bình và phương sai để
chuẩn hóa tức là chuẩn hóa các tính năng trong mỗi nhóm. Không giống như batch

19
normalization, chuẩn hóa nhóm độc lập với kích thước batch size và độ chính xác
của nó cũng ổn định trong nhiều loại batch size.

Chúng ta có thể thấy Group normalization đứng ở giữa instance normalization và


layer normalization. Khi chúng ta cho tất cả các kênh (channels) vào 1 nhóm thì
group normalization trở thành layer normalization. Còn khi cho mỗi
keenh(channel) vào các nhóm khác nhau thì nó trở thành instance normalization

Các lợi ích của group normalization

- Nó có thể thay thể batch normalization trong một số bài toán về Deep Learning.

- Dễ dàng triển khai nó.

2.1.2.2.3 Hàm kích hoạt( activation function)

Hàm kích hoạt (activation function) mô phỏng tỷ lệ truyền xung qua axon
của một neuron thần kinh. Trong một mạng nơ-ron nhân tạo, hàm kích hoạt đóng
vai trò là thành phần phi tuyến tại output của các nơ-ron. nếu không có các hàm
kích hoạt phi tuyến, thì mạng nơ-ron của chúng ta dù có nhiều lớp vẫn sẽ có hiệu

20
quả như một lớp tuyến tính. Bởi vì phép tính tích chập có tính chất tuyến tính, nên
nếu chúng ta sử dụng nhiều lớp tích chập với nhau mà không có hàm kích hoạt
phi tuyến tính thì hiệu quả cũng chỉ như một lớp tích chập.

Các hàm kích hoạt thường được sử dụng:

• Sigmoid

Hàm Sigmoid nhận đầu vào là một số thực và chuyển thành một giá trị
trong khoảng (0;1) (xem đồ thị phía trên). Đầu vào là số thực âm rất nhỏ sẽ cho
đầu ra tiệm cận với 0, ngược lại, nếu đầu vào là một số thực dương lớn sẽ cho đầu
ra là một số tiệm cận với 1.

Công thức

đồ thị hàm sigmoid

• Tanh

Hàm nhận đầu vào là một số thực và chuyển thành một giá trị trong
khoảng (-1; 1). Cũng như Sigmoid, hàm Tanh bị bão hoà ở 2 đầu (gradient thay
đổi rất ít ở 2 đầu). Tuy nhiên hàm Tanh lại đối xứng qua 0 nên khắc phục được
một nhược điểm của Sigmoid.

21
Công thức

• ReLU

Hàm ReLU đang được sử dụng khá nhiều trong những năm gần đây khi
huấn luyện các mạng neuron. ReLU đơn giản lọc các giá trị < 0. Nhìn vào công
thức chúng ta dễ dàng hiểu được cách hoạt động của nó. Một số ưu điểm khá
vượt trội của nó so với Sigmoid và Tanh:

Tốc độ hội tụ nhanh hơn hẳn. ReLU có tốc độ hội tụ nhanh gấp 6 lần Tanh
(Krizhevsky et al.). Điều này có thể do ReLU không bị bão hoà ở 2 đầu như
Sigmoid và Tanh.

Tính toán nhanh hơn. Tanh và Sigmoid sử dụng hàm exp và công thức
phức tạp hơn ReLU rất nhiều do vậy sẽ tốn nhiều chi phí hơn để tính toán.

22
Tuy nhiên ReLU cũng có một nhược điểm: Với các node có giá trị nhỏ
hơn 0, qua ReLU activation sẽ thành 0, hiện tượng đấy gọi là “Dying ReLU“.
Nếu các node bị chuyển thành 0 thì sẽ không có ý nghĩa với bước linear activation
ở lớp tiếp theo và các hệ số tương ứng từ node đấy cũng không được cập nhật với
gradient descent. => Leaky ReLU ra đời.

Khi learning rate lớn, các trọng số (weights) có thể thay đổi theo cách làm
tất cả neuron dừng việc cập nhật.

Công thức

• Leaky ReLU

Leaky ReLU là một cố gắng trong việc loại bỏ "dying ReLU". Thay vì trả
về giá trị 0 với các đầu vào <0 thì Leaky ReLU tạo ra một đường xiên có độ dốc

23
nhỏ (xem đồ thị). Có nhiều báo cáo về việc hiệu Leaky ReLU có hiệu quả tốt hơn
ReLU, nhưng hiệu quả này vẫn chưa rõ ràng và nhất quán.

Công thức

với α là hằng số nhỏ.

2.1.2.2.4 UP SAMPLING
Lớp up sampling dung để phóng to ảnh, thường sử dụng kĩ thuật nearset
neighbor để điền vào vị trí còn trống khi phóng to ảnh
Kĩ thuật nearest neighbor là kĩ thuật chia ảnh phóng to thành số khu vực
tương ứng với số giá trị của ảnh trước khi phóng to, sau đó điền giá trị của những
vị trí thiếu giá trị bằng giá trị đại diện cho khu vực đó

24
2.1.3 Cấu trúc mạng tích chập
Mạng CNN là một tập hợp các lớp Convolution chồng lên nhau và sử dụng
các hàm nonlinear activation như ReLU và tanh để kích hoạt các trọng số trong
các node. Mỗi một lớp sau khi thông qua các hàm kích hoạt sẽ tạo ra các thông
tin trừu tượng hơn cho các lớp tiếp theo.
Mỗi một lớp sau khi thông qua các hàm kích hoạt sẽ tạo ra các thông tin trừu
tượng hơn cho các lớp tiếp theo. Trong mô hình mạng truyền tiến (feedforward
neural network) thì mỗi neural đầu vào (input node) cho mỗi neural đầu ra trong
các lớp tiếp theo.
Mô hình này gọi là mạng kết nối đầy đủ (fully connected layer) hay mạng toàn
vẹn (affine layer). Còn 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à ta có được
các kết nối cục bộ. Như vậy mỗi neuron ở lớp kế tiếp sinh ra từ kết quả của filter
áp đặt lên một vùng ảnh cục bộ của neuron trước đó.
Mỗi một lớp được sử dụng các filter khác nhau thông thường có hàng trăm
hàng nghìn filter như vậy và kết hợp kết quả của chúng lại. Ngoài ra có một số
layer khác như pooling/subsampling layer dùng để chắt lọc lại các thông tin hữu
ích hơn (loại bỏ các thông tin nhiễu).

25
Trong quá trình huấn luyện mạng (traning) CNN tự động học các giá trị qua
các lớp filter dựa vào cách thức mà bạn thực hiện. 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 2.4: Cấu trúc mạng tích chập


Trong mô hình CNN có 2 khía cạnh cần quan tâm là tính bất biến (Location
Invariance) và tính kết hợp (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). Tính kết hợp cục bộ cho ta các
cấp độ biểu diễn thông tin từ mức độ thấp đến mức độ cao và trừu tượng hơn
thông qua convolution từ các filter.
Đó là lý do tại sao CNNs cho ra mô hình với độ chính xác rất cao. Cũng giống
như cách con người nhận biết các vật thể trong tự nhiên.
Mạng CNN sử dụng 3 ý tưởng cơ bản:
• Các trường tiếp nhận cục bộ (local receptive field): Đầu vào của
mạng CNN là một ảnh. Ví dụ như ảnh có kích thước 28×28 thì
tương ứng đầu vào là một ma trận có 28×28 và giá trị mỗi điểm
ảnh là một ô trong ma trận. Trong mô hình mạng ANN truyền
thống thì chúng ta sẽ kết nối các neuron đầu vào vào tầng ảnh.Tuy
nhiên trong CNN chúng ta không làm như vậy mà chúng ta chỉ
kết nối trong một vùng nhỏ của các neuron đầu vào như một filter
có kích thước 5×5 tương ứng (28- 5 + 1) 24 điểm ảnh đầu vào.

26
Mỗi một kết nối sẽ học một trọng số và mỗi neuron ẩn sẽ học một
bias. Mỗi một vùng 5×5 đấy gọi là một trường tiếp nhận cục bộ.
• Trọng số chia sẻ (shared weights): một convolutional layer bao
gồm các feature map khác nhau. Mỗi một feature map giúp detect
một vài feature trong bức ảnh. Lợi ích lớn nhất của trọng số chia
sẻ là giảm tối đa số lượng tham số trong mạng CNN.
• Tổng hợp (pooling): Lớp pooling thường được sử dụng ngay sau
lớp convulational để đơn giản hóa thông tin đầu ra để giảm bớt số
lượng neuron.

2.1.4 Mạng Tích chập được huấn luyện sẵn

2.1.4.1 VGG19

VGG19 là mô hình học sâu nổi tiếng gồm 16 khối tích chập và 3 tầng kết
nối đầy đủ được huấn luyện trên bộ dữ liệu imagenet với hơn 14 triệu ảnh và
20000 loại hình ảnh khác nhau

2.1.4.2 ResNet-50

ResNet là kiến trúc được sử dụng phổ biến nhất ở thời điểm hiện tại.
ResNet cũng là kiến trúc sớm nhất áp dụng batch normalization. Mặc dù là một

27
mạng rất sâu khi có số lượng layer lên tới 152 nhưng nhờ áp dụng những kỹ thuật
đặc biệt mà ta sẽ tìm hiểu bên dưới nên kích thước của ResNet50 chỉ khoảng 26
triệu tham số. Kiến trúc với ít tham số nhưng hiệu quả của ResNet đã mang lại
chiến thắng trong cuộc thi ImageNet năm 2015.

Những kiến trúc trước đây thường cải tiến độ chính xác nhờ gia tăng chiều
sâu của mạng CNN. Nhưng thực nghiệm cho thấy đến một ngưỡng độ sâu nào
đó thì độ chính xác của mô hình sẽ bão hòa và thậm chí phản tác dụng và làm
cho mô hình kém chính xác hơn. Khi đi qua quá nhiều tầng độ sâu có thể làm
thông tin gốc bị mất đi thì các nhà nghiên cứu của Microsoft đã giải quyết vấn đề
này trên ResNet bằng cách sử dụng kết nối tắt.

Các kết nối tắt (skip connection) giúp giữ thông tin không bị mất bằng
cách kết nối từ layer sớm trước đó tới layer phía sau và bỏ qua một vài layers
trung gian. Trong các kiến trúc base network CNN của các mạng YOLOv2,
YOLOv3 và gần đây là YOLOv4 bạn sẽ thường xuyên thấy các kết nối tắt được
áp dụng.

ResNet có khối tích chập (Convolutional Bock, chính là Conv block trong
hình) sử dụng bộ lọc kích thước 3 x 3 giống với của InceptionNet. Khối tích chập

28
bao gồm 2 nhánh tích chập trong đó một nhánh áp dụng tích chập 1 x 1 trước khi
cộng trực tiếp vào nhánh còn lại.

Khối xác định (Identity block) thì không áp dụng tích chập 1 x 1 mà cộng
trực tiêp giá trị của nhánh đó vào nhánh còn lại.

Mô hình resnet50 gồm 50 khối tích chập được kết nối với nhau và sử dụng
phương pháp skip connected, được huấn luyện trên bộ data imageNet với hơn 14 triệu
ảnh và 20000 loại ảnh

29
2.1.4.3 Densenet121

DenseNet sẽ khác so với ResNet đó là chúng ta không cộng trực tiếp x vào
f(x) mà thay vào đó, các đầu ra của từng phép ánh xạ có cùng kích thước dài và
rộng sẽ được concatenate với nhau thành một khối theo chiều sâu. Sau đó để giảm
chiều dữ liệu chúng ta áp dụng tầng chuyển tiếp (translation layer). Tầng này là
kết hợp của một layer tích chập giúp giảm độ sâu và một max pooling giúp giảm
kích thước dài và rộng. Các bạn sẽ dễ dàng hình dung hơn qua hình vẽ bên dưới:

Kiến trúc của mô hình densenet121 gồm 121 khối tích chập được kết nối với
nhau, và có sử dụng kĩ thuật skip connected nối đầu vào và đầu ra với nhau

30
2.1.5 Mạng đối sinh – Aderversial Neural Network (GAN):

2.1.5.1 Khái niệm:


Mạng sáng tạo đối nghịch (Generative Adversarial Network) với tên ngắn phổ
biến GAN là một lớp các mô hình sinh mẫu sử dụng các kiến trúc học sâu(deep
learning).
Mô hình sinh là một bài toán trong học máy liên quan đến việc tự động phát
hiện và học các mẫu phổ biến trong dữ liệu để từ đó, mô hình có thể sáng tạo ra
các ví dụ mới phù hợp với dữ liệu gốc.
GAN là một cách tiếp cận thông minh để huấn luyện mô hình sinh bằng cách
nhìn nhận bài toán sinh như một bài toán học có giám sát với hai thành phần: mô
hình sinh được huấn luyện để sáng tạo ví dụ mới, và một mô hình đánh giá để
phân biệt các ví dụ là một thực thể thật hay một thực thể giả (được sáng tạo ra).
Hai mô hình được huấn luyện song song, đối nghịch, cho đến khi mô hình phân
biệt bị đánh lừa trên hơn 50% số mẫu, tức là mô hình sinh thành công trong việc
tạo ra dữ liêu giả chất lượng cao.
GAN đã làm thay đổi bức tranh công nghệ một cách nhanh chóng và đầy cảm
hứng. Nó cho phép các mô hình tạo ra các ví dụ thực tế trong nhiều vấn đề khác
nhau.

Hình 2.5: Biến bản vẽ thành ảnh màu

31
2.1.5.2 Thành phần:
Kiến trúc của GAN bao gồm hai thành phần nhỏ là một mô hình sinh để sinh
ra ví dụ mới và một mô hình phân biệt để xác định các thực thể là giả (được tạo
ra bởi mô hình sinh) hay là một thự thể thật.
• Generative network (mạng sinh): sinh ra data giả, và mục tiêu là
làm sao cho sinh ra được các data giống với thật nhất, làm
Discriminator không thể phân biệt nổi. Các sample được sinh dựa trên
các latent code (mã ngầm) z.
• Discriminative network (mạng phân biệt): có nhiệm vụ cố gắng
phân biệt giữa data thật và dữ liệu giả mạo.
Generator và Discriminator đều là mạng neural network và cùng “cạnh tranh”
nhau, Generator cố gắng tạo ra dữ liệu giống thật nhất có thể, còn Discriminator
cố gắng phân biệt dữ liệu mà Genarator đổ vào và chứng minh nó là đồ giả sau
đó thông báo lại cho Generator để nó cải thiện, cứ như thế quá trình này lặp đi
lặp lại để generator có thể tạo ra sample hoàn hảo nhất mà Discriminator không
thể phân biệt được.

Hình 2.6: Vai trò của 2 thành phần trong mạng GAN

2.1.5.3 Hàm mục tiêu:


Vì ta có 2 mạng Generator và Discriminator với mục tiêu khác nhau, nên cần
2 hàm mục tiêu cho mỗi mạng.

32
• Hàm mục tiêu của mạng Discriminator:
Discriminator có nhiệm vụ phân biệt đâu là ảnh thật và đâu là ảnh giả, vì thế
ta sử dụng hàm binary cross entropy để làm hàm mục tiêu. Mục tiêu của
Discriminator là tối đa hóa giá trị của hàm mục tiêu dưới đây:

➢ D: Mạng Discriminator
➢ 𝑃{𝑑𝑎𝑡𝑎} (𝑥): Phân phối xác xuất của dữ liệu thật
➢ P(z): Phân phối xác xuất của dữ liệu Generator sinh ra
➢ 𝑥: Mẫu thử được lấy ra ngẫu nhiên của 𝑃{𝑑𝑎𝑡𝑎} (𝑥)
➢ z: Mẫu thử được lấy ra ngẫu nhiên của 𝑃{𝑑𝑎𝑡𝑎} (𝑧)
➢ D(x): Phân phối xác xuất của mạng Discriminator khi đưa
vào dữ liệu thật
➢ D(G(z)): Phân phối xác xuất của mạng Discriminator khi
đưa vào dữ liệu của mạng Generator sinh ra
• Hàm mục tiêu của mạng Generator
Mạng Generator có nhiệm vụ sinh dữ liệu đầu ra sao cho mạng Discriminator
không phân biệt được dữ liệu đó là dữ liệu thật hay dữ liệu từ Generator sinh ra
nên sẽ cố gắng tối thiểu hóa giá trị của hàm mục tiêu dưới đây.

• G: Mạng Generator
• P(z): Phân phối xác xuất của dữ liệu generator sinh ra
• G(z): dữ liệu Generator sinh ra
• D(G(z)): Phân phối xác xuất của mạng Discriminator khi
đưa vào dữ liệu của mạng Generator sinh ra
• Hàm mục tiêu tổng quát

33
Từ hai hàm mục tiêu trên, ta có thể viết gộp chúng lại với nhau thành hàm mục
tiêu dưới đây.

Hàm mục tiêu này có tên gọi là hàm loss GAN, được dung phổ biến trong các
mô hình GAN phổ biến.
Từ hàm loss GAN có thể thấy là việc train Generator và Discriminator đối
nghịch nhau, trong khi Discriminator cố gắng tối đa giá trị hàm mục tiêu thì
Generator cố gắng tối thiểu hóa giá trị hàm mục tiêu. Quá trình huấn luyện mô
hình mạng đối sinh kết thúc khi mô hình đạt đến trạng thái cân bằng của 2
models, gọi là Nash equilibrium.

2.1.5.4 Ứng dụng thực tế:


Kể từ khi ra mắt, mạng đối sinh đã được ứng dụng rộng rãi khắp nơi, dươi đây
sẽ liệt kê ra một vài ứng dụng của mạng đối sinh.
• Tạo ra khuôn mặt người: GAN có khả năng tạo ra những khuôn
mặt nhân tạo mà rất khó phân biệt với người thật. Chất lượng của
những mô hình GAN áp dụng trên khuôn mặt ngày càng tốt hơn
qua từng năm.

Hình 2.7: Ứng dụng mạng GAN sinh mặt người


• Image to Image Translation: Cùng một bức ảnh chụp quang cảnh,
mạng GAN có thể tạo ra các bối cảnh khác nhau của nó như trời
tối/trời sáng, ban ngày/ban đêm, thay đổi theo các mùa,…. Trước
đây để thực hiện được điều này là một việc rất khó vì chúng ta

34
phải thực hiện color transfering bằng các thuật toán cổ điển trong
computer vision. Hạn chế của chúng đó là chỉ dựa trên các tinh
chỉnh về màu sắc mà không tận dụng được các đặc trưng khái quát
mà GAN học được từ dữ liệu lớn. Do đó ảnh sinh ra thường không
tự nhiên và phải customize lại rất nhiều.

Hình 2.8: Mạng GAN trong chuyển đổi ngày đêm


• Text to image: Chuyển từ đoạn văn bản sang hình ảnh, mạng
GAN có thể tạo ra các bức ảnh phù hợp với nội dung mà một câu
văn mô tả.

2.1.6 Mô hình CycleGAN:

2.1.6.1 Khái niệm về CycleGAN:


Image-to-image translation là một lớp bài toán computer vision mà mục tiêu
là học một ánh xạ giữa ảnh input và ảnh output. Bài toán này có thể áp dụng vào
một số lĩnh vực như style transfer, tô màu ảnh, làm nét ảnh, sinh dữ liệu cho
segmentation, face filter,...
Thông thường để huấn luyện một mô hình Image-to-image translation, ta sẽ
cần một lượng lớn các cặp ảnh input và label. Ví dụ như: ảnh màu và ảnh
grayscale tương ứng với nó, ảnh mờ và ảnh đã được làm nét, ....Tuy nhiên, việc
chuấn bị dataset theo kiểu này có thể khá tốn kém trong một số trường hợp như:
style transfer ảnh từ mùa hè sang mùa đông (kiếm được ảnh phong cảnh trong

35
các điều kiện khác nhau), biến ngựa thường thành ngựa vằn (khó mà kiếm được
ảnh của 1 con ngựa thường và ảnh của nó nhưng là ngựa vằn).

Hình 2.9: Chuyển đổi hè sang đông

Hình 2.10: Chuyển ảnh trắng đen sang ảnh màu


Do các bộ dataset theo cặp gần như là không tồn tại nên mới nảy sinh như cầu
phát triển một mô hình có khả năng học từ dữ liệu unpaired. Cụ thể hơn là có thể
sử dụng bất kỳ hai tập ảnh không liên quan và các đặc trưng chung được trích
xuất từ mỗi bộ sưu tập và sử dụng trong quá trình image translation. Đây được
gọi là bài toán unpaired image-to-image translation.
Một cách tiếp cận thành công cho unpaired image-to-image translation là mô
hình CycleGAN.

2.1.6.2 Kiến trúc CycleGAN:


CycleGAN là một mở rộng của kiến trúc GAN cổ điển bao gồm 2 Generator
và 2 Discriminator. Generator đầu tiên gọi là G, nhận đầu vào là ảnh từ domain
X (ngựa vằn) và convert nó sang domain Y (ngựa thường). Generator còn lại gọi

36
là Y, có nhiệm vụ convert ảnh từ domain Y sang X. Mỗi mạng Generator có 1
Discriminator tương ứng với nó.

• X: ảnh thuộc miền X, ví dụ : ảnh mùa hè


• Y: ảnh thuộc miền Y, ví dụ: ảnh mùa đông
• G: mạng Generator có nhiệm vụ chuyển ảnh thuộc miền X
sang ảnh thuộc miền Y
• F: mạng Generator có nhiệm vụ chuyển ảnh thuộc miền Y
sang ảnh thuộc miền X
• Dx: mạng Discriminator dùng để phân biệt ảnh ở miền X và
ảnh được F chuyển sang
• Dy: mạng Discriminator dùng để phân biệt ảnh ở miền Y và
ảnh được G chuyển sang

2.1.6.3 Kiến trúc mạng Generator:


Mạng Generator tận dụng kiến trúc của mạng Generator của mô hình pix2pix,
mô hình pix2pix là một kiến trúc mạng GAN được sử dụng phổ biến trong các
tác vụ chuyển đổi ảnh sang ảnh sử dụng kiến trúc mạng GAN.

Kiến trúc mạng Generator gồm 2 phần: contracting path và expansive path

37
• Contracting path bao gồm 5 khối convolution dùng để trích xuất
đặc trưng của bức ảnh.
• Expansive path gồm 5 khối deconvolution dùng để từ những đặc
trưng trích xuất được chuyển đổi và phóng to thành ảnh.
• Trong kiến trúc unet còn sử dụng them kĩ thuật skip connection,
sau khi các đặc trưng đi qua các khối deconvolution thì sẽ được
nối thêm các đặc trưng có kích thước tương ứng của phần decode
nhằm tránh mất mát thông tin khi chuyển đổi ảnh.

2.1.6.4 Kiến trúc mạng Discriminator:


Mạng discriminator cũng sử dụng kiến trúc mạng discriminator của mô hình
pix2pix.

Mạng Discriminator bao gồm 10 khối convolution dùng để dự đoán ảnh thật
hay là ảnh của Generator sinh ra. Discriminator sử dụng kiến trúc PatchGAN.
Thông thường trong bài toán classification, output của mạng sẽ là một giá trị
scalar - xác suất thuộc class nào đó. Trong mô hình CycleGAN, tác giả thiết kế
Discriminator sao cho output của nó là một feature map N×N×1. Có thể xem là
Discriminator sẽ chia ảnh đầu vào thành 1 lưới N×N và giá trị tại mỗi vùng trên
lưới sẽ là xác suất để vùng tương ứng trên ảnh là thật hay giả.

2.1.6.5 Hàm mục tiêu của mạng GAN:


Mạng CycleGAN được cấu tạo từ 2 mạng GAN đối lập nhau nên sẽ có 2 hàm
mục tiêu adversarial loss tương ứng với mỗi mạng GAN.
• Hàm adversarial loss dùng cho mạng G, và Dy:
Ladv(G,DY,X,Y)=n1[logDY(y)]+n1[log(1−DY(G(x))]
38
• Hàm adversarial loss dùng cho mạng F, Dx:
Ladv(F,DX,Y,X)=n1[logDX(x)]+n1[log(1−DX(F(y))]

Chỉ riêng adversarial loss là không đủ để mô hình cho ra kết quả tốt. Nó sẽ lai
generator theo hướng tạo ra được ảnh output bất kỳ trong domain mục tiêu chứ
không phải output mong muốn. Ví dụ với bài toán biến ngựa vằn thành ngựa
thường, generator có thể biến con ngựa vằn thành 1 con ngựa thường rất đẹp
nhưng lại không có đặc điểm nào liên quan tới con ngựa vằn ban đầu.
Để giải quyết vấn đề này, cycle consistency loss được giới thiệu. Trong paper,
tác giả cho rằng nếu ảnh x từ miền X được chuyển đổi sang miền Y và sau đó
chuyển đổi ngược lại về miền X lần lượt bằng 2 generator G, F thì ta sẽ được ảnh
x ban đầu: x→G(x)→F(G(x))≈x
Lcycle(G,F)=n1∑∣F(G(xi))−xi∣+∣G(F(yi))−yi∣
Toàn bộ hàm mục tiêu của mạng CycleGAN:
L=Ladv(G,DY,X,Y)+Ladv(F,DX,Y,X)+λLcycle(G,F)
trong đó λ là siêu tham số và được chọn là 10.

2.1.7 Học chuyển đổi

2.1.7.1 Các vấn đề khi huấn luyện mạng đối sinh


Huấn luyện mô hình đối sinh là một việc không hề đơn giản. huấn luyện
mô hình đối sinh cần rất nhiều thời gian vì có rất nhiều mô hình con trong đó.
Không giống như những mô hình tích chập khác hàm mất mát càng nhỏ thì mô
hình càng tốt, mô hình đối sinh chỉ tốt khi những mô hình thành phần đạt đến
điểm cân bằng, nếu như một mô hình thành phần trong mạng đối sinh hội tụ nhanh
hơn những mô hình khác, thường là mô hình phân loại, thì mạng đối sinh cũng sẽ
thất bại bởi vì những mô hình còn lại không theo kịp. Ngoài ra, có những trường
hợp mô hình sinh tìm ra được những kẻ hỡ của mô hình phân biệt, theo đó sẽ cho
ra những bức ảnh hoàn toàn giống nhau nhằm đánh lừa mạng phân biệt, làm cho
mạng phân biệt không thể phân biệt được thật giả, vấn đề đó được gọi là sự đổ
sập của mô hình( model collapsed).

39
2.1.7.2 học chuyển đổi là gì

Học chuyển đổi(Transfer learning) là việc ứng dụng kỹ năng/tri thức mình
học được từ vấn đề này (source domain – Ds), với ứng dụng này (source task –
Ts) sang vấn đề khác (target domain -Dt) với ứng dụng khác (target task – Tt) có
liên quan. Transfer learning nhằm cải thiện việc học hàm f(.) cho ứng dụng Tt trên
miền Dt”

Nói một cách đơn giản, Chúng ta sẽ áp dụng tri thức đã được học từ một
pre-trained model sang bài toán hiện tại với điều kiện 2 bài toán phải có liên quan
tới nhau. Tưởng tượng xem, thay vì chạy bộ từ đầu đến cuối đường, chúng ta bắt
grab đến đoạn mà grab không thể đi được thì chúng ta tự đi tiếp. Hãy hình dung
sẽ ra sao nếu đoạn đường grab đi được là gần hết quãng đường mà chúng ta cần
đi?

2.1.7.3 Các lợi ích của học chuyển đổi

- Thời gian: Việc sử dụng Pretrained Model bản thân nó không chỉ giúp giảm
thời gian vào việc tạo ra một model mới để thực hiện một target tasks mà dựa trên
một source tasks sẵn có, mà còn giảm thời gian train một model từ đầu vì Weights
của phần source tasks đã có sẵn.

- Cải thiện accuracy và tiết kiệm chi phí huấn luyện: Ví dụ trong bài toán
phân loại chó và mèo. Nếu huấn luyện từ đầu, bạn sẽ tốn nhiều epochs huấn luyện
hơn để đạt được độ chính xác cao. Tuy nhiên nếu bạn biết tận dụng lại các
pretrained-model thì sẽ cần ít epochs huấn luyện hơn để đạt được một độ chính
xác mong đợi. Thậm chí độ chính xác có thể lớn hơn so với khi không áp dụng
transfer learning.

- Hiệu quả với dữ liệu nhỏ: Trong trường hợp bộ dữ liệu có kích thước quá
nhỏ và khó có thể tìm kiếm và mở rộng thêm thì các mô hình được huấn luyện từ
chúng sẽ khó có thể dự báo tốt. Tận dụng lại tri thức từ các pretrained-model với
cùng tác vụ phân loại sẽ giúp các mô hình được huấn luyện dự báo tốt hơn với dữ

40
liệu mới vì mô hình được học trên cả 2 nguồn tri thức đó là dữ liệu huấn luyện và
dữ liệu mà nó đã được học trước đó.

2.1.7.4 Phương pháp học chuyển đổi – fine tuning

Để sử dụng pretrained model một cách hiệu quả, chúng ta cần phải có 2
điều sau:

Thêm các layer phù hợp với target tasks của chúng ta, loại bỏ các layer của
pretrained model mà chúng ta không dùng đến (việc này chắc các bạn cũng đã
biết rồi), những phải khiến cho model trở nên hiệu quả hơn, đây là một vấn đề khó
(rất rất khó) cần phải có những nghiên cứu chuyên sâu về từng layer và mục đích
của chúng.

Có chiến lược train thật tốt, điều này cũng không phải là dễ, vì nếu các bạn
train không tốt thì sẽ làm mất đi tính hiệu quả của pretrained model và do đó giảm
khả năng của model mà chúng ta đang train, thậm chí còn tệ hơn là train hết lại từ
đầu.

Do đó, fine-tuning ra đời để giúp cho các bạn có chiến lược train hiệu quả
trên transfered model của mình (điều đầu tiên theo như mình biết thì chưa tổng
quát hóa được để tạo ra một kỹ thuật).

Fine-tuning không phải chỉ giúp cho các bạn điều chỉnh weights của
transfered model cho phù hợp với target tasks. Nó không phải chỉ là tinh chỉnh
như dịch nghĩa của fine-tuning mà xa hơn đó, nó đưa ra cách tối ưu để train cả
phần pretrained model và phần mới trong transfered model nhằm đạt được
accuracy cao trên target tasks, khiến cho 2 phần fit với nhau hoàn chỉnh thành một
model mới.

Tóm lại, fine-tuning là việc train một transfered model nhằm mục đích tối
ưu hóa accuracy của model này trên target tasks. Dưới đây là các chiến lược
thường dùng:

41
Khi dataset cho target tasks lớn và tương tự với dataset cho source tasks:
đây là trường hợp lý tưởng, khi bạn có thể dùng weights của pretrained model để
khởi tạo cho phần pretrained, sau đó train cả transfered model hay chỉ với phần
được thêm vào, tùy bạn.

Khi dataset cho target tasks nhỏ và tương tự với dataset cho source tasks:
vì dataset là nhỏ, nếu train lại phần pretrained sẽ dẫn đến overfitting, do đó chúng
ta chỉ train những layer được thêm vào với weights khởi tạo cho pretrained như
trên.

Khi dataset cho target tasks lớn và khác biệt với dataset cho source tasks:
bởi vì dataset của chúng ta có sự khác biệt nên khi dùng weights từ pretrained
model sẽ làm giảm accuracy vì sự khác biệt trong tasks và dataset, nhưng cũng
chính vì dataset lớn nên việc train toàn bộ transfered model từ đầu là hiệu quả
nhất, giúp cho model thích nghi tốt hơn với dataset này.

Khi dataset cho target tasks nhỏ và khác biệt với dataset cho source tasks:
đây là trường hợp khó khăn nhất, điều mà bạn nên làm có thể là:

Can thiệp vào pretrained model, thay thế những pretrained layer xa input
để thích nghi với dataset mới (những high-level features sẽ thay đổi vào các low-
level features đã được lấy từ các layer trước đó) nhưng không được train các layer

42
gần input của pretrained vì dataset nhỏ sẽ không thể train được các layer này hiệu
quả và các layer này chỉ trích xuất các features tổng quát từ dataset, sẽ không ảnh
hưởng đến target task.

Tham khảo ý kiến chuyên gia hay tiền bối để biết thêm phương pháp.

2.2Công nghệ sử dụng:


2.2.1 Ngôn ngữ Python:

Python là một ngôn ngữ lập trình thông dịch (interpreted), hướng đối tượng
(object-oriented), và là một ngôn ngữ bậc cao (high-level) ngữ nghĩa động
(dynamic semantics). Python hỗ trợ các module và gói (packages), khuyến khích
chương trình module hóa và tái sử dụng mã. Trình thông dịch Python và thư viện
chuẩn mở rộng có sẵn dưới dạng mã nguồn hoặc dạng nhị phân miễn phí cho tất
cả các nền tảng chính và có thể được phân phối tự do.
2.2.2 Thư viện tensorflow:

2.2.2.1 Tổng quan:


TensorFlow chính là thư viện mã nguồn mở cho machine learning nổi tiếng
nhất thế giới, được phát triển bởi các nhà nghiên cứu từ Google. Việc hỗ trợ mạnh
mẽ các phép toán học để tính toán trong machine learning và deep learning đã

43
giúp việc tiếp cận các bài toán trở nên đơn giản, nhanh chóng và tiện lợi hơn
nhiều.
Các hàm được dựng sẵn trong thư viện cho từng bài toán cho phép TensorFlow
xây dựng được nhiều neural network. Nó còn cho phép bạn tính toán song song
trên nhiều máy tính khác nhau, thậm chí trên nhiều CPU, GPU trong cùng 1 máy
hay tạo ra các dataflow graph – đồ thị luồng dữ liệu để dựng nên các model. Nếu
bạn muốn chọn con đường sự nghiệp trong lĩnh vực A.I. này, nắm rõ những điều
cơ bản của TensorFlow thực sự rất quan trọng.
Được viết bằng C++ và thao tác interface bằng Python nên phần performance
của TensorFlow cực kỳ tốt. Đối tượng sử dụng nó cũng đa dạng không kém: từ
các nhà nghiên cứu, nhà khoa học dữ liệu và dĩ nhiên không thể thiếu các lập
trình viên.
2.2.2.2 Lịch sử ra đời:
Vài năm trước, khi phải xử lý lượng dữ liệu khổng lồ, deep learning bắt đầu
cho thấy hiệu năng vượt trội so với tất cả các thuật toán machine learning khác.
Google sớm nhận ra tiềm năng này và nghĩ rằng họ nên sử dụng deep neural
network để cải thiện các dịch vụ của mình, trong đó có:
- Gmail.
- Hình ảnh.
- Google search engine.
Thế là họ dựng 1 framework có tên là TensorFlow để các nhà nghiên cứu cũng
như lập trình viên có thể làm việc cùng nhau trên model A.I. 1 khi đã được phát
triển và scale hoàn chỉnh, rất nhiều người đã có thể sử dụng được nó.
Ra mắt lần đầu vào cuối năm 2015, phiên bản TensorFlow ổn định cuối cùng
cũng xuất hiện vào năm 2017. Là mã nguồn mở dưới sự cho phép của Apache
Open Source, giờ đây bạn có thể sử dụng, điều chỉnh và tái đóng góp phiên bản
được điều chỉnh đó, đổi lại không cần phải trả bất cứ đồng nào cho Google.
2.2.2.3 Kiến trúc:
Kiến trúc TensorFlow hoạt động được chia thành 3 phần:
- Tiền xử lý dữ liệu
- Dựng model
- Train và ước tính model
44
2.2.2.4 Cách hoạt động:
TensorFlow cho phép các lập trình viên tạo ra dataflow graph, cấu trúc mô tả
làm thế nào dữ liệu có thể di chuyển qua 1 biểu đồ, hay 1 sê-ri các node đang xử
lý. Mỗi node trong đồ thị đại diện 1 operation toán học, và mỗi kết nối hay edge
giữa các node là 1 mảng dữ liệu đa chiều, hay còn được gọi là ‘tensor’.
TensorFlow cung cấp tất cả những điều này cho lập trình viên theo phương
thức của ngôn ngữ Python. Vì Python khá dễ học và làm việc, ngoài ra còn cung
cấp nhiều cách tiện lợi để ta hiểu được làm thế nào các high-level abstractions có
thể kết hợp cùng nhau. Node và tensor trong TensorFlow là các đối tượng Python,
và các ứng dụng TensorFlow bản thân chúng cũng là các ứng dụng Python.
Các operation toán học thực sự thì không được thi hành bằng Python. Các thư
viện biến đổi có sẵn thông qua TensorFlow được viết bằng các binary C++ hiệu
suất cao. Python chỉ điều hướng lưu lượng giữa các phần và cung cấp các high-
level abstraction lập trình để nối chúng lại với nhau.
2.2.2.5 Lợi ích:
Lợi ích dễ thấy nhưng quan trọng nhất mà TensorFlow cung cấp cho việc lập
trình machine learning chính là abstraction. Thay vì phải đối phó với những tình
huống rườm rà từ việc thực hiện triển khai các thuật toán, hay tìm ra cách hợp lý
để chuyển output của 1 chức năng sang input của 1 chức năng khác, giờ đây bạn
có thể tập trung vào phần logic tổng thể của 1 ứng dụng hơn. TensorFlow sẽ chăm
sóc phần còn lại thay cho bạn.
Ngoài ra TensorFlow còn ung cấp các tiện ích bổ sung cho các lập trình viên
cần debug cũng như giúp bạn tự suy xét các ứng dụng TensorFlow. Chế độ eager
execution cho phép bạn đánh giá và sửa đổi từng operation của biểu đồ 1 cách
riêng biệt và minh bạch, thay vì phải dựng toàn bộ biểu đồ dưới dạng 1 đối tượng
độc lập vốn khá mơ hồ hay phải đánh giá chung tổng thể. Cuối cùng, 1 tính năng
khá độc đáo của TensorFlow là TensorBoard. TensorBoard cho phép bạn quan
sát 1 cách trực quan những gì TensorFlow đang làm.
TensorFlow còn có nhiều cải tiến từ sự hậu thuẫn từ các ekíp thương mại hạng
A tại Google. Google không những tiếp lửa cho tiến độ nhanh chóng cho sự phát
triển đằng sau dự án, mà còn tạo ra nhiều phục vụ độc đáo xung quanh
TensorFlow để nó dễ dàng deploy và sử dụng: như silicon TPU mình đã nói ở
45
trên để tăng tốc hiệu suất đám mây Google, 1 online hub cho việc chia sẻ các
model được tạo với framework, sự hiện diện của in-browser và gần gũi với
mobile của framework, và nhiều hơn thế nữa…
2.2.2.6 Thành phần:
Tensor: Tên của TensorFlow được đưa ra trực tiếp là nhờ vào framework cốt
lõi của nó: Tensor. Trong TensorFlow, tất cả các tính toán đều liên quan tới các
tensor. 1 tensor là 1 vector hay ma trận của n-chiều không gian đại diện cho tất
cả loại dữ liệu. Tất cả giá trị trong 1 tensor chứa đựng loại dữ liệu giống hệt nhau
với 1 shape đã biết (hoặc đã biết 1 phần). Shape của dữ liệu chính là chiều của
ma trận hay mảng. 1 tensor có thể được bắt nguồn từ dữ liệu input hay kết quả
của 1 tính toán. Trong TensorFlow, tất cả các hoạt động được tiến hành bên trong
1 graph – biểu đồ. Biểu đồ là 1 tập hợp tính toán được diễn ra liên tiếp. Mỗi
operation được gọi là 1 op node (operation node) và được kết nối với nhau.
Biểu đồ phát thảo các op và kết nối giữa các node. Tuy nhiên, nó không hiển
thị các giá trị. Phần edge của các node chính là tensor, 1 cách để nhập operation
với dữ liệu.
Garph: TensorFlow sử dụng framework dạng biểu đồ. Biểu đồ tập hợp và mô
tả tất cả các chuỗi tính toán được thực hiện trong quá trình training. Biểu đồ cũng
mang rất nhiều lợi thế.
Nó được làm ra để chạy trên nhiều CPU hay GPU, ngay cả các hệ điều hành
trên thiết bị điện thoại.
Tính di động của biểu đồ cho phép bảo toàn các tính toán để bạn sử dụng ngay
hay sau đó. Biểu đồ có thể được lưu lại để thực thi trong tương lai.
Tất cả tính toán trong biểu đồ được thực hiện bằng cách kết nối các tensor lại
với nhau. 1 tensor có 1 node và 1edge. Node mang operation toán học và sản
xuất các output ở đầu cuối. Các edge giải thích mối quan hệ input/output giữa
các node.
2.2.3 Thư viện OpenCV:

46
OpenCV (được viết tắt từ Open Computer Vision) là một bộ công cụ phần
mềm để xử lý hình ảnh, video, phân tích và học máy theo thời gian thực. Bộ công
cụ này có hơn 2500 thuật toán được sử dụng cổ điển và hiện đại được tối ưu hóa
cho thị giác máy tính và học máy.
OpenCV hỗ trợ nhiều ngôn ngữ lập trình như C, C++, Java, Python,…tối ưu
hóa thiết kế đa nền tảng và có khả năng hoạt động trên nhiều phần cứng khác
nhau. Được thiết kế để tận dụng tất cả các khả năng có có sẵn trong phần cứng,
OpenCV giúp đảm bảo mang lại hiệu suất tốt nhất cho các ứng dụng máy tính sử
dụng bộ công cụ này.
2.2.4 Thư viện QT:
Qt là một Application framework đa nền tảng viết trên ngôn ngữ C++ , được
dùng để phát triển các ứng dụng trên desktop, hệ thống nhúng và mobile. Hỗ trợ
cho các platform bao gồm : Linux, OS X, Windows, VxWorks, QNX, Android,
iOS, BlackBerry, Sailfish OS và một số platform khác. PyQt là Python interface
của Qt, kết hợp của ngôn ngữ lập trình Python và thư viện Qt, là một thư viện
bao gồm các thành phần giao diện điều khiển (widgets , graphical control
elements).
PyQt API bao gồm các module bao gồm số lượng lớn với
các classes và functions hỗ trợ cho việc thiết kế ra các giao diện giao tiếp với
người dùng của các phần mềm chức năng. Hỗ trợ với Python 2.x và 3.x.

47
2.2.5 Google Colab:

Colaboratory hay còn gọi là Google Colab, là một sản phẩm từ Google
Research, nó cho phép chạy các dòng code python thông qua trình duyệt, đặc biệt
phù hợp với Data analysis, machine learning và giáo dục. Colab không cần yêu
cầu cài đặt hay cấu hình máy tính, mọi thứ có thể chạy thông qua trình duyệt, bạn
có thể sử dụng tài nguyên máy tính từ CPU tốc độ cao và cả GPUs và cả TPUs
đều được cung cấp cho bạn.
Colab cung cấp nhiều loại GPU, thường là Nvidia K80s, T4s, P4s and P100s,
tuy nhiên người dùng không thể chọn loại GPU trong Colab, GPU trong Colab
thay đổi theo thời gian. Vì là dịch vụ miễn phí, nên Colab sẽ có những thứ tự ưu
tiên trong việc sử dụng tài nguyên hệ thống, cũng như giới hạn thời gian sử dụng,
thời gian sử dụng tối đa lên tới 12 giờ.

48
Chương 3 : THỰC NGHIỆM VÀ KẾT QUẢ

3.1 Thiết lập mô hình huấn luyện


3.1.1 Generator

Mô hình được em thiết kế theo kiến trúc unet. Kiến trúc unet gồm 2
phần: contracting path và expanding path.
Contracting path:
Contracting path được sử dụng để trích xuất đặc trưng của mô hình, phần
contracting path ban đầu gồm 10 khối convolution đầu vào là 1 ảnh màu
256x256x3 sau đó đi qua các khối tích chập co dần kích thước ảnh để trích
xuất đặc trưng, những lớp covolution đầu thì trích ra những đường thẳng
đường chéo, ngang dọc, càng đi sâu, các đặc trưng càng trừu tượng và càng
thể hiện tính chất riêng của ảnh, còn được gọi ma trận đặc trưng cấp cao.
Trong phần contracting path, với đầu vào là 1 ảnh 256x256x3 em sẽ sử
dụng các mô hình đã được huấn luyện sẵn, bao gồm mô hình đồ án cơ sở,
VGG19, Resnet50, Densenet121.
Đối với mô hình của đồ án cơ sở, kiến trúc của mô hình này cũng là mô
hình U-net nên em tiến hành loại bỏ phần expansive path của mô hình, giữ lại
phần contracting path và biến đổi contracting path thành 1 mô hình có 5 đầu ra
gồm 128x128, 64x64, 32x32, 16x16, 8x8 tương ứng với từng đầu vào lần lượt
của expansive path.

49
Với mô hình VGG19, một mô hình được huấn luyện tốt trên bộ dữ liệu
imageNet, đầu tiên em sẽ loại bỏ phần fully connected, thay đầu vào là ảnh màu
RGB có kích thước 256x256x3 thì đầu ra sẽ cho ra ảnh 8x8x512, sau đó biến
đổi mô hình VGG19 thành 1 mô hình có 5 đầu ra với các kích thước là
128x128x64, 64x64x128, 32x32x256, 16x16x512, 8x8x512. Và cuói cùng là sẽ
đóng băng các khối convolution từ khối 1 đến khối 10 không cập nhật trọng số
trong lúc huấn luyện để không thay đổi trọng số của các lớp này khi huấn luyện.
Với mô hình Resnet50, em cũng làm tương tự như mô hình VGG19, loại bỏ
phần fully connected, biến đổi mô hình thành 1 đầu vào là ảnh màu RGB có
kích thước 256x256x3 và 5 đầu ra có kích thước128x128x64, 64x64x128,
32x32x256, 16x16x512, 8x8x512. Sau đó đóng băng các khối layered từ khối
convolution 38 đến khối 50.
Với mô hình Densenet 121, em cũng làm tương tự như hai mô hình trên, và
đóng băng từ khối convolution70 đến khối convolution 121.
Expansive path:
Với 5 đầu vào là 8x8, 16x16, 32x32, 64x64, 128x128. Đầu tiên em sẽ
nối đầu vào 8x8 với 2 khối deconvolution dùng để biến đổi đặc trưng của
ảnh và phóng to ảnh lên 2 lần, tiếp theo sẽ nối đầu ra với đầu vào 16x16 rồi
cho đi qua 2 khối deconvolution để biến đổi đặc trưng và phóng to ảnh
lên 2 lần, lặp lại cho đến khi đi ảnh lên kích thước 256x256, lúc này cho ảnh
đi qua 1 khối deconvolution với 3 lớp filter để cho đầu ra là ảnh 256x256x3.

50
Khối deconvolution bao gồm 4 thành phần:
• 1 lớp up sample

• 1 lớp convolution(3x3,padding= same, stride=1)

• 1 hàm instance normalization

• 1 hàm ReLU

3.1.2 Discriminator:

Mạng discriminator gồm 6 khối convolution nhận đầu vào là 1 ảnh


256x256x3 đầu ra là 1 feature map 16x16 để xem xét từng phần trong ảnh đầu
vào là thật hay là giả
Khối convolution của mạng discriminator gồm 3 thành phần:
• 1 lớp convolution(3x3, padding = same, stride = 1 hoặc 2)

• 1 hàm instance Normalitzation

• 1 hàm LeakyReLU

3.1.3 Hàm mục tiêu

- Discriminator:

51
b: nhãn mục tiêu của ảnh thật
a: nhãn mục tiêu của ảnh giả
D(x): nhãn dự đoán của mô hình khi đưa ảnh thật
D(G(z)): nhãn mô hình dự đoán khi đưa ảnh giả
- Generator
Mô hình Generator có độ phức tạp hơn hơn mô hình discriminator nhiều
bởi vì không những phải sinh ra ảnh giống như ảnh mùa đông mà còn sinh ra
ảnh có nét giống như ảnh đầu vào vì thế hàm mục tiêu cho mô hình generator vì
thế cũng nhiều hơn
- hàm mục tiêu của mạng sinh dữ liệu(loss square GAN)

1 2
ℒ 𝐺𝐴𝑁 (𝐺, 𝐷, 𝑥) = 𝐸𝑥~𝑝𝑑𝑎𝑡𝑎 ((𝐷(𝐺 (𝑥)) − 𝑐) )
2

• D(G(x): là nhãn mà mạng discriminator dự đoán ảnh của mạng generator sinh
ra

• C: là nhãn mục tiêu mà hàm generator muốn hàm discriminator dự đoán đúng
- hàm mục tiêu dung để đồng nhất 2 mạng generator lại với nhau(Cycle-
consistancy loss)

𝓛𝒄𝒚𝒄 (𝑮, 𝑭, 𝑫𝑿 , 𝑿, 𝜸) = 𝑬𝒙~𝒑𝒅𝒂𝒕𝒂(𝒙) [𝜸||(𝒇𝑫𝑿 (𝑭(𝑮(𝒙))) − 𝒇𝑫𝑿 (𝒙)||𝟏 +

(𝟏 − 𝜸)||𝑭(𝑮(𝒙)) − 𝒙||𝟏 ]

• F(G(x)):ảnh x được chuyển vòng tròn từ mạng G rồi qua mạng F


• 𝒇𝑫𝑿 (𝒙):là nhãn dự đoán của mạng Dx khi đoán ảnh thật x

• 𝒇𝑫𝑿 (𝑭(𝑮(𝒙))): nhãn dự đoán của mạng Dx khi dự đoán ảnh được chuyển vòng

tròn
• 𝜸: trọng số giữa phép tính thường là 0.5

- hàm mục tiêu tránh cho việc mạng generator chuyển đổi quá mức(Identity
loss)
ℒ 𝑖𝑑𝑒𝑛𝑡𝑖𝑡𝑦 (𝐺, 𝐹 ) = 𝐸𝑦~𝑃𝑑𝑎𝑡𝑎 (𝑦) [ ‖𝐺 (𝑦) − 𝑦||1] + 𝐸𝑥~𝑃𝑑𝑎𝑡𝑎(𝑥) [ ‖𝐹 (𝑥) − 𝑥||1]
• 𝐺 (𝑦): ảnh sinh ra khi mạng G chuyển đổi ảnh của chính miền mục tiêu

52
• 𝐹 (𝑥): ảnh x khi mạng F chuyển đổi ảnh của ảnh của chính miền mục tiêu

- hàm tổng của mạng generator:


ℒ = ℒ 𝐺𝐴𝑁 (𝐺, 𝐷, 𝑥) + ℒሚ (𝐺, 𝐹, 𝐷𝑋 , 𝑋, 𝛾 ) + ℒ 𝑖𝑑𝑒𝑛𝑡𝑖𝑡𝑦 (𝐺, 𝐹 )

3.2bộ dữ liệu

Bộ dữ liệu bao gồm 2000 ảnh mùa hè, 2000 ảnh mùa đông của nhà cửa,
thành phố, góc đường cho tập huấn luyện và 200 ảnh mùa hè nhà cửa, thành
phố cho tập kiểm thử. Tất cả đều được em thu thập qua các trang web như
flickr, stock, google,….

53
3.3Tài nguyên huấn luyện mô hình

Mô hình được huấn luyện trên google colab, được trang bị GPU tesla T4
và 12GB ram, GPU tesla T4 được trang bị 16GB VRam sử dụng kiến trúc
turing phục vụ tối đa cho việc tính toán các mô hình deep learning.
3.4kết quả huấn luyện

Thời gian: thời gian huấn luyện rơi vào khoảng 1 đến 2 tuần cho mỗi mô
hình pretrain khác nhau. So với việc huấn luyện một mô hình được tạo mới
trong vòng 2-3 tuần là ngắn hơn rất nhiều.
Hình ảnh của các mô hình cho ra :

3.5Chức năng ứng dụng:

• Chọn ảnh đầu vào từ thiết bị (có thể chọn nhiều ảnh hoặc chọn cả
thư mục).

• Chuyển tất cả ảnh vừa chọn sang phong cảnh mùa đông.

• Xóa các ảnh không mong muốn.

54
• Double click vào bất kì tấm nào để xem chi tiết trước và sau khi
chuyển đổi.

• Lưu tất cả ảnh đã chuyển về thiết bị.

3.5.1 Màn hình chính:

Hình 3.1: Màn hình chính ứng dụng.

3.5.2 Chức năng chọn ảnh từ thiết bị:


Người dùng có 2 lựa chọn:
• Chọn 1 hoặc nhiều ảnh tùy ý.

• Chọn cả thư mục chứa ảnh.

55
3.5.3 Chức năng chuyển đổi ảnh:
Người dùng click nút “Chuyển” để chương trình thực hiện quá trình chuyển đổi
ảnh. Càng nhiều ảnh quá trình chuyển đổi sẽ càng lâu. 1 bức hình chuyển trong vòng
sắp xỉ 1s.

3.5.4 Chức năng xóa ảnh:


Người dùng có thể xóa bất kì hình ảnh nào nếu muốn (trước khi chuyển và sau khi
chuyển).

56
Hình 3.4: Xóa hình thành công.

3.5.5 Chức năng xem chi tiết 1 ảnh bất kì:

Hình 3.5: Người dùng được phép xem chi tiết.

57
3.5.6 Chức năng lưu ảnh sau khi chuyển về thiết bị:
Người dùng chọn thư mục cần lưu và phần mềm sẽ thực hiện quá trình lưu ảnh.

Hình 3.6: Lưu ảnh đã chuyển vào thư mục thành công.

58
Chương 4 KẾT LUẬN VÀ KIẾN NGHỊ

4.1 Kết luận

Qua quá trình thử nghiệm và đánh giá các mô hình, từ đó chọn ra các mô
hình với khả năng sinh ảnh tốt, và những mô hình mặc dù không được huấn
luyện trên các tác vụ có hình ảnh liên quan thì khả năng học chuyển đổi của
các mô hình đấy cũng đem lại kết quả khả quan và tiêu tốn ít thời gian,
chứng minh rằng việc tận dụng các mạng học sâu được huấn luyện sẵn tiết
kiệm được rất nhiều thời gian và công sức rất nhiều so với việc thiết kế một
mô hình mới trong lĩnh vực mạng sinh dữ liệu.

4.2 Kiến nghị


Mặc dù có việc sinh ảnh từ những mô hình trên khá tốt, nhưng vẫn còn có
những ảnh không thể chuyển được, hoặc là chuyển bị nhiễu. Trong tương lai,
việc áp dụng những kĩ thuật mới ví dụ như adapter instance normalization
hoặc classfition activation map hay áp dụng những mô hình mới hơn như
inceptionv3 sẽ cho ra những bức ảnh có độ hài hoà màu sắc tốt hơn, góp phần
nâng cao khả năng chuyển đổi ảnh của mô hình

59
TÀI LIỆU THAM KHẢO
[1] https://topdev.vn/blog/tensorflow-la-gi/
[2] https://topdev.vn/blog/opencv-la-gi-hoc-computer-vision-khong-kho/
[3] https://towardsdatascience.com/cyclegan-learning-to-translate-images-
[4] https://topdev.vn/blog/thuat-toan-cnn-convolutional-neural-network/
[5] https://machinelearningmastery.com/what-are-generative-adversarial-
networks-gans/
[6] https://topdev.vn/blog/thuat-toan-cnn-convolutional-neural-network/
[7] https://codelearn.io/sharing/google-colab-la-gi
[8] https://openplanning.net/11385/gioi-thieu-ve-python
[9] https://www.anaconda.com/products/distribution
[10] https://www.spyder-ide.org/
[11]https://phamdinhkhanh.github.io/2020/04/15/TransferLearning.
[12] https://www.analyticsvidhya.com/blog/2020/08/top-4-pre-trained-
models-for-image-classification-with-python-code/
[13]https://iq.opengenus.org/vgg19-architecture/
[14]https://viblo.asia/p/normalization-and-normalization-techniques-in-
deep-learning-QpmleJyn5rd
[15]https://aicurious.io/posts/2019-09-23-cac-ham-kich-hoat-activation-
function-trong-neural-networks/

60
61

You might also like