2014-12-31 18 views
5

Tôi đang cố gắng đào tạo một Haar Cascade để phát hiện tay. Tôi có một tệp vec có kích thước 1000. Tôi có 40 hình ảnh dương và 600 hình ảnh tiêu cực. Tôi đã thử cả việc bỏ hình ảnh tích cực và hình ảnh tiêu cực. Khi tôi chạy lệnh sau tôi nhận được thông báo lỗi sau:Haar Đào tạo: lỗi (-215) _img.row * _img.cols == vecSize trong chức năng

opencv_traincascade -data classifier -data classifier -vec samples.vec -bg negatives.txt 
-numstages 20 -minHitRate 0.999 -maxFalseAlarmRate 0.5 -numPos 1000\ -numNeg 600 -w 80 
-h 40 -mode ALL -precalcValBufSize 1024\ -precalcIdxBufSize 1024 

PARAMETERS: 
cascadeDirName: classifier 
vecFileName: samples.vec 
bgFileName: negatives.txt 
numPos: 1000 
numNeg: 1000 
numStages: 20 
precalcValBufSize[Mb] : 256 
precalcIdxBufSize[Mb] : 256 
stageType: BOOST 
featureType: HAAR 
sampleWidth: 24 
sampleHeight: 24 
boostType: GAB 
minHitRate: 0.999 
maxFalseAlarmRate: 0.5 
weightTrimRate: 0.95 
maxDepth: 1 
maxWeakCount: 100 
mode: BASIC 



===== TRAINING 0-stage ===== 
<BEGIN 
OpenCV Error: Assertion failed (_img.rows * _img.cols == vecSize) in get, file /home/lie/Desktop/Install-OpenCV-master/Ubuntu/2.4/OpenCV/opencv-2.4.9/apps/traincascade/imagestorage.cpp, line 157 
terminate called after throwing an instance of 'cv::Exception' 
    what(): /home/lie/Desktop/Install-OpenCV-master/Ubuntu/2.4/OpenCV/opencv-2.4.9/apps/traincascade/imagestorage.cpp:157: error: (-215) _img.rows * _img.cols == vecSize in function get 

Aborted (core dumped)

tôi đã cố gắng giảm số lượng tích cực của tôi và làm toàn bộ quá trình trên một lần nữa và vẫn nhận được cùng một lỗi. Bất kỳ đề xuất?

Bằng cách này: Tôi đang theo hướng dẫn tại địa chỉ: http://coding-robin.de/2013/07/22/train-your-own-opencv-haar-classifier.html

Cảm ơn bạn

+0

Giá trị thấp nhất mà nó vẫn bị lỗi? –

+0

Tôi chỉ thử 40 và 100 dương tính. Vì vậy, tôi chưa bao giờ nhận được lỗi. Tôi có nên thử thấp hơn 40? – dylan7

+0

Tôi phải giảm xuống 20 lần. –

Trả lời

7

Lỗi này dường như không phải là kết quả của số lượng mẫu dương hoặc âm lớn. Mọi người đào tạo bộ dữ liệu rất lớn!

Từ các thông số mô tả ở trên, nó có thể được nhận thấy rằng kích thước của các mẫu dương tính hình thành nên samples.vec là 24x24, được biểu hiện bằng các tuyên bố:

sampleWidth: 24 
sampleHeight: 24 

Nhưng trong khi gọi opencv_traincascade chức năng , bạn cố gắng đặt kích thước là 80x40. Hãy thử thay đổi điều này thành -w 24 -h 24

+0

Sau khi nhìn lại, tôi bắt đầu tin rằng một điều tương tự là sai. Sau khi bạn nói, tôi đã thử đổi nó thành 24 và nó đã hoạt động. Cảm ơn bạn rất nhiều! Có bất kỳ lý do traincascade nào muốn 24 x 24 làm mặc định không? chỉ tò mò thôi. – dylan7

+0

Tôi không chắc liệu giá trị mặc định của nó có phải là giá trị mặc định hay không. Có lẽ, bạn sẽ thiết lập các giá trị này trong khi gọi "opencv_createsamples" để tạo tệp .vec. Các mẫu dương tính sẽ được thay đổi kích thước thành chiều rộng và chiều cao được chỉ định bằng lệnh "opencv_createsamples". –

+0

Cảm ơn bạn. Và chỉ một câu hỏi nữa nếu bạn không phiền. Tôi đã được cho biết rằng quá trình biến dạng của opencv_createsamples là không tốt. Tôi thấy rằng cách khác là không sử dụng các biến dạng và tạo một tệp .dat có chứa một hộp xung quanh đối tượng quan tâm. Điều này có đúng không? Có một cách nhanh chóng để đi qua từng tích cực và lưu ý xuống kích thước của hộp này? Cảm ơn bạn. – dylan7

-1

Khẳng định là khá rõ ràng: nó hy vọng rằng _img.rows * _img.cols == vecSize. Tôi không biết những gì _img và vecSize có nghĩa vụ phải được, nhưng điều đó có nghĩa là dữ liệu đầu vào của bạn không được đưa ra một cách chính xác. Chỉ cần nhìn vào dòng lệnh của bạn, bạn:

  1. Đã viết -data classifier -data classifier hai lần. Đó không phải là một vấn đề nhưng vẫn còn.
  2. Đã viết -numPos 1000\ -numNeg 600, trong khi bạn nói khoảng 40 hình ảnh tiêu cực và 600 tiêu cực, vì vậy bạn không nên sử dụng những hình ảnh đó thay thế?

Bạn nói rằng bạn có vecSize kích thước 1000. VecSize này là gì?

+0

Tệp .vec hoặc vectơ là đầu ra của một tập lệnh nổi tiếng trong số các hướng dẫn haar có tên là createdamples.pl. Tập lệnh ngọc trai này sử dụng lệnh opencv_createsamples. Kịch bản kết hợp tích cực và phủ định để tạo ra 1000 mẫu vec. Tuy nhiên thông qua kiểm tra thêm tôi tin vecSize là kích thước của một mẫu vector. Điều kỳ lạ là khi tôi chỉ định 80 x 40 vectơ, tôi nhận được 320 x 160 bức ảnh. Và hệ số này là 4 trên mỗi thứ nguyên xảy ra cho tất cả các thứ nguyên đầu vào. – dylan7

+0

Do đó _img.cols x _img.rows không phải là vecSize. Tôi giả định _img là một mẫu vec. Đây là điều duy nhất có ý nghĩa.Bạn có biết về tập lệnh này hoặc cách opencv_createsamples hoạt động không? Ngoài ra tôi tin rằng vectơ là một đầu vào cần thiết cho traincascade. Cảm ơn bạn vì sự giúp đỡ. – dylan7

Các vấn đề liên quan