Skip to content

jh941213/Logistics-Project

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

53 Commits
 
 
 
 
 
 
 
 

Repository files navigation

📦 Logistics Packge Realtime Detection 📦


🔥 Team

김재현 이성연
Team Leader Team Member

🖥️ Team Preferences

비고 local(김재현) local(이성연) AWS Server Google Colab
CPU Apple M1(10core) i7-8565U i7 4core Xeon(R)cpu 2.3GHz
RAM 32GB 16GB 16GB 13~52GB
Storage 512GB 512GB 250GB 166GB
OS macOS ventura Window 10 - -
MOBILE Iphone 13 Mini Galaxy S10 - -

Index


🔑Project Summary

  • 주제
    물류센터(HUB, CAMP) 등 컨테이너 벨트 과정에서 박스 패키징의 찢어지거나 젖음과 같은 결함을 RealTime Detection 하여 각 레일에 위치에 있는 인적자원을 AI 로 대체해 자동화시스템을 구축
  • 인사이트
    쿠팡과 같은 대형물류 센터에서는 오토소터와 같은 송장정보를 인식하는 바코드기반의 대형센서 장비가 구비되어 현재 자동화 시스템을 구축하고 있다고 한다. 근데 그 과정에서 기존 레일의 철수 및 재 정비 설치 과정에서 막대한 비용과 오토소터 자체의 큰 비용으로 인해 우리의 AI 모델을 사용한다면 저비용 고효율이란 효과를 낼 수 있지 않을까란 생각. 고객경험이 좋아지고, 오상차 오배송에 대한 데이터 축적으로 내부 프로세스 평가 반영 가능 등 B2B, B2C 관점에서 다양한 부분으로 인적, 경제적인 이득이 가능하다.

[2023.01.02 ~ 2023.01.06]

  • 프로젝트 주제 탐색 및 선정
  • 프로젝트 계획 구상

[2023.01.06 ~ 2023.01.18]

  • 데이터 수집 및 전처리
    • RealTime Detection 특성상 불량데이터를 구하기 어려웠으므로 이를 직접 만들어냄.
    • 가장 보편적인 택배 상자(갈색 판지 상자)의 데이터만을 고려

[2023.01.14 ~ 2023.01.16]

  • 1차 Model training and testing
    • Real Time Detection
    • Train, valid dataset split
    • Data Augmentation

[2023.01.17 ~ 2023.01.24]

  • 1차 Real Detection model result 분석, 평가
    • Annotating 대폭 수정
  • OCR / Model serving Reference Searching 시작
    • App service 계획이 있었으나 차후로 미룸.

[2023.01.25 ~ 2023.01.27]

  • 2차 Detection Model training and testing
    • 수정된 Annotating 적용
    • Resolution 조정 (640640 -> 12801280)
    • 결과 분석, 평가 후 3차로 넘어감
  • Github repository 결과물 정리
    • Readme 작성 시작

[2023.01.28 ~ 2023.02.06]

  • OCR model 준비
    • 택배 운송장 데이터 준비 (임의의 주소데이터 생성, 송장 인쇄)
    • OCR API test (Google Cloud Vision, Naver Clova)
    • OCR model searching (EazyOCR, Tesseract 등)
  • 3차 Detection model training and testing
    • use EfficientDet models. (D0, D1)
    • also used Yolo models : Yolo가 Eff.Det보다 나음 확인
  • App 구현 계획을 Web Serving으로 수정. (Insight 다시보기)
    • 고객에게 알림을 발송하는 기능이 필요없음.
    • 물류회사(공장) 내부에서만 사용하는 프로그램으로 사용 : 웹으로만 구현해도 됨.

[2023.02.07 ~ 2023.02.13]

  • Web Serving 구축 (Flask)
  • 실시간 구축 웹 사이트 구현
  • 웹 UI 제작 (불량검출 : 검출하는 것 보여주기 / 송장인식 : OCR bbox 저장+crop)
  • OCR Data train + inference 시작
  • Tesseract, Naver Clova API, EazyOCR 등 사용
  • 송장 사진 100여 장에서 각 숫자 + "운송장번호" 글자에 bounding box 지정, inference
    • Yolo v8 기반으로 모델 만들기 도전. 20,000 Epoch 시도.

[2023.02.13 ~ 2023.02.16]

  • Presentation 준비

    • Data, Model, OCR, Git, any other process 정리
    • 발표 대본 제작, 디자인 구상
  • DB 구축

  • OCR 수정


[2023.02.17]

  • 중간발표 및 점검.

👥 Roles

  • 김재현 : modeling by yolov7, yolov8(Train, Valid, Test), OCR Modeling, Flask Serving Coding, mySQL build
  • 이성연 : Data Process, YOLO model thesis reference serch, YOLOV4 Modeling

🧘 Feature

  • Detection 최적의 모델을 찾기 위한 YOLO, efficientDet, CoreML등 객체모델 학습 및 테스트
  • Make Data Set 구축을 위한 현실에서의 데이터 셋 Searh & Make
  • EasyOCR, Tesseract, MMOCR 등 오픈소스기반의 OCR 모델 사전 테스트 및 fine tune
  • NAVER Clova AI, KAKAO 등 국내 기업의 OCR API 사용

📦 Data Set

Box Data Set Annotation

라벨 : Hole(구멍, 찢어짐), Wet(젖음)
Annotation 을 위하여 Hole, Wet의 일정 패턴을 파악하여 반복 학습 할 수 있도록 Annotation 작업 진행 (Key Point)🔑
Hole 같은 경우 픽셀자체가 검정색 부분이 많이 나오기 때문에 검정색이라던지 , 구멍이 뚫려있을 때의 특징을 생각 하여 Annotation을 하였다.
Wet 같은 경우 너무 경우의 변수가 많아서 기준을 잡고 전체적으로 젖은박스 와 살짝 젖더라도 이건 불량이다 싶은 박스만 학습하였다. 이유는 살짝묻은 물에도 디텍션을 해버리면 모델자체가 의미가 없기 때문에 잘 생각하고 판단하여 annotation작업을 하였다.

Tracking Number Data Set Annotation

라벨 : trackingnumber
1단계 : 송장전체를 학습 -> mAP 0.995 2단계 : 운송장번호가 있는 위치값을 학습 -> mAP 0.995
polygon 을 이용하여, 다양한 각도에서도 잘 디텍션 할수 있도록 annotation 작업을 해주었다.

🌊Box data set flow

1단계 : 웹 크롤링 을 통하여 데이터 수집 (987장)

스크린샷 2023-02-20 오후 4 39 12

2단계 : 웹 크롤링 자체적인 길거리 탐색 데이터 수집 (1684장)

스크린샷 2023-02-20 오후 4 39 12

3단계 : 갈색박스 상자 구매후 자체적인 데이터셋 제작 (3287장)

스크린샷 2023-02-20 오후 4 40 45

🌊tracking number data set flow

1단계 : 송장 전체를 Annotation

스크린샷 2023-02-21 오후 3 35 41

2단계 : 운송장번호 위치 값 Annotation

스크린샷 2023-02-21 오후 3 21 49

Total Data Set 구성

Box DataSet
image : 3287장, 객체 수 : 4,837개, Hole(구멍,찢어짐) : 2,226개 , Wet(젖음) : 2,611개
Tracking DataSet
image : 250장 , 객체 수 : 250개, trackingnumber : 250개

데이터 종류 일자 사용기술 링크
Box data 2023 YOLOv8 Box data
Tracking data 2023 YOLOv8 Tracking data

스크린샷 2023-02-20 오후 4 46 36

스크린샷 2023-02-21 오후 3 21 44

image size & resize

640 x 640 -> 1280 x 1280 -> 2048 x 2048
--> yolov7 논문 참조시 데이터셋 640 x 640 학습 추후 데이터 핸들링을 통하여 resize 작업 진행

Augmentation

crop 10° -> 데이터 증강을 위한 Agumentation
yolov7, yolov8 hyper param 기능 agumentation: True
(Mosaic : 1.0, fliplr : 0.5, scale : 0.5, translate : 0.1, hsv_h : 0.015, hsv_s = 0.7, hsv_v = 0.4)


🏞️ Image Processing

open-CV 를 활용한 이미지 전처리

  • 적용 데이터 : 📁 Tracking number Detection Data!

1️⃣ Zero-Padding
직접 짠 zero-padding 코드를 이용하여, 이미지를 모델 input size 를 맞추기위해 전처리를 해준다.

2️⃣ GrayScale
원할한 Text Recognize 를 위한 GrayScale 를 진행해준다.
스크린샷 2023-02-20 오후 5 21 25

3️⃣ Binary
GrayScale이 된 Data를 Binary 화를 진행해준다.
스크린샷 2023-02-20 오후 5 21 31

4️⃣ Remove Noise
noise 제거를 통한 recognize 준비
스크린샷 2023-02-20 오후 5 21 37


🚀 Model Serving

WEB(Design)

Flask(freamework)

  • Flask 를 활용하여 local host 웹 서버 구축 (사용자 local에 영역을 받는다.
  • Box Detect page, Tracking number page(OCR) 을 구분하여 두 페이지 영역 구성
  • mySQL 을 이용하여 detection 검출된 내용 DB 저장

Main Page

스크린샷 2023-02-20 오후 3 49 26

Box Detection Page

스크린샷 2023-02-20 오후 4 00 36

Tracking number Page

스크린샷 2023-02-20 오후 4 00 51


✏️ Coding

원할한 Process를 이루기 위해서 하드코딩 작업을 실행했다.

  1. 객체가 중간에 검출되어 사진을 저장하는 로직
    -> img size 를 고려하여 , bbox 값의 max일때 사진을 저장한다.

  2. 검출된 객체를 카운팅하여 DB를 저장하는 로직
    -> bbox return 값을 classes 별로 counting 하는 작업

  3. flag를 활용하여 1, 2번을 실행하는 로직
    -> img x좌표를 기준으로 flag 영역을 만들어서 0, 1 로 조건문을 만들어 두 로직을 실행하는 작업

  4. image process 전처리 로직 -> open Cv 를 통한 grayscale, binary, remove noise 함수화 하여 작업

  5. OCR API 로직 -> NAVER, KAKAO API 를 가져와 OCR 처리를 해주는 작업


📊 Result

Train Result

MODEL CoreML YOLOv4 YOLOv5 YOLOv7 YOLOv8 EfficientDet
imgsize 1280x1280 640x640 640x640,1280x1280 640x640,1280x1280 640x640,1280x1280 1280x1280
epochs(best) 3200 6000 100(78) 100(83) 100(87) 10000(9752)
data 3단계 2단계 3단계 3단계 3단계 3단계
mAP 0.78 0.57 0.81, 0.85 0.45 0.81,0.86 0.79
agumentation crop 10 crop10 crop10, hyper params crop10, hyper params crop10, hyper params crop10

스크린샷 2023-02-17 오후 5 24 48

스크린샷 2023-02-20 오전 11 34 45

모델별 성능 요약

  • YOLOv8 > YOLOv5
  • 인퍼런스와 mAP 자체 test 결과 YOLOv8 이 적합하다 판단하여 YOLOv8로 기본 모델 선정
  • YOLOv5 model의 reference를 보며 YOLOv8의 모델 서빙 진행

스크린샷 2023-02-20 오전 10 17 47

모델선정

YOLOv8.pt 파일의 가중치 용량이다.

  • 가중치 파일의 용량을 보면 웨이트수가 많은 모델이 역시 모델 크기가 큼
    -> 평균 0.83 이상의 mAP 결과를 도출해주었기 때문에 n(nano) 모델로 선정.
  • test 셋을 구성해서, 크기별로 자체 테스트 도입해보았으나 인퍼런스타임 차이가 컸다.
    -> 인퍼런스 타임이 빠른 n(nano) 모델로 웹 서빙 모델을 2개를 서빙

📷 Show Result

스크린샷 2023-02-20 오전 11 39 24

스크린샷 2023-02-20 오전 11 39 31


🙆 Conclusion

Positive point

  1. 현실이나 현업에는 우리가 원하는 데이터셋이 없을 가능성이 높다! 그래서 우리가 직접데이터를 만들자 직접 데이터 제작, 수집, 가공 처리
    😀 Hand Made Data Set 구성!

  2. 모델안의 하이퍼 파라미터를 활용 (프로젝트를 진행하면서 데이터자체가 같은 구도에서만 촬영이되어, Small Detection을 학습이 필요)
    -> perspective의 값을 주어, Train 에서 agumentation효과를 주어 성능개선이 가능했다.

  3. 새로운모델, 다양한 관점에서 모델링 Task 변경 시도 (현재 순차적인 데이터, OCR 모델링 제작중)
    -> 한가지 관점으로만 바라보지 말 것.
    -> 기존 OCR 취약점의 개선하기 위해 자체 모델링 구상중이다.

Lesson learned

  1. Cv 분야에서 중요한 데이터에 대한 이해도와 Task 이해도 능력 향상
    -> image classfication , Object Detection 에서 중요한 Annotation 의 패턴, 요소를 분석하여 작업 , Hyper Params 를 적극적으로 이해하고 활용하자.

  2. 모델의 코드를 열어보며 리딩하며 코딩에 대한 이해도
    -> detect, predict, train, valid 등 file 코드를 읽어보기.

  3. 프로젝트에서 중요한건 팀원과의 소통 및 꺾이지 않는 마음
    -> 결국은 팀프로젝트에서 중요한것은 소통과 화합이다.


💻 Requirements

❗️YOLOv5

# pip install -r requrements.txt
gitpython
ipython  # interactive notebook
matplotlib>=3.2.2
numpy>=1.18.5
opencv-python>=4.1.1
Pillow>=7.1.2
psutil  # system resources
PyYAML>=5.3.1
requests>=2.23.0
scipy>=1.4.1
thop>=0.1.1  # FLOPs computation
torch>=1.7.0  # see https://pytorch.org/get-started/locally (recommended)
torchvision>=0.8.1
tqdm>=4.64.0
# protobuf<=3.20.1  # https://github.com/ultralytics/yolov5/issues/8012

❗️YOLOv7

# pip install -r requrements.txt
matplotlib>=3.2.2
numpy>=1.18.5,<1.24.0
opencv-python>=4.1.1
Pillow>=7.1.2
PyYAML>=5.3.1
requests>=2.23.0
scipy>=1.4.1
torch>=1.7.0,!=1.12.0
torchvision>=0.8.1,!=0.13.0
tqdm>=4.41.0
protobuf<4.21.3

❗️YOLOv8

# pip install Ultralytics
pip install -r requrements.txt
matplotlib>=3.2.2
numpy>=1.18.5
opencv-python>=4.6.0
Pillow>=7.1.2
PyYAML>=5.3.1
requests>=2.23.0
scipy>=1.4.1
torch>=1.7.0
torchvision>=0.8.1
tqdm>=4.64.0

🔧 Project Structure

스크린샷 2023-02-21 오후 1 06 15

📜 Reference


About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published