Tải bản đầy đủ (.docx) (15 trang)

Tieu luan hoc may convnet

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 (240.19 KB, 15 trang )

Tiểu luận:

HỌC MÁY

Đề tài :

TÌM HIỂU CONVNET

1


MỤC LỤC
1. Giới thiệu...................................................................................................Trang 1
1.1. Deep Learning ..................................................................................Trang 1
1.2 Dữ liệu khổng lồ.................................................................................Trang 3
1.3. CUDA.................................................................................................Trang 4
1.4. HDF5 (Hierarchical Data Format)..................................................Trang 6
1.5. Protocol Buffers.................................................................................Trang 7
1.6. OpenCV(Open Source Computer Vision Library)......................Trang 10
1.7. Libjpeg.............................................................................................Trang 10
2. Hướng dẫn cài đặt..................................................................................Trang 10
2.1. Ứng dụng có các gói sau:................................................................Trang 10
2.2. Yêu cầu phần cứng..........................................................................Trang 11
2.3. Chạy các ví dụ..................................................................................Trang 11
3. ConVNet..............................................................................................Trang 11
TÀI LIỆU THAM KHẢO.........................................................................Trang 17

2


TÌM HIỂU CONVNET


1. Giới thiệu
ConvNet là một bản cài đặt nhanh bằng C++ dựa trên GPU của mạng nơ-ron
Convolutional. ConVNet hỗ trợ kiến trúc đa-GPU và cung cấp rút trích đặc trưng
nhanh GPU.
ConVNet được xây dựng dựa trên các khái niệm và các đối tượng sau:
1.1. Deep Learning [1].
Với số lượng khổng lồ các máy tính có khả năng tính tốn mạnh mẽ, máy
móc ngày nay đã có thể nhận diện được các đối tượng và giao tiếp thời gian thực.
Với nguồn tài ngun máy tính của Google cơng ty này đã xây dựng trong một
nhánh của trí tuệ nhân tạo được gọi là “học sâu“. Phần mềm này cố gắng bắt chước
các hoạt động ở lớp nơ-ron thần kinh nằm trên vỏ não, nơi tập trung 80% nếp nhăn
của não và sự xuất hiện của các suy nghĩ. Phần mềm có khả năng học hỏi, như thể
có nhận thức thật sự, để nhận dạng các mẫu dưới dạng số hóa của âm thanh, hình
ảnh và dữ liệu khác.
Ý tưởng cơ bản – phần mềm có khả năng mơ phỏng mạng lưới nơ-ron của võ
não dưới dạng mạng lưới nơ-ron nhân tạo – đã trở nên lạc hậu và nó dẫn tới nhiều
nỗi thất vọng. Nhưng sau đó nhờ sự cải tiến mạnh mẽ của toán học và sự tăng lên
đáng kể của sức mạnh máy tính, các nhà khoa học ngày nay đã có thể mơ hình hóa
nhiều lớp nơ-ron thần kinh hơn bao giờ hết.
Với cải tiến này, họ đang đưa ra những cải tiến vượt bậc trong cơng nghệ
nhận dạng giọng nói và hình ảnh. Tháng 6 rồi, hệ thống học sâu của Google trình
diễn khả năng xử lí 10 triệu hình ảnh từ các đoạn video Youtube đã chứng minh khả
năng nhận diện hình ảnh tốt gấp đơi so với những nỗ lực trước đây, ngồi ra khả
năng tự học đã tự xác định một đối tượng như con mèo. Google đã dùng kĩ thuật
này để cắt giảm tỉ lệ lỗi nhận diện giọng nói trong phần mềm Android mới nhất.


Vào tháng 10, Microsoft cũng đã cử Rick Rashid, trưởng bộ phận nghiên cứu, tham
dự một buổi thuyết trình tại Trung Quốc, và trình diễn một phần mềm có khả năng
chuyển đổi giọng nói của ơng thành văn bản tiếng Anh với tỉ lệ lỗi 7%, chuyển

chúng sang văn bản tiếng Trung, và rồi mơ phỏng giọng nói của ơng tồn bộ lại
thành tiếng phổ thơng.
Mạng nơ-ron, được phát triển những năm 1950 không lâu sau khởi đầu của
các nghiên cứu về trí tuệ nhân tạo, có vẻ hứa hẹn bởi vì chúng cố gắng mơ phỏng
cách bộ não làm việc, mặc dù nó vẫn cịn ở hình thức đơn giản. Một chương trình
vẽ lên một tập các nơ-ron ảo và gắn cho nó những giá trị số ngẫu nhiên, gọi là trọng
số, để kết nối chúng lại với nhau. Những trọng số này xác định mỗi nơ-ron mô
phỏng này sẽ phản ứng như thế nào – với giá trị đầu ra giữa 0 và 1 – đối với các
thuộc tính đã được số hóa như một cạnh hoặc bóng xanh của một bức ảnh, hoặc
một mức năng lượng cụ thể tại một tần số trong âm vị, đơn vị của âm thanh trong
âm tiết.
Một số mạng nơ-ron nhân tạo ngày nay có thể tự dạy chúng khả năng nhận
dạng những mẫu phức tạp. Các lập trình viên sẽ có thể huấn luyện cho mạng lưới
nơ-ron phát hiện vật thể hay âm vị bằng cách kiểm tra mạng lưới với các phiên bản
hình ảnh được số hóa chứa những đối tượng đó hoặc những sóng âm có chứa
những âm vị đó. Nếu mạng lưới khơng thể nhận diện chính xác được một mẫu cụ
thể, thì giải thuật sẽ thay đổi trọng số. Mục đích cuối cùng của việc huấn luyện là
làm cho mạng lưới nhận diện một cách nhất quán những mẫu trong lời nói hoặc các
tập hình ảnh mà con người chúng ta biết.
Năm 2006, Hinton đã phát triển một cách hiệu quả hơn để dạy các lớp nơron. Lớp đầu tiên học các tính năng cơ bản, như cạnh trong hình ảnh hoặc các đơn
vị âm thanh nhỏ nhất. Điều này được thực hiện bằng cách tìm kiếm sự kết hợp của
các pixel số hóa hoặc các sóng âm tình cờ xuất hiện nhiều hơn. Một khi lớp này
nhận dạng được chính xác các đặc điểm đó, họ tiếp tục dạy lớp thứ hai, lớp này tự


học cách nhận dạng các đặc điểm phức tạp hơn, như một góc hoặc sự kết hợp các
âm thanh thoại. Tiến trình được lặp lại ở các lớp tiếp theo cho đến khi hệ thống có
thể nhận diện âm vị hoặc đối tượng một cách chính xác và ổn định.
Tháng 6 rồi, Google đã trình diễn một trong những mạng lưới nơ-ron lớn
chưa từng có, với hơn một tỉ kết nối. Một nhóm dẫn đầu bởi giáo sư khoa học máy

tính Stanford, Andrew Ng, và thành viên hội đồng Google, Jeff Dean, đã trình diễn
những hình ảnh hệ thống từ 10 triệu video clip trên Youtube được lựa chọn một
cách ngẫu nhiên. Một nơ-ron được mơ phỏng trong mơ hình phần mềm đã gắn kết
các hình ảnh của những con mèo. Những nơ-ron khác tập trung vào gương mặt con
người, những bông hoa vàng và các đối tượng khác. Và nhờ vào sức mạnh của hệ
thống học sâu, nó đã nhận dạng được các đối tượng rời rạc này ngay cả khi khơng
có sự trợ giúp của con người giúp chúng định nghĩa và dán nhãn cho chúng.
Điều làm sửng rốt các chuyên gia trí tuệ nhân tạo là cải tiến quan trọng trong
việc xử lí hình ảnh. Hệ thống đã phân loại đối tượng và hình ảnh trong các bức ảnh
Youtube một cách chính xác với tốc độ nhanh hơn 16%. Nghe có vẻ chưa ấn tượng,
nhưng nó tốt hơn phương pháp cũ tới 70%. Và, Dean thêm rằng, có 22 ngàn loại để
lựa chọn. Điều đó chắc hẳn đang thử thách cả loài người. Khi hệ thống được yêu
cầu phân các hình ảnh vào 1000 loại chung hơn, độ chính xác được đẩy lên hơn
50%.
1.2 Dữ liệu khổng lồ
Việc huấn luyện nhiều lớp nơ-ron ảo trong phịng thí nghiệm cần 16,000 máy
tính tương đương số lượng máy tính mà Google đã phát triển cho cơng cụ tìm kiếm
và các dịch vụ khác của họ. 80% các thành tựu trong trí tuệ nhân tạo gần đây được
cho là nhờ vào sức mạnh máy tính. Cịn nhiều hơn cả tồn bộ kích thước các trung
tâm dữ liệu của Google. Hệ thống học sâu cũng có thể được hưởng lợi từ các
phương pháp phân chia đa nhiệm giữa các máy tính để chúng có thể xử lí nhanh
hơn nhiều lần.


Mặc dù Google đang hướng về tương lai ít hơn đối với các ứng dụng, nhưng
viễn cảnh vẫn hấp dẫn. Rõ ràng là với khả năng tìm kiếm hình ảnh tốt hơn sẽ giúp
ích cho Youtube. Dean nói rằng các mơ hình học sâu có thể sử dụng các dữ liệu âm
vị từ tiếng Anh để huấn luyện lại các hệ thống nhận dạng được giọng nói ở các
ngơn ngữ khác nhanh hơn. Và cũng rõ ràng rằng khả năng xử lí hình ảnh phức tạp
đã có thể làm cho những chiếc xe của Google có thể tự lái tốt hơn.

1.3. CUDA.
CUDA là một platform của tính tốn song song và là mơ hình lập trình của
NVIDIA. Nó cho phép tăng đáng kể hiệu năng tính tốn bởi khai thác triệt để sức
mạnh của đơn vị xử lý đồ họa (GPU- Graphics Processing Unit), nhưng lập trình
viên có thể sử dụng nó thơng qua các ngơn ngữ lập trình phổ biến. Các hãng phần
mềm thứ ba cũng đã phát triển để hỗ trợ CUDA trong Python, Fortran, Java và
MATLAB.
Với hàng triệu CUDE-Enable-GPU được bán ra hàng ngày, ngành phát triển
phần mềm, các nhà nghiên cứa và các nhà khoa học đang tìm kiếm, nghiên cứu, cài
tiến và áp dụng GPU với CUDA trong các lĩnh vực như:
- Xác định các mảng bám trong giải phẩu động mạch: Bệnh nhồi máu cơ tim
là một nguyên nhân gây tử vong hàng đầu trên thế giới. Trường đại học Harvard,
Trường Y học Harvard và Brighan sử dụng GPU để mô phỏng mạch máu của bệnh
nhân, nhằm xác định các mảng bám trong động mạch mà khơgn cần giải phẩu thăm
dị.
- Phân tích lưu lượng giao thông hàng không: Hệ thống quản lý không phận
quốc gia điều phối sự lưu thông hàng không, mô hình máy tính giúp xác định
những cách thức tốt nhất để giảm bớt tắc nghẽn giao thông và giữ cho máy bay di
chuyển hiệu quả. Sử dụng sức mạnh tính tốn của GPU một nhóm nhiên cứu tại
NASA thu được một hiệu suất lớn giảm thời gian phân tích hệ thống từ 10 phút còn
3 giây.


- Thể hiện(Visual) các phân tử: Một mô phỏng phân tử gọi là NAMP (động
lực học phân tử có kích thước NANO) có hiệu suất cao nhờ sử dụng GPU, việc
tăng tốc là kết quả của kiến trúc song song của GPU cho phép các phát triển của
NAMP tính tốn chuyên sâu trên các ứng dụng.
Một ví dụ về một luồng tiến trình trên CUDA, xem hình 1.
1. Sao chép dữ liệu từ bộ nhớ chính vào bộ nhớ GPU.
2. CPU xây dựng các tiên trình cho GPU.

3. GPU thực hiện song sopng trên mỗi lõi (core).
4. Sao chép kết quả từ bộ nhớ GPU vào bộ nhớ chính.

Hình 1. Tiến trình trên CUDA

GPU (Graphics Processing Unit): Là sản phẩm của NVIDIA ra đời năm
1999, là một bộ xử lý đơn có tích hợp với phép biến đổi, phép chiếu sáng, thiết lập/
cắt tam giác, dựng hình và có khả năng xử lý 10 triệu đa giác mỗi giây. GPU hiện


tại chủ yếu xử lý đồ họa 3D, 2D và hầu hết các tính tốn đều liên quan đến ma trận
và các phép tốn trên vector. Ngồi ra cịn dùng cho tính tốn phi đồ họa.
1.4. HDF5 (Hierarchical Data Format).
HDF5 là một mơ hình dữ liệu, dưới dạng là một thư viện hỗ trợ nhiều ngơn
ngữ lập trình cho phép định dạng file và lưu trữ và quản lý dữ liệu. Nó hỗ trợ khơng
hạn chế các kiểu dữ liệu khác nhau và cho phép thiết kế và thực hiện phép I/O với
dung lượng lớn cũng như độ phức tạp của dữ liệu. HDF5 là một dạng portal và có
tính mở, cho phép các ứng dụng phát triển trên nó.
HDF5 bao gồm:
- Một mơ hình dữ liệu đa năng có thể thể hiện được nhiều đối tượng dữ liệu
phức tạp và đa dạng của siêu dữ liệu (metadata).
- Một định dạng file với không giới hạn về số lượng và thuộc tính của đối
tượng dữ liệu trong một tập sưu tập (collection).
- Một thư viện phần mềm chạy trên nhiều platform từ máy xách tay đến các
hệ thống song song và cài đặt bởi một API giao tiếp với các ngơn ngữ lập trình bậc
cao như C++, Java, Python.
- Một tập các đặc trưng cho phép thực hiện truy xuất với thời gian và không
gian tối ưu.
- Một công cụ và ứng dụng cho phép quản lý, thao tác, xem và phân tích dữ
liệu.

Cấu trúc File và mơ hình dữ liệu của HDF5
Được tổ chức theo dạng phân cấp, gồm 2 thành phần: Group: chứa các
dataset. Dataset: mảng nhiều chiều của các phần tử. Cả hai đều được hỗ trợ siêu dữ
liệu (metadata – dùng để mô tả dữ liệu)


HDF2 group: group header chứa tên các group và danh sách các thuộc tính
của group. Group symbol table chứa danh sách các đối tượnmg của HDF trong
group
HDF5 Dataset gồm:
- Header file: có 4 lớp là name, datatype, dataspace và strong layout
- Datatype: tương tự như các hệ quản trị CSDL thơng dụng

Hình 2. HDF5 objects -- datasets, datatypes, or dataspaces

Các thơng tin về HDF5 được tìm hiểu trong [3]
1.5. Protocol Buffers.
Là một bộ đệm rất hiệu quả, có cơ chế tự động, linh hoạt để tuần tự hóa dữ
liệu có cấu trúc tương tự XML nhưng nhỏ hơn, nhanh hơn và đơn giản hơn. Nó là
một nền tảng trung lập dùng trong việc tuần tự hóa dữ liệu có cấu trúc để sử dụng
trong các giao thức truyền thông, lưu trữ dữ liệu.
Hỗ trợ cho các ngơn ngữ lập trình bậc cao như c++, Java,
Python cho phép người dùng sử dụng PB trong ứng dụng của họ. Một file PB có
phần mở rộng là .proto. Thơng tin muốn trao đổi được định nghĩa bằng một cấu


trúc dưới dạng các thông điệp. Mỗi thông điệp là một bản ghi nhỏ chứa dãy các cặp
<tên: giá trị>, ví dụ như sau: tập tin addressbook.proto
message Person {
required string name = 1;

required int32 id = 2;
optional string email = 3;
enum PhoneType {
MOBILE = 0;
HOME = 1;
WORK = 2;
}
message PhoneNumber {
required string number = 1;
optional PhoneType type = 2 [default = HOME];
}
repeated PhoneNumber phone = 4;
}
message AddressBook {
repeated Person person = 1;
}

Các định dạng thông điệp rất đơn giản, các trường có tên và được gán giá trị
có kiểu dữ liệu: số nguyên, thực, logic, chuỗi và có cơ chế định nghĩa phân cấp.


Sau khi định nghĩa xong thông điệp, chạy PB compiler cho ngơn ngữ lập
trình mà ta sử dụng (được chỉ định trong file .proto) chương trình sinh mã cho ta
lớp đối tượng message tương ứng với các hàm truy cập đối tượng như set/get. Ví dụ
nếu cho C++ sau khi biên dịch ta có lớp Person tương ứng với các thao tác
populate, serialize, retrieve đối với thông điệp BP Person. Ta có thể viết vài đoạn
mã với lớp Person như:
Person person;
person.set_name("John Doe");
person.set_id(1234);

person.set_email("");
fstream output("myfile", ios::out | ios::binary);
person.SerializeToOstream(&output);
Đọc dữ liệu từ stream buffer
fstream input("myfile", ios::in | ios::binary);
Person person;
person.ParseFromIstream(&input);
cout << "Name: " << person.name() << endl;
cout << "E-mail: " << person.email() << endl;
Các thơng tin chi tiết về PB có thể đọc ở [4]

1.6. OpenCV(Open Source Computer Vision Library)[5]
OpenCV Là một thư viện phần mềm mã nguồn mở cho phép sử dụng trong
học thuật, nghiên cứu cũng như thương mại. Nó có giao diện với các ngơn ngữ lập
trình bậc cao như C++, Java, Python và chạy trên nhiều platform khác nhau như


Windows, Linux, Android. OpenCV được thiết kế để tính tốn hiệu quả với thế
mạnh là ứng dụng thời gian thực, được viết bởi c++ tối ưu hóa các thư viện với lợi
thế đa lõi (multi-core) và có giao diện như thư viện STL.
Thư viện OpneCV có hơn 2500 các thuật tốn tối ưu: Thị giác máy tính
(coputer vision) và học máy (machine Learning). Các thuật toán này dùng đề áp
dụng trong các ứng dụng như: thị giác máy tính, nhận diện khuôn mặt, dấu vân tay,
giám sát hành động hàng loạt, cơng nghệ sinh trắc học trong kiểm sốt truy cập,
v..v.

1.7. Libjpeg.
Thư viện viết bằng C cho phép đọc/ ghi và thao tác trên các file ảnh có
định dạng Jpeg.
2. Hướng dẫn cài đặt.

2.1. Ứng dụng có các gói sau.
- CUDA (phiên bản >= 4.0): Không cần thiết cho rút trích đặc trưng đối với
CPU.
- HDF5 (phiên bản >=1.8.11): />- Protocol Buffers (phiên bản >=2.5.0 )
/>- OpenCV: />- libjpeg: />Code sử dụng C++, một vài thành phần yêu cầu trình biên dịch gcc phiên bản
>=4.6

2.2. Yêu cầu phần cứng.


- NVIDIA(s)
- Multi-GPU feature địi hỏi có Fermi boards

2.3. Chạy các ví dụ.
Các ví dụ của mạng trên MNIST và ImageNet được đặt trong thư mục
examples/mnist và examples/imagenet.

3. ConVNet.
ConvNet là một bản cài đặt nhanh bằng C++ dựa trên GPU của mạng nơ-ron
Convolutional. ConVNet hỗ trợ kiến trúc đa-GPU và cung cấp rút trích đặc trưng
nhanh GPU.
Cấu trúc ConVNet chia làm 3 khơng gian tên chính là: ReadModel,
GetSizes, và main. Với danh sách các lớp chính như sau:
Tên lớp

Chức năng

AvgPooler
bbox
ConvNet


Mơ hình chính của hệ thống

cudamat
cudamat_bbox
cudamat_sparse
DataHandler
DataIterator
DataWriter
Edge

Lớp truy cập dữ liệu của mơ hình
Lớp cơ sở cho việc truy xuất (duyệt- iterators)
dữ liệu
Ghi dữ liệu ra file HDF5


conv_edge.h
ImageDisplayer
conv_onetoone_edge.h
Layer

Lớp layer dữ liệu

Matrix
convnet.h

Lớp ma trận xử lý GPU

MaxPooler

datahandler.h
Optimizer
downsample_edge.h
ProbMaxPooler
edge.h
RawImageFileIterator< T >

Lớp cơ sở cho việc tối ưu hóa

Một iterator (phép duyệt) trên danh sách các
file ảnh

edge_with_weight.h
RawImageFileIterator< unsigned
fc_edge.h
char >
grad_check.h
rnd_struct
image_iterators.h
SlidingWindowIterator< T >

Một iterator trên các sliding windows của một

layer.h

file ảnh

SlidingWindowIterator< unsigned
local_edge.h
char >

matrix.h
sparse_data
maxpool_edge.h
multigpu_convnet.h

Các lớp trên được tổ chức bởi danh sách các file
mã nguồn sau:

optimizer.h
response_norm_edge.h
rgb_to_yuv_edge.h
rnd_multipliers_32bit.h
upsample_edge.h
util.h


TÀI LIỆU THAM KHẢO
[1]. />[2]. />[3]. />[4]. />[5]. />


Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×