Saya ingin memproses gambar mikroskop yang tersegmentasi secara otomatis untuk mendeteksi gambar yang salah dan / atau segmentasi yang salah, sebagai bagian dari pipa pencitraan throughput tinggi. Ada sejumlah parameter yang dapat dihitung untuk setiap gambar mentah dan segmentasi, dan itu menjadi "ekstrem" ketika gambar rusak. Misalnya, gelembung dalam gambar akan menghasilkan anomali seperti ukuran besar di salah satu "sel" yang terdeteksi, atau jumlah sel anomali rendah untuk seluruh bidang. Saya mencari cara yang efisien untuk mendeteksi kasus-kasus aneh ini. Idealnya, saya lebih suka metode yang memiliki properti berikut (kira-kira sesuai keinginan):
tidak memerlukan ambang absolut yang telah ditentukan sebelumnya (meskipun persentase yang sudah ditentukan sebelumnya OK);
tidak memerlukan memiliki semua data dalam memori, atau bahkan telah melihat semua data; itu akan baik-baik saja untuk metode menjadi adaptif, dan memperbarui kriteria karena melihat lebih banyak data; (jelas, dengan beberapa probabilitas kecil, anomali dapat terjadi sebelum sistem melihat cukup data, dan akan terlewatkan, dll.)
dapat diparalelkan: misalnya dalam putaran pertama, banyak node yang bekerja secara paralel menghasilkan anomali kandidat menengah, yang kemudian menjalani seleksi putaran kedua setelah putaran pertama selesai.
Anomali yang saya cari tidak halus. Mereka adalah jenis yang jelas jelas jika seseorang melihat histogram data. Tetapi volume data yang dipertanyakan, dan tujuan akhir melakukan deteksi anomali ini secara real time ketika gambar sedang dihasilkan, menghalangi solusi apa pun yang memerlukan pemeriksaan histogram oleh evaluator manusia.
Terima kasih!
Jawaban:
Sudahkah Anda mempertimbangkan sesuatu seperti classifier satu kelas?
Anda akan membutuhkan satu set pelatihan gambar yang dikenal baik, yang digunakan untuk melatih classifier yang mencoba untuk membedakan antara "gambar seperti set pelatihan Anda" dan yang lainnya. Ada tesis oleh David Tax yang mungkin memiliki lebih banyak informasi daripada yang sebenarnya Anda butuhkan tentang topik ini, tetapi mungkin merupakan tempat yang baik untuk memulai.
Selain membutuhkan satu set pelatihan, sepertinya itu akan memenuhi persyaratan Anda:
Parameter dipelajari dari data (tidak ada ad-hockery di sini)
Setelah Anda mendapatkan modelnya, tidak perlu menyimpan data dalam memori.
Demikian pula, classifier terlatih dapat dijalankan pada node sebanyak yang Anda punya.
Tergantung pada aplikasi Anda, Anda mungkin dapat melatih classifier yang dapat diservis sekali dan menggunakannya kembali untuk berbagai jenis spesimen / pewarna / noda / florophores / dll. Sebagai alternatif, Anda mungkin bisa membuat pengguna menilai secara manual beberapa batch pertama dari setiap proses - Saya membayangkan seorang manusia dapat memeriksa setidaknya 5-8 contoh / menit dengan antarmuka yang baik.
sumber
Lihat http://scholar.google.com/scholar?q=stream+outlier+detection
Beberapa metode mapan seperti LOF telah diadopsi ke konteks streaming. Ada juga tentu saja metode yang memperbarui histogram dengan cara streaming dan dengan demikian menandai outlier satu dimensi yang jelas. Itu sebenarnya cukup untuk Anda?
sumber
Ada banyak pendekatan yang mungkin, tetapi sulit untuk mengetahui apa yang terbaik dalam situasi Anda tanpa lebih banyak informasi.
Simpan vektor fitur dari semua gambar sebelumnya, bersama dengan klasifikasinya, pada disk. Secara berkala (katakanlah, sehari sekali) latih algoritma pembelajaran untuk data ini, dan gunakan algoritma yang dihasilkan untuk mengklasifikasikan gambar baru. Ruang disk murah; solusi ini mungkin pragmatis dan efektif untuk mengubah algoritma pembelajaran offline menjadi yang dapat digunakan dalam pengaturan online Anda.
Simpan vektor fitur dari sampel acak 1.000 (atau 1.000.000) gambar sebelumnya, bersama dengan klasifikasinya. Latih algoritma pembelajaran secara berkala pada subsampel ini.
Perhatikan bahwa Anda dapat memperbarui subsampel ini secara efisien secara online menggunakan trik standar . Ini hanya menarik jika ada beberapa alasan mengapa sulit untuk menyimpan semua vektor fitur dari semua gambar sebelumnya (yang tampaknya sulit dibayangkan, bagi saya, tetapi siapa yang tahu).
Pendekatan ini mengasumsikan bahwa setiap parameter dari gambar yang tidak cacat memiliki distribusi Gaussian, dan bahwa parameternya independen. Asumsi itu mungkin optimis. Ada banyak varian yang lebih canggih dari skema ini yang akan menghilangkan kebutuhan akan asumsi-asumsi ini atau meningkatkan kinerja; ini hanyalah contoh sederhana untuk memberi Anda ide.
Secara umum, Anda bisa melihat algoritma online dan algoritma streaming.
sumber
Jika outlier cukup jelas, trik sederhana yang bisa digunakan adalah sebagai berikut. Bangun fungsi hash sensitif lokalitas dari vektor Anda. (Sebuah hash acak sederhana seperti sisi mana dari set hiperplanes acak vektor jatuh pada mungkin bekerja. Ini akan menghasilkan vektor boolean sebagai nilai hash.) Sekarang ketika Anda menerima vektor, Anda menghitung nilai hash dari vektor dan menyimpan nilai hash (vektor boolean dalam kasus hyperplanes) dan jumlah dalam kamus. Anda juga menyimpan jumlah vektor yang terlihat sejauh ini. Pada waktu tertentu Anda dapat menandai vektor yang diberikan sebagai pencilan jika jumlah total vektor yang bertabrakan dengan hash kurang dari persentase yang telah ditentukan dari total.
Anda dapat melihat ini sebagai membangun histogram dengan cara tambahan. Tetapi karena datanya tidak univariat, kami menggunakan trik hashing untuk membuatnya berperilaku seperti itu.
sumber