Trong bài viết này, tôi sẽ cho bạn biết cách chúng tôi tự động hóa quy trình xác minh phương tiện của người dùng. Tôi sẽ chia sẻ với bạn các thành phần chúng tôi sử dụng và cách chúng tôi tổ chức quy trình.
Tại inDrive, chúng tôi sử dụng rất nhiều nội dung trực quan. Chúng tôi có mặt ở nhiều khu vực khác nhau được đánh dấu bằng những tư duy khác nhau, nơi sử dụng vô số loại giấy tờ khác nhau: hộ chiếu, giấy chứng nhận và giấy tờ xe.
Ngoài ra, còn có các tài xế và phương tiện của họ để giải quyết.
Khi nói về sự thoải mái khi đi lại và chất lượng dịch vụ được cải thiện cho người dùng của chúng tôi, sự an toàn và loại bỏ những điều không mong muốn là những yếu tố vô cùng cần thiết. Ví dụ, khi chiếc xe đến không phải là chiếc bạn đã đặt.
Bạn sẽ tìm hiểu cách chúng tôi tại inDrive hiện đang xử lý các xác minh phương tiện thông thường. Sau khi hoàn tất, người điều hành của chúng tôi sẽ kiểm tra ảnh trước và sau theo cách thủ công. Tất nhiên, quá trình xác minh cũng liên quan đến những thứ khác, nhưng ở đây chúng tôi sẽ chỉ tập trung vào khía cạnh này.
Vấn đề với cách tiếp cận hiện tại là khó tăng số lượng người điều hành hơn là mở rộng quy mô cơ sở hạ tầng. Đặc biệt là khi nói đến việc xử lý dữ liệu cá nhân của người dùng.
Hãy đặt vấn đề thật đơn giản, như thể đối với một đứa trẻ: Chúng ta có hai bức ảnh chụp một chiếc ô tô - cả hai có phải là cùng một chiếc ô tô không? Rõ ràng, bất kỳ ai cũng có thể xử lý câu hỏi này, nhưng mọi thứ trở nên phức tạp hơn nhiều khi chúng ta thêm một tiêu chí so sánh.
Ví dụ: đảm bảo rằng đây không phải là ảnh chụp màn hình từ điện thoại di động hoặc biển số xe hoàn toàn trùng khớp.
Trên toàn cầu, vấn đề này có thể được giải quyết theo nhiều cách: Sử dụng các mô hình E2E và bộ các mô hình này.
Mô hình E2E ngụ ý liên quan đến một mô hình lớn (rất có thể là mạng thần kinh) có thể trả lời các câu hỏi của chúng tôi dựa trên một cặp hình ảnh, chẳng hạn như “Có phải đó là cùng một chiếc xe trong ảnh hay không?”, “Biển số xe có khớp không? lên hay không?”, v.v.
Vấn đề với những mô hình như vậy là chúng cần rất nhiều dữ liệu để học hỏi và chúng không hiểu tại sao câu trả lời lại là như vậy.
Chẳng hạn, nếu chúng ta huấn luyện một người mẫu trả lời "có"/"không" dựa trên một cặp ảnh, thì không còn có thể tìm ra lý do cho câu trả lời.
Vì vậy, người dùng sẽ không thể hiểu những gì chúng tôi muốn từ họ và chúng tôi sẽ phải nhờ người điều hành.
Cách tiếp cận đầu cuối này không phù hợp với chúng tôi. Chúng tôi muốn cung cấp cho người dùng manh mối về lý do tại sao ảnh được cung cấp không “phù hợp với hóa đơn”: "Tốt nhất là chụp ảnh ở vị trí đủ ánh sáng", "Có vẻ như chúng tôi không nhìn thấy toàn bộ chiếc xe trong ảnh," hoặc "Biển số xe không khớp với thông tin được cung cấp."
Điều rất quan trọng đối với chúng tôi là mô hình không trả lời "có" khi có các phương tiện khác nhau. Hãy đặt tên cho số liệu này là “FPR” (tỷ lệ dương tính giả) và sử dụng nó để hiển thị tỷ lệ phần trăm phản hồi "có" so với tất cả các ví dụ tiêu cực (trong đó các phương tiện không khớp nhau).
Bây giờ, hãy giới thiệu một số liệu khác - TPR - để đo tỷ lệ câu trả lời "có" trên tất cả các câu trả lời khẳng định.
Về cơ bản, hai số liệu này đã đủ để mô tả nhiệm vụ của chúng ta khi tối ưu hóa mô hình: Giảm thiểu FPR và đảm bảo rằng TPR không bị suy giảm quá nhiều.
Chúng tôi đã áp dụng cách tiếp cận tập hợp mô hình. Do đó, chúng ta có thể thêm tất cả các ý tưởng của mình vào bộ khung của giải pháp đã hoàn thành (bộ khung này sẽ được gọi là “đường cơ sở”). Hãy khám phá nó trông như thế nào và chia nó thành nhiều phần.
Trên thực tế, nó bao gồm một số mô hình xử lý độc lập hai hình ảnh ở đầu vào và đưa ra biển số xe cũng như vectơ của nó ở đầu ra. Do đó, dựa trên các chi tiết được so sánh, một quyết định xác minh được đưa ra về hai bức ảnh đang được xem xét.
Đây là khung của thuật toán mà chúng tôi sử dụng để thêm vào nhiều mô hình khác, đặt chúng vào các nút khác nhau trong mô hình của chúng tôi. Ví dụ: khi đánh giá chất lượng của ảnh, độ rõ nét, ánh sáng và độ bão hòa của ảnh.
Đôi khi, chúng tôi cần phát hiện những nỗ lực gửi ảnh không chính hãng. Để làm điều này, chúng tôi thêm một bộ xử lý trước để kiểm tra ảnh để phát hiện các cuộc tấn công giả mạo.
Khi sử dụng cách tiếp cận như vậy, điều quan trọng là phải có các chu kỳ lặp lại sản phẩm rõ ràng và tạo ra một tập dữ liệu thử nghiệm tốt. Chúng tôi thêm một mô hình mới để đánh giá hai yếu tố này, “Nó có giải quyết được vấn đề được giao không?” và “Nó sửa đổi bao nhiêu chỉ số của giải pháp trước đó?”
Bây giờ chúng ta hãy nói về các khối xây dựng cơ bản của giải pháp.
Hãy chuyển sang xem thuật ngữ. Dưới đây, tôi sẽ giải thích ý nghĩa của các thuật ngữ như "hộp giới hạn" và "mặt nạ phân đoạn".
Hộp giới hạn là một hình chữ nhật được sử dụng để bao quanh một đối tượng quan tâm cụ thể. Ví dụ: nếu chúng tôi muốn xác định khuôn mặt của con mèo, chúng tôi sẽ xác định hộp giới hạn bằng cách viền màu đỏ. Nó được xác định bởi tọa độ của các điểm phía dưới bên trái và phía trên bên phải của nó trong ảnh.
Phân đoạn đề cập đến nhiệm vụ gán nhãn lớp cho từng pixel riêng lẻ trong ảnh đầu vào. Trong bối cảnh thảo luận của chúng tôi, chúng tôi đã cô lập con mèo bằng cách phân đoạn nó khỏi nền.
Trong mô hình của chúng tôi, nền tảng của chiếc xe không được chúng tôi quan tâm vì điều này không cung cấp thông tin liên quan để định hình giải pháp mục tiêu của chúng tôi. Nhưng điều đó không có nghĩa là chúng tôi không có ý tưởng nào về cách cải thiện mô hình của mình bằng cách sử dụng nền.
Để giải quyết thách thức tách các phương tiện khỏi nền, chúng tôi sẽ lấy một mô hình của gia đình YOLO (Bạn chỉ nhìn một lần) và đào tạo nó để phân đoạn hình ảnh ô tô. Vấn đề ở đây là chúng tôi có một số lượng lớn ảnh từ những người dùng có nhiều hơn một chiếc xe trong ảnh.
Để khắc phục vấn đề này, chúng ta có thể sử dụng phương pháp sau:
Tuyệt vời, chúng tôi đã có đầu vào đầu tiên của chúng tôi.
Bước tiếp theo là tìm biển số xe. Ở hầu hết các quốc gia, biển số xe được đặt ở phía trước. Những trường hợp hy hữu mà biển đăng ký xe đặt ở những nơi khác thường nằm ngoài phạm vi của bài viết này.
Cách tiếp cận phổ biến nhất để thiết lập biển số xe là phát hiện hộp giới hạn và áp dụng OCR cho bản vá kết quả.
Nhưng như các thử nghiệm của chúng tôi đã chỉ ra, OCR kém hiệu quả hơn nhiều (và mất nhiều thời gian hơn ở một số mẫu xe) nếu biển số đăng ký của phương tiện không song song với đường chân trời.
Điều này đặc biệt phù hợp với dữ liệu của chúng tôi, nơi chúng tôi yêu cầu người lái xe chụp ảnh ở một góc.
Giải pháp chúng tôi quyết định là phân đoạn số và sau đó làm mịn đường đồng mức thu được. Trong trường hợp của chúng tôi, nhiệm vụ phân đoạn được tiếp cận tương tự như cách các phương tiện được phân đoạn, với kết quả như sau:
Tiếp theo, chúng tôi vẽ một đường viền bằng cách sử dụng mặt nạ và áp dụng ConvexHull để làm mịn nó. Thuật toán đơn giản này làm phẳng (làm thẳng) các chỗ lõm của đường đồng mức của chúng ta, làm cho nó thẳng hơn. Điều này có thể được mô tả như một số góc nhỏ hơn trong đa giác đường viền.
Trong một thế giới lý tưởng, phép toán này sẽ cho chúng ta một hình chữ nhật được xác định bởi bốn điểm.
Khi chúng tôi đã căn chỉnh các đường viền, chúng tôi lặp lại thao tác khoan tương tự với phối cảnh để số đăng ký được trơn tru, trình bày đẹp và rõ ràng. Cách tiếp cận này đặc biệt hữu ích khi một chiếc ô tô được chụp rất nhiều ở một góc mà biển số khó nhìn thấy.
Hiệu chỉnh phối cảnh là gì? Tôi nhớ từ lớp đại số của mình cách ma trận xoay hoạt động. Nếu bạn lấy một hình vuông trong hệ tọa độ Descartes và nhân từng tọa độ với ma trận xoay 30 độ, thì hình vuông của bạn trong hệ tọa độ mới sẽ bị xoay 30 độ.
Ở đây, chúng ta đang giải quyết một nhiệm vụ tương tự — hãy lấy đường đồng mức và di chuyển tất cả các điểm sang hệ tọa độ mới. Vấn đề là tìm một ma trận biến đổi phù hợp.
Tất cả các thuật toán này đều đã được thiết lập tốt, vì vậy điều duy nhất chúng ta phải làm là đảm bảo rằng chúng được định cấu hình chính xác cho tác vụ hiện tại.
Kết quả thật tuyệt vời. Điều này làm tăng TPR lên gần 15 điểm phần trăm. Tiếp theo, chúng tôi áp dụng một số phần mềm OCR nhẹ, chất lượng cao, chẳng hạn như kiến trúc PARSeq.
Tính đến thời điểm hiện tại, đây là công nghệ mạng thần kinh mới nhất để xử lý ảnh xe. Nhúng là một kỹ thuật được áp dụng rộng rãi trong các lĩnh vực máy học khác nhau, bao gồm tìm kiếm, đề xuất và nén dữ liệu.
Trong bối cảnh nhiệm vụ của chúng tôi, các nhúng được sử dụng để đánh giá sự giống nhau giữa các phương tiện.
Hãy xem một ví dụ trong đó tôi chụp ảnh ô tô của mình đầu tiên từ phía bên phải, sau đó từ phía bên trái. Bây giờ, tôi có thể tính toán các phần nhúng (vectơ) cho những bức ảnh này và nếu những vectơ này ở gần nhau trong không gian, điều này cho thấy rằng đó là cùng một phương tiện.
Tuy nhiên, các nhúng cung cấp một thuộc tính hữu ích khác có thể được sử dụng trong sản phẩm: Nếu mô hình nhúng của bạn hoạt động tốt, bạn có thể thực hiện tìm kiếm những gì gần nhất trong số các mẫu nhúng. Ví dụ: để tìm các phương tiện không phải là duy nhất trong hệ thống.
Khi đào tạo mô hình nhúng của chúng tôi bằng cách sử dụng dữ liệu trong Drive, chúng tôi đã thực hiện các biện pháp phòng ngừa tỉ mỉ. Chúng tôi đã cẩn thận xóa mọi dữ liệu cá nhân khỏi ảnh và đảm bảo tập dữ liệu được chuẩn hóa, bao gồm hình ảnh từ tất cả các quốc gia nơi chúng tôi hoạt động và các mức chất lượng khác nhau.
Cách tiếp cận này nhằm mục đích ngăn chặn sự phân biệt đối xử đối với những cá nhân không có quyền sử dụng điện thoại thông minh đắt tiền để chụp ảnh chất lượng cao.
Do đó, thu được một bộ dữ liệu được nhóm theo thương hiệu xe và thực hiện. Sau khi chạy một số thử nghiệm, chúng tôi nhận ra rằng chúng tôi sẽ phải làm mà không so sánh màu sắc của các phương tiện trong thời điểm hiện tại.
Khi chọn kiến trúc cho mô hình của mình, chúng tôi đã tìm kiếm một xương sống tạo ra sự cân bằng giữa hiệu suất và hiệu quả tính toán. Điều quan trọng là phải tránh sử dụng đường trục quá lớn, vì nó có thể làm chậm đáng kể thời gian chạy cơ bản.
Sau khi xem xét cẩn thận, chúng tôi đã chọnefficiencynet_b2 làm kiến trúc xương sống của mình, được bổ sung bằng việc sử dụng Tổn hao biên độ góc phụ gia cho mục đích học máy.
Mục tiêu của mô hình của chúng tôi là tìm hiểu các biểu diễn véc-tơ trong đó các phương tiện cùng kiểu dáng và mẫu mã, chẳng hạn như tất cả các xe Audi A4, được đặt gần nhau trong không gian véc-tơ.
Ngược lại, Audi A5 sẽ được định vị xa hơn một chút so với Audi A4 nhưng vẫn gần hơn so với Toyota Camry chẳng hạn.
Bây giờ, hãy đi sâu vào một vài ví dụ về so sánh xe:
Ở phía trên, chúng ta có hai chiếc xe giống hệt nhau, trong khi ở phía dưới, chúng ta có hai chiếc khác nhau. Hãy xem lại điểm tương đồng: cặp trên cùng có số điểm là 0,989, trong khi cặp dưới cùng có số điểm là 0,697. Bằng cách đặt giá trị ngưỡng là 0,98, chúng tôi có thể phân loại các phương tiện giống hệt nhau.
Tuy nhiên, điều quan trọng cần lưu ý là mô hình của chúng tôi vẫn chưa hoạt động hoàn hảo. Chúng tôi có một sự thiên vị trong yếu tố liên quan:
Mô hình tạo ra kết quả là 0,751, trong khi lý tưởng nhất là chúng tôi muốn một giá trị gần bằng 0 cho các phương tiện khác nhau.
Vấn đề chính ở đây bắt nguồn từ việc đào tạo mô hình của chúng tôi trên các bộ dữ liệu chủ yếu tập trung vào các kiểu xe và thương hiệu. Do đó, mô hình trở nên thành thạo trong việc phân biệt giữa các loại xe khác nhau, nhưng lại gặp khó khăn khi đánh giá sự khác biệt giữa các loại xe.
Vấn đề thứ hai mà chúng tôi gặp phải là chiếc xe có thể được hiển thị ở các góc độ khác nhau, điều này ảnh hưởng tiêu cực đến chất lượng nhúng của chúng tôi do tập dữ liệu hạn chế.
Bước đầu tiên, về phía khách hàng, chúng tôi đeo khẩu trang và hướng dẫn tài xế cách chụp ảnh xe của họ. Bước thứ hai sẽ là phát hiện các bộ phận khác nhau của phương tiện để định vị nó trong không gian và ước tính chuyển động quay của nó.
Rất nhiều kinh nghiệm có thể được phát triển ở đây để chọn góc quay chính xác. Và quan trọng nhất, những mô hình này sau này có thể được tái sử dụng để đánh giá tình trạng của chiếc xe. Nhưng đó là một câu chuyện cho một thời điểm khác.
Đăng bởi Ilya Kaftanov .