Các nội dung sẽ tiến hành đề cập trong bài blog lần này
EEG (Electroencephalography) là gì?1 số lí thuyết cơ bạn dạng về EEGBài toán Sleep-state classification Các phía tiếp cận và luồng up date cơ bạn dạng khác Tiền xử lí dữ liệu (Data preprocessing)Trích rút đặc trưng (Feature Extraction)Chọn lọc đặc trưng (Feature Selection)Phân lớp (Classification)Kết quả Các khó khăn trong quy trình thực hiện Các hướng cách tân và phát triển với dữ liệu EEGKết luận Tài liệu tham khảo
EEG (Electroencephalography) là gì?!
EEG - Electroencephalography (Electro + encephalography) hay năng lượng điện não đồ là 1 trong hệ thống có tác dụng ghi lại các xung điện được phát ra từ những neuron thần kinh, chào đón qua vỏ não của nhỏ người. Bộc lộ này là bình luận điện sinh học tập được tiếp nhận ngay tức tự khắc của tế bào não thông qua vỏ não. Là 1 trong những trong những bộ phận phức tạp duy nhất trên khung người người, não tín đồ khi có những tác rượu cồn từ những giác quan liêu như: thị giác, thính giác, xúc giác, .v.v. Sẽ sản sinh ra các tín hiệu năng lượng điện rất bé dại phản hồi lại và được trao đổi thông qua các neuron thần kinh. Việc triển khai đo đạc EEG hay được thực hiện bằng phương pháp gắn nhiều điện cực rải ráp bao bọc đầu, từng điện rất sẽ thu dấn được những xung năng lượng điện tại từng khoanh vùng riêng biệt, mỗi năng lượng điện cực được nhìn nhận như là 1 trong những kênh (channel). Thường có phong cách thiết kế với mũ đội đầu gán điện cực như hình bên dưới:
1 số lí thuyết cơ bản
Tín hiệu điện của sóng óc khá bé xíu nên trước khi triển khai lưu trữ thường được qua 1 bộ phận khuếch đại tín hiệu. Về cơ bản, dải tần của sóng não EEG thường nằm trong vòng từ 0.5Hz - 40Hz và được chia nhỏ tuổi thành các loại sóng như sau:
Sóng Delta (Sóng Theta (4-7Hz): cũng chính là sóng với biên độ tương đối thấp, thường được phát hiện tại khi con bạn ngủ.Sóng Alpha (8-15Hz): là nhiều loại sóng thường lộ diện ở bạn trưởng thành, lộ diện nhiều hơn tại vùng sau vỏ não người. Thường lộ diện khi nhỏ người thoải mái và nhắm mắt.Sóng Beta (16-31Hz): mở ra đồng đều cả về độ tuổi và gia tốc tại các vùng vỏ não. Là sóng cùng với biên độ thấp tuy thế tần số khá lớn, thường xuất hiện thêm lúc con bạn đang tập trung quan tâm đến hay băn khoăn lo lắng cao độ.Sóng Gamma (> 32Hz): là sóng cùng với tần số lớn số 1 và biên độ thấp nhất, là một số loại sóng tương quan mật thiết tới những tác vụ cấp cao của con bạn như những công dụng của nhận thức. Sóng Gamma xuất hiện thỉnh thoảng con người chạm mặt stress, stress và hay được tra cứu thấy ở những thiên tài về hội họa, thi ca, .v.v....
Vì các điện rất được đặt rải ráp bao quanh đầu yêu cầu để ráng thể, từng channel đo tại một vùng riêng lẻ sẽ có 1 quy mong đặt thương hiệu riêng. Trong thực tế, số lượng điện cực gán trên vỏ mũ không chũm định, thường thì sẽ là 32 hoặc 64 channel, mỗi phiên bản thiết kế điện cực sẽ có 1 tên riêng biệt quy chuẩn chỉnh và con số channel cũng không giống nhau và được gọi tầm thường là các montage. Ví dụ, cùng với montage Standard 1005:
1 số lấy một ví dụ khác:
Reference: từng điện cực đo xung điện đều dựa trên sự chênh lệch năng lượng điện thế với cùng một điểm gọi là reference. Việc chọn điểm reference trên đâu bên trên đầu cũng số đông gây tác động tới kết quả thu được của tín hiệu. Vậy nên, để thống tuyệt nhất và tạo thành 1 quy chuẩn chỉnh nhất định, tại các vị trí sau hay được lựa chọn làm reference:2 dái tai (earlobes)2 xương cầm cố (mastoid bonds) - phần xương lồi lên ngay sau tai Đỉnh đầu (vertex)
Epochs: tài liệu EEG được đo đạc và tích lũy trong 1 khoảng tầm thời gian thường xuyên và tốt nhất định, tại từng điểm thời gian sẽ có được tín hiệu năng lượng điện não thu được tại mỗi điện cực. 1 Epoch được quan niệm là biểu lộ thu được trong 1 khoảng thời hạn nhất định. Ví dụ, biểu đạt với sampling rate là 100Hz đo vào 10s thu được 1 epochs cùng với 100 x 10 = 1000 samples.
Evoked: đơn giản là trung bình giá trị của khá nhiều epoch trong 1 khoảng thời hạn nhất định ứng với nhiều channels.
Đối với những bài toàn EEG classification sẽ có khá nhiều các giải pháp tiếp cận nhằm xử lí bài bác toán. Hoàn toàn có thể xử lí bằng việc xây dựng các feature dạng time-domain, dạng frequency-domain hoặc cả 2 như time-frequency-domain, thậm chí còn dùng cả mạng CNN (với tài liệu là ma trận thu được khi đổi khác tín hiệu EEG), ..v.v. Các công đoạn chính bao gồm:
EDA & Data Preprocessing: điều tra dữ liệu, visualize cùng tiền xử lí dữ liệu (lọc giới hạn miền tần số, sút thiểu nhiễu, giảm thiểu những tín hiệu phía bên ngoài hay remove artifact như nhịp đập của tim, chớp mắt, ...)Feature Extraction: dữ liệu thuở đầu gọi là raw data, sau khoản thời gian được tiền up load cần tiến hành 1 số các làm việc để rất có thể trích rút các feature núm thể, trường đoản cú đó quy mô sau này sẽ dựa vào đó để "học" từ bỏ dữ liệu. Có rất nhiều các phương pháp về feature extraction với tài liệu EEG dành riêng và tài liệu về bộc lộ (signal) nói chung. 1 số từ khóa mình đã đề cập dưới như: time-domain, frequency-domain, time-frequency-domain, DFT với FFT (Fast Fourier Transform), Wavelet Transform, .v.v.Feature Selection: tương quan đến việc tinh lọc và sút thiểu con số feature, một số ít khái niệm đã đề cập như: PCA, ICA, ..Classification: mô hình phân các loại dựa trên những feature đã trích rút được mặt trên, bất kì mô hình classification nào chúng ta có thể thử với áp dụng: SVM, Tree-based model, CNN, ...
Bài toán Sleep-state classification
Dữ liệu sleep-state tất cả 5 class: W, N1, N2, N3 với REM, được phát âm như sau:
W (Stage Wake): tâm trạng con bạn tỉnh táo.N1 (Stage 1): giai đoạn bước đầu của giấc mộng hay ngủ nông, là quy trình chuyển tiếp giữa thức và ngủ, dễ dàng bị ngăn cách và cực nhọc nhận biết.N2 (Stage 2): tiến trình con người bắt đầu chìm vào tinh thần ngủ sâu, sóng não nhanh dần đều, sức nóng độ khung người giảm, nhịp tim chậm rì rì lại, thừa nhận thức của con fan với môi trường phía bên ngoài gần như ko còn.N3 (Stage 3): quá trình ngủ sâu, con fan ít bao gồm phản ứng với tiếng ồn ào và vận động bên ngoài. Nếu bị đánh thức đột ngột thì hoàn toàn có thể sẽ mất vài phút để "định thần" lại
REM (Rapid Eye Movement): vào kì này sẽ bước đầu trong thời hạn rất ngắn, cũng chính là lúc là niềm mơ ước xuất hiện. Là quy trình tiến độ mà mắt sẽ hoạt động nhanh cùng liên tục, cơ bắp cơ liệt; nhịp tim, hơi thở, sức nóng độ khung người không kiểm soát. Đôi khi, cũng xuất hiện thêm hiện tượng "bóng đè" khi một người đột nhiên thức giấc ở tinh thần REM.
Dữ liệu ban sơ gọi là raw data và cần được thực hiện tiền xử lí trước lúc đưa vào model. Hiện nay tại, đối với data sleep state này chỉ gồm duy duy nhất 1 channel nên không cần phải tiền up load quá nhiều, 1 số ít bước cơ bạn dạng như: bandpass filter, scaling, ... Để thấy rõ sự công dụng của preprocess data, mình sẽ tiến hành training mã sản phẩm 2 lần, 1 cùng với raw data với 1 với preprocessed data.
X = np.zeros((0, 3000, 1))y = <>for fn in total_fs: samples = np.load(fn) X_data = samples<"x"> X = np.concatenate((X, X_data), axis=0) y.extend(samples<"y">)y = np.array(y)# X.shape = (42308, 3000, 1)# y.shape = (42308, )Thực hiện phân tách train, test, val:X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.2, random_state=42)X_train, X_val, y_train, y_val = train_test_split( X_train, y_train, test_size=0.2, random_state=42)# X_train.shape, X_test.shape, X_val.shape# ((27076, 3000, 1), (8462, 3000, 1), (6770, 3000, 1))Thực hiện tại tiền xử lí dữ liệu, filter signal theo bandpass filter (lọc theo cận trên + cận dưới)from scipy.signal import butter, lfilterdef butter_bandpass(lowcut, highpass, fs, order=4): nyq = 0.5 * fs # low = lowcut / nyq high = highpass / nyq b, a = butter(order, high, btype="highpass") return b, a def butter_bandpass_filter(data, highpass, fs, order=4): b, a = butter_bandpass(0, highpass, fs, order=order) y = lfilter(b, a, data) return y pp_X_train = np.array()pp_X_val = np.array()pp_X_test = np.array()
Model
def model_baseline_2017(n_classes=5, use_sub_layer=False, summary=True): # two conv-nets in parallel for feature learning, # one with fine resolution another with coarse resolution # network to learn fine features input Layer = Input(shape=(3000, 1), name="in Layer") conv Fine = Conv1D(filters=64, kernel_size=int(Fs/2), strides=int(Fs/16), padding="same", activation="relu", name="f Conv1")(input Layer) conv Fine = Max Pool1D(pool_size=8, strides=8, name="f Max P1")(conv Fine) conv Fine = Dropout(rate=0.5, name="f Drop1")(conv Fine) conv Fine = Conv1D(filters=128, kernel_size=8, padding="same", activation="relu", name="f Conv2")(conv Fine) conv Fine = Conv1D(filters=128, kernel_size=8, padding="same", activation="relu", name="f Conv3")(conv Fine) conv Fine = Conv1D(filters=128, kernel_size=8, padding="same", activation="relu", name="f Conv4")(conv Fine) conv Fine = Max Pool1D(pool_size=4, strides=4, name="f Max P2")(conv Fine) fine Shape = conv Fine.get_shape() conv Fine = Flatten(name="f Flat1")(conv Fine) # network to lớn learn coarse features conv Coarse = Conv1D(filters=32, kernel_size=Fs*4, strides=int(Fs/2), padding="same", activation="relu", name="c Conv1")(input Layer) conv Coarse = Max Pool1D(pool_size=4, strides=4, name="c Max P1")(conv Coarse) conv Coarse = Dropout(rate=0.5, name="c Drop1")(conv Coarse) conv Coarse = Conv1D(filters=128, kernel_size=6, padding="same", activation="relu", name="c Conv2")(conv Coarse) conv Coarse = Conv1D(filters=128, kernel_size=6, padding="same", activation="relu", name="c Conv3")(conv Coarse) conv Coarse = Conv1D(filters=128, kernel_size=6, padding="same", activation="relu", name="c Conv4")(conv Coarse) conv Coarse = Max Pool1D(pool_size=2, strides=2, name="c Max P2")(conv Coarse) coarse Shape = conv Coarse.get_shape() conv Coarse = Flatten(name="c Flat1")(conv Coarse) # concatenate coarse and fine cnns merge Layer = concatenate(Fine, conv Coarse>, name="merge_1") out Layer = Dropout(rate=0.5, name="m Drop1")(merge Layer) if use_sub_layer: sub_layer = Dense(1024, activation="relu", name="sub_layer")(out Layer) # model = Model(input Layer, merge Layer) # LSTM out Layer = Reshape((1, int(fine Shape<1>*fine Shape<2> + coarse Shape<1>*coarse Shape<2>)), name="reshape1")(out Layer) out Layer = Bidirectional(LSTM(128, activation="relu", dropout=0.5, name="b Lstm1"))(out Layer) out Layer = Reshape((1, int(out Layer.get_shape()<1>)))(out Layer) out Layer = Bidirectional(LSTM(128, activation="relu", dropout=0.5, name="b Lstm2"))(out Layer) # merge out_layer & sub_layer if use_sub_layer: out Layer = concatenate(Layer, sub_layer>, name="merge_2") out Layer = Dropout(rate=0.5, name="m Drop2")(out Layer) out Layer = Dense(256, activation="relu", name="sub_layer_2")(out Layer) out Layer = Dropout(rate=0.5, name="merge_out_sub")(out Layer) # Classify out Layer = Dense(n_classes, activation="softmax", name="out Layer")(out Layer) model = Model(input Layer, out Layer) optimizer = keras.optimizers.Adam(lr=1e-4) model.compile(optimizer=optimizer, loss="categorical_crossentropy", metrics=<"acc">) if summary: model.summary() return modelmodel_2017 = model_baseline_2017(use_sub_layer=False, summary=True)Reference: deepsleepnet & deepsleepnet-paper
Calbacks:
checkpoint = Model Checkpoint("model_cps", monitor="val_loss", verbose=1, save_best_only=True, mode="max")early = Early Stopping(monitor="val_loss", mode="max", patience=20, verbose=1)redonplat = Reduce LROn
Vì số lượng samples thân từng class không cân đối nên quanh đó accuracy, ta sử dụng thêm những metric khác như: presicion, recall với f1-score để reviews mô hình. Kết quả thu được với raw data:
Training mã sản phẩm với dữ liệu đã được preprocess:
Có thể thấy là val_loss cùng val_acc của mô hình đã được nâng cấp đáng nói so với mặt trên
Kết trái thu được cùng với preprocessed data:
Save model
model_2017.save_weights("model_2017.h5")model_json = model_2017.to_json()with open("eeg_model_2017_config.json", "w") as f: f.write(model_json)
Kết quả
Dựa vào tâm lý ngủ, ta có thể có các biện pháp ảnh hưởng từ bên ngoài để góp con người ngủ ngon hơn và bớt căng thẳng, lo lắng.
Về vấn đề sleep-state classification, có một điểm chú ý là dữ liệu giữa từng class thường không mọi nhau (khá mất cân nặng bằng) cho nên việc sử dụng accuracy không mạng lại nhiều ý nghĩa; ở kề bên đó, ta sử dụng thêm các metric thông dụng không giống như: presicion, recall, f1-score, roc-auc.
Bên trên bản thân chỉ triển khai chia train/test/val dữ liệu, hiệu quả đạt được cũng khá tốt. Các bạn có thể áp dụng thêm cross validation nhằm mô hình có chức năng tổng quát lác hóa bên trên dữ liệu giỏi hơn (generalization). Kết quả so với một số model hiện tại như:
Có thể thấy rằng, qua 2 lần training, precision / recall / f1-score của class N1 hơi thấp so với những class khác. Điều này cũng được đề cập cho trong 2 paper bên trên, các chúng ta cũng có thể tìm đọc thêm. Gồm thể nâng cấp mô hình bằng cách kết phù hợp thêm các các phương thức feature extraction khác nhưng mình sẽ đề cập ngay bên dưới đây, bao gồm: preprocessing data, feature extraction, feature selection.
Các hướng tiếp cận không giống của bài bác toán
1. Data Preprocessing Vì dữ liệu mình sử dụng trong bài blog lần này chỉ bao gồm 1channel duy nhất nên ít bị tác động bởi các điều khiếu nại ngoại cảnh hơn. Ngoài bài toán xử lí filter như:low-pass filter (thấp hơn vậy thì lấy)high-pass filter (cao hơn nữa thì lấy)band-pass fiter (lấy trong khúc )north-filter (bỏ đi các sample ở 1 miền tần số xác minh f)
Mạng CNN bên trên mình sử dụng cũng có vai trò như 1 phương pháp feature extraction, mặc dù ngoài cách scaling với filter data thì model hiện tại như một hidden box vậy. Trước lúc có sự can thiệp tự Deep Learning, tương đối nhiều các phương pháp về feature extraction khác cũng khá được đề xuất cùng khá phong phú về tên miền như:
Bandpower Spectral Entropy DFT & FFT: DFT (Discrete Fourier Transform) là 1 phương thức chuyển tài liệu từ dạng time-domain sang trọng frequency-domain. Là 1 trong những phương thức quen ở trong và được sử dụng nhiều trong xử lí biểu lộ nói chung. FFT (Fast Fourier Transform) là 1 cách đơn giản hóa biểu thức của DFT giúp tính cấp tốc hơn, giảm độ phức tạp từ O(n2)O(n^2)O(n2) xuống O(n.log(n))O(n.log(n))O(n.log(n)). Với giả định rằng bất kỳ 1 hàm non-linear nào thì cũng đều có thể de-compose thành tổng của những hàm sin với biên độ cùng tần số khác nhau.
Time-frequency-domain
STFT (Short-time Fourier Transform): là 1 trong những phương pháp cách tân hơn đối với FFT. FFT có một nhược đặc điểm đó là chỉ suy xét frequency của dữ liệu mà bỏ lỡ time-domain. STFT cải thiện điều đó bằng phương pháp chia epoch thành những đoạn nhỏ tuổi hơn cùng tính FFT trên riêng biệt từng đoạn.
Wavelet Transform cùng DWT (Discrete Wavelet Transform): điểm yếu kém của STFT là ta lần chần được số đoạn yêu cầu chia để vận dụng FFT lên đó, việc bằng phẳng giữa time-domain cùng frequency-domain là 1 trong điều không thể dễ dàng. Wavelet transform định nghĩa các hàm transform với những biên độ và tần số khác biệt nhưng giới hạn về độ dài, có tính năng dùng nhằm trích rút được những feature đặc trưng từ biểu thị với từng hàm transform được sử dụng (tương trường đoản cú như những filter vào mạng CNN vậy!). Các bạn có thể hiểu hơn về cách Wavelet vận động thông qua ảnh gif mặt dưới:
1 lấy ví dụ khác để thấy được tiêu giảm của FFT lên tín hiệu, vì chưng không lưu ý đến time-domain phải dù 2 biểu lộ nhìn "ngược nhau" nhưng mọi trả về frequency feature tương tự như nhau!
CNN: vào vài năm lại đây, với việc nở rộ của DL thì việc áp dụng DL vào DSP (Digital signal processing) ngày một phổ biến. Tiêu biểu nhất có lẽ rằng là mạng CNN Wavenet của Google. Tùy trực thuộc vào tài liệu (số lượng channel; dữ liệu đặc điểm như EEG; ...) mà những mạng CNN có phong cách thiết kế với nhiều architech khác nhau, ví dụ:Mạng CNN thuần cho bài xích tóan classification RNN (LSTM)CNN + LSTM2 CNN + LSTM (như mô hình mạng gồm đề cập mặt trên).v.v.3. Feature Selection
Vì dữ liệu dạng signal là dạng tài liệu liên tục, để xử lí thường thì ta sẽ đưa từ digital signal sang analog signal (continoue signal --> discrete signal) để triển khai việc thuận lợi hơn. Tuy nhiên, số lượng samples chiếm được trong 1 thời gian ttt vẫn hơi lớn. đem ví dụ, biểu hiện EEG cùng với 32 channels, sampling rate = 100, tiến hành xử lí 1 với 1 epoch = 30s thì con số samples phải xử lí = 100 * 30 * 32 = 96000 samples, 1 số lượng khá phệ chỉ với cùng một epoch! sau khoản thời gian áp dụng các cách thức feature extraction mặt trên, ta hoàn toàn có thể sử dụng thêm feature selection để bớt thiểu con số feature, giảm giá cả tính toán và chọn lọc ra những feature đặc thù nhất. 1 vài phương pháp chú ý vào EEG như:
PCA (Principal Component Analysis) cùng ICA (Independent Component Analysis): PCA là 1 trong những trong những giải thuật về linear dimension reduction với feature selection được sử dụng phổ cập nhất. Còn ICA là lời giải non-linear dimension reduction cùng thường được kết hợp với wavelet transform để trích rút những spatial feature với time-frequency feature.
Filter bank Selection: được sử dụng kèm các giải thuật về CSP (Common Spatial Pattern) mặt trên.
4. Classification
Rất những các cách thức về classification hoàn toàn có thể áp dụng như: LDA, SVM, KNN, Naive Bayes, Tree-based, .v.v. Bên cạnh ra, giải pháp tiếp cận cùng với DL sử dụng những mạng neural không còn xa lạ như CNN, RNN (LSTM), Stack Auto Encoder, Deep Belief Networkds, .v.v. Trong thời gian vài năm trở về đây có được các hiệu quả khá tốt, thậm chí còn vượt trội hơn nhiều so với các cách thức cổ điển. Việc xây dựng các mạng network cũng tương đối phong phú về ý tưởng: CNN + LSTM, CNN + Seq2Seq + Attention, Dilated CNN (Wavenet), .v.v.
Lấy ví dụ điển hình nổi bật về việc sử dụng CNN cho việc classification. Với 1 tập dữ liệu đủ lớn, đầu vào của mạng CNN hoàn toàn có thể là raw data; CNN vận động như 1 hidden box và chúng ta khó hoàn toàn có thể biết rõ ràng trong đó về tối ưu ra sao với hàng triệu tham số. Bằng thực nghiệm như mặt trên, ta thấy mô hình cho kết quả tốt hơn với dữ liệu preprocessed data. CNN thường xuyên được sử dụng trong những bài toán phân loại hình ảnh và chuyển động như 1 phương pháp feature extraction vậy.
Khi thực hiện CNN cho bài toán EEG classification, đầu vào của mạng network sẽ sở hữu được 2 lựa chọn: một là biểu diễn EEG signal dưới dạng ảnh (matrix) hoặc raw data / preprocessed data:
Với việc chuyển EEG signal lịch sự dạng ảnh: sử dụng những time-frequency feature nhằm thu được các ma trận 2 chiều thể hiện tương quan giữa time cùng frequency bên trên 1 hoặc những channels. Các phương pháp điển hình vẫn đề cập bên trên như: STFT (Short time Fourier Transform), Wavelet Transform (CWT - Continuous Wavelet Transform), .v.v.Sử dụng raw data / preprocessed data làm nguồn vào của CNN: ví dụ như mô hình 2CNN + LSTM được thiết kế bên trên. Bởi thực nghiệm đã cho thấy rằng CNN ko chỉ hoạt động tốt với các dữ liệu dạng ảnh, mà lại còn có thể ứng dụng và đạt tác dụng tương đương với các mạng RNN (LSTM) cho những bài toán như: text classification, signal classification, .v.v. Bởi việc thực hiện CNN 1D như một cửa sổ trượt, ta rất có thể trích rút ra được những thông tin đặc biệt quan trọng trong 1 epoch signal.
1 ưu thế nữa của CNN khi sử dụng cho những bài toán classification là thời hạn training cấp tốc hơn rất nhiều so với RNN. Trong vô số trường hợp, việc thực hiện CNN mang đến text classification, signal classification còn đem lại công dụng tốt hơn so với các quy mô RNN phổ biến như LSTM (GRU).
Các khó khăn trong quá trình thực hiện
Xử lí nhiễu và sa thải antifact: data thực tế với nhiều channel thường bị ảnh hưởng bởi những điều khiếu nại ngoại cảnh hoặc antifact như: nhịp tim đập, chớp mắt, .v.v. Nên việc loại bỏ và tách các tin tức không cần thiết cũng là một trong trong những quy trình khi preprocessing data.
Multi-channel & single-channel với vấn đề thực tế: Multi-channel hay single-channel thì đều chạm mặt phải những khó khăn nhất định trong quá trình xây dựng tế bào hình. Với multi-channel là vấn đề xử lí nhiễu, loại trừ artifact, vứt bỏ bad channel, ... Với single-channel là việc xử lí data synthesis, ensemble feature extraction techniques, ...
Các hướng cải cách và phát triển với tài liệu EEG
Epileptic detection: dựa trên dữ liệu sóng não nhằm chẩn đoán bệnh động kinh. Mình nghĩ đây là 1 vấn đề khá hay và thực tế, trọn vẹn có thể đầu tư để nghiên cứu và cải tiến và phát triển thêm, y như 1 số bài bác toán áp dụng CNN nhằm chẩn đoán căn bệnh ung thư, ung thư vú chẳng hạn! Các bạn cũng có thể tham khảo một số ít competition bên trên kaggle như:
1. Mục đích của tiền cách xử trí ảnh
Khi cách tân và phát triển một thuật toán phân loại ảnh chúng ta gồm thể gặp mặt phải một vài trường hòa hợp không ước ao đợi như: hiệu quả huấn luyện bao gồm độ chính xác rất cao trên cả tập huấn luyện và giảng dạy (train dataset) cùng tập cách tân và phát triển (dev dataset). Mà lại khi áp dụng vào thực tế lại mang lại độ đúng chuẩn thấp. Có không ít các lý do dẫn tới điều đó và một trong những đó là:
Các bức hình ảnh được đào tạo và huấn luyện khác xa so với hầu như bức ảnh được người tiêu dùng upload về những khía cạnh: độ phân giải, độ mạnh màu sắc, quality ảnh, độ to bé dại của đồ vật thể, chiều, hướng và tứ thế của trang bị thể bên trong ảnh.
Có thể những bức ảnh được người tiêu dùng upload lên tuy nhiên cùng nhãn tuy nhiên khác về đặc thù so với các bức ảnh đã huấn luyện. Lấy ví dụ như trong một thuật toán phân nhiều loại dog & cat, tập huấn luyện chỉ bao hàm những nhỏ mèo cứng cáp nhưng thực tế người tiêu dùng lại upload lên không hề ít hình ảnh của mèo con rất có thể dẫn tới thuật toán bị nhầm lẫn.
Đối với một vài tác vụ phân loại ảnh khó, đòi hỏi chuyên gia gán nhãn, rất giản đơn mắc sai lầm như chuẩn đoán bệnh nhãn cầu. Một trong những ít các hình ảnh trong hướng dẫn luyện có thể bị gán không nên nhãn. Vì chưng đó ảnh hưởng đến khả năng dự báo của thuật toán.
Bộ dữ liệu đào tạo và huấn luyện có kích thước quá nhỏ dại và không đại diện thay mặt cho tổng thể các class được huấn luyện.
Phân phối của tập giảng dạy khác xa so với thực tế. Ví dụ điển hình tập đào tạo và huấn luyện chứa ảnh chó với mèo theo xác suất 50:50 nhưng số lượng bức hình ảnh người dùng upload lên ảnh chó chiếm phần lớn theo tỷ lệ 90:10.…
Và tương đối nhiều các lý do khác dẫn tới thuật toán chuyển động không được như kì vọng.
Khi đối mặt với trường thích hợp trên chúng ta cần phải tìm ra lý do thực sự là gì nhằm từ đó giới thiệu phương án thích hợp khắc phục các lỗi tế bào hình.
Các kinh nghiệm để giải quyết và xử lý các trường đúng theo lỗi bởi thế đã được tổng hợp vô cùng kĩ trong cuốn khát vọng học đồ vật - Andrew Ng. Hiện tại sách đã được nhóm anh Tiệp và xã hội dịch ra tiếng Việt khá đầy đủ. Chúng ta đọc có thể đọc từ chương 1 mang đến 16 để tìm hiểu phương pháp xây dựng và phát triển những quy mô thông qua kinh nghiệm tay nghề được tổng kết của tác giả.
Trong cuốn sách người sáng tác nêu ra những hướng giải quyết và xử lý như: biến đổi tập dữ liệu giảng dạy và tập dữ liệu phát triển, thống kê lỗi cùng tìm cách giải quyết và xử lý các lỗi thiết yếu mang lại cải thiện lớn, xác minh tập huấn luyện/phát triển cùng phép đo 1-1 trị phù hợp ngay từ trên đầu cho bài bác toán, áp dụng các cách thức và loài kiến trúc quy mô khác nhau,…
Trong trường hợp tài liệu không đủ lớn, tài liệu gán nhãn với ngân sách cao (như chuẩn chỉnh đoán dịch qua hình ảnh, phải kiếm được bệnh nhân gặp mặt đúng bệnh dịch đó và bác bỏ sĩ siêng khoa để chuẩn đoán), việc chuyển đổi tập dữ liệu là tương đối tốn đưa ra phí. Bao gồm một phương pháp mà bản thân nghĩ rằng để giúp đỡ gia tăng số lượng hình ảnh đầu vào. Đó chính là học tăng cường (data augumentation) thực hiện các biến đổi tiền giải pháp xử lý hình hình ảnh đầu vào. Đây là một cách thức hiệu quả nhằm đổi khác tập dữ liệu đào tạo và giảng dạy và từ đó giúp nâng cấp hiệu trái dự báo.
Vậy tiền giải pháp xử lý dữ liệu hình ảnh là gì và tất cả những phương pháp nào để thực hiện tiền cách xử lý ảnh, nội dung bài viết này sẽ giới thiệu tới các bạn một series những cách tiếp cận khác nhau của chi phí xử lý hình ảnh trên cả 2 phương diện định hướng kết vừa lòng thực hành. Các code đang được tiến hành trên opencv, một package khá app trong xử lý ảnh. Chúng ta ban đầu nhé.
2. Tiền xử trí ảnh
2.1. Các đổi khác hình học.
Đây là tập hợp các phép biến hóa hình hình ảnh từ một hình trạng này thanh lịch một bề ngoài khác trải qua việc làm thay đổi phương, chiều, góc, cạnh mà lại không làm biến hóa nội dung bao gồm của bức ảnh. Về mặt định hướng toán học tập một phép đổi khác được quan niệm như sau:
Định nghĩa:
Mỗi một phép biến hóa hình học đang được xác định bởi một ma trận di chuyển (translation matrix) $mathbfM$. Khi đó bất cứ 1 điểm bao gồm tọa độ $(x, y)$ trên hình ảnh gốc thông qua phép đổi khác $T$ sẽ có tọa độ trong không khí mới sau dịch chuyển là $T(x, y)$ theo công thức:
Một hàm số $T: mathbbR^n
ightarrow mathbbR^n$ được coi là một phép đổi khác tuyến tính nếu như nó vừa lòng 2 đặc thù sau:
đặc thù cộng tính: (T(vecu + vecv) = T(vecu) + T(vecv)) đặc thù nhân tính:(T(lambda vecx) = lambda T(vecx))
Hình 1: tính chất cộng tính của phép thay đổi tuyến tính. Ta nhận ra tính hóa học này hoàn toàn hoàn toàn có thể được suy ra trực tiếp từ phép nhân ma trận $mathbfM(mathbfA+mathbfB) = mathbfMmathbfA+mathbfMmathbfB$. Trong những số ấy $mathbfM$ là ma trận biến đổi và $mathbfA, mathbfB$ là các tọa độ điểm.
Như vậy tổng kết lại, để xác minh một phép chuyển đổi hình học tập ta sẽ phải phải xác định được ma trận dịch chuyển của nó là gì? những dạng biển khơi đổi sẽ được trình bày dưới sẽ được đặc thù bởi những dạng ma trận di chuyển khác nhau.
2.1.1. Phóng đại hình ảnh (Scale ảnh)
Scale hình ảnh là câu hỏi chúng ta biến đổi kích thước dài, rộng lớn của ảnh mà ko làm biến hóa tính chất tuy vậy song của các đoạn trực tiếp trên hình ảnh gốc so với những trục tọa độ X và Y. Trong opencv, họ sẽ thay đổi kích thước của hình hình ảnh bằng hàm cv2.resize().
Theo có mang về phép thay đổi hình học tập thì một biến đổi phóng đại những chiều (x, y) theo thông số (a_1, a_2) sẽ có được ma trận dịch chuyển M là ma trận mặt đường chéo. Có nghĩa là ma trận vuông tất cả đường chéo cánh chính là $$ với các thành phần còn lại bằng 0. Khi ấy phép dịch chuyển sẽ là:
Hàm _download Image() vẫn có tính năng tải cùng convert ảnh sang numpy array từ đầu vào là liên kết url của ảnh. Bạn đọc lưu ý, hàm này sẽ được sử dụng xuyên thấu bài hướng dẫn.