이 글에서는 사용자 차량 확인 프로세스를 자동화하는 방법에 대해 설명하겠습니다. 우리가 사용하는 구성 요소와 프로세스 구성 방법을 여러분과 공유하겠습니다.
inDrive에서는 많은 양의 시각적 콘텐츠를 사용합니다. 우리는 여권, 증명서, 차량 문서 등 다양한 문서가 사용되는 다양한 사고방식을 지닌 다양한 지역에 존재합니다.
그 외에도 운전자 자신과 차량을 처리해야 합니다.
여행의 편안함과 사용자를 위한 향상된 서비스 품질에 대해 이야기할 때 안전과 예상치 못한 일을 제거하는 것이 절대적으로 중요합니다. 예를 들어, 정차한 차량이 예약한 차량이 아닌 경우입니다.
현재 inDrive에서 정기적인 차량 확인을 어떻게 처리하고 있는지 알아보실 수 있습니다. 작업이 완료되면 중재자가 수동으로 전후 사진을 확인합니다. 물론 검증 과정에는 다른 것들도 포함되지만 여기서는 이 측면에만 중점을 두겠습니다.
현재 접근 방식의 문제점은 인프라를 확장하는 것보다 중재자 수를 늘리는 것이 더 어렵다는 것입니다. 특히 사용자의 개인 데이터를 다루는 경우에는 더욱 그렇습니다.
마치 어린아이의 경우처럼 문제를 매우 간단하게 설명하겠습니다. 자동차 사진 두 장이 있습니다. 둘 다 같은 자동차인가요? 분명히 누구나 이 질문에 답할 수 있지만 비교 기준을 추가하면 상황이 훨씬 더 복잡해집니다.
예를 들어, 휴대폰의 스크린샷이 아닌지, 자동차 번호판 번호가 완벽하게 일치하는지 확인하세요.
전 세계적으로 이 문제는 여러 가지 방법으로 해결될 수 있습니다. E2E 모델 및 이러한 모델 세트를 사용합니다.
E2E 모델은 "사진 속 차량이 같은 차량인가요?", "번호판 번호가 일치합니까?"와 같은 이미지 쌍을 기반으로 질문에 답할 수 있는 하나의 대형 모델(대개 신경망)이 포함됨을 의미합니다. 올라갈까 말까?” 등이 있습니다.
이러한 모델의 문제점은 학습하기 위해 많은 데이터가 필요하고 왜 답이 무엇인지에 대한 이해가 부족하다는 것입니다.
예를 들어, 한 쌍의 사진을 기반으로 "예"/"아니요"라고 대답하도록 모델을 훈련시키는 경우 더 이상 대답의 이유를 파악하는 것이 불가능합니다.
따라서 사용자는 우리가 원하는 것이 무엇인지 이해할 수 없으며 중재자를 불러와야 합니다.
이러한 엔드 투 엔드 접근 방식은 우리에게 적합하지 않습니다. 우리는 제공된 사진이 왜 "적절하지" 않은지에 대한 단서를 사용자에게 제공하고 싶습니다: "조명이 밝은 곳에서 사진을 찍는 것이 가장 좋습니다.", "차 전체가 보이지 않는 것 같습니다." 사진이요." 또는 "번호판 번호가 제공된 정보와 일치하지 않습니다."
다른 차량이 있을 때 모델이 "예"라고 대답하지 않는 것이 우리에게 매우 중요합니다. 이 측정항목의 이름을 "FPR"(거짓양성률)로 명명하고 이를 사용하여 모든 부정적인 예(차량이 일치하지 않는 경우) 대비 "예" 응답의 비율을 표시해 보겠습니다.
이제 모든 긍정적인 답변에 대한 "예" 답변의 비율을 측정하기 위해 또 다른 측정항목인 TPR을 소개하겠습니다.
기본적으로 이 두 가지 지표는 모델을 최적화할 때 FPR을 최소화하고 TPR이 너무 저하되지 않도록 하는 작업을 설명하는 데 이미 충분합니다.
우리는 모델 세트 접근 방식을 채택했습니다. 따라서 우리는 완성된 솔루션의 뼈대에 모든 아이디어를 추가할 수 있습니다(이 뼈대를 "기준선"이라고 함). 어떻게 생겼는지 살펴보고 부분별로 나누어 보겠습니다.
실제로 이는 입력에서 두 개의 이미지를 독립적으로 처리하고 출력에서 차량의 번호판 번호와 벡터를 제공하는 여러 모델로 구성됩니다. 결과적으로 비교된 내용을 토대로 검토 중인 두 사진에 대한 검증 결정이 내려진다.
이는 여러 다른 모델을 추가하여 모델의 다른 노드에 배치하는 데 사용하는 알고리즘의 뼈대입니다. 예를 들어 사진의 품질, 선명도, 조명 및 채도 수준을 평가할 때.
때로는 정품이 아닌 사진을 제출하려는 시도를 감지해야 하는 경우도 있습니다. 이를 위해 사진에 스푸핑 공격이 있는지 확인하는 전처리기를 추가합니다.
이러한 접근 방식을 사용할 때는 명확한 제품 반복 주기를 갖고 좋은 테스트 데이터 세트를 생성하는 것이 중요합니다. 우리는 "할당된 문제를 해결합니까?"라는 두 가지 요소를 평가하기 위해 새로운 모델을 추가합니다. 및 "이전 솔루션의 측정항목이 얼마나 수정됩니까?"
이제 솔루션의 기본 구성 요소에 대해 이야기해 보겠습니다.
계속해서 용어를 살펴보겠습니다. 아래에서는 "바운딩 박스", "분할 마스크" 등의 용어의 의미에 대해 설명하겠습니다.
경계 상자는 관심 있는 특정 객체를 둘러싸는 데 사용되는 직사각형 모양입니다. 예를 들어 고양이의 얼굴을 식별하려면 빨간색으로 윤곽선을 그려 경계 상자를 정의합니다. 이는 이미지 내의 왼쪽 하단 및 오른쪽 상단 지점의 좌표로 정의됩니다.
분할은 입력 이미지의 각 개별 픽셀에 클래스 레이블을 할당하는 작업을 나타냅니다. 논의의 맥락에서 우리는 배경에서 고양이를 분할하여 분리했습니다.
우리 모델에서 차량의 배경은 목표 솔루션을 형성하는 데 관련 정보를 제공하지 않기 때문에 관심이 없습니다. 하지만 그렇다고 해서 배경을 사용하여 모델을 개선하는 방법에 대한 아이디어가 없다는 의미는 아닙니다.
배경에서 차량을 분리하는 문제를 해결하기 위해 YOLO 제품군(You Only Look Once) 모델을 가져와 자동차 이미지를 분할하도록 학습시킵니다. 여기서 문제는 사진에 두 대 이상의 자동차가 있는 사용자의 사진이 엄청나게 많다는 것입니다.
이 문제를 극복하기 위해 다음 접근 방식을 사용할 수 있습니다.
좋습니다. 첫 번째 입력을 받았습니다.
다음 단계는 차량의 번호판 번호를 찾는 것입니다. 거의 모든 국가에서 번호판은 전면에 있습니다. 차량 등록판이 특이한 위치에 있는 드문 경우는 이 기사의 범위를 벗어납니다.
자동차 번호판 번호를 설정하는 가장 일반적인 접근 방식은 경계 상자를 감지하고 결과 패치에 OCR을 적용하는 것입니다.
그러나 실험에서 알 수 있듯이 차량 등록 번호판이 수평선과 평행하지 않으면 OCR의 효과가 훨씬 떨어지고 일부 모델에서는 시간이 더 오래 걸립니다.
이는 운전자에게 비스듬히 사진을 찍도록 요청하는 데이터와 특히 관련이 있습니다.
우리가 결정한 해결책은 숫자를 분할한 다음 얻은 등고선을 매끄럽게 만드는 것이었습니다. 우리의 경우 분할 작업은 차량 분할 방법과 유사하게 접근되었으며 결과는 다음과 같습니다.
다음으로 마스크를 사용하여 등고선을 그리고 ConvexHull을 적용하여 매끄럽게 만들었습니다. 이 간단한 알고리즘은 등고선의 오목한 부분을 부드럽게(곧게)하여 더 직선으로 만듭니다. 이는 등고선 다각형의 각도 수가 더 적은 것으로 설명할 수 있습니다.
이상적인 세계에서 이 작업을 수행하면 4개의 점으로 정의된 직사각형이 생성됩니다.
테두리를 정렬한 후에는 동일한 훈련을 원근법으로 반복하여 등록 번호가 매끄럽고 잘 나타나며 명확하게 보이도록 합니다. 이 접근 방식은 번호판이 거의 보이지 않는 각도에서 차량을 촬영할 때 특히 유용합니다.
원근교정이란 무엇인가요? 나는 대수학 수업에서 회전 행렬이 어떻게 작동하는지 기억합니다. 데카르트 좌표계에서 정사각형을 취하고 각 좌표에 30도 회전 행렬을 곱하면 새 좌표계의 정사각형은 30도 회전됩니다.
여기서는 비슷한 작업을 다루고 있습니다. 등고선을 취하고 모든 점을 새 좌표계로 이동해 보겠습니다. 문제는 적절한 변환 행렬을 찾는 것입니다.
이러한 알고리즘은 모두 이미 잘 확립되어 있으므로 우리가 해야 할 유일한 일은 해당 알고리즘이 현재 작업에 맞게 올바르게 구성되었는지 확인하는 것입니다.
결과는 훌륭했습니다. 이로 인해 TPR이 거의 15% 포인트 증가했습니다. 다음으로 PARSeq 아키텍처와 같은 경량의 고품질 OCR 소프트웨어를 적용합니다.
현재로서는 차량 사진 처리를 위한 최신 신경망 기술이다. 임베딩은 검색, 추천, 데이터 압축을 비롯한 다양한 기계 학습 분야에서 널리 채택되는 기술입니다.
우리 작업의 맥락에서 차량 간의 유사성을 평가하기 위해 임베딩이 사용됩니다.
먼저 오른쪽에서 차 사진을 찍은 다음, 왼쪽에서 사진을 찍은 예를 살펴보겠습니다. 이제 이 사진에 대한 임베딩(벡터)을 계산할 수 있으며, 이러한 벡터가 공간적으로 가깝다면 이는 동일한 차량임을 나타냅니다.
그러나 임베딩은 제품에서 사용할 수 있는 또 다른 유용한 속성을 제공합니다. 임베딩 모델이 잘 작동하면 임베딩 샘플 중에서 가장 가까운 것을 검색할 수 있습니다. 예를 들어 시스템에서 고유하지 않은 차량을 찾는 경우입니다.
inDrive 데이터를 사용하여 임베딩 모델을 훈련할 때 세심한 예방 조치를 취했습니다. 우리는 사진에서 모든 개인 데이터를 부지런히 제거하고 우리가 운영하는 모든 국가의 이미지와 다양한 품질 수준을 포함하여 데이터 세트가 정규화되었는지 확인했습니다.
이 접근 방식은 고품질 사진 촬영을 위해 고가의 스마트폰을 사용할 수 없는 개인에 대한 차별을 방지하는 것을 목표로 합니다.
결과적으로 차량 브랜드 및 제조사별로 그룹화된 데이터 세트를 얻었습니다. 여러 번의 실험을 거친 후, 우리는 당분간 차량의 색상을 비교하지 않고 해야 한다는 것을 깨달았습니다.
우리 모델의 아키텍처를 선택할 때 성능과 계산 효율성 사이의 균형을 유지하는 백본을 찾았습니다. 지나치게 큰 백본을 사용하지 않는 것이 중요했습니다. 기본 실행 시간이 상당히 느려질 수 있기 때문입니다.
신중하게 고려한 끝에 우리는 기계 학습 목적으로 Additive Angular Margin Loss를 활용하여 보완된 Efficientnet_b2를 백본 아키텍처로 선택했습니다.
우리 모델의 목표는 모든 Audi A4와 같이 동일한 제조사 및 모델의 차량이 벡터 공간에서 서로 밀접하게 위치하는 벡터 표현을 학습하는 것입니다.
대조적으로, Audi A5는 Audi A4에서 다소 멀리 떨어져 있지만 예를 들어 Toyota Camry와 비교할 때 여전히 더 가깝습니다.
이제 차량 비교의 몇 가지 예를 살펴보겠습니다.
상단에는 두 대의 동일한 자동차가 있고 하단에는 두 대의 다른 자동차가 있습니다. 유사성 점수를 다시 살펴보겠습니다. 위쪽 쌍의 점수는 0.989이고 아래쪽 쌍의 점수는 0.697입니다. 임계값을 0.98로 설정하면 차량을 동일 차량으로 분류할 수 있습니다.
그러나 우리 모델이 아직 완벽하게 작동하지는 않는다는 점에 유의하는 것이 중요합니다. 우리는 관련 요인에 편향이 있습니다:
모델은 0.751의 결과를 생성하는 반면, 우리는 다양한 차량에 대해 이상적으로 0에 가까운 값을 원합니다.
여기서 주요 문제는 주로 차량 모델과 브랜드에 초점을 맞춘 데이터 세트로 모델을 훈련시키는 것에서 비롯됩니다. 결과적으로 모델은 서로 다른 차량을 구별하는 데 능숙해졌지만 차량 클래스 내 차이를 평가하는 데는 어려움을 겪습니다.
우리가 직면한 두 번째 문제는 차량이 다른 각도로 표시될 수 있다는 것입니다. 이는 제한된 데이터 세트로 인해 임베딩 품질에 부정적인 영향을 미칩니다.
첫 번째 단계로 고객 측에서는 마스크를 추가하고 운전자에게 차량 사진을 찍는 방법을 알려줍니다. 두 번째 단계는 차량의 다양한 부분을 감지하여 공간에 배치하고 회전을 추정하는 것입니다.
올바른 회전 각도를 선택하기 위해 여기에서 많은 경험적 방법을 개발할 수 있습니다. 그리고 가장 중요한 점은 이러한 모델을 나중에 차량 상태 평가에 재사용할 수 있다는 것입니다. 그러나 그것은 또 다른 이야기입니다.
게시자: Ilya Kaftanov .