종합설계 일지 #5 ... 2학기 시작 및 방학 중 개발 정리, YOLOv3-Tiny Custom

TaeUk·2023년 9월 19일
0

종합설계 일지

목록 보기
6/11
post-thumbnail

👻 방학 기간 중 H/W 설계 및 YOLO Custom

1학기가 끝나고 방학 중 AI Turret에 대한 설계를 이어갔다. 특히 H/W와 YOLO에 대해 지속적인 설계를 하였다.

YOLOv3-Tiny을 Custom을 해보았고 대해 문제점들을 찾았으며, 이에 대한 해결 방안을 고민하고 있다.

또한 AI Turret의 Frame과 필요한 부품들 모두 설계하여, 실제로 Turret을 구현해 볼 수 있을 것으로 판단된다!


🐶 Google Colab 기반의 YOLOv3-Tiny Custom

🐹 YOLOv3-Tiny Model Custom 및 Test

"Google Colab" 환경을 이용하여 Custom을 진행했다. Darknet과 YOLOv3-Tiny를 기반으로 모델 학습을 진행했으며, 미리 준비한 약 800장의 사진과 Labelling 파일을 사용했다.

  • 첫 번째 Setting : 사진 800장 사용, batch와 subdivision을 각각 64, 16으로 설정
  • 두 번째 Setting : 사진 800장 사용, batch와 subdivision을 각각 32, 8으로 설정
  • 세 번째 Setting : 사진 500장 사용, batch와 subdivision을 각각 32, 8으로 설정

모델을 학습하는 데에 있어, 여러 경우의 수를 두어 학습했다. 학습에 사용되는 사진의 수와 batch, subdivision 조정함으로써 Custom된 YOLO 모델에 대한 결과물의 차이를 확인하기 위함이다.

  • Google Colab 환경에서의 YOLOv3-Tiny Model Custom

위 사진은 학습이 완료된 파일의 결과를 확인 한 것이며, 사진에서 볼 수 있듯이 탐지하고자 하는 Santa 인형에 Bounding Box가 나타나지 않고 객체를 인식하지 못한 결과물이 나왔다.

  • 모델 학습 후, Bounding Box가 나타나는 잘 된 예시

최종 결과로는 앞서 설정한 3가지의 경우 모두 같은 결과를 나타냈다. 학습에 사용된 사진의 양이 부족해서, 혹은 학습 횟수가 충분하지 않아서 등 여러 요소를 변경해 반복적으로 학습했다.

결과적으로 같은 상황이 반복됐고 문제가 있음을 짐작했다.

🦊 YOLOv3-Tiny 사용에 대한 문제점

  • 문제 1) Google Colab 기본 GPU, 메모리 크기의 문제
    위의 학습 과정을 수행하던 도중, 중단현상이 지속적으로 발생했다. 2000번 반복 학습 중 1000번대 진행 과정에서 문제가 반복적으로 나타났다. 이후 할당된 메모리, GPU 공간부족이라는 경고알림 나타났다.
  • 문제 2) YOLOv3-Tiny의 정확도 및 인식 속도의 문제
    Tiny 모델은 일반 모델에 비해 성능이 제한적이기에 Raspberry Pi와 같이 낮은 성능의 프로세서를 가진 개발보드에 적합할 수 있지만, 낮은 해상도 때문에 저조한 인식률을 보여준다. 뿐만 아니라, 정확도가 낮기에 인식이 잘 되질 않아 빠른 속도가 체감이 되질 않으며, 오히려 낮은 인식도에 의해 더욱 느린 인식 속도를 보여주는 것 같다.

따라서 YOLOv3-Tiny의 필요성과 다른 대체재에 대해 한 번 더 고민해볼 필요가 있을 것으로 보인다.


🐵 YOLO 구동 환경 변경

🐷 Raspberry Pi 4 B 환경에서 YOLO 구동의 문제점

AI Turret System의 “Object Detection”를 위한 프로세서로 Raspberry Pi 4 B를 선택하였다. 그러나 위에서 언급한 YOLOv3-Tiny의 문제가 아닌 Raspberry Pi 환경에서 YOLO 모델을 구동하는 데에 있어 몇 가지 중요한 문제에 맞닥뜨리게 되었다.

  • 문제 1) Raspberry Pi 환경에서 YOLOv3-Tiny의 낮은 성능
    현저히 낮은 프레임으로 인해 실제 동작과 Raspberry Pi가 Web Cam을 통하여 출력한 영상에서 Bounding Box를 인식하는 차이가 약 1 ~ 1.5(sec) 정도 발생하였다.

기존에 사용하던 모델인 YOLOv3-Tiny가 아닌 YOLO-Tiny에서도 이러한 문제가 발생하는 것으로 보아, Object Detection을 수행하는데 어려움이 있을 것으로 판단된다.

  • 문제 2) Raspberry Pi의 UART 통신 속도 지연 문제
    1학기 실험 중, Raspberry Pi와 ESP32의 통신실험을 한 경험이 있다. 약 0.3 ~ 0.5(sec)의 Delay가 나타났지만, 이정도의 오차는 Detection을 수행하는데 문제없다고 판단되었다. 그러나 YOLO 인식 Delay와 통신 속도 Delay가 합쳐져 총합 1.3 ~ 2.0(sec) 정도의 Delay가 발생하게 되었다.

이로써 더 이상 Raspberry Pi 4 B는 “Object Detection 및 Tracking”에 적 합하지 않은 프로세서로 결론지었다.

🦁 PC 환경에서의 YOLO 구동

Raspberry Pi 4 B 환경에서 Object Detection에 어려움이 생겨, 원활한 Object Detection 실험을 위해 더 우수한 성능을 가진 프로세서가 필요했다.

CPU(SoC)GPUMemoryOS
Raspberry Pi 4 BCortex-A72 1.5GHz500MHz VideoCore VI4GBRaspbian OS
samsung galaxy bookIntel Core i5NVIDIA Geforce MX2508GBWindows10

PC(samsung galaxy book)와 Raspberry Pi 4 B를 비교해본 결과, 당연하게도 모든 면에서 PC의 성능이 Raspberry Pi 4 B를 압도하였다. 가장 중요한 YOLO 실행 시, 프레임 감소 역시 PC에서는 문제가 되지 않았다.

AI Turret System의 목적은 Raspberry Pi 4 B를 사용하여 프로젝트를 구성하는 것이 아닌 “YOLO를 활용한 Object Detection 및 Tracking”이기에, 더욱 적합하며 높은 성능을 가진 PC로 프로세서를 변경하여 YOLO를 통한 Object Detection 기능의 설계를 계속하기로 결정하였다.

🐳 PC 환경 기반의 AI Turret System 구성 방안

PC로 개발 환경을 변경하지만, 기존의 설계에 미치는 큰 변화는 없다. Python 기반의 OpenCV를 그대로 사용하고, 기존의 Raspberry Pi 환경에서 ESP32와 통신하기 위해 사용한 UART 통신을 동일하게 적용할 방안이다.

이때, PC와 ESP32가 통신하기위해 아래의 사진과 같은 "USB to UART Module"을 사용할 예정이다.

  • PC환경에서 ESP32와 통신하기 위한 USB to UART Module

또한, Object를 탐지하기 위한 카메라가 Raspberry Pi CSI Camera에서 PC에 연결될 Web Cam으로 변경 되었다.


🐭 대상 Object 변경

🐯 목표 Object 변경에 대한 사유

AI Turret의 성능에 더욱 알맞고 구체적인 활용 방안에 대해 고민해봤다. 비둘기와 같은 “유해 동물”보다 더욱 실용적으로 적용이 가능한 주제로 생각한 결과, 목표로 하는 Object를 기존의 “비둘기(Santa 인형으로 대체)”에서 "권총(Pistol)"으로 변경하였다.

  • 기존의 비둘기에서 수정한 대상 Object인 Pistol

국내에서는 총기소지가 불법이지만 합법인 해외 여러 국가에서는 매년 총기관련 사건이 발생한다. 이러한 배경적 상황이 목표물을 탐지, 추적 및 발사체를 통한 사격이 가능한 AI Turret이 권총을 탐지하여 발생한 문제를 해결하기에 더욱 적합할 것 같아 대상 Object를 수정하였다.

  • Pistol 탐지 후, Bounding Box 예시

비둘기 대신 사용한 산타 인형보다는 BB탄 권총으로 System의 동작시키는 것이 더 보기에도 좋을 것 같다!

🦄 목표 Object 변경에 대한 YOLO 모델 재학습 방안

앞서 밝힌 결과에 따르면 인식률을 높이고 인식 시간을 줄이는 것이 Object Detection에 있어 중요하다고 판단된다. 따라서 기존의 YOLOv3-Tiny가 아닌 상대적으로 더욱 복잡한 신경망 및 빠른 인식속도, 높은 정확도를 가진 YOLOv5를 사용할 예정이다.

또한, 모델을 학습하기 위해 필요한 학습 Image는 이전처럼 직접 촬영하는 것이 아닌 미리 Labeling 작업을 하여 Dataset으로 구성되어 있는 “Roboflow”의“Pistols Dataset”을 활용하여 YOLOv5를 기반으로 모델을 학습할 예정이다.

Robofolw - Pistols Dataset


🐥 AI Turret System의 H/W 3D Modeling

🦆 AI Turret System에 사용되는 부품 Modeling

AI Turret System을 구성하는 Frame을 설계하기 전, 이에 사용되는 모든 부품을 정리하여 정확한 크기와 형태 등의 기반으로 "Google SketchUP"을 통해 설계하였다.

  • Servo Motor 및 Servo Motor Bracket에 대한 설계

  • 각종 Sensor 및 MCU 설계

  • Airsoft Gun 및 관련 부품 설계

AI Turret System의 Frame을 각종 부품의 크기와 비례하도록 설계하기 위해 상향식 설계를 선택하였으며 필요한 부품을 우선적으로 Modeling을 한 후, 전반적인 설계를 진행하였다.

🦉 부품 Modeling을 기반으로 상향식 설계

Modeling된 각 부품들을 활용하여 AI Turret System의 Frame을 설계하였으며, Frame 또한 상향식 설계를 적용하여 가장 기초가 되는 Airsoft Gun - Gear Box에 대한 Frame부터 설계를 하였다.

Part 1) Turret System

  • Airsoft Gun - Gear Box에 대한 Module 설계 및 부품 배치

Airsoft Gun의 동작 범위는 상-하로 각각 약 26°의 가동범위를 가지도록 설계하였다.

  • Tilt Module 설계 및 부품 배치

Tilt Module의 뒷면을 보면 Servo Motor의 배선이 별도로 수납되어 정리될 수 있도록 설계하였다.

  • Pan Module 설계 및 부품 배치

Pan Module은 360°의 가동범위를 가지도록 설계되었고, Gyro Data를 생성하기 위해 하단에 MPU-6050 Gyro Sensor을 부착하였다.

Part 2) Stabilizer System

위에서 설계한 Turret System을 안정적으로 유지하기 위해 Stabilizer를 구성하였으며, Pan Module에 2개의 Servo Motor를 부착하여 동작시키도록 설계하였다.

  • 1st Axis Stabilizer Module 설계 및 부품 배치

1st Axis Stabilizer Module은 최대 약 40°에서 최소 약 30°의 가동범위를 가지도록 설계되었다.

  • 2st Axis Stabilizer Support Module 설계 및 부품 배치

2st Axis Stabilizer Support Module은 상위 Module의 크기가 점진적으로 켜지며, 3D Printer의 출력 가능한 크기를 뛰어넘어 하나의 출력물이 아닌 2개의 출력물로 분할하였다.

😺 최종 산출물 및 3D Printing 출력 설정

크게 2가지 Part로 나뉘어 설계를 하였는데 이를 각 Part 별로 조합해보면 아래와 동일하다.

  • Turret Part 및 Stabilizer Part 부품 배치

위의 두 기능을 하나로 연결하여 동작시키면 AI Turret System이 완성된다.

  • AI Turret System 부품 배치도

  • AI Turret System 부품 조립도

이렇게 설계한 부품 중, 2st Axis Stabilizer Support Module을 제외하고 나머지 부품들을 STL 파일로 변환하여 출력물에 대한 설정을 하여 Gcode 파일로 변환하여 3D Printer를 통해 출력하게 된다.

  • STL 및 Gcode 변환

2st Axis Stabilizer Support Module은 AI Turret System의 아래에 Power Supply와 같은 무거운 물체를 두고 볼트의 체결로 하중을 버티는 것이 효율적이라 판단하여, 최종 형상이 결정되면 그때 출력할 예정이다.


🐰 향후 진행 계획

  • YOLOv5 기반의 Pistol Dataset Custom
  • 3D Printing Model 출력 및 조립
  • 5V 7A 환경의 Power Supply Test
  • PC 환경에서 ESP32와의 UART 통신 속도 실험

0개의 댓글