Professional Documents
Culture Documents
ĐỒ ÁN CHUYÊN NGÀNH
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
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:
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.
10
Hình 2.2: Ví dụ về nhận dạng con vật
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ế.
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.
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ể ).
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:
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.
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,...
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,..
- 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
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.
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.
- 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
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.
• 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
• 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
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.
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.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):
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
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.
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.
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).
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ó.
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.
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ả.
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.
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?
- 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 đó.
Để 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.
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:
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Ả
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 hàm ReLU
3.1.2 Discriminator:
• 1 hàm LeakyReLU
- 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)
(𝟏 − 𝜸)||𝑭(𝑮(𝒙)) − 𝒙||𝟏 ]
• 𝒇𝑫𝑿 (𝑭(𝑮(𝒙))): 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
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 :
• 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.
54
• Double click vào bất kì tấm nào để xem chi tiết trước và sau khi
chuyển đổi.
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.
56
Hình 3.4: Xóa hình thành công.
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Ị
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.
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