Phát hiện người đi bộ trong hình ảnh trên không bằng RetinaNet
Giới thiệu
Phát hiện đối tượng trong ảnh hàng không là một vấn đề đầy thách thức và thú vị. Với chi phí của máy bay không người lái ngày càng giảm, lượng dữ liệu trên không được tạo ra sẽ tăng lên. Sẽ rất hữu ích nếu có các mô hình có thể trích xuất thông tin có giá trị từ dữ liệu trên không. RetinaNet là máy dò một chặng nổi tiếng nhất và trong blog này, tôi muốn kiểm tra nó trên hình ảnh chụp từ trên không của người đi bộ và người đi xe đạp từ bộ Dữ liệu máy bay không người lái của Stanford. Xem hình ảnh mẫu bên dưới. Đây là một vấn đề khó khăn vì hầu hết các đối tượng chỉ rộng vài pixel, một số đối tượng bị che khuất và các đối tượng trong bóng râm thậm chí còn khó phát hiện hơn.
Mạng RetinaNet
RetinaNet là một công cụ phát hiện một giai đoạn sử dụng Mạng Kim tự tháp Tính năng (FPN) và Mất tiêu điểm để đào tạo. Mạng kim tự tháp đặc trưng là một cấu trúc để phát hiện đối tượng đa tỷ lệ được giới thiệu trong blog này . Nó kết hợp các tính năng có độ phân giải thấp, mạnh về ngữ nghĩa với các tính năng có độ phân giải cao, yếu về ngữ nghĩa thông qua một con đường từ trên xuống và các kết nối bên. Kết quả thực là nó tạo ra các bản đồ đặc trưng có tỷ lệ khác nhau trên nhiều cấp độ trong mạng giúp hỗ trợ cả mạng phân loại và mạng hồi quy.
Mất tiêu điểm được thiết kế để giải quyết các vấn đề phát hiện đối tượng một giai đoạn với sự mất cân bằng trong đó có thể có một số lượng rất lớn các lớp nền và chỉ một vài lớp nền trước. Điều này gây ra việc đào tạo không hiệu quả vì hầu hết các vị trí đều dễ tiêu cực không đóng góp tín hiệu hữu ích và số lượng lớn các ví dụ tiêu cực này sẽ lấn át đào tạo và làm giảm hiệu suất của mô hình. Suy hao tiêu điểm dựa trên suy hao entropy chéo như được hiển thị bên dưới và bằng cách điều chỉnh tham số gamma, chúng tôi có thể giảm đóng góp mất mát từ các ví dụ được phân loại tốt.
Bộ dữ liệu máy bay không người lái Stanford
Dữ liệu về máy bay không người lái Stanford là một bộ dữ liệu khổng lồ về các hình ảnh trên không do máy bay không người lái thu thập trong khuôn viên Stanford. Bộ dữ liệu lý tưởng cho các vấn đề phát hiện và theo dõi đối tượng. Nó chứa khoảng 60 video trên không. Đối với mỗi video, chúng tôi có tọa độ hộp giới hạn cho 6 lớp – “Người đi bộ”, “Người đi xe đạp”, “Người trượt ván”, “Xe đẩy”, “Xe hơi” và “Xe buýt”. Tập dữ liệu rất phong phú về người đi bộ và người đi xe đạp với 2 lớp này chiếm khoảng 85% -95% các chú thích.
Đào tạo mạng RetinaNet trong Keras trên tập dữ liệu máy bay không người lái Stanford
Để đào tạo Mạng Retina, tôi đã sử dụng cách triển khai này trong Keras. Nó được ghi chép rất đầy đủ và hoạt động mà không có lỗi.Cảm ơn Fizyr rất nhiều vì đã mở nguồn cung ứng việc triển khai của họ!
Các bước chính tôi đã làm là:
- Chọn một mẫu hình ảnh từ tập dữ liệu máy bay không người lái khổng lồ của stanford để xây dựng mô hình. Tôi đã chụp khoảng 2200 hình ảnh đào tạo với hơn 30.000 thông báo và giữ khoảng 1000 hình ảnh để xác nhận. Tôi đã đặt tập dữ liệu hình ảnh của mình trên google drive tại đâycho bất kỳ ai quan tâm đến việc bỏ qua bước này.
- Tạo chú thích ở định dạng cần thiết cho Retina Net. Retina Net yêu cầu tất cả các chú thích phải ở định dạng.
path / to / image.jpg, x1, y1, x2, y2, class_name
- Điều chỉnh kích thước neo: Retina Net có các kích thước neo mặc định là 32, 64, 128, 256, 512. Các kích thước neo này hoạt động tốt cho hầu hết các đối tượng tuy nhiên vì chúng tôi đang làm việc trên các hình ảnh trên không, một số đối tượng có thể nhỏ hơn 32. Repo này cung cấp một công cụ hữu ích để kiểm tra xem các neo hiện tại có đủ hay không. Trong hình ảnh bên dưới, các chú thích màu xanh lá cây được bao phủ bởi các neo hiện có và những chú thích có màu đỏ bị bỏ qua. Như có thể thấy, một phần tốt của các chú thích quá nhỏ so với kích thước neo nhỏ nhất.
-
Vì vậy, tôi đã điều chỉnh neo để giảm neo lớn nhất trong số 512 và thay vào đó thêm một neo nhỏ có kích thước 16. Điều này dẫn đến một cải tiến đáng chú ý như được hiển thị bên dưới
- Với tất cả những điều này, chúng tôi đã sẵn sàng để bắt đầu đào tạo. Tôi giữ hầu hết các tham số mặc định khác bao gồm cả đường trục Resnet50 và bắt đầu đào tạo bằng cách:
keras_retinanet / bin / train.py - ảnh chụp nhanh hạng cân / resnet50_coco_best_v2.1.0.h5 --config config.ini csv train_annotations.csv label.csv --val-annotations val_annotations.csv
Ở đây là trọng lượng COCO có thể được sử dụng để bắt đầu đào tạo. Các chú thích để đào tạo và xác thực là dữ liệu đầu vào và config.ini có các kích thước neo được cập nhật. Tất cả các tệp đều có trên Github repo .
Đó là nó! Mô hình chậm được đào tạo và tôi đã đào tạo nó qua đêm. Tôi đã kiểm tra độ chính xác của mô hình được đào tạo bằng cách kiểm tra độ chính xác trung bình (MAP) trên bộ kiểm tra. Như có thể thấy bên dưới, mô hình được đào tạo đầu tiên có MAP rất tốt là 0,63. Hiệu suất đặc biệt tốt trên các hạng xe hơi và xe buýt, điều này rất dễ nhận thấy. MAP trên hạng Biker thấp vì điều này thường khiến người đi bộ nhầm lẫn. Tôi hiện đang làm việc để cải thiện hơn nữa độ chính xác của lớp Biker.
Người đi
xe đạp: 0,4862
Xe ô tô: 0,9363
Xe buýt: 0,7892
Người đi bộ: 0,7059
Cân nặng :0,6376
Phần kết luận
Retina Net là một mô hình mạnh mẽ sử dụng Mạng Kim tự tháp Tính năng. Nó có thể phát hiện các đối tượng một cách trực tiếp trên một tập dữ liệu rất khó khăn trong đó kích thước đối tượng khá nhỏ. Tôi đã có thể đào tạo một Retina Net với nửa ngày làm việc. Phiên bản đầu tiên của mô hình được đào tạo có hiệu suất khá tốt. Tôi vẫn đang khám phá cách điều chỉnh thêm kiến trúc Retina Net để có độ chính xác cao hơn trong việc phát hiện trên không. Điều đó sẽ được đề cập trong blog tiếp theo của tôi.