목줄을 매고 산책하는 개는 매일 당신과 나 그리고 다른 사람들을 문명화된 집으로 만들어 문명화된 커뮤니티를 구축하는 데 도움을 줍니다. YOLOv3를 기반으로 우리는 공개 시나리오에서 목줄 없이 산책하는 개를 위한 탐지 및 식별 시스템을 개발하고 구축합니다.

강아지 산책은 매일매일 점검이 필요한 부분입니다. 강아지는 성격이 활발하고 활동적이어서 하루 동안 산책을 하지 않으면 불편함을 느끼게 됩니다. 강아지 산책 시 가장 중요한 것은 목줄을 잘 착용하는 것입니다. 목줄을 꽉 잡는 것은 개를 키우는 사람의 필수 과정입니다. 개를 산책시킬 때, 주인의 손에 있는 목줄은 개의 생명과 건강에 더 중요한 장벽이 됩니다. 일상의 공동체 생활을 하다 보면 문명도, 도덕적인 마음도 없는 개 산책자들을 길에서 마주치게 될 거라 믿습니다. 선천적으로 겁을 먹고, 개에게 물린다는 보고가 끊이지 않습니다. 소위 "개는 온순하고 물지 않습니다"라는 수사는 목줄을 잡지 않고 탐닉할 이유가 되지 않습니다.

이러한 현상을 기술적인 관점에서 고려하거나 개입할 수 있을까요? 이론적으로 가능하다고 생각합니다. 이 기사의 주요 목적은 목줄 없이 개 산책의 맥락에서 기술적 수단을 기반으로 이러한 유형의 행동 개입을 분석하는 타당성을 탐색하는 것입니다. 여기서는 주로 YOLOv3를 기반으로 해당 목표를 개발하고 구축합니다. 탐지 모델, 우리의 원래 설계 의도는 미래에 이러한 기술적 수단을 도로변, 강, 커뮤니티, 출입구 등에 사용 가능한 비디오 카메라와 결합하여 실시간 지능형 계산 및 개 산책 분석을 수행할 수 있다는 것을 고려하는 것입니다. 사진에 나타나는 대상 물체를 발견한 경우 음성 방송을 통해 문제를 상기시킬 수 있으며, 여전히 수정되지 않은 경우 현재 기간의 영상을 해당 부서에 전송하여 후속 처리를 할 수 있습니다. 비즈니스 적용 수준이며 개발자가 결정하는 것이 아니며, 여기서 가장 중요한 것은 우리가 보고 생각하는 것을 기반으로 개발하고 구성하는 실용적인 성격의 프로젝트입니다.

우리는 이미 이전 기사에서 해당 개발 사례를 수행했습니다. 관심이 있으시면 직접 읽어보실 수 있습니다.

"목줄을 매고 산책시키는 개는 문명화된 공동체 구축을 돕기 위해 매일 당신과 나를 위한 문명의 집입니다. DETR(DEtection TRansformer)을 기반으로 공공장소에서 목줄 없이 산책하는 개를 위한 탐지 및 식별 시스템을 개발 및 구축합니다."

먼저 예제 효과를 살펴보세요.

여기에는 유효한 데이터 세트가 없습니다. 우리가 선택한 것은 인터넷에서 해당 시나리오의 데이터 세트를 크롤링한 다음 수동으로 데이터에 레이블을 지정하는 것입니다. 여기에서는 개와 개 가죽끈이라는 두 가지 주요 레이블 지정 개체에 대해 논의하고 동의합니다. 또한 강에서 낚시가 금지된 장면에서 데이터의 라벨링 전략을 활용합니다.

다음으로 데이터 세트를 살펴보세요.

이 기사에서는 모델을 개발하기 위해 더 고전적이고 오래된 YOLOv3을 선택합니다. YOLOv3(You Only Look Once v3)는 표적 탐지 알고리즘 모델로 YOLO 시리즈 알고리즘의 세 번째 버전입니다. 이 알고리즘은 표적 탐지 작업을 단일 신경망의 회귀 문제로 변환하여 실시간 표적 탐지 기능을 달성합니다.

YOLOv3의 주요 장점은 다음과 같습니다.

실시간 성능: YOLOv3는 단일 단계 탐지 방법을 채택하여 대상 탐지 작업을 엔드투엔드 회귀 문제로 변환하므로 탐지 속도가 더 빠릅니다. 기존의 2단계 방법(예: Faster R-CNN)과 비교하여 YOLOv3는 높은 정확도를 유지하면서 실시간 탐지를 달성할 수 있습니다.

다중 규모 기능 융합: YOLOv3는 다양한 수준의 기능 맵을 감지하여 다양한 규모의 대상을 효과적으로 감지할 수 있는 다중 규모 기능 융합 메커니즘을 도입합니다. 이를 통해 YOLOv3는 대규모 변화가 있는 장면을 처리할 때 더 나은 성능을 보여줄 수 있습니다.

글로벌 컨텍스트 정보: YOLOv3는 네트워크 구조에 글로벌 컨텍스트 정보를 도입합니다. 더 큰 수용 필드를 가진 컨볼루션 커널을 사용하여 전체 이미지의 의미 정보를 더 잘 이해하고 모델의 대상 인식 능력을 향상시킬 수 있습니다.

간단한 네트워크 구조: YOLOv3의 네트워크 구조는 75개의 컨볼루셔널 레이어와 5개의 풀링 레이어로 비교적 간단하므로 모델을 훈련하고 배포하기가 더 쉽고 모델 크기가 더 작습니다.

YOLOv3에도 몇 가지 단점이 있습니다.

낮은 작은 표적 탐지 능력: YOLOv3는 더 큰 수용 필드와 다운샘플링 작업을 사용하기 때문에 작은 표적에 대한 탐지 능력은 상대적으로 약합니다. 장면에 작은 대상이 많이 있는 경우 YOLOv3는 감지를 놓치거나 잘못 감지할 수 있습니다.

더 높은 위치 오류: YOLOv3는 표적 탐지 작업을 회귀 문제로 변환하므로 특징 맵이 거칠고 수용 필드가 더 크면 위치 오류가 더 높아질 수 있습니다. 이는 더 높은 정밀도의 목표 위치 지정이 필요할 때 YOLOv3가 특정 제한을 받을 수 있음을 의미합니다.

YOLOv3는 YOLO 시리즈의 획기적인 모델로, 지속적인 진화와 발전을 거듭하며 성능 면에서는 YOLOv5 등의 모델과 비교하기 어렵지만 뛰어난 공헌을 했다는 점은 부인할 수 없다.

이 기사에서는 다음과 같이 yolov3-tiny 모델을 선택합니다.

# parameters
nc: 2  # number of classes
depth_multiple: 1.0  # model depth multiple
width_multiple: 1.0  # layer channel multiple
 
# anchors
anchors:
  - [10,14, 23,27, 37,58]  # P4/16
  - [81,82, 135,169, 344,319]  # P5/32
 
# YOLOv3-tiny backbone
backbone:
  # [from, number, module, args]
  [[-1, 1, Conv, [16, 3, 1]],  # 0
   [-1, 1, nn.MaxPool2d, [2, 2, 0]],  # 1-P1/2
   [-1, 1, Conv, [32, 3, 1]],
   [-1, 1, nn.MaxPool2d, [2, 2, 0]],  # 3-P2/4
   [-1, 1, Conv, [64, 3, 1]],
   [-1, 1, nn.MaxPool2d, [2, 2, 0]],  # 5-P3/8
   [-1, 1, Conv, [128, 3, 1]],
   [-1, 1, nn.MaxPool2d, [2, 2, 0]],  # 7-P4/16
   [-1, 1, Conv, [256, 3, 1]],
   [-1, 1, nn.MaxPool2d, [2, 2, 0]],  # 9-P5/32
   [-1, 1, Conv, [512, 3, 1]],
   [-1, 1, nn.ZeroPad2d, [0, 1, 0, 1]],  # 11
   [-1, 1, nn.MaxPool2d, [2, 1, 0]],  # 12
  ]
 
# YOLOv3-tiny head
head:
  [[-1, 1, Conv, [1024, 3, 1]],
   [-1, 1, Conv, [256, 1, 1]],
   [-1, 1, Conv, [512, 3, 1]],  # 15 (P5/32-large)
 
   [-2, 1, Conv, [128, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 8], 1, Concat, [1]],  # cat backbone P4
   [-1, 1, Conv, [256, 3, 1]],  # 19 (P4/16-medium)
 
   [[19, 15], 1, Detect, [nc, anchors]],  # Detect(P4, P5)
  ]

교육 구성 데이터 파일은 다음과 같습니다.

# path
train: ./dataset/images/train/
val: ./dataset/images/test/


# number of classes
nc: 2

 
# class names
names: ['dog', 'rope']

100세대의 기본 반복 계산, 터미널 로그 출력은 다음과 같습니다.

훈련이 완료될 때까지 기다린 후 전체 결과 세부정보를 살펴보세요.

[데이터 분포 시각화]

[PR 곡선]
Precision-Recall Curve(Precision-Recall Curve)는 이진 분류 모델의 성능을 평가하는 데 사용되는 시각화 도구입니다. 다양한 임계값에서 정밀도와 재현율 간의 관계를 표시하여 다양한 임계값에서 모델 성능을 이해하는 데 도움이 됩니다.
정밀도율은 긍정적 예로 올바르게 예측된 샘플 수와 긍정적 예로 예측된 ​​샘플 수의 비율을 나타냅니다. 재현율은 실제로 긍정적인 사례인 샘플 수에 대해 긍정적인 사례로 올바르게 예측된 샘플 수의 비율을 나타냅니다.
정밀도-재현율 곡선을 그리는 단계는 다음과 같습니다.
다양한 임계값을 사용하여 예측 확률을 이진 클래스 레이블로 변환합니다. 일반적으로 예측 확률이 임계값보다 크면 해당 샘플은 긍정적인 예로 분류되고, 그렇지 않은 경우에는 부정적인 사례로 분류됩니다.
각 임계값에 대해 해당 정밀도와 재현율이 계산됩니다.
동일한 그래프의 각 임계값에서 정밀도와 재현율을 플롯하여 정밀도-재현율 곡선을 형성합니다.
곡선의 모양과 추세에 따라 적절한 임계값을 선택하여 필요한 성능 요구 사항을 달성할 수 있습니다.
정밀도-재현율 곡선은 모델 성능에 대한 보다 포괄적인 분석을 제공하며 특히 불균형 데이터 세트를 다루고 긍정적인 예측에 중점을 두는 시나리오에 적합합니다. AUC(Area Under the Curve)는 모델 성능을 평가하는 지표로 사용될 수 있으며, AUC 값이 높을수록 모델 성능이 우수한 것입니다.
정밀도-재현율 곡선을 관찰하면 필요에 따라 정밀도와 재현율 사이의 균형점을 가늠할 수 있는 적절한 임계값을 선택할 수 있습니다. 특정 비즈니스 요구 사항과 비용 균형에 따라 곡선에서 적절한 운영 지점이나 임계값을 선택할 수 있습니다.

【훈련 시각화】

【배치 예】

관심이 있으시면 직접 시도해 볼 수 있습니다!

추천

출처blog.csdn.net/Together_CZ/article/details/135336356