Thuậttoán giả định luyện kim

Một phần của tài liệu mạng nơ-ron nhân tạo trong kiểm soát nội dung hình ảnh (Trang 63 - 83)

Kỹ thuật giả định luyện kim (simulated annealing) là một quá trình luyện kim, trong đó sự sắp xếp ngẫu nhiên của các phân tửcácbon trong thép được chuyển đổi thành một kim loại có cấu trúc lớp ít giòn hơn. Quátrình này bao gồm việc nung kim loại ở một nhiệt độ rất cao và sau đó làm lạnh từ từ. Cácphân tử ở nhiệt độ cao có mức năng lượng cao, là cho các phân tử này chuyển động. Khimà nhiệt độ giảm đi, các chuyển động cũng giảm đi và chúng được sắp xếp thành các lớp.

Ý tưởng này được áp dụng vào các thuật toán huấn luyện cho mạng nơ-ron. Nhiệt độ đượccoi như là hệ số học được giảm dần. Ý tưởng ở đây là nếu mạng gặp phải một điểm cực trịđịa phương thì nó sẽ được “rung” (shake) để có thể thoát khỏi cực trị địa phương. Nếu như“nhiệt độ” được giữ không đổi thì hệ sẽ chỉ chuyển từ một điểm cực trị địa phương nàysang một điểm cực trị địa phương khác và khó có thể ổn định. Nếu khả năng nhảy đượcgiảm đều thì mạng sẽ có xu hướng đạt đến được điểm cực trị toàn cục. Và một khi mạngđạt đến điểm cực trị toàn cục thì mức rung sẽ không đủ để có thể khiến cho mạng bỏ quanó.

Rõ ràng thuật toán giả luyện kim có dáng dấp của một thuật toán huấn luyện với hệ số họcbiến đổi, tuy nhiên, hệ số học trong thuật toán này được giảm dần trong khi, thuật toánhuấn luyện sử dụng hệ số học biến đổi sẽ làm tăng hay giảm hệ số học tùy thuộc vào tìnhhuống cụ thể khi sai số khi học là tăng hay giảm.

2.2.4. Thuật toán di truyền

Đây thực chất là một thuật toán tìm kiếm điểm tối ưu trong không gian của các tham số.

Thuật toán di truyền là kỹ thuật bắt chước sự chọn lọc tự nhiên và di truyền. Trong tựnhiên, các cá thể khỏe, có khả năng thích nghi tốt với môi trường sẽ được tái sinh và nhânbản trong các thế hệ sau.

Trong giải thuật di truyền, mỗi cá thể được mã hóa bởi một cấu trúc dữ liệu mô tả cấu trúcgien của mỗi cá thể đó, gọi là nhiễm sắc thể. Mỗi nhiễm sắc thể được tạo thành từ các đơnvị gọi là gien. Chẳng hạn như là một chuỗi nhị phân, tức là mỗi cá thể được biểu diễn bởimột chuỗi nhị phân.

Giải thuật di truyền sẽ làm việc trên các quần thể gồm nhiều cá thể. Một quần thể ứng vớimột giai đoạn phát triển được gọi là một thế hệ. Từ thế hệ đầu được tạo ra, giải thuật ditruyền bắt chước chọn lọc tự nhiên và di truyền để biến đổi các thế hệ. Giải thuật di truyềnsử dụng các toán tử: tái sinh(reproduction): các cá thể tốt được đưa vào thế hệ sau dựavào độ thích nghi đối với môi trường của mỗi cá thể (xác định bởi hàm thích nghi(fitnessfunction); toán tử lai ghép(crossover): hai cá thể cha, mẹ trao đổi các gien để tạo ra haicá thể con; toán tử đột biến(mutation): một cá thể thay đổi một số gien để tạo thành cáthể mới. Việc áp dụng các toán tử trên đối với các quần thể là ngẫu nhiên.

Thuật toán di truyền bắt đầu bằng việc khởi tạo quần thể ban đầu, sau đó thực hiện lặp lạicác bước: sinh ra thế hệ mới từ thế hệ ban đầu bằng cách áp dụng các toán tử lai ghép, độtbiến, tái sinh; đánh giá thế hệ mới sinh ra; cho đến khi điều kiện kết thúc được thỏa mãn.Khi thuật toán dừng, cá thể tốt nhất được lựa chọn làm nghiệm cần tìm.

Có thể thấy, thuật toán di truyền có liên quan đến kỹ thuật tìm kiếm điểm tối ưu. Thựcchất, nó có thể coi như là một kỹ thuật khác để huấn luyện mạng nơ-ron để giải quyết cácbài toán. Nó liên quan đến việc mã hóa các tham số của mạng nơ-ron bằng các nhiễm sắcthể. Các tham số ban đầu được khởi tạo ngẫu nhiên nhiều lần tạo ra quần thể ban đầu. Khiđó, hàm thích nghi của các cá thể (tập các trọng số) được xác định bằng cách tính toán lỗiđầu ra của mạng. Nếu điều kiện dừng thỏa mãn thì quá trình huấn luyện dừng lại, nếukhông, sẽ thực hiện các toán tử chọn lọc, lai ghép, đột biến trên các cá thể để tạo ra quầnthể mới. Các nghiên cứu cho thấy rằng thuật toán di truyền có thể được xem nhưmột thuật toán tốt dùng để huấn luyện mạng.

Chương 3: CHƯƠNG TRÌNH THỬ NGHIỆM

3.1. BÀI TOÁN PHÁT HIỆN ẢNH “ĐEN”3.2.1. Một số đặc điểm ảnh “đen” 3.2.1. Một số đặc điểm ảnh “đen”

Hình ảnh “đen”(hay hình ảnh đồi trụy) có nhiều loại khác nhau nhưng có thể quy về các nhóm sau:

(1) Hình khỏa thân: là ảnh nam hoặc nữ không mặc quần áo (2) Hình hở “vòng 1” của nữ: là ảnh hở “vòng 1”

(3) Hình hở bộ phận “nhạy cảm” của nam hoặc nữ (4) Hình quan hệ tình cảm của nam và nữ

(5) Hình hở “vòng 3” của nam hoặc nữ (6) Nam hôn lên “vòng 1”

3.2.2. Các vấn đề gây nhầm lẫn

Các loại ảnh có thể gây nhận dạng nhầm:

• Hình nam cởi trần: đây là ảnh bình thường không phải ảnh “đen” những dễ bị nhận nhầm là nữ khi người nam này béo.

• Hình nữ mặc quần hay áo sát với màu da cũng dễ bị nhận nhầm • Trẻ con bú mẹ: dễ nhầm với trường hợp nam hôn lên “vòng 1”

Để tránh được các hình ảnh nhầm lẫn ta cần cung cấp ảnh chất lượng cao và có số lượng mẫu đầu vàođa dạng để huấn luyện mạng nơ-ron.

3.2. KIỂM SOÁT ẢNH “ĐEN” SỬ DỤNG MẠNG NƠ-RON3.2.1. Thu thập, phân tích và xử lý dữ liệu 3.2.1. Thu thập, phân tích và xử lý dữ liệu

Dữ liệu đóng một vai trò rất quan trọng trong các giải pháp sử dụng mạng nơron. Chấtlượng, độ tin cậy, tính sẵn có và phù hợp của dữ liệu được sử dụng để phát triển hệ thốnggiúp cho các giải pháp thành công. Các mô hình đơn giản cũng có thể đạt được những kếtquả nhất định nếu như dữ liệu được xử lý tốt, bộc lộ được các thông tin quan trọng. Bêncạnh đó, các mô hình tốt có thể sẽ không cho ta các kết quả mong muốn nếu dữ liệu đưavào quá phức tạp và rắc rối.

Trong bài toán này, các ảnh đầu vào lấy mẫu có một kích thước bằng nhau để tạo nên tập cơ sở dữ liệu chuẩn giúp cho việc nhận dạng được chính xác. Với hình vuông cỡ 30×30 pixel, hình chữ nhật 25×35 pixel.

tiền xửlý. Dữ liệu sau khi qua bước tiền xử lý được đưa vào mạng nơron. Cuối cùng, dữ liệu đầura của mạng nơron qua bước hậu xử lý, bước này sẽ thực hiện biến đổi kết quả trả về củamạng nơron sang dạng hiểu được theo yêu cầu của bài toán (Hình 3.). Sau đây, trong cácmục tiếp theo, ta sẽ đi vào xem xét từng bước trong quá trình xử lý dữ liệu.

Hình 3.1: Xử lý dữ liệu

3.2.2. Cài đặt chương trình

Chương trình được phát triển trên nền tảng Microsoft .NET và phân tách thành các module riêng rẽ sau:

3.2.2.1. Module tiền xử lý

Ảnh đầu vào của toàn hệ thống là ảnh màu, tuy nhiên để làm giảm bớt độ phức tạp tính toán của ảnh đầu vào của mạng nơ-ron, tập các ảnh huấn luyện mạng nơ-ron đều là các ảnh mức xám. Tập các ảnh để huấn luyện mạng được xử lý (tiền xử lý) để nâng cao chất lượng độ tương phản của ảnh, độ sáng của ảnh, làm giảm hiểu ứng nhiễu, co giãn ảnh.

Với chức năng lọc nhiễu, tăng độ tương phản, tăng độ sáng ta sử dụng thư viện Aforge:

using AForge;

using AForge.Imaging;

using AForge.Imaging.Filters;

privateBitmap ApplyFilter( IFilter filter ) {

ClearCurrentImage( ); // apply filter filteredImage = filter.Apply(sourceImage); return filteredImage } • Lọc nhiễu

ApplyFilter( newContrastCorrection( ) ); • Tăngđộ tương phản

ApplyFilter( newContrastCorrection( ) ); • Tăng độ sáng

ApplyFilter( newBrightnessCorrection( ) );

Co giãn ảnh

Các ảnh đầu vào với các cỡ khác nhau được co giãn về ảnh có kích thước xác định

publicstaticBitmap Scale(Bitmap Input, int newHeight, int newWidth)

{

double HRate = (double)Input.Height / newHeight;

double WRate = (double)Input.Width / newWidth;

Bitmap Result = newBitmap(newWidth, newHeight);

for (int i = 0; i < newHeight; i++) {

for (int j = 0; j < newWidth; j++) {

int x = (int)((double)j * WRate);

int y = (int)((double)i * HRate);

Result.SetPixel(j, i, Input.GetPixel(x, y)); }

}

return Result; }

3.2.2.2. Module trích chọn đặc trưng

Module này sẽ trích chọn các điểm da trong ảnh sau đó sẽ trích ra phần cần thiết cho quá trình nhận dạng.

Bước 1: Module thành phần phát hiện các điểm da trong ảnh với Histogram

Trong cách tiếp cận này, các lược đồ histogram được sử dụng để thể hiện mật độ trong không gian màu. Điều kiện rọi sáng đặc biệt trong các ảnh thường không biết trước và được ghi lại dưới các điều kiện khác nhau. Tuy nhiên, với một số lượng lớn

dữ liệu điểm ảnh đào tạo được gán nhãn bao gồm tất cả các loại da người (Châu Á, Châu Âu, Châu Phi), vẫn có thể mô hình phân phối của các màu sắc da và không phải da trong không gian màu.

Cách tiếp cận này dựa trên histogram để phân vùng màu da. Không gian màu được lượng tử hóa thành dãy các ô, mỗi ô tương ứng với một dải màu. Mỗi ô sẽ lưu số lần các màu tương ứng có trong tập các ảnh đào tạo có chứa da. Sau quá trình đào tạo, histogram được chuẩn hóa (normalized)- chuyển các giá trị của histogram thành các phân phối xác suất rời rạc:

Để giảm số lượng không gian lưu trữ, các kỹ thuật lấy mẫu thô không gian màu thường được sử dụng. Hệ thống sử dụng cách lấy mẫu 32×32×32 dựa theo phân tích của Jones, Rehg. Trong đó skin[c] là giá trị của ô trong histogram tưong ứng với vector màu c. Norm là tổng giá trị của tất cả các ô (Jones, Rehg 1999). Histogram sử dụng được xây dựng từ hơn 1 tỷ điểm ảnh được đánh giá bởi Jones, Rehg.

Các giá trị sau khi chuẩn hóa của các ô tạo nên các xác suất trước

Các giá trị Pskin(c) thực sự là một xác suất có điều kiện P(c|skin) – xác suất quan sát thấy màu c, khi chúng ta thấy một điểm màu da.

) ( ) | ( ) ( ) | ( ) ( ) | ( ) | ( skin P skin c P skin P skin c P skin P skin c P c skin P ¬ ¬ + = ) | (skin c

PP(skinc)được tính trực tiếp từ các lược đồ màu da và không phải da

Các xác suất trướcP(skin) và Pskin)có thể được ước lượng từ số mẫu là da và không phải là da trong tập mẫu đào tạo.

Có thể tránh phải tính toàn bộ biểu thức trên bằng cách chỉ cần so sánh P(skin|c) và Pskin|c) ) ( ) | ( ) ( ) | ( ) | ( ) | ( skin P skin c P skin P skin c P c skin P c skin P ¬ ¬ = ¬

So sánh biểu thức trên với ngưỡng sẽ tạo ra luật quyết định: Θ > ¬ ) | ( ) | ( skin c P skin c P

không phải là da.

Hình 3.2: Hình trái là ảnhđầu vào, Hình phải là ảnh sau quá trình phát hiện da

Kết quả ra của quá trình phát hiện da là một bản đồ da đa mức xám, mức độ xám chỉ độ mức độ tin tưởng điểm ảnh đó là da. Bước tiếp theo là phân loại ảnh dựa theo hình dáng của vùng da.

Bước 2: Trích chọn thuộc tính dựa trên cửa sổ trượt

Nguyên tắc tìm kiếm bộ phận “đen” (chẳng hạn vòng 1 “đen”) trong ảnh được thực hiện bằng quét một cửa sổ có kích thước cố định bằng trung bình chiều dài ×

trung bình chiều cao của các mẫu (pattern) trên ảnh đầu vào. Tại mỗi vị trí, cửa sổ đó

sẽ được đánh giá là bộ phận “đen” hay không dựa trên kết quả đầu ra của mạng nơ- ron. Một ảnh đầu vào được biểu diễn và xử lý đa phân giải với tỷ lệ kích thước giữa các ảnh được lựa chọn là 1:2.

Quá trình tìm kiếm vét cạn toàn bộ (full search) trên mặt phẳng ảnh sẽ tốn rất nhiều thời gian và gặp khó khăn đối với yêu cầu giảm thời gian này.

Mục tiêu đặt ra là phải giảm thời gian tìm kiếm. Tác giả đề nghị một giải pháp là việc tìm tiếm chỉ thực hiện trên vùng da đã được phân vùng ảnh, sẽ không tìm trên vùng không-màu da. Như vậy khối phân tách màu da với thuật toán đã trình bày ở trên được tích hợp vào hệ thống phát hiện bộ phận “đen” cho quá trình phân tích tìm kiếm các bộ phận “đen” trong ảnh vào. Giải pháp này cho phép tăng tốc độ tìm kiếm đáng kể.

Hình3.3: Ảnh được trích chọn đặc trưng 3.2.2.3. Module huấn luyện mạng nơ-ron

trung bình chiều cao, thường lân cận 1000 pixels.

Lựa chọn kiến trúc mạng đa lớp (Multilayer Peceptron - MLP) với giải thuật học lan truyền. Để có thể tạo mô hình học tốt, các yêu cầu theo tiêu chí dưới đây được đề nghị:

• Đối với các ảnh không có bộ phận “đen” có thể là bất cứ ảnh gì không phải bộ phận nhưng càng mô tả nhiều các ảnh thường gặp. Dùng các ảnh là một phần của bộ phận càng tốt.

• Các ảnh có chứa bộ phận “đen” được càng nhiều thay đổi của bộ phận “đen” càng tốt, khi đó khả năng nhận dạng càng cao.

Để giải quyết tốt yêu cầu thứ hai, tác giả đề nghị một giải pháp là tạo ra các ảnh mới từ tập các ảnh học ban đầu bằng cách xoay ảnh những góc thích hợp cũng như đối xứng trái-phải.

Quá trình huấn luyện mạng được diễn ra như sau: • Đưa nơ-ron đầu vào vào lớp

• Tính toán giá trị đầu vào

• Tính toán kết quả đầu ra với giá trị đầu ra mong muốn với giá trị đầu vào. Quá trình này gọi là xác định lỗi.

• Thay đổi trọng số của nơ-ron dựa trên các lỗi trước.

• Lặp lại quá trình này cho đến khi đạt đến lỗi ít nhất mà có thể chấp nhận được (ví dụ, error < 1.1), tức là mạng nơ-ron được huấn luyện thành công hay đạt đến tối đa quá trình lặp, tức là quá trình huấn luyện mạng nơ-ron không thành công.

Quá trình huấn luyện được cài đặt như sau:

public bool Train() {

double currentError = 0; int currentIteration = 0;

NeuralEventArgs Args = new NeuralEventArgs() ; do

{

currentError = 0;

foreach (KeyValuePair<T, double[]> p in TrainingSet) {

NeuralNet.ForwardPropagate(p.Value, p.Key); NeuralNet.BackPropagate();

currentError += NeuralNet.GetError(); }

currentIteration++;

if (IterationChanged != null && currentIteration % 5 == 0) {

Args.CurrentError = currentError;

Args.CurrentIteration = currentIteration; IterationChanged(this, Args);

}

} while (currentError > maximumError && currentIteration < maximumIteration && !Args.Stop);

if (IterationChanged != null) { Args.CurrentError = currentError; Args.CurrentIteration = currentIteration; IterationChanged(this, Args); }

if (currentIteration >= maximumIteration || Args.Stop) return false; //Huan luyen loi

return true; }

Trong đó hàmForwardPropagate()và BackPropagate()được cài đặt cụ thể như sau:

// Ham lan truyen xuoi

publicvoid ForwardPropagate(double[] pattern, T output) {

int i, j;

double total;

//Apply input cho mang

for (i = 0; i < PreInputNum; i++) {

PreInputLayer[i].Value = pattern[i]; }

//Tinh Inputs va Outputs cho lop Input

for (i = 0; i < InputNum; i++) {

for (j = 0; j < PreInputNum; j++) {

total += PreInputLayer[j].Value * PreInputLayer[j].Weights[i];

}

InputLayer[i].InputSum = total; InputLayer[i].Output = F(total); }

//Tinh Inputs va Outputs cho lop Hidden

for (i = 0; i < HiddenNum; i++) {

total = 0.0;

for (j = 0; j < InputNum; j++) {

total += InputLayer[j].Output * InputLayer[j].Weights[i];

}

HiddenLayer[i].InputSum = total; HiddenLayer[i].Output = F(total); }

//Tinh Inputs, Outputs, Targets, Errors cua lop Ouput

for (i = 0; i < OutputNum; i++) {

total = 0.0;

for (j = 0; j < HiddenNum; j++) {

total += HiddenLayer[j].Output * HiddenLayer[j].Weights[i];

} OutputLayer[i].InputSum = total; OutputLayer[i].output = F(total); OutputLayer[i].Target = OutputLayer[i].Value.CompareTo(output) == 0 ? 1.0 : 0.0; OutputLayer[i].Error = (OutputLayer[i].Target - OutputLayer[i].output) * (OutputLayer[i].output) * (1 - OutputLayer[i].output); } }

// Ham truyen nguoc de cap nhat trong so (weight)

publicvoid BackPropagate() {

int i, j;

double total;

//Fix Error tang Hidden

for (i = 0; i < HiddenNum; i++) {

total = 0.0;

for (j = 0; j < OutputNum; j++) {

total += HiddenLayer[i].Weights[j] * OutputLayer[j].Error;

}

HiddenLayer[i].Error = total; }

//Fix Error tang Layer

for (i = 0; i < InputNum; i++) {

total = 0.0;

for (j = 0; j < HiddenNum; j++) {

total += InputLayer[i].Weights[j] * HiddenLayer[j].Error;

}

InputLayer[i].Error = total; }

// Cap nhat trong so lop dau tien

for (i = 0; i < InputNum; i++) {

for (j = 0; j < PreInputNum; j++) {

PreInputLayer[j].Weights[i] +=

learningRate * InputLayer[i].Error * PreInputLayer[j].Value; }

}

//Cap nhat trong so lop thu 2

for (i = 0; i < HiddenNum; i++) {

for (j = 0; j < InputNum; j++) {

InputLayer[j].Weights[i] +=

learningRate * HiddenLayer[i].Error * InputLayer[j].Output; }

}

//Cap nhat tron so lop thu 3

for (i = 0; i < OutputNum; i++) {

for (j = 0; j < HiddenNum; j++) {

HiddenLayer[j].Weights[i] +=

learningRate * OutputLayer[i].Error * HiddenLayer[j].Output; }

} }

3.2.2.4. Module nhận dạng và ra quyết định

Với ảnh đầu vào cần nhận dạng, sau khi dùng tiền xử lý, trích chọn đặc trưng cần thiết đem so sánh với các mẫu đã huấn luyện để rút ra mẫu trùng nhất (tính theo phần trăm).

// Nhan dang anh

publicvoid Recognize(double[] Input, ref T MatchedHigh, refdouble

OutputValueHight, ref T MatchedLow, refdouble OutputValueLow) {

int i, j;

double total = 0.0;

double max = -1;

//Apply input cho mang

for (i = 0; i < PreInputNum; i++) {

PreInputLayer[i].Value = Input[i]; }

//Tinh Inputs va Outputs cua lop Input

for (i = 0; i < InputNum; i++) {

total = 0.0;

for (j = 0; j < PreInputNum; j++) {

total += PreInputLayer[j].Value * PreInputLayer[j].Weights[i];

}

InputLayer[i].InputSum = total; InputLayer[i].Output = F(total); }

// Tinh Inputs va Outputs cua lop Hidden

for (i = 0; i < HiddenNum; i++) {

total = 0.0;

for (j = 0; j < InputNum; j++) {

total += InputLayer[j].Output * InputLayer[j].Weights[i];

}

HiddenLayer[i].InputSum = total; HiddenLayer[i].Output = F(total); }

//Tim Output trung voi mau

for (i = 0; i < OutputNum; i++) {

total = 0.0;

for (j = 0; j < HiddenNum; j++) {

total += HiddenLayer[j].Output* HiddenLayer[j].Weights[i];

} OutputLayer[i].InputSum = total; OutputLayer[i].output = F(total); if (OutputLayer[i].output > max) { MatchedLow = MatchedHigh; OutputValueLow = max; max = OutputLayer[i].output; MatchedHigh = OutputLayer[i].Value; OutputValueHight = max; } } }

Với những ảnh sau khi trích chọn đặc trưng trùng với mẫu đến 70% thì xác định đó là ảnh “đen” từ đó đưa ra màn hình cảnh báo. Sau đó nơ-ron cập nhật vào danh mục mẫu đã được training.Khả năng “tự học” là điểm rất hay của mạng nơ-ron nhân tạo.

3.2.3. Chương trình kiểm soát ảnh “đen” BlockPornImage

3.2.3.1. Một số hình ảnh về chương trình

Hình 3.4: Tab quản lý mạng và phát hiện ảnh

Một phần của tài liệu mạng nơ-ron nhân tạo trong kiểm soát nội dung hình ảnh (Trang 63 - 83)

Tải bản đầy đủ (DOC)

(83 trang)
w