Professional Documents
Culture Documents
ĐỒ ÁN CHUYÊN NGÀNH
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
NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
5
MỤC LỤC
LỜI CẢM ƠN
NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN .................................................................. 5
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. Mạng đối sinh – Aderversial Neural Network (GAN): ....................................... 23
2.1.4. Mô hình CycleGAN: ........................................................................................... 27
2.1.5. Học chuyển đổi ................................................................................................... 31
2.2. Công nghệ sử dụng: ................................................................................................. 33
2.2.1. Ngôn ngữ Python: ............................................................................................... 33
2.2.2. Thư viện tensorflow:............................................................................................... 33
2.2.3. Thư viện OpenCV: .................................................................................................. 36
2.2.4. Thư viện QT: .......................................................................................................... 37
2.2.5. Google Colab: ........................................................................................................ 37
CHƯƠNG 3. KẾT QUẢ THỰC NGHIỆM ....................................................................... 39
3.1. Thiết lập mô hình huấn luyện ................................................................................. 39
3.1.1. Generator ........................................................................................................... 39
3.1.2. Discriminator: .................................................................................................... 43
3.1.3. Hàm mục tiêu ...................................................................................................... 43
3.2. Bộ dữ liệu .................................................................................................................. 45
3.3. Tài nguyên huấn luyện mô hình ............................................................................. 45
3.4. kết quả huấn luyện ................................................................................................... 46
3.5. Chức năng ứng dụng: .............................................................................................. 46
3.5.1. Màn hình chính: ................................................................................................. 47
3.5.2. Chức năng chọn ảnh từ thiết bị: ......................................................................... 47
3.5.3. Chức năng chuyển đổi ảnh: ................................................................................ 48
3.5.4. Chức năng xóa ảnh: ........................................................................................... 48
3.5.5. Chức năng xem chi tiết 1 ảnh bất kì: .................................................................. 49
3.5.6. Chức năng lưu ảnh sau khi chuyển về thiết bị: .................................................. 49
CHƯƠNG 4. KẾT LUẬN VÀ KIẾN NGHỊ ...................................................................... 51
4.1. Kết luận ...................................................................................................................... 51
4.2. Kiến nghị.................................................................................................................... 51
TÀI LIỆU THAM KHẢO...................................................................................................... 52
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,….
8
CHƯƠNG 2. CƠ SỞ LÝ THUYẾT – CÔNG NGHỆ SỬ DỤNG
2.1. Cơ sở lý thuyết:
9
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.
10
Hình 2.2: Ví dụ về nhận dạng con vật
11
đư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ế.
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.
• Đệ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. ta đệm một đầu vào 3x3, làm tăng kích thước
13
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.
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ể ).
hinh2. 7 normalization
• Instance normalization
15
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ô.
- 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.
- Nó có thể thay thể batch normalization trong một số bài toán về Deep Learning.
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 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.
16
Các hàm kích hoạt thường được sử dụng:
• 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.
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:
17
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.
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
18
hinh2. 10 đồ thị hàm ReLU
• 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 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
19
hinh2. 11 đồ thị hàm Leaky ReLU
• 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 đó
20
hinh2. 12 minh hoạ up sample
21
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.
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.
22
2.1.3. Mạng đối sinh – Aderversial Neural Network (GAN):
23
• 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
24
➢ 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
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.
25
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.
26
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ả.
27
Hình 2.9: Chuyển đổi hè sang đông
28
• 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
Kiến trúc mạng Generator gồm 2 phần: contracting path và expansive path
• Contracting path bao gồm 5 khối convolution dùng để trích xuất đặc trưng của
bức ảnh.
29
• 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.
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ả.
30
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.
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 đề
31
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?
- 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ữ 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
đó.
32
2.2. Công nghệ sử dụng:
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:
34
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 ở 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,
35
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:
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.
36
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.
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ử
37
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ờ.
38
CHƯƠNG 3. KẾT QUẢ THỰC NGHIỆM
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.
39
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
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.
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
40
hinh 3.3 kiến trúc Resnet50
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.
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
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:
41
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.
• 1 hàm ReLU
42
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 LeakyReLU
- Discriminator:
43
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)
(𝟏 − 𝜸)||𝑭(𝑮(𝒙)) − 𝒙||𝟏 ]
• 𝒇𝑫𝑿 (𝑭(𝑮(𝒙))): 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
• 𝐹 (𝑥): ảnh x khi mạng F chuyển đổi ảnh của ảnh của chính miền mục tiêu
44
3.2. Bộ 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,….
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.
45
3.4. kế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 :
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.
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ị.
46
3.5.1. Màn hình chính:
47
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.
48
Hình 3.10 Chức năng xoá ảnh
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.
49
Hình 3.12: Lưu ảnh đã chuyển vào thư mục thành công.
50
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.
51
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/
52