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

phân loại hình ảnh sử dụng vision transformer

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

<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">

<b>B GIÁO D C VÀ ĐÀO T O ỘỤẠ B NÔNG NGHI P VÀ PTNTỘỆ TRƯỜNG Đ I H C TH Y L IẠỌỦỢ </b>

ĐOÀN VĂN PHONG

HÀ N I, NĂM 2023Ộ

</div><span class="text_page_counter">Trang 2</span><div class="page_container" data-page="2">

<b>B GIÁO D C VÀ ĐÀO T O ỘỤẠ B NÔNG NGHI P VÀ PTNTỘỆ TRƯỜNG Đ I H C TH Y L IẠỌỦỢ </b>

<b> PHÂN LO I HÌNH NH S D NG VISION TRANSFORMERẠẢỬ Ụ</b>

Ngành : Kỹ thu t ph n m mậầềMSV : 1651170929

NGƯỜ ƯỚI HNG D N <b>Ẫ : TS. Nguy n Văn Namễ</b>

HÀ N I, NĂM 2023Ộ

</div><span class="text_page_counter">Trang 3</span><div class="page_container" data-page="3">

GIẤY BÌA ĐỒ ÁN TỐT NGHIỆP, KHĨA LUẬN TỐT NGHIỆP

</div><span class="text_page_counter">Trang 4</span><div class="page_container" data-page="4">

CỘNG HOÀ XÃ HỘI CHỦ NGHĨA VIỆT NAMĐộc lập - Tự do - Hạnh phúc

--- ---★NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP

Họ tên sinh viên: Đoàn Văn Phong Hệ đào tạo: Đại học chính quy.

CHƯƠNG 2 NG D NG TRONG PHÂN LO I HÌNH NH S D NG VISION ỨỤẠẢỬ ỤTRANSFORMER

</div><span class="text_page_counter">Trang 5</span><div class="page_container" data-page="5">

5. GIÁO VIÊN HƯỚNG DẪN TỪNG PHẦN

hướng dẫnCHƯƠNG 1 GI I THI U MƠ HÌNH VISION ỚỆ

TS. Nguyễn Văn Nam

CHƯƠNG 2 NG D NG TRONG PHÂN LO I HÌNH NH S ỨỤẠẢỬ

Nam

</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6">

6. NGÀY GIAO NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆPNgày 20 tháng 03 năm 2023

Trưởng Bộ môn

(Ký và ghi rõ Họ tên)

Giáo viên hướng dẫn chính

TS. Nguyễn Văn Nam

Nhiệm vụ Đồ án tốt nghiệp đã được Hội đồng thi tốt nghiệp của Khoa thông qua Ngày. . . . .tháng. . . . .năm 2023 Chủ tịch Hội đồng

</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7">

LỜI CAM ĐOAN

Em xin cam đoan đây là Đồ án tốt nghiệp/ Khóa luận tốt nghiệp của bản thân tác giả. Cáckết quả trong Đồ án tốt nghiệp/Khóa luận tốt nghiệp này là trung thực, và không sao chéptừ bất kỳ một nguồn nào và dưới bất kỳ hình thức nào.Việc tham khảo các nguồn tài liệu(nếu có) đã được thực hiện trích dẫn và ghi nguồn tài liệu tham khảo đúng quy định.

Sinh viên thực hiện

Đoàn Văn Phong

i

</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="8">

LỜI CẢM ƠN

L i đ u tiên, em xin chân thành c m n sâu s c t i các th y cô giáo trong trờ ầả ơắ ớầường Đ i H c Th y L i nói chung và các th y cô giáo trong t Công Ngh Thông Tin nói ạ ọủợầổệriêng đã t n tình gi ng d y, truy n đ t cho em nh ng ki n th c, kinh nghi m quý ậảạềạữếứệbáu trong th i gian qua.ờ

Đ c bi t em xin g i l i c m n đ n TS Nguy n Văn Nam, th y đã t n tình giúp đ , ặệử ờ ả ơếễầậỡtr c ti p ch b o, hựếỉ ảướng d n em trong su t q trình làm đ án mơn h c. Trong ẫốồọth i gian làm vi c v i th y, em không ng ng ti p thu thêm nhi u ki n th c b ích ờệ ớầừếềếứ ổmà còn h c t p đọ ậược tinh th n làm vi c, thái đ nghiên c u khoa h c nghiêm túc, ầệộứọhi u qu , đây là nh ng đi u r t c n thi t cho em trong quá trình h c t p và công ệảữề ấ ầếọ ậtác sau này.

Sau cùng em xin g i l i c m n chân thành t i gia đình, b n bè đã đ ng viên, đóng ử ờ ả ơớạộgóp ý ki n và giúp đ trong quá trình h c t p, nghiên c u và hoàn thành đ án môn ếỡọ ậứồh c.ọ

<b>Em xin chân thành c m n !ả ơ</b>

<b> Sinh viên</b>

Đoàn Văn Phong

</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9">

Đ tài đi sâu nghiên c u, tìm hi u v ki n trúc c a VisionTransformer cũng nhềứểề ếủưcách cài đ t, k t qu th nghi m c a mơ hình.ặếả ửệủ

</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10">

iii

<b>CÁC M C TIÊU CHÍNHỤ</b>

VisionTransformer s d ng r t nhi u các kỹ thu t ph c t p c a h c sâu. M c tiêuử ụấềậứ ạủọụchính c a đ tài là đi sâu tìm hi u các thành ph n c a mơ hình đ n m b t đủềểầủể ắắ ượccơng ngh lõi. ệ

<b>N I DUNG CHÍNHỘ</b>

Vision Transformer, hay ViT, là m t mơ hình phân lo i hình nh s d ng ki n trúcộạảử ụếgi ng nh Transformer trên các m ng hình nh. M t hình nh đốưảảộảược chia thành cácph n có kích thầướ ố ịc c đ nh, sau đó m i ph n đỗầược nhúng tuy n tính, các ph nếầnhúng v trí địược thêm vào và chu i vect k t qu đỗơ ếả ược đ a vào b mã hóaưộTransformer tiêu chu n. Đ th c hi n phân lo i, phẩể ựệạương pháp tiêu chu n là thêmẩm t “mã thơng báo phân lo i” có th h c độạể ọ ượ ổc b sung vào chu i đỗ ượ ử ục s d ng.

<b>K T QU D KIẾẢ Ự ẾN</b>

Báo cáo t ng k t đ tài và ng d ng VIT đ phân lo i các lo i đ dùng trong b p. ổế ềứụểạạ ồế

<b>TTTh i gianờN i dung công vi cộệK t qu d ki n đ tếả ự ếạđược</b>

n i c m đi n, ch i, r ,ồ ơệổ ổ

B d li uộ ữ ệ

</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11">

ch o.ả

Cài đ t, hu n luy n, thặấệửnghi m mô t hình nhệảả

LIỆT KÊ HÌNH VẼ ...vi

DANH MỤC CÁC TỪ VIẾT TẮT VÀ GIẢI THÍCH CÁC THUẬT NGỮ ..viii

<b>CHƯƠNG 1 : GI I THI U MƠ HÌNH VISION TRNASFORMERỚỆ</b>...1

<b>CHƯƠNG 2 : NG D NG TRONG PHÂN LO I HÌNH NH S D NG ỨỤẠẢỬ ỤVISION TRANSFORMER...13</b>

1. <b>Chu n b d ẩị ữli uệ ...13</b>

2. <b>Cài đ t mơ hìnhặ</b>...14

2.1. <b>Gi i thi u công c google ớệụcolab...14</b>

</div><span class="text_page_counter">Trang 12</span><div class="page_container" data-page="12">

2.2. <b>K t n i d ế ố ữ</b>

<b>li uệ ...14</b>

2.3 Đọ đo...223. <b>Hu n luy n và th m đ nh mô ấệẩị</b>

<b>CHƯƠNG 3 : ĐÁNH GIÁ</b>...33

<b>CHƯƠNG 4 : K T LU NẾẬ</b> ...444.1. <b>K t qu đ t ếả ạ</b>

<b>đượ ...44c</b>

4.2. <b>Hướng phát tri nể ...44</b>

LIỆT KÊ HÌNH VẼHình 1.21 : Kiến trún Transformer

Hình 1.22: Mơ tả cách tính ma trận attentionHình 1.23: Mơ tả Multi- Head Attentionhình 2.1 : Cấu trúc thư mục dữ liệu ảnhhình 2.2 : Cấu trúc thư mục chứa ảnhhình 2.3 : Ảnh trong các thư mục chứa ảnh

hình 2.5 : V trí l u tr k t qu hu n luy n c a mô hìnhịưữ ếảấệ ủHình 2.6 : K t qu th nghi m mơ hìnhếả ửệ

Hình 2.24: Mơ tả kiến trúc của mơ hình ViT

</div><span class="text_page_counter">Trang 13</span><div class="page_container" data-page="13">

Hình 2.25 : hình ảnh được chia nhỏ thành các patch nhỏ có kích thước cố địnhHình 2.26 : Làm phẳng các patch thành chuỗi các vectors

Hình 2.27 : Mơ tả đầu ra của flattend vector của các patchHình 2.28 : Hình ảnh ví dụ về hai ảnh ghép các patch lại với nhauHình 2.29 : Mơ tả cơ chế Attention trong Vision Transformer

Hình 2.30 : Định nghĩa về khối Multi-self attention tong Vision TransformerHình 2.31 : mơ tả kết quả trả về tương ứng với các class

Hình 3.1 : Kết quả thử nghiệm nhãn batHình 3.2 : Kết quả thử nghiệm nhãn chao

Hình 3.3 : Kết quả thử nghiệm nhãn choiHình 3.4 : Kết quả thử nghiệm nhãn đĩaHình 3.5 : Kết quả thử nghiệm nhãn duaHình 3.6 : Kết quả thử nghiệm nhãn nocomdienHình 3.7 : Kết quả thử nghiệm nhãn roHình 3.8 : Kết quả thử nghiệm sai nhãn batHình 3.9 : Kết quả thử nghiệm sai nhãn choiHình 3.10 : Kết quả thử nghiệm sai nhãn diaHình 3.11 : Kết quả thử nghiệm sai nhãn noicomdien

</div><span class="text_page_counter">Trang 14</span><div class="page_container" data-page="14">

Hình 3.29 : Attention map của [CLS] giữa các lớp khác nhau.

DANH MỤC CÁC TỪ VIẾT TẮT VÀ GIẢI THÍCH CÁC THUẬT NGỮ

DICOM Digital Imaging and Communications in Medicine

MSA Multi-head Self-attention

</div><span class="text_page_counter">Trang 15</span><div class="page_container" data-page="15">

NLP Natural Language Processing

viii

</div><span class="text_page_counter">Trang 25</span><div class="page_container" data-page="25">

Tiếp theo, chúng ta thảo luận chi tiết Self-attntion cia single head. cho một

z<small>l đầu vào, dữ </small>

liệu được chuẩn hóa đầu tiên theo Layermorm. Phương trình 2.13, 2.14 và 2.15 ước tính key, query và value của

z<small>l. Ở đây, </small>W<small>K,</small>W<sub>Q</sub>,W<small>V là các tham số cho phép chiếu tuyến tính.</small>

Hình 2.31 : mơ tả kết quả trả về tương ứng với các class

3. Kỹ thuật Attention Map

Attention map là kỹ thuật được sử dụng để diễn giải cơ chế ra quyết định của mơ hình ViT dựa trên các trọng số Attention. Để tính tốn các bản đồ của Attention, ta sử dụng cơ

</div><span class="text_page_counter">Trang 26</span><div class="page_container" data-page="26">

chế Attention Rollout. Về cơ bản là tính trung bình trọng số Attention trên tất cả Head và sau đó nhân đệ quy ma trận trọng số tất cả các lớp. Điều này giúp kết hợp cac Attention token giữa tất cả các lớp. Hình 3.29 mơ tả Attention map giữa các lớp khác nhau theo cls token.

Hình 3.29 : Attention map của [CLS] giữa các lớp khác nhau.

Về Attention Rollout là một cách trực quan để theo dõi thông tin được truyền từ lớp đầu vào đến các phần nhúng ở các lớp cao hơn. Ví dụ có một transformer có L lớp, ta muốn tính tốn Attention từ tất cả các vị trí trong lớp

l<small>i đến tất cả các vị trí trong lớp </small>l<small>j, trong </small>

đó j<i. Trong đồ thị Attention, một đường đi từ nút v ở vị trí k trong lớp

l<small>i, đến nút u ở vị </small>

trí m trong lớp

l<small>j</small>

, là một chuỗi các cạnh nối hai nút này. Nế chúng ta xem trọng số cả mỗicạnh tỷ lệ thông tin được truyền đi giữa hai nút, chúng ta có thể tính lượng thơng tin tại v được truyền tới u thông qua một đường dẫn cụ thể bằng cách nhân trọng số của tất cả các cạnh trong đường dẫn đó. Vì có thể có nhiều hơn một đường đi giữa hai nút trong biểu đốchú ý, để tính tổng lượng thơng tin được truyền từ v đến u, chúng ta tính tổng trên tất cả đường đi có thể có giữa hai nút này. Ở cấp độ thực thi, để tính Attention từ

l<small>i đến </small>l<small>j, </small>

chúng ta nhân một cách đệ quy ma trận trọng số Attention trong tất cả các lớp bên dưới.

~A

(l

<small>i</small>

)

=

{

A

(l

<small>i</small>

)

~A

<sub>(l</sub>

<sub>i−1</sub>

<sub>)</sub>

nếu i j>

</div><span class="text_page_counter">Trang 27</span><div class="page_container" data-page="27">

Trong đó :

~

A

: là Attention RolloutA : là Attention thô.

Và phép toán ở đây là một phép nhân ma trận. Với cơng thức này, đặt j=0 để tính tốn Attention đầu vào.

</div><span class="text_page_counter">Trang 28</span><div class="page_container" data-page="28">

<b>CHƯƠNG 2 : NG D NG TRONG PHÂN LO I HÌNH NH S D NG ỨỤẠẢỬ ỤVISION TRANSFORMER</b>

<b>1. Chu n b d li u ẩị ữ ệ</b>

ViT chỉ có thể làm tốt hơn các phương pháp dựa trên CNN nếu các pre-trained model được huấn luyện trên một tệp dữ liệu lớn. Do đó em sử dụng các bộ dữ liệu lớn về hình ảnh các đồ dùng trong nhà.

Phân loại dữ liệu : Dữ liệu được chia làm ba thư mục train, valid và test. Mỗi th mục đều chứa tất cả các thư mục con là các nhãn.

Các thư mục con chia làm các nhãn như sau:Bát : 0,16

Rổ : 0.16Đũa :0,16Đĩa : 0,16Chổi : 0,16Chảo : 0,19Nơi cơm điện : 0,16

hình 2.1 : Cấu trúc thư mục dữ liệu ảnh

</div><span class="text_page_counter">Trang 29</span><div class="page_container" data-page="29">

hình 2.2 : Cấu trúc thư mục chứa ảnh

hình 2.3 : Ảnh trong các thư mục chứa ảnh

2. Cài đặt mơ hình

2.1 Sử dụng công cụ google Colab

Google Colab là một dạng jupyter Notebook tùy biến cho phép thực thi Python trên nền tảng đám mây, được cung cấp bở google. Sử dụng Google Colab có những lợi ích ưu việtnhư: sẵn sàng chạy Python ở bất kỳ thiết bị nào có kết nối internet mà không cần cài đặt, chia sẻ và làm việc nhóm dễ dàng, sử dụng miễn phí GPU cho các dự án về AI.2.2. Các bước cài đặt

Cài đặt mơ hình

Mơ hình sử dụng Google colab để huấn luyện và phân loại hình ảnh

</div><span class="text_page_counter">Trang 30</span><div class="page_container" data-page="30">

Kết nối drive-colab

from google.colab import drivedrive.mount('/content/drive')

Kết nối đến drive của bạn

</div><span class="text_page_counter">Trang 31</span><div class="page_container" data-page="31">

PyTorch có thể cung cấp các hỗ trợ cho nột q trình huấn luyện mơ hình với các bước (hình 3.1).

Hình 3.1 Mơ tả các bước của một q trình huấn luyện mơ hình trên PyTorch

Bước 1 : Tổ chức dữ liệu và tải dữ liệu vào mơ hình huấn luyện PyTorch cung cấp mơ-đun “torch.utils.data” để hỗ trợ việc này. Hai thư viện chính trong mô-đun này là Dataset và Dataloader. Dataset sử dụng kiểu dữ liệu Tensor để tổ chức tùy chỉnh bộ dữ liệu, Dataloader sử dụng để tải bộ dữ liệu cho quá trình huấn luyện và kiểm tra.

Bước 2 : Khởi tạo mơ hình. Ta có thể sử dụng mơ hình có sẵn hoặc có thể tự tạo một mơ hình cho ứng dụng của mình. Pytorch cung cấp mơ-đun “torch.nn” có đầy đủ các lớp để tạo nên mạng nơ-ron như lớp “fully-connected”, “convolution”, các hàm kích hoạt và các àm tổn thất.

Bước 3 : Tiến hành huấn luyện mô hình. Sau khi đã có tập dữ liệu và mơ hình cần có kỹ thuật cập nhật trọng số và để tiến hành huấn luyện, kỹ thuật này có trong mơ-đun “torch.optim”. Đặc biệt Pytorch cịn hỗ trợ tính gradient tự động trong q trình huấn luyện bằng mơ-đun “torch.autograd”.

Bước 4 : chạy đánh giá mơ hình

Bước 5,6 : Sau khi kết quả mơ hình đạt như mong muốn có thể lữu trữ để triển khai. Pytorch cung cấp mô-đun “torch.hub” hỗ trợ lưu trữ cơng khai mơ hình trên github để

</div><span class="text_page_counter">Trang 32</span><div class="page_container" data-page="32">

phục vụ nghiên cứu. Mô-đun ‘torch.onns” hoặc “torch.jit” cung cấp khả năng chuyển đổi mô hình sang các định dạng khác để dễ dàng triển khai ứng dụng.

import torch, torchvisionprint(torch.__version__)print(torch.cuda.is_available())

Cài đặt mã nguồn mmpretrain

mmpretrain ( pretrained AI model) : là mơ hình AI được đào tạo trước, là mơ hình học sâu – một thể hiện của thuật toán thần kinh giống như bộ não người giúp tìm kiếm các hình mẫu hoặc đưa ra dự đoán trên dữ liệu, được đào tạo trên các tập dữ liệu lớn để hoàn thành một nhiệm vụ cụ thể. Nó có thể sử dụng nguyên trạng hoặc được tính chỉnh thêm để phù hợp với nhu cầu cụ thể của ứng dụng

!git clone đặt thư viện openmim

!pip install openmim

Cài đặt lõi framework

%cd mmpretrain!mim install -e .

Thiết lập các thơng số cho mơ hình :

mmpretrain/configs/vision_transformer/datn_vit-base-p16_32xb128-mae_in1k.py

_base_ = [

</div><span class="text_page_counter">Trang 33</span><div class="page_container" data-page="33">

arch='base',img_size=224,patch_size= ,16drop_path_rate=0.1),neck=None,head=dict(

type='LabelSmoothLoss', label_smooth_val=0.1, mode='original'),),

dict type( ='TruncNormal', layer='Linear', std=.02),dict type( ='Constant', layer='LayerNorm', val=1., bias=0.),],

train_cfg=dict(augments=[dict type( ='Mixup', alpha=0.8),dict type( ='CutMix', alpha=1.0)]))

# dataset settings

train_dataloader = dict(batch_size= )16# schedule settings

optim_wrapper = dict(optimizer=dict(type='AdamW',lr=1e-4 * 4096 / 256,weight_decay=0.3,eps=1e-8,

betas=(0.9 0.95, )), paramwise_cfg=dict( norm_decay_mult=0.0, bias_decay_mult=0.0, custom_keys={

'.cls_token': dict(decay_mult=0.0), '.pos_embed': dict(decay_mult=0.0) }))

# runtime settings

custom_hooks = [dict type( ='EMAHook', momentum=1e-4)]# NOTE: `auto_scale_lr` is for automatically scaling LR

</div><span class="text_page_counter">Trang 34</span><div class="page_container" data-page="34">

# base_batch_size = (32 GPUs) x (128 samples per GPU)auto_scale_lr = dict(base_batch_size=4096)

Cài đặt mô hình : mmpretrain/configs/_base_/datasets/datn_imagenet_bs64_swin_224.py

# dataset settings

dataset_type = 'CustomDataset'

data_preprocessor = dict( num_classes=1000,

mean=[123.675 116.28 103.53, , ], std=[58.395 57.12 57.375, , ],

to_rgb=True,)

bgr_mean = data_preprocessor['mean'][:: ]-1bgr_std = data_preprocessor['std'][:: ]-1train_pipeline = [

dict type( ='LoadImageFromFile'), dict(

type='RandomResizedCrop', scale=224,

backend='pillow', interpolation='bicubic'),

dict type( ='RandomFlip', prob=0.5, direction='horizontal'), dict(

type='RandAugment', policies='timm_increasing', num_policies= ,2 total_level= ,10 magnitude_level= ,9 magnitude_std=0.5, hparams=dict(

pad_val=[round(x) for in x bgr_mean], interpolation='bicubic')),

dict(

type='RandomErasing', erase_prob=0.25, mode='rand', min_area_ratio=0.02, max_area_ratio= / ,1 3 fill_color=bgr_mean,

</div><span class="text_page_counter">Trang 35</span><div class="page_container" data-page="35">

dict type( ='PackInputs'),]

test_pipeline = [

dict type( ='LoadImageFromFile'), dict(

type='ResizeEdge', scale=256, edge='short', backend='pillow', interpolation='bicubic'),

dict type( ='CenterCrop', crop_size=224), dict type( ='PackInputs'),

train_dataloader = dict( batch_size= ,64 num_workers= ,5 dataset=dict( type=dataset_type,

data_root='/content/drive/MyDrive/DATN2023-2/Phongdv/Data/', #ann_file='meta/train.txt',

data_prefix='train', pipeline=train_pipeline),

sampler=dict type( ='DefaultSampler', shuffle=True),)

val_dataloader = dict( batch_size= ,64 num_workers= ,5 dataset=dict( type=dataset_type,

data_root='/content/drive/MyDrive/DATN2023-2/Phongdv/Data/', #ann_file='meta/val.txt',

data_prefix='val', pipeline=test_pipeline),

sampler=dict type( ='DefaultSampler', shuffle=False),)

val_evaluator = dict type( ='Accuracy', topk=( , ))1 5

# If you want standard test, please manually configure the test datasettest_dataloader = val_dataloader

test_evaluator = val_evaluator

</div><span class="text_page_counter">Trang 36</span><div class="page_container" data-page="36">

Cài đặt tập dữ liệu tại :

mmpretrain/configs/_base_/schedules/imagenet_bs1024_adamw_swin.py

# for batch in each gpu is 128, 8 gpu

# lr = 5e-4 * 128 * 8 / 512 = 0.001optim_wrapper = dict( optimizer=dict( type='AdamW', lr=5e-4 1024 512 * / , weight_decay=0.05, eps=1e-8, betas=(0.9 0.999, )), paramwise_cfg=dict( norm_decay_mult=0.0, bias_decay_mult=0.0, flat_decay_mult=0.0, custom_keys={

'.absolute_pos_embed': dict(decay_mult=0.0), '.relative_position_bias_table': dict(decay_mult=0.0) }),

# learning policyparam_scheduler = [

dict(

type='LinearLR', start_factor=1e-3, by_epoch=True, end= ,20 # update by iter

convert_to_iter_based=True),

dict type( ='CosineAnnealingLR', eta_min=1e-5, by_epoch=True, begin= )20]

# train, val, test setting

train_cfg = dict(by_epoch=True, max_epochs= , val_interval= )50 1val_cfg = dict()

</div>

×