đồ án thị giác máy tính đề tài phân đoạn hình ảnh và ngữ nghĩa

27 0 0
Tài liệu đã được kiểm tra trùng lặp
đồ án thị giác máy tính đề tài phân đoạn hình ảnh và ngữ nghĩa

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

BỘ GIÁO DỤC VÀ ĐÀO TẠOTRƯỜNG ĐẠI HỌC XÂY DỰNG HÀ NỘIKHOA CÔNG NGHỆ THÔNG TIN ĐỒÁN THỊ GIÁC MÁY TÍNH Đề tài : Phân đoạn hình ảnh và ngữ nghĩa Lớp học phần: Đồ Án Thị giác Máy TínhGiảng vi

Trang 1

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

TRƯỜNG ĐẠI HỌC XÂY DỰNG HÀ NỘIKHOA CÔNG NGHỆ THÔNG TIN

ĐỒÁN THỊ GIÁC MÁY TÍNH

Đề tài : Phân đoạn hình ảnh và ngữ nghĩa

Lớp học phần: Đồ Án Thị giác Máy TínhGiảng viên hướng dẫn: Th.S Thái Thị Nguyệt

Sinh viên thực hiện : Nhóm 5

STT Họ và tên MSSV Lớp 1 Vũ Anh Phong 1538665 65CS3

2 Mai Văn Bách 14465 65SC3 3 Đỗ Đức Điện 38165 65CS3 4 Chu Đức Hùng 89865 65CS3

Hà Nội – 6/2023

Lời mở đầu

Trong thời đại công nghệ phát triển lĩnh vực thị giác máy tính ngày càng được quan tâm và phát triển là phân đoạn hình ảnh là một bước quan trọng trong nhiều lĩnh vực khác nhau như lĩnh vực hình ảnh y tế (medical imaging), phát hiện và nhận dạng đối tượng, hệ thống camera giám sát, hệ thống điều khiển giao thông… Kỹ thuật này là bước tiền xử lý

Trang 2

quan trọng trong hầu hết các hệ thống xử lý ảnh, kết phân vùng tốt sẽ giúp cho quá trình xử lývề sau đạt hiệu quả cao hơn nhằm tiết kiệm về chi phí tính toán, thời gian cũng như tăng độ chính xác của các ứng dụng trên.

Phân đoạn hình ảnh là một đề tài khá hay nhưng cũng rất khó và chuyên sâu nên trong quátrình hoàn thiện nhóm em còn nhiều sai xót gặp phải

Rất mong được sự chấp nhận của cô Nhóm em cũng xin chân thành cảm ơn sự tận tình giảng dạy cũng như hướng dẫn của cô thời gian vừa qua.

Với đề tài phân đoạn hình ảnh ta cần phải tìm hiểu và làm rõ các mục sau :

1, Tìm hiểu về phân đoạn hình ảnh: Nắm vững kiến thức về phân đoạn hình ảnh trong lĩnh vực thị giác máy tính Bao gồm các phương pháp và thuật toán phổ biến như Semantic Segmentation, Instance Segmentation, và các mô hình nổi tiếng như U-Net, Mask R-CNN… 2, Xây dựng tập dữ liệu: Chuẩn bị và thu thập tập dữ liệu hình ảnh cho quá trình huấn luyện và đánh giá mô hình.

3, Tiền xử lý dữ liệu: Áp dụng các kỹ thuật tiền xử lý dữ liệu như chuẩn hóa, cắt ảnh, tăng cường dữ liệu (augmentation) để tăng tính đa dạng và đồng nhất của tập dữ liệu.

4, Xây dựng mô hình: Lựa chọn và triển khai một mô hình phù hợp cho việc phân đoạn hình ảnh, có thể dựa trên mô hình được giới thiệu trong các nghiên cứu trước đó hoặc sử dụng các mô hình đã được cung cấp bởi TensorFlow và các thư viện tương tự.

4.1, Huấn luyện mô hình: Tiến hành huấn luyện mô hình trên tập dữ liệu đã chuẩn bị Điều chỉnh các tham số và siêu tham số để tối ưu hóa độ chính xác và hiệu suất của mô hình 4.2, Đánh giá mô hình: Đánh giá hiệu suất của mô hình phân đoạn bằng cách sử dụng các độ đo như IoU (Intersection over Union), Precision, Recall.

6, Tổng kết và đánh giá kết quả: Tổng kết kết quả đạt được, so sánh với các phương pháp hiện có và đánh giá ưu nhược điểm của đề tài.

Trang 3

Phân đoạn hình ảnh là gì?

Trong lĩnh vực thị giác máy tính (computer vision), phân vùng ảnh là một quá trình chia mộtbức ảnh số thành nhiều phần khác nhau (tập hợp các điểm ảnh, hay có thể gọi là superpixels).Mục tiêu của phân vùng ảnh là để đơn giản hóa và hoặc thay đổi biểu diễn của một tấm ảnh vào điều gì đó có ý nghĩa hơn và dễ dàng để phân tích Phân vùng ảnh thường được sử dụng[1]để xác định vị trí các đối tượng, đường biên (đường thẳng, cong.vv) Hay nói cách khác phân vùng ảnh là một quá trình gán nhãn (assigning a lablel) cho mỗi điểm ảnh trong một bức ảnh, các điểm ảnh trong cùng một nhãn sẽ có những đặc tính giống nhau về màu sắc, cường độ hoặc kết cấu của ảnh.

Trang 4

Kết quả của việc phân vùng ảnh là tập hợp các phân đoạn (segments) bao gồm có thể là toàn bộ bức ảnh hoặc tập hợp các đường biên chiết xuất từ hình ảnh Các điểm ảnh trong cùng mộtvùng có đặc tính tương tự nhau về màu sắc, cường độ hoặc kết cấu Các vùng lân cận thì khácnhau đáng kể về các đặc trưng trên.

Trong tác vụ phân loại ảnh, mạng sẽ gán nhãn (hoặc lớp) cho mỗi ảnh đầu vào Tuy nhiên, giả sử bạn muốn biết hình dạng của đối tượng đó, pixel thuộc về đối tượng nào, v.v Trong trường hợp này, bạn sẽ muốn gán một lớp cho mỗi pixel của hình ảnh Nhiệm vụ này được gọi là phân đoạn Mô hình phân đoạn trả về nhiều thông tin chi tiết hơn về hình ảnh Phân đoạn hình ảnh có nhiều ứng dụng trong hình ảnh y tế, xe ô tô tự lái và hình ảnh vệ tinh.

Ứng dụng của phân đoạn hình ảnh :

Phân vùng ảnh là một bước quan trọng trong nhiều lĩnh vực khác nhau như lĩnh vực hình ảnh y tế (medical imaging), phát hiện và nhận dạng đối tượng, hệ thống camera giám sát, hệ thống điều khiển giao thông… Kỹ thuật này là bước tiền xử lý quan trọng trong hầu hết các hệ thống xử lý ảnh, kết phân vùng tốt sẽ giúp cho quá trình xử lý về sau đạt hiệu quả cao hơn nhằm tiết kiệm về chi phí tính toán, thời gian cũng như tăng độ chính xác của các ứng dụng trên.

Một vài ứng dụng cụ thể trong phân vùng ảnh: Hình ảnh y tế

 Nhận dạng đối tượngo Phát hiện đi bộo Phát hiện khuôn mặto Phát hiện đèn dừng xe

o Xác định vị trí đối tượng trong ảnh vệ tinh Một số nhiệm vụ nhận dạng

o Nhận dạng khuôn mặto Nhận dạng vân tayo Nhận dạng mắt

Trang 5

 Hệ thống giám sát giao thông Camera giám sát an ninh

Trong lĩnh vực nhận dạng đối tượng, quá trình phân vùng ảnh sẽ tách đối tượng ra khỏi vùng nền Đối tượng ở đây có thể là con người hoặc một vật gì đó chuyển động thuộc vùng tiền cảnh (Fg) Đối tượng sau khi được tách ra trong quá trình phân vùng có thể được xử lý trong các hệ thống như đếm số lượng người ra vào, nhận dạng cử chỉ tay, nhận dạng khuôn mặt.

Trong lĩnh vực camera giám sát, quá trình phân vùng ảnh có thể ứng dụng trong việc xác định, giám sát đối tượng đi vào vùng giám sát, cảnh báo chuyển động khi đối tượng di chuyển vào vùng giám sát.

ví dụ về ứng dụng phân đoạn hình ảnh với giao thông

Trong lĩnh vực hình ảnh y tế, các kỹ thuật hình ảnh y tế như chụp CT (Computer Tomography), chụp MRI (Magnetic Resonance Imaging), chụp X-Quang, USG (Ultrasound) không thể thiếu để có thể phân tích chính xác nhiều bệnh lý khác nhau, qua đó đã hộ trợ đángkể bác sĩ trong việc chẩn đoán bệnh Trong quá trình phân tích, người chẩn đoán cần phân trích xuất các đường biên cần thiết, các bề mặt hoặc các bộ phận cơ thể ra khỏi bức hình, kỹ thuật này được gọi là phân vùng (segmentation) Tuy nhiên, quá trình phân vùng thủ công là rất tốn thời gian và có thể không cho kết quả tốt Các phân vùng và đường biên này là rất quan trọng đối với các bác sĩ Chính vì vậy, trong vài thập kỷ qua, nhiều thuật toán phân vùngảnh y tế được đề xuất nhằm tăng độ chính xác trong quá trình phân vùng ảnh.

Trang 6

ví dụ về ứng dụng phân đoạn hình ảnh với y học hiện đại

Qua đó cho chúng ta thấy sự quan trọng trong phân đoạn hình ảnh với các lĩnh vực hiện có trong thực tế xã hội hiện nay.

Có các phương pháp và thuật toán phổ biến như Semantic Segmentation, Instance Segmentation, và các mô hình nổi tiếng như U-Net, Mask R-CNN…

Như theo yêu cầu, nhóm 5 sẽ thực hiện tìm hiểu và xây dựng mô hình với bài toán Semantic Segmentation

UNET :

Trang 7

U-Net là một mạng neural tích chập được phát triển cho việc phân đoạn hình ảnh y sinh học tại Bộ môn Khoa học Máy tính của Đại học Freiburg Mạng này dựa trên mạng tích chập đầy đủ và kiến trúc của nó đã được chỉnh sửa và mở rộng để hoạt động với ít hình ảnh huấn luyệnhơn và cho kết quả phân đoạn chính xác hơn Phân đoạn một hình ảnh kích thước 512 × 512 chỉ mất ít hơn một giây trên một GPU hiện đại.

Kiến trúc U-Net bắt nguồn từ mạng "fully convolutional network" được đề xuất ban đầu bởi Long, Shelhamer và Darrell.

Ý tưởng chính là bổ sung một mạng thu hẹp thông thường bằng các lớp liên tiếp, trong đó cácphép gộp được thay thế bằng các toán tử upsample Nhờ đó, các lớp này tăng độ phân giải của đầu ra Một lớp tích chập liên tiếp sau đó có thể học để tổng hợp một đầu ra chính xác dựa trên thông tin này.

Một điều chỉnh quan trọng trong U-Net là có một số lượng lớn kênh đặc trưng trong phần upsample, cho phép mạng truyền thông tin bối cảnh đến các lớp độ phân giải cao hơn Kết quả là, phần mở rộng gần như đối xứng với phần thu hẹp và tạo ra một kiến trúc hình chữ U Mạng chỉ sử dụng phần hợp lệ của mỗi phép tích chập mà không có bất kỳ lớp kết nối đầy đủ nào Để dự đoán các pixel trong khu vực biên của hình ảnh, ngữ cảnh bị thiếu được dự báo bằng cách phản chiếu ảnh đầu vào Chiến lược chia ô này quan trọng để áp dụng mạng cho các hình ảnh lớn, vì nếu không, độ phân giải sẽ bị giới hạn bởi bộ nhớ GPU.

Có quá nhiều kiến trúc như vậy, vậy U-net có gì khác biệt so với các kiến trúc khác? Tất nhiênlà có rồi

Thứ nhất, toàn bộ kiến trúc không hề sử dụng một lớp fully connected nào Nếu các

bạn từng làm việc với deep learning, với các mô hình end-to-end thông thường, lớp kếcuối của mạng sẽ là các lớp fully connected để kết nối các đặc trưng đã phân tích được nhằm đưa ra kết quả dự đoán Tuy nhiên, ở kiến trúc U-net, việc kết nối các đặc trưng sẽ do nửa thứ 2 của "chữ U" đảm nhận, điều này giúp mạng không cần mạng fully connected, do đó có thể chấp nhận input với kích thước bất kì

Thứ hai: U-net sử dụng Phương pháp đệm (Padding method), điều này giúp kiến trúc

có thể phân đoạn hình ảnh được hoàn toàn Phương pháp này đặc biệt quan trọng khi segment cho các hình ảnh, nếu không, độ phân giải có thể bị hạn chế bởi dung lượng của bộ nhớ GPU

Trang 8

Mô hình được sử dụng trong đồ án là một phiên bản đã chỉnh sửa của Net Một mô hình Net bao gồm một phần mã hóa (downsampler) và phần giải mã (upsampler) Để học các đặc trưng mạnh mẽ và giảm số lượng tham số có thể huấn luyện, đồ án sử dụng một mô hình đã được huấn luyện trước là MobileNetV2 như là phần mã hóa Đối với phần giải mã, hướng dẫn này sử dụng khối upsample đã được triển khai trong ví dụ pix2pix trong kho TensorFlow Examples.

U-Như đã đề cập, bộ mã hóa là một mô hình MobileNetV2 đã được huấn luyện trước Bạn sẽ sửdụng mô hình từ tf.keras.applications Bộ mã hóa bao gồm các đầu ra cụ thể từ các lớp trung gian trong mô hình Lưu ý rằng bộ mã hóa sẽ không được huấn luyện trong quá trình huấn luyện.

Kể từ khi ra đời, MobileNetV2 là một trong những kiến trúc được ưa chuộng nhất khi phát triển các ứng dụng AI trong computer vision

MobileNetV2 có một số điểm cải tiến so với MobileNetV1 giúp cho nó có độ chính xác cao hơn, số lượng tham số và số lượng các phép tính ít hơn mà chúng ta sẽ tìm hiểu ngay sau đây.MobileNetV2 cũng sử dụng những kết nối tắt như ở mạng ResNet Các khối ở layer trước được cộng trực tiếp vào layer liền sau Nếu coi layer liền trước là , sau khi đi qua các xử lý xtích chập hai chiều ta thu được kết quả f(x) thì output cuối cùng là một residual block có giá trị x+f(x).

Tuy nhiên kết nối tắt ở MobileNetV2 được điều chỉnh sao cho số kênh (hoặc chiều sâu) ở input và output của mỗi block residual được thắt hẹp lại Chính vì thế nó được gọi là các bottleneck layers (bottleneck là một thuật ngữ thường được sử dụng trong deep learning để ám chỉ các kiến trúc thu hẹp kích thước theo một chiều nào đó).

Trang 9

Source MobileNetV2 - Mark Sandler, etc.

Cụ thể hơn chúng ta theo dõi hình minh họa bên dưới:

Kiến trúc residual này ngược lại so với các kiến trúc residual truyền thống vì kiến trúc residual truyền thống có số lượng kênh ở input và output của một block lớn hơn so với các layer trung gian Chính vì vậy nó còn được gọi là kiến trúc inverted residual block.Tác giá cho rằng các layer trung gian trong một block sẽ làm nhiệm vụ biến đổi phi tuyến nêncần dày hơn để tạo ra nhiều phép biến đổi hơn Kết nối tắt giữa các block được thực hiện trên những bottleneck input và output chứ không thực hiện trên các layer trung gian Do đó các layer bottleneck input và output chỉ cần ghi nhận kết quả và không cần thực hiện biến đổi phi tuyến.

Trang 10

Ở giữa các layer trong một block inverted residual block chúng ta cũng sử dụng những biến đổi tích chập tách biệt chiều sâu để giảm thiểu số lượng tham số của mô hình Đây cũng chính là bí quyết giúp họ các model MobileNet có kích thước giảm nhẹ.

3.2 Loại bỏ non-linear

Một trong những thực nghiệm được tác giả ghi nhận đó là việc sử dụng các biến đổi phi tuyến(như biến đổi qua ReLu hoặc sigmoid) tại input và output của các residual block sẽ làm cho thông tin bị mất mát Cụ thể cùng xem kết quả thực nghiệm bên dưới:

Chính vì thế trong kiến trúc của residual block tác giả đã loại bỏ hàm phi tuyến tại layer inputvà output và thay bằng các phép chiếu tuyến tính.

Trang 11

2, Tiền xử lý dữ liệu

Trong phần này, dữ liệu hình ảnh được chuẩn bị bằng cách thực hiện các bước sau:+, Tải xuống và chuẩn bị tập dữ liệu: Hướng dẫn cung cấp các liên kết để tải xuống tập dữ liệu "Oxford-IIIT Pets", bao gồm các hình ảnh và các nhãn phân đoạn tương ứng.dataset, info = tfds.load('oxford_iiit_pet:3.*.*', with_info=True)

Chi tiết giải thích các tham số:

'oxford_iiit_pet:3.*.*': Đây là tên tập dữ liệu mà bạn muốn tải xuống và sử dụng trongđoạn mã Trong trường hợp này, tập dữ liệu là "Oxford-IIIT Pets" và đang sử dụng phiên bản 3.x.x.

with_info=True: Tham số này chỉ định rằng bạn muốn thu thập thông tin về tập dữ liệu cùng với việc tải xuống Thông tin này bao gồm các chi tiết về số lượng, cấu trúc và miêu tả của các phần tử trong tập dữ liệu.

Khi dòng mã này được thực thi, TensorFlow sẽ tải xuống tập dữ liệu "Oxford-IIIT Pets" và trả về hai giá trị:

dataset: Đây là đối tượng tập dữ liệu chứa các mẫu hình ảnh và nhãn phân đoạn tươngứng.

info: Đây là một đối tượng chứa thông tin về tập dữ liệu, bao gồm miêu tả, cấu trúc vàcác thông tin khác về các phần tử trong tập dữ liệu.

Sau khi tải xuống và thu thập thông tin, bạn có thể sử dụng dataset để tiếp tục xử lý vàhuấn luyện mô hình phân đoạn hình ảnh.

+, Chuẩn hóa hình ảnh và nhãn: Các hình ảnh và nhãn phân đoạn được chuẩn hóa để đảm bảorằng chúng có cùng định dạng và phạm vi giá trị.

def normalize(input_image, input_mask):

input_image = tf.cast(input_image, tf.float32) / 255.0 input_mask -= 1

return input_image, input_mask

def load_image(datapoint):

input_image = tf.image.resize(datapoint['image'], (128, 128))

input_mask = tf.image.resize( datapoint['segmentation_mask'], (128 128, ),

Trang 12

method = tf.image.ResizeMethod.NEAREST_NEIGHBOR, )

input_image, input_mask = normalize(input_image, input_mask) return input_image, input_mask

+, Chia tập dữ liệu thành tập huấn luyện và tập kiểm tra: Tập dữ liệu được chia thành hai phần, một phần dùng để huấn luyện mô hình và phần còn lại dùng để đánh giá mô hình sau khi huấn luyện.

+, Tiền xử lý dữ liệu: Mỗi hình ảnh và nhãn phân đoạn tương ứng được chuyển đổi thành dạng tensor, sử dụng hàm load_image() và load_mask().

Các bước tiền xử lý dữ liệu này là cần thiết để chuẩn bị tập dữ liệu và định dạng phù hợp cho việc huấn luyện mô hình phân đoạn hình ảnh.

3, Xây dựng mô hình :1, Đầu vào mô hình

Cả input_image và input_mask đều có định dạng của đối tượng tensor trong TensorFlow.input_image là đối tượng tensor biểu diễn ảnh đầu vào Trong đoạn mã trên, nó được chuyển đổi thành đối tượng tensor kiểu tf.float32 và chuẩn hóa bằng cách chia cho 255.0, để đảm bảorằng các giá trị màu nằm trong khoảng [0, 1] Kích thước của input_image là (128, 128) sau khi được điều chỉnh kích thước bằng phương pháp resize.

input_mask là đối tượng tensor biểu diễn mặt nạ phân đoạn Trong đoạn mã trên, nó cũng được điều chỉnh kích thước thành (128, 128) bằng phương pháp resize sử dụng tf.image.ResizeMethod.NEAREST_NEIGHBOR, để đảm bảo rằng kích thước của mặt nạ phân đoạn tương ứng với kích thước của ảnh đầu vào Sau đó, input_mask được chuẩn hóa bằng cách giảm đi 1 từ mỗi giá trị trong mặt nạ phân đoạn.

Do đó, input_image và input_mask đều là các đối tượng tensor có kích thước (128, 128) và các giá trị của chúng được chuẩn hóa để sử dụng trong quá trình huấn luyện mô hình phân đoạn.

train_images và test_images là các biến lưu trữ dữ liệu huấn luyện và dữ liệu kiểm tra tương ứng Các giá trị này được tạo ra bằng cách áp dụng hàm load_image lên tập dữ liệu 'train' và 'test' từ tập dữ liệu dataset.

TRAIN_LENGTH = info.splits['train'].num_examplesBATCH_SIZE = 64

BUFFER_SIZE = 1000

STEPS_PER_EPOCH = TRAIN_LENGTH

Trang 13

TRAIN_LENGTH là biến lưu trữ số lượng mẫu trong tập dữ liệu huấn luyện Giá trị này được trích xuất từ thông tin về tập dữ liệu 'train' trong biến info

info.splits['train'].num_examples trả về số lượng mẫu trong tập dữ liệu huấn luyện.BATCH_SIZE là kích thước của mỗi batch dữ liệu trong quá trình huấn luyện Mỗi batch sẽ chứa BATCH_SIZE mẫu.

BUFFER_SIZE là kích thước của bộ đệm (buffer) được sử dụng trong quá trình xáo trộn dữ liệu huấn luyện Khi xáo trộn, một số mẫu dữ liệu sẽ được lưu trong bộ đệm và được truyền vào quá trình huấn luyện theo thứ tự ngẫu nhiên BUFFER_SIZE xác định số lượng mẫu được lưu trong bộ đệm.

STEPS_PER_EPOCH là số bước (steps) huấn luyện cần thực hiện trong mỗi epoch Nó đượctính bằng cách gán TRAIN_LENGTH cho STEPS_PER_EPOCH Mỗi bước huấn luyện sẽ xử lý một batch dữ liệu và STEPS_PER_EPOCH xác định số lượng batch cần xử lý trong mỗi epoch để hoàn thành huấn luyện trên toàn bộ dữ liệu huấn luyện.

train_images = dataset['train'].map(load_image, num_parallel_calls=tf.data.AUTOTUNE)test_images = dataset['test'].map(load_image, num_parallel_calls=tf.data.AUTOTUNE)

Cụ thể, dataset['train'] và dataset['test'] đều là các tập dữ liệu chứa các mẫu ảnh và mặt nạ phân đoạn tương ứng.

Hàm load_image được áp dụng lên từng mẫu dữ liệu trong tập 'train' và 'test' bằng cách sử dụng phương thức map của tf.data.Dataset Hàm này sẽ thực hiện các bước tiền xử lý dữ liệu,bao gồm:

Thay đổi kích thước ảnh đầu vào và mặt nạ phân đoạn thành kích thước (128, 128) bằng phương thức tf.image.resize.

Chuẩn hóa giá trị màu của ảnh đầu vào vào khoảng [0, 1] và giảm giá trị của mặt nạ phân đoạn đi 1 bằng hàm normalize.

Trả về cặp đầu vào và mặt nạ đã được tiền xử lý.

Sử dụng num_parallel_calls=tf.data.AUTOTUNE cho phép TensorFlow tự động chọn số lượng luồng song song tối ưu trong quá trình xử lý dữ liệu.

Ngày đăng: 20/05/2024, 16:02

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan