Pengakuan manusia dalam gambar melalui deskriptor HOG dan pengklasifikasi SVM berkinerja buruk

8

Saya menggunakan deskriptor HOG, ditambah dengan classifier SVM, untuk mengenali manusia dalam gambar. Saya menggunakan pembungkus Python untuk OpenCV. Saya telah menggunakan tutorial yang sangat baik di pymagesearch , yang menjelaskan apa yang dilakukan algoritma dan memberikan petunjuk tentang cara mengatur parameter metode detectMultiScale .

Secara khusus, saya lakukan

# initialize the HOG descriptor
hog = cv2.HOGDescriptor()

# Set the support vector machine to be pre-trained for people detection
hog.setSVMDetector(cv2.HOGDescriptor_getDefaultPeopleDetector())

# Detect people in the image
(rects, weights) = hog.detectMultiScale(image,
                                        winStride=(4, 4),
                                        padding=(8, 8),
                                        scale=1.05)

Parameter dipilih sesuai dengan penyempurnaan yang baik pada akurasi dan kinerja, mengikuti penjelasan dalam tutorial itu sendiri.

Masalah saya adalah bahwa metode ini, yang tampaknya merupakan metode terbaik saat ini untuk mengenali manusia dalam gambar menurut literatur ( makalah aslinya bertanggal 2005) tampaknya berkinerja sangat buruk pada gambar saya. Saya memiliki gambar yang berisi pakaian, baik dengan model dan tanpa itu dan saya mencoba pendekatan ini untuk mengenali mereka yang memiliki model. Pada subset dari 300 gambar yang saya pindai secara manual untuk menandai mereka karena mengandung model atau tidak, metode gagal 30% dari waktu.

Ini adalah beberapa gambar sebagai contoh.

Di sini ia mendeteksi manusia yang hilang:

Di sini ia tidak mendapatkan manusia sepenuhnya:

Di sini ia tidak mengenalinya sama sekali:

Saya mengerti bahwa detektor berfungsi untuk manusia yang jujur. Haruskah mereka juga figur penuh? Gambar saya mencakup setengah angka, angka tanpa kepala atau tanpa kaki.

Sebelum ini, saya telah mencoba pengklasifikasi cascade berbasis fitur Haar untuk mengenali wajah dalam sebuah gambar dan akurasi pada set gambar yang sama telah 90%, jadi saya mencoba untuk memperbaiki ini. Juga, saya tertarik untuk memahami mengapa semuanya tidak berjalan di sini.

martina
sumber

Jawaban:

5

Anda menggunakan set pelatihan yang diberikan OpenCV kepada Anda yang tidak sesuai dengan jenis gambar yang Anda gunakan. Data yang Anda gunakan berasal getDefaultPeopleDetectordan jenis gambar yang digunakan detektor default adalah gambar banyak orang, bukan model wanita dari e-commerce mode.

Jika Anda ingin membedakan antara model dan pakaian, Anda dapat mencoba melatih penggolong Anda sendiri dengan HOG atau fitur lainnya.

Jalur lain yang dapat Anda ambil adalah mendeteksi apakah ada wajah atau tidak. Anda bisa menggunakan kaskade haar untuk itu.

hoaphumanoid
sumber
Ya, saya mengerti. Bahkan, kaskade haar berkinerja lebih baik. Tapi saya masih ingin tahu persis mengapa deskriptor babi gagal total pada gambar saya, apakah itu karena manusia tidak sepenuhnya termasuk dalam gambar?
martina
1
Alasannya adalah yang saya berikan kepada Anda. Pengklasifikasi default yang Anda gunakan mengambil gambar yang tidak seperti yang Anda gunakan
hoaphumanoid