paint-brush
조류 감지 AI 만들기: 아이디어 구상부터 제품 출시까지~에 의해@olegkokorin
2,790 판독값
2,790 판독값

조류 감지 AI 만들기: 아이디어 구상부터 제품 출시까지

~에 의해 Oleg Kokorin10m2023/09/23
Read on Terminal Reader
Read this story w/o Javascript

너무 오래; 읽다

복잡한 컴퓨터 비전 제품이 개발되는 방식에 대한 '비하인드 스토리': ● 약한 하드웨어에서 객체 감지 모델을 실행하는 문제 해결 ● 거짓양성 결과 및 불균형 데이터 세트 처리 ● 거의 동일해 보이는 새 종을 구별하는 기계 교육
featured image - 조류 감지 AI 만들기: 아이디어 구상부터 제품 출시까지
Oleg Kokorin HackerNoon profile picture
0-item

컴퓨터 비전은 전 세계 기업가들의 관심을 사로잡았고, 그럴 만한 이유가 있습니다. 현대 AI 기술의 역량은 이전에는 불가능했던 아이디어를 실제 제품으로 만들어줍니다.


사진과 비디오에서 물체를 감지하고 분류하는 작업은 얼굴 인식 기능과 엑스레이 스캔을 기반으로 한 질병 감지 기능이 내장된 보안 카메라부터 간단한 모바일 앱에 이르기까지 다양한 영역과 수백 개의 시스템에서 사용되었습니다.


하지만 서론으로 충분하기 때문에 이 기사에서는 컴퓨터 비전 제품, 특히 복잡한 제품이 개발되는 방식에 대한 '비하인드 스토리'를 공유하고 싶었습니다.


나는 누가 자신의 뒷마당을 보지 않는 동안 방문하는지 알고 싶어하는 사람들을 위한 새 인식 앱인 Birdsy에서 작업할 기회를 얻었습니다.


Birdsy는 새와 작은 포유류를 실시간으로 감지하고 사용자가 나중에 볼 수 있도록 비디오를 녹화하는 AI 기반 서비스입니다.



Birdsy는 약한 하드웨어에서 실행하고 새 유형과 성별을 높은 정확도로 감지할 수 있어야 하는 실시간 개체 감지 및 분류 기능을 갖춘 복잡한 AI 기반 앱입니다.


이 모든 것을 고려하면 초기 아이디어부터 앱 스토어에 앱을 게시하기까지의 과정은 복잡하면서도 동시에 매력적이었습니다.


우리는 비즈니스 측면과 개발 측면 모두에서 많은 장애물에 직면했습니다. 저는 동일한 프로젝트에 직면하고 있는 기업가와 AI 개발자를 돕기 위해 한 곳에서 공유하기로 결정했습니다.


당면한 과제


새들은 포식자(이 경우에는 조류 관찰자)를 피하기 위해 환경과 완벽하게 조화를 이루기 위해 수백만 년에 걸쳐 진화해 왔으며, 이로 인해 야생 동물을 감상하기가 더 어려워졌습니다.


특정 새 종을 정면으로 관찰하는 동안 부리는 문제가 될 수 있지만 집에서 편안하게 비디오 카메라를 통해 모니터링하는 것은 날개 달린 친구들을 즐길 수 있는 좋은 방법입니다. 특히 AI가 몇 시간의 비디오 영상을 볼 필요를 없애고 전송하는 경우 더욱 그렇습니다. 새가 카메라 시야에 들어오면 경고하여 어떤 새 종인지 자동으로 감지합니다.


Birdsy에는 두 부분이 있습니다:


  • 객체 감지 — 새나 포유류의 존재를 감지하는 신경망
  • 개체 분류 — 어떤 새나 포유류 종을 포획했는지 결정하는 신경망



물체 감지를 위한 저품질 카메라


서비스를 더욱 접근하기 쉽고 사용하기 쉽게 만들기 위해 조류 관찰에 모든 카메라를 사용할 수 있습니다. 이것이 우리가 첫 번째 문제에 부딪힌 곳입니다. 가장 저렴하고 가장 널리 사용되는 저품질 카메라입니다.


'카메라 제한 없음'은 사용자에게는 좋지만 객체 감지 모델은 카메라 칩셋을 사용하여 실행되므로 우리에게는 어려운 문제였습니다.


누군가가 좋은 거래를 하는 경우 다른 사람은 막대한 이익을 얻습니다. 이 경우 '다른 사람'은 CV 개발자입니다. 값싼 카메라로 작업한다는 것은 기본 신경망 아키텍처를 사용할 수 없게 만드는 값싼 칩셋으로 작업한다는 것을 의미합니다.


기본 YOLO v4의 약 120개 레이어를 사용할 수 있는 최고급 컴퓨터 비전 비디오 카메라(NVIDIA Jetson Nano)의 황금 표준과 비교할 때, 우리가 작업해야 했던 카메라는 22개 레이어만 허용했습니다.


전체 YOLO v4 신경망이 뛰어난 인식 결과를 제공하는 경우 단순 버전은 성능이 좋지 않습니다. 우리는 두 가지를 모두 테스트했으며 값싼 칩셋을 사용하여 실행할 때 모델 깊이가 얼마나 낮은지 보고 불쾌하게 놀랐습니다.


기본 YOLO v4와 축소 테스트


우리는 기본 YOLO v4 모델을 교육하고 이를 고객의 데이터 세트에서 테스트하는 것으로 시작했습니다. 우리가 달성한 결과는 만족스러웠습니다. 95% mAp는 컴퓨터 비전 세계에서 모델을 프로덕션에 출시하기에 충분합니다.


카메라 매개변수에 맞게 모델을 재교육한 후 감지 품질이 크게 떨어졌습니다. 그러나 기계가 실패하는 곳에서 인간은 발전합니다.


우리는 테스트 데이터에 대해 신경망을 테스트하고 거짓양성과 거짓음성을 시각적으로 평가했습니다. 이는 네트워크에 지식이 부족한 부분과 실수가 가장 많이 발생한 부분을 강조했습니다.


우리는 포유류, 아니면 거짓 긍정일 뿐이야

네트워크는 사람, 특히 사람의 손을 동물로 감지하려고 했습니다. (그리고 우리는 그것을 비난하지 않습니다. 결국 인간은 동물입니다.) 생물학적 관점에서는 이것이 맞지만, 최종 사용자는 이웃보다 새를 보는 데 더 관심이 있기 때문에 우리는 네트워크가 사람을 무시하고 대신 새와 포유류에 집중하도록 가르치는 작업을 해야 했습니다.


이를 위해 우리는 인간의 손뿐만 아니라 다양한 각도에서 찍은 사람들의 사진을 포함하여 부정적인 예를 추가했습니다.

모델은 때때로 인간의 손, 손가락, 몸통을 새로 감지했습니다.



어둠 속에 무엇이 숨어 있을까


카메라에는 풀 컬러 이미지를 생성하는 일반 주간 모드와 흑백 이미지를 생성하는 야간 적외선 모드의 두 가지 모드가 있습니다. 카메라가 적외선으로 전환되었을 때 모델은 많은 오탐지를 생성했습니다.


  • 바람에 흔들리는 나무잎
  • 따뜻한 카메라에 이끌려가는 나방 같은 곤충들
  • 분수


사용자는 알림을 통해 잠에서 깨어나면 별로 기뻐하지 않을 것이고, 부엉이나 여우를 보고 신나지만 결국에는 나방이 카메라 렌즈에 몸을 부딪히는 녹화본을 보게 될 것입니다.


밤 동안 모델은 움직이는 나뭇가지나 곤충을 새로 감지합니다.



수면 방해를 최소한으로 줄이기 위해 야간 설정에서 오탐지 사례를 수집하고 이를 수동으로 표시했습니다.


인스타그램 vs 현실

사람들이 자신의 최고의 모습을 보여주는 '하이라이트 릴'이라고 불리는 소셜 미디어에 대해 들어보신 적이 있나요? 야생 동물에게도 같은 일이 일어날 수 있다는 것을 누가 알았겠습니까?


Google 이미지 및 YouTube 비디오와 같은 오픈 소스에서 얻을 수 있는 새 사진은 일반적으로 고품질이고 매우 선명하며 새 사이에 아무것도 없이 카메라를 바라보거나 적어도 앞쪽에 위치하는 최상의 표본을 묘사합니다. 그리고 시야를 방해하는 카메라.


현실은 항상 아름답지만은 않습니다. 카메라는 인간의 눈으로도 무슨 일이 일어나고 있는지 이해하기 어렵게 만들 수 있는 낮은 품질의 이미지를 생성하며, 비, 눈, 먼지와 같은 악천후 조건은 시야를 방해할 수 있으며, 누군가가 사진을 찍고 싶어할 때 새가 이를 감지하고 가능한 가장 우스꽝스러운 방식으로 자신을 배치하십시오.


새들이 인터넷에서 보는 모습과 실제 환경에서 보이는 모습의 차이



클라이언트가 제공한 데이터 세트(인터넷에서 찾은 샤트 이미지로 구성)는 이 프로젝트에 그다지 유용하지 않았습니다.


우리는 고객의 카메라를 사용하여 실제 상황에서 새의 이미지 세트를 수집하여 모델에게 새가 소셜 미디어에 어떻게 표시되는지가 아니라 실제로 어떻게 생겼는지 보여줘야 했습니다.

우리가 지금 가지고 있는 것

따라서 위의 모든 작업을 수행한 후 다음을 수행합니다.


  • 네트워크가 잘못된 모든 인스턴스를 수동으로 살펴봅니다.
  • 사람을 무시하고 새나 포유류로 감지하지 않도록 네트워크를 교육합니다.
  • 흑백 이미지 및 오탐 작업
  • 실제 조건, 다양한 각도, 다양한 기상 조건에서 새 데이터 세트를 수집합니다.


우리는 객체 감지에 대해 97.5% mAP를 달성했습니다. 생산에 들어가는 모든 CV 모델에 대한 암묵적인 규칙은 94% 이상의 mAP를 갖는 것이므로 컴퓨터 비전 모델의 경우 이는 매우 높은 결과입니다.


완벽함 달성 (거의)


현재 우리가 달성한 결과는 최종 제품에 사용하기에 충분하지만 여전히 개선의 여지가 있습니다.


  • 네트워크는 꽃을 새로 착각합니다
  • 뒤에서 새가 보는 풍경은 아직도 때로는 미스터리입니다
  • 임의의 물체로 부분적으로 덮인 새
  • 카메라 가까이에 있는 새들


각 그룹에 대한 충분한 이미지가 수집되면 mAP가 증가하여 98.5%에 도달할 것으로 예상됩니다.


이미지 분류 모델

뒷마당 방문자를 알아가는 다음 단계는 새가 있는 이미지를 객체 분류 모델에 전달하는 것입니다. 그 목표는 새의 종과 성별을 인식하는 것입니다.


일부 조류 종은 특정 대륙에만 서식하기 때문에 우리는 두 가지 모델, 즉 북미에 사는 모델과 유럽에 사는 모델을 만들기로 결정했습니다.


한 번에 한 단계: 다단계 신경망에 대한 교훈


처음에 개체 분류 문제는 '정면' 접근 방식을 사용하여 해결되었습니다. 네트워크에는 수컷과 암컷 모두의 다양한 종의 사진이 표시되었으며, 이로부터 종의 모양과 차이점을 알아보려고 했습니다. 다른.


이로 인해 정확도 점수가 매우 낮았습니다. 즉, 네트워크가 조류와 포유류 종을 식별할 때 많은 실수를 저질렀습니다.


네트워크는 동시에 너무 많은 측면을 학습하려고 했습니다. 많은 새 종들은 서로 매우 비슷해 보이며 서로 다른 색깔의 깃털 조각이나 서로 다른 모양의 부리로 인해 서로 다릅니다.


같은 종의 성별이 어떻게 다른지와 함께 이 모든 정보를 유지하는 것은 주어진 상황에서 너무 어렵습니다. 네트워크는 더 넓은 새 유형을 올바르게 결정하면서 종종 새 종을 혼합합니다.


예를 들어, 두건이 있는 명금류와 검은 깃털을 가진 켄터키 명금류의 차이점은 다음과 같습니다.


일부 새는 서로 매우 유사해 정확하게 감지하기가 어렵습니다.


네트워크는 두건이 있는 명금류를 켄터키 명금류로 분류하여 잘못된 결과를 생성하지만 일반적으로 정확합니다. 둘 다 명금류입니다. 시간적 측면에서 클라이언트는 특정 종보다는 전체 조류 유형을 감지하는 것이 더 중요하다고 판단하여 우리는 여기서 시작했습니다.


모델 평가 후 우리는 다단계 접근 방식을 구현하기로 결정했습니다.


  • 모든 조류 종은 독수리, 참새, 까마귀, 비둘기 등보다 일반적인 범주로 분류되었습니다.
  • 네트워크는 먼저 전반적인 새 유형을 결정합니다.
  • 두 번째 단계는 그것이 어떤 종인지 알아내는 것입니다.
  • 마지막은 새가 수컷인지 암컷인지를 결정하는 것입니다.


새 종을 그룹화함으로써 클래스 수를 98개에서 49개로 줄일 수 있었으며, 이는 네트워크에서 선택할 클래스가 많지 않았기 때문에 정확도 점수를 크게 향상시켰습니다.


연습하면 완벽해집니다. 기계에서도 마찬가지입니다.


새로운 개념이 떠오르면 책을 읽거나 교육 영상을 시청해 파악합니다. 실패하면 친구에게 설명을 요청하거나 해당 주제에 대한 세미나를 방문하세요. 즉, 더 잘 이해하기 위해 더 많은 정보를 축적하려고 노력하는 것입니다.


신경망도 마찬가지입니다. 워블러가 어떻게 생겼는지 더 잘 이해하는 것이 필요할수록, 이를 보여주기 위해 더 많은 워블러 이미지가 필요합니다. 더 많은 데이터를 조사할수록 정확도 점수가 높아집니다.


우리가 선택한 다단계 접근 방식은 객체 분류 모델의 정확도를 향상했을 뿐만 아니라 데이터 세트를 분석하고 네트워크에서 학습 데이터가 부족한 위치를 확인할 수 있게 했습니다.


미운 오리 새끼 문제


객체 분류 모델이 시작된 후 우리는 테스트에서 보여준 것보다 훨씬 더 나쁜 결과를 받고 놀랐습니다. 모델이 새 종이나 유형을 올바르게 결정할 수 없었습니다.


문제는 이보다 더 심각했습니다. 전체 프로젝트를 담당하는 우리 컴퓨터 비전 개발자는 작업하는 동안 모든 새 종을 직접 배웠지만 네트워크에서 잘못 표시된 이미지를 받았을 때 새가 무엇인지 판단하지 못했습니다. .


7월은 10대 새들이 날아다니는 법을 배우고 둥지를 떠나는 시기이기 때문에 조류 분류 모델을 시작하기에 가장 좋은 시기는 아닌 것으로 밝혀졌습니다.


미운 오리 새끼 이야기를 기억하시나요? 글쎄요, 대부분의 새들에게 있어서는 사실입니다. 새끼들은 성체 새들처럼 전혀 보이지 않으며, 아직 어리면 어떤 새를 보고 있는지 알기가 어렵습니다.


우리는 여름 동안 어린 새들의 이미지를 수집했으며 다양한 연령대의 다양한 새 종을 결정하기 위해 분류 네트워크를 훈련할 계획입니다.


종종 어린 새들은 성체와 전혀 닮지 않았습니다


팀워크가 네트워크를 작동하게 만듭니다


조류 관찰자들은 열정적인 사람들로, 깃털 모양으로 새를 식별하는 방법을 알고 있습니다. 그들은 우리의 분류 네트워크가 꿈꾸는 지식을 가지고 있습니다. 그렇다면 두 가지를 하나로 모아 세계가 이전에 본 적이 없는 새를 사랑하는 동맹을 형성하는 것은 어떨까요?


현재 분류 네트워크는 사용자에게 조류 종을 알려주는 것뿐만 아니라 다른 추측과 함께 신뢰도도 보여줍니다.


사용자는 네트워크의 추측을 확인하거나 수정할 수 있으므로 한 번에 한 마리씩 훈련하는 데 도움이 됩니다. 3개월간 사용자 피드백 시스템을 운영한 결과 2만 장 이상의 이미지가 수집되었습니다. 이 데이터는 사진이 실제 조건(악천후, 야간 등)에서 촬영되고 전문가가 표시하기 때문에 우리에게 매우 중요합니다.


네가 심연을 들여다보면 심연이 너를 향해 지저귀느니라


이 프로젝트를 진행하는 동안 우리 스스로가 조류 전문가가 되었다는 점은 주목할 만합니다. 하루 종일 새를 관찰하면서 본질적으로 다양한 종류의 참새 사이의 모든 작은 차이점에 대해 가상 어린이에게 교육하는 동시에 조류 관찰 커뮤니티의 즉시 플래티넘 회원이 됩니다.


다른 모든 방법이 실패하면 CV 팀원은 조류학 분야에서 쉽게 자신을 찾을 수 있습니다.


진지하게 말하자면, 데이터 세트 마크업을 위해 수천 장의 새 이미지를 살펴보거나 네트워크에서 가장 많은 실수를 하는 곳을 분석하기 위해 우리는 이 프로젝트를 깊이 파고들어 많은 새 지식뿐만 아니라 다른 목적을 달성했습니다. 복잡한 이미지 인식 및 분류 시스템의 작동 방식, 이를 가장 잘 구현하는 방법, 대규모 데이터 세트를 분석하고 약점을 찾는 방법에 대한 더 나은 이해.


이 프로젝트는 최신 컴퓨터 비전 기술을 연구 및 작업하고, 실시간 고객 피드백을 처리하고, 오래된 코드로 작업할 때 문제 해결 기술을 연마할 수 있는 기회로서 우리에게 매우 귀중했습니다.