Phân loại hình ảnh Python-learn để xây dựng mô hình CNN để phát hiện viêm phổi trong tia X từ đầu bằng cách sử dụng Keras với TensorFlow làm phụ trợ. Cập nhật lần cuối: 11 tháng 10 năm 2022 Show
Khi bạn bắt đầu & nbsp; để đọc bài viết này về phân loại hình ảnh, tôi muốn bạn nhìn xung quanh và quan sát những điều bạn có thể thấy. Dựa trên nơi bạn đang ngồi, những thứ bạn thấy sẽ khác. Gần 99% thời gian, bạn có thể đặt tên cho những điều này, ngay cả khi bạn không biết tên chính xác, bạn biết nó trông như thế nào. Đi bộ trên đường, bạn thấy một loài mèo hoàn toàn mới mà bạn chưa từng thấy trước đây, nhưng bạn vẫn biết nó là một con mèo, phải không? Đó là bởi vì nhận thức của bạn và hệ thống thị giác của bạn có thể khái quát tốt. & NBSP; hình ảnh), sự khác biệt về hướng và nguồn ánh sáng. Đó là bởi vì bộ não của chúng ta đã phát triển qua hàng triệu năm để giảm thiểu những thách thức này. Mặt khác, các máy học học máy & nbsp; trong khi phân loại hình ảnh phải đối mặt với những thách thức này và phân loại hình ảnh trở thành một vấn đề thú vị để chúng ta giải quyết.
Xây dựng một mô hình phân loại hình ảnh đa lớp Python sử dụng CNNMã giải pháp có thể tải xuống | Video giải thích | Hô trợ ky thuật Bắt đầu dự án Mục lục
Phân loại hình ảnh- Giới thiệuHọc sâu để phân loại hình ảnh y tế Mô hình phân loại hình ảnh Python & nbsp; để phát hiện viêm phổi từ hình ảnh tia X Học sâu để phân loại hình ảnh y tếMô hình phân loại hình ảnh Python & nbsp; để phát hiện viêm phổi từ hình ảnh tia X Mô hình phân loại hình ảnh Python & nbsp; để phát hiện viêm phổi từ hình ảnh tia XTheo WHO, mỗi năm hơn 150 triệu người bị nhiễm trùng viêm phổi, đặc biệt là trẻ em dưới 5 tuổi. Một trong ba trường hợp tử vong ở Ấn Độ là do viêm phổi theo báo cáo của Tổ chức Y tế Thế giới (WHO). X-quang ngực hiện tại, phương pháp tốt nhất có sẵn để chẩn đoán viêm phổi, và do đó đóng một vai trò quan trọng trong việc chẩn đoán và cung cấp dịch vụ chăm sóc lâm sàng cho những người bị ảnh hưởng. Tuy nhiên, phát hiện viêm phổi trong tia X ngực là một nhiệm vụ đầy thách thức dựa vào sự sẵn có của các bác sĩ X quang chuyên gia. Các chuyên gia hoặc không có sẵn ở các khu vực xa xôi hoặc hầu hết mọi người có thể mua được. Trong những trường hợp như vậy, việc tự động phát hiện các bệnh thông qua AI trở thành nhu cầu của giờ. Trên thực tế, có ít nhất 2 cuộc thi hàng năm trên Kaggle được tổ chức bởi các tổ chức nghiên cứu, trong đó mục tiêu là phát hiện một căn bệnh từ các hình ảnh y tế. Chúng tôi sẽ làm một cái gì đó tương tự ở đây. Chúng tôi sẽ xây dựng một đường ống học máy từ đầu đến cuối sử dụng hình ảnh tia X của phổi để phát hiện viêm phổi ở bệnh nhân. Thử thách phân loại hình ảnhXây dựng một mô hình phân loại hình ảnh với độ chính xác để xác định xem một người đã bị nhiễm viêm phổi hay không bằng cách nhìn vào hình ảnh tia X ngực. Độ chính xác là rất quan trọng đối với phân loại hình ảnh máy học như vậy & mô hình NBSP; vì đó là vấn đề của cuộc sống. Bạn có thể đã nhận được ý tưởng về mức độ quan trọng của một ứng dụng. Vì vậy, không có bất kỳ sự chậm trễ nào nữa, hãy bắt đầu với phân loại hình ảnh CNN Python. Mục lục1) Tải dữ liệu, thư viện và các phụ thuộc khác. 2) Tiền xử lý dữ liệu và thế hệ hàng loạt 3) Xây dựng mô hình Python Phân loại hình ảnh CNN từ đầu 4) Chuyển giao học tập 5) Đánh giá & nbsp; 1) Tải hình ảnh X-quang ngực (viêm phổi)Bộ dữ liệu hình ảnh X-quang ngực của Pneumonia có sẵn công khai trên Kaggle. & NBSP; Bạn có thể tải xuống từ đây -& NBSP; Hình ảnh X -Ray Chest Pneumonia Kaggle DataSet. Hãy bắt đầu bằng việc tải tất cả các thư viện cần thiết và các phụ thuộc khác - Chúng tôi đã nhập OpenCV để tiền xử lý và tải. Đối với phần mô hình phân loại hình ảnh, chúng tôi sẽ sử dụng Keras với TensorFlow làm phụ trợ. Có thể tìm thấy quyền truy cập miễn phí vào & nbsp; Các ví dụ về mã học máy và mã R được giải quyết ở đây & nbsp; (Đây là sẵn sàng để sử dụng cho các dự án của bạn) & nbsp; & nbsp; Chúng tôi sẽ chia bộ dữ liệu thành ba bộ - đào tạo, xác thực và kiểm tra. Hãy để xác định các đường dẫn nơi dữ liệu của chúng tôi được lưu trữ. Có ba thư mục riêng biệt để đào tạo, xác nhận và dữ liệu kiểm tra. Trong mỗi thư mục này, có hai thư mục-một thư mục có chứa hình ảnh tia X phổi và các thư mục còn lại chứa hình ảnh tia X bình thường. Tiếp theo, chúng tôi sẽ tải dữ liệu đào tạo trong khung dữ liệu, trong đó một cột sẽ chứa đường dẫn đến hình ảnh và bên kia sẽ có nhãn hình ảnh. Như bạn có thể thấy, dữ liệu đào tạo của chúng tôi có 5216 hình ảnh. Bây giờ, hãy để Lừa xem phân phối nhãn. Điều này không có vẻ tốt, dữ liệu của chúng tôi bị mất cân bằng. Số lượng hình ảnh có chứa viêm phổi gấp ba lần số lượng hình ảnh bình thường. Thành thật mà nói, đây là một vấn đề cơ bản với hầu hết các bộ dữ liệu y tế ngoài kia, vì những người đến gặp bác sĩ với một căn bệnh chủ yếu có một. Bây giờ, nếu bạn đang suy nghĩ về lý do tại sao mất cân bằng dữ liệu là một vấn đề, tôi sẽ quay lại với nó sau trong bài viết. Hãy để trực quan hóa một số tia X này và xem những hình ảnh này thực sự trông như thế nào. Chúng tôi sẽ giới thiệu một số hình ảnh được chọn ngẫu nhiên từ dữ liệu đào tạo của chúng tôi. Đối với mắt chưa được huấn luyện, tia X có hoặc không có viêm phổi trông giống nhau. & NBSP; 2) Mô hình phân loại hình ảnh Python -& nbsp; xử lý trước dữ liệuĐược rồi, thời gian để tải dữ liệu xác thực và kiểm tra, thực hiện một số tiền xử lý và tạo hàng loạt. Tiền xử lý là điều cần thiết để biến đổi hình ảnh theo định dạng có thể dễ dàng hiểu bởi mô hình và cũng để làm cho thuật toán hoạt động hiệu quả hơn. Các bước tiền xử lý khác nhau mà chúng tôi sẽ sử dụng ở đây là:
Chúng tôi có 16 hình ảnh để xác thực và 624 hình ảnh để thử nghiệm. Nếu bạn đã từng làm việc với các mạng thần kinh trước đây, bạn sẽ biết rằng đào tạo diễn ra theo các đợt. Mô hình lấy lô đầu tiên, chuyển qua mạng, phần cuối được tính toán cuối cùng, sau đó độ dốc đi ngược để cập nhật các tham số của mạng. Quá trình này được lặp lại cho đến khi chúng tôi đạt được điểm dừng và đào tạo mong muốn. Bây giờ chúng tôi sẽ viết một chức năng để tạo hình ảnh theo lô từ bộ tàu. Nhấn vào đây để xem danh sách hơn 50 giải pháp dự án lớn, dữ liệu lớn và máy học đã được giải quyết từ đầu đến cuối & NBSP; (Mã tái sử dụng + Video) & NBSP; Thật tuyệt, bây giờ mà đã hoàn thành! Tất cả chúng tôi đã được thiết lập để xác định mô hình của chúng tôi bây giờ. 3) Xây dựng CNN & NBSP; Phân loại hình ảnh Python & NBSP; Mô hình từ đầuKhối xây dựng cơ bản của bất kỳ mô hình nào hoạt động trên dữ liệu hình ảnh là một mạng lưới thần kinh tích chập. & NBSP; chập chập được thiết kế dành riêng cho hình ảnh. Có một ma trận bộ lọc hoặc trọng số (n x n chiều) trong đó n thường nhỏ hơn kích thước hình ảnh. Một sản phẩm nhân hoặc chấm được lấy của ma trận này với bản vá kích thước bộ lọc của đầu vào. Bộ lọc được áp dụng một cách có hệ thống cho mỗi phần chồng chéo hoặc bản vá có kích thước bộ lọc của dữ liệu đầu vào, di chuyển từ trái sang phải và sau đó từ trên xuống dưới. & NBSP; Cần lưu ý rằng kết quả của sản phẩm chấm này giữa hai ma trận là một giá trị duy nhất và thông qua sự lặp lại của quá trình này trên các bản vá đầu vào khác nhau, chúng ta nhận được một ma trận cuối cùng. Ngoài ra còn có một giá trị sai lệch được thêm vào sau mỗi sản phẩm chấm. Ma trận trọng lượng và giá trị sai lệch là các tham số của mạng lưới thần kinh được cập nhật trong suốt quá trình đào tạo. Stride là giá trị mà bộ lọc dịch chuyển trên hình ảnh. Trong một lớp tích chập, có nhiều bộ lọc- giá trị này được quyết định và cung cấp bởi nhà phát triển khi xác định một lớp. Việc sử dụng và tầm quan trọng của các kết quả này có thể không trực quan ở đầu tiên- người ta đưa ra giả thuyết rằng chúng học được những điều khác nhau ở các giai đoạn khác nhau. Các kết quả trong các lớp trước đó học cách phát hiện những thứ trừu tượng như cạnh, kết cấu, v.v. Hướng tới lớp cuối cùng, chúng học cách phát hiện các vật thể cụ thể hơn như tai và mũi của mèo hoặc chó, nếu đó là vấn đề phân loại mèo vs chó. Kích hoạt Relu được áp dụng sau mỗi lần chập để chuyển đổi các giá trị đầu ra giữa phạm vi 0 thành 1. Gộp tối đa được sử dụng để lấy mẫu biểu diễn đầu vào. Nó giúp mô hình đối phó với quá mức bằng cách cung cấp một đại diện trừu tượng và cũng giảm chi phí tính toán. Cách hoạt động của Max Pounding có thể được minh họa bằng hình ảnh dưới đây:
Trong một hộp có kích thước 2 x 2, nó lấy giá trị tối đa. Trước khi di chuyển về phía trước, hãy để xác định một số tham số cơ bản như kích thước lô, số lượng kỷ nguyên, vv & nbsp; cho mạng. Kích thước lô đề cập đến số lượng hình ảnh được đưa vào mạng trong một lần chuyển tiếp. Mặt khác, số lượng kỷ nguyên xác định số lần mạng của chúng tôi sẽ xử lý toàn bộ dữ liệu đào tạo. Số lượng các bước đào tạo là số bước trong một kỷ nguyên và được tính bằng cách chia kích thước dữ liệu đào tạo của chúng tôi cho kích thước lô. & NBSP; Chúng tôi sẽ sử dụng các mục tiêu chéo nhị phân làm chức năng mất mát vì chúng tôi chỉ có 2 lớp. RMSProp sẽ là chức năng tối ưu hóa của chúng tôi. Hãy bắt đầu đào tạo. Điều khá rõ ràng là độ chính xác xác nhận của chúng tôi không tốt. Có một số thủ thuật mà bạn có thể sử dụng để có được hiệu suất tốt.
Danh sách thực sự có thể tiếp tục. Điều quan trọng cần lưu ý ở đây là thử tất cả những điều này là tốn thời gian và nó có thể hoặc không hoạt động. Vì vậy, những gì mà sự thay thế? Đọc được đề xuất: & nbsp; & nbsp;
4) Chuyển giao học tậpHuấn luyện một mạng lưới thần kinh từ đầu có thể yêu cầu nhiều dữ liệu, sức mạnh xử lý và thời gian không có sẵn hoặc không thực tế nhất. Học chuyển là một kỹ thuật sử dụng các mạng thần kinh được đào tạo trước được đào tạo trên hàng tỷ hình ảnh (như Alexnet, Inception Net, VGG16) & NBSP; Trên một nhiệm vụ khác bằng cách thay đổi lớp phân loại cuối cùng. Bây giờ, bạn có thể nghĩ những gì mà lợi ích và cách thức hoạt động của nó? Giống như tôi đã đề cập ở trên, các lớp ban đầu tìm hiểu các tính năng rất chung chung và khi chúng tôi tăng cao hơn trong mạng, các lớp có xu hướng học các mẫu cụ thể hơn cho nhiệm vụ mà nó đang được đào tạo. Vì các mô hình được đào tạo trước được đào tạo về một số lượng lớn hình ảnh, chúng có thể làm tốt hơn việc tìm hiểu các tính năng trừu tượng này so với mạng thần kinh được viết từ đầu. Một bước trên việc học chuyển vani là tinh chỉnh, trong đó bên cạnh việc thêm một lớp phân loại mới, bạn cũng cho phép một số lớp cuối cùng trong mạng học được bằng cách giải phóng trọng lượng của chúng. Trong học tập chuyển nhượng, tất cả các lớp bị đóng băng ngoại trừ lớp phân loại. Do đó, để tinh chỉnh, chúng tôi sẽ đóng băng các lớp ban đầu, để chúng như hiện tại và kiềm chế các lớp ở phía dưới cho nhiệm vụ của chúng tôi. Chúng tôi sẽ sử dụng VGG16 được đào tạo trước và thêm lớp phân loại (dày đặc) của riêng chúng tôi ở phía dưới, sau đó & nbsp; đóng băng mạng lên khối tích chập cuối cùng thứ hai, sau đó đào tạo lại.
Vì vậy, kích thước đầu vào vẫn giữ nguyên (224, 224, 3), chúng tôi sử dụng các trọng số của mô hình được đào tạo trước trên ImageNet. Sau khối tích chập cuối cùng, chúng tôi đã thêm & nbsp; 3 lớp dày đặc với bỏ học để thường xuyên hóa mô hình và tránh quá mức. & NBSP; Chúng tôi đặt lớp. Tham số có thể huấn luyện của 10 lớp cuối cùng để đúng, vì vậy chúng tôi có thể làm cho chúng học. Bây giờ, hãy để Lừa đặt một số tham số. Lần này, chúng tôi sẽ sử dụng Adam làm trình tối ưu hóa vì nó ban đầu được sử dụng trong khi đào tạo trên Imagenet. Hàm mất giống như trên, các mục tiêu chéo nhị phân. Hãy để phù hợp với mô hình ngay bây giờ. Như bạn có thể thấy, chúng tôi có thể đạt được độ chính xác xác nhận 0,9375 với mô hình này mà không cần điều chỉnh nhiều. Một điều quan trọng hơn cần giải quyết ở đây là dữ liệu mất cân bằng. & NBSP; Chúng tôi đã cung cấp trọng số lớp trong quá trình đào tạo để bù đắp cho sự mất cân bằng dữ liệu. Tuy nhiên, kỹ thuật này có thể hoặc không hoạt động. Bây giờ, hãy để Lừa cũng kiểm tra hiệu suất của mô hình phân loại hình ảnh trên & nbsp; bộ thử nghiệm. & Nbsp; Độ chính xác dường như là tốt. Nhưng hãy để tôi nói với bạn điều gì đó khi chúng tôi có dữ liệu mất cân bằng, độ chính xác không phải là thước đo hiệu suất rất đáng tin cậy. Why? Khi dữ liệu của chúng tôi bị mất cân bằng, mô hình của chúng tôi có thể học một mẹo đơn giản trong khi đào tạo để có được điểm chính xác tốt. Lớp học quá mức trong trường hợp của chúng tôi là ‘viêm phổi, mô hình sẽ cố gắng phân loại hầu hết các mẫu là viêm phổi để có được độ chính xác tốt. Nhưng đây không phải là những gì chúng ta muốn, phải không? Đây là khi chúng ta có thể xem xét các biện pháp khác về hiệu suất mô hình. 5) Đánh giá hiệu suất của mô hình phân loại hình ảnhHãy cùng xem báo cáo phân loại - Trước khi chúng tôi hiểu các số liệu hiệu suất, có một số thuật ngữ cần giải thích. & NBSP;
Nếu nó vẫn chưa rõ ràng lắm, hãy để Lôi xem ma trận nhầm lẫn để có sự rõ ràng tốt hơn - Trục Y của biểu đồ dành cho các nhãn thực sự và trục X dành cho các nhãn dự đoán. & NBSP;
Bây giờ chúng ta có thể thể hiện độ chính xác và nhớ lại trong các điều khoản này. Mặc dù đào tạo thuật toán ML để chẩn đoán liệu bệnh nhân có bệnh hay không hay không, sẽ gây tử vong hơn nhiều khi dự đoán bình thường đối với một người thực sự mắc bệnh khi so sánh với loại lỗi khác, tức là dự đoán viêm phổi cho bệnh nhân bình thường. Do đó, trong khi đào tạo, mục tiêu của chúng tôi là giảm thiểu các tiêu cực sai và & nbsp; chúng tôi đã thực hiện thành công điều đó. Làm cách nào để sử dụng phân loại hình ảnh CNN trong Python?Trình phân loại hình ảnh bằng CNN .. Python | Phân loại hình ảnh bằng cách sử dụng Keras .. keras.fit () và keras.fit_generator (). Lớp keras.conv2d .. Cnn | Giới thiệu về lớp gộp .. Cnn | Giới thiệu về đệm .. Áp dụng mạng thần kinh tích chập trên bộ dữ liệu MNIST .. Chức năng kích hoạt trong mạng lưới thần kinh .. Làm cách nào để tạo phân loại hình ảnh CNN?Thực tế: Hướng dẫn từng bước.. Bước 1: Chọn một bộ dữ liệu. .... Bước 2: Chuẩn bị bộ dữ liệu để đào tạo. .... Bước 3: Tạo dữ liệu đào tạo. .... Bước 4: Xáo trộn tập dữ liệu. .... Bước 5: Gán nhãn và tính năng. .... Bước 6: Bình thường hóa X và chuyển đổi nhãn thành dữ liệu phân loại. .... Bước 7: Chia X và Y để sử dụng trong CNN .. Làm thế nào để bạn mã hóa CNN trong Python?Chúng tôi có 4 bước để tích chập:.. Xếp hàng tính năng và hình ảnh .. Nhân mỗi pixel hình ảnh với pixel tính năng tương ứng .. Thêm các giá trị và tìm tổng .. Chia tổng cho tổng số pixel trong tính năng .. Chúng ta có thể sử dụng CNN để phân loại hình ảnh không?CNN là viết tắt của Mạng thần kinh tích chập, một mạng thần kinh chuyên dụng để xử lý dữ liệu có hình dạng đầu vào như ma trận 2D như hình ảnh.CNN thường được sử dụng để phát hiện và phân loại hình ảnh.CNN's are typically used for image detection and classification. |