김재현 | 이성연 |
---|---|
Team Leader | Team Member |
비고 | 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 | - | - |
- 🔑 Project Summary
- 📆 Schedule(Time Stamp)
- 👥 Roles
- 🧘 Feature
- 📦 Data Set
- 🏞️ Image Processing
- 🚀 Model Serving
- ✏️ Coding
- 📊 Result
- 📷 Show Result
- 🙆 Conclusion
- 💻 Requirements
- 🔧 Folder Structure
- 📜 Reference
- 주제
물류센터(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]
- 중간발표 및 점검.
- 김재현 : modeling by yolov7, yolov8(Train, Valid, Test), OCR Modeling, Flask Serving Coding, mySQL build
- 이성연 : Data Process, YOLO model thesis reference serch, YOLOV4 Modeling
- Detection 최적의 모델을 찾기 위한 YOLO, efficientDet, CoreML등 객체모델 학습 및 테스트
- Make Data Set 구축을 위한 현실에서의 데이터 셋 Searh & Make
- EasyOCR, Tesseract, MMOCR 등 오픈소스기반의 OCR 모델 사전 테스트 및 fine tune
- NAVER Clova AI, KAKAO 등 국내 기업의 OCR API 사용
라벨 : Hole(구멍, 찢어짐), Wet(젖음)
Annotation 을 위하여 Hole, Wet의 일정 패턴을 파악하여 반복 학습 할 수 있도록 Annotation 작업 진행 (Key Point)🔑
Hole 같은 경우 픽셀자체가 검정색 부분이 많이 나오기 때문에 검정색이라던지 , 구멍이 뚫려있을 때의 특징을 생각 하여 Annotation을 하였다.
Wet 같은 경우 너무 경우의 변수가 많아서 기준을 잡고 전체적으로 젖은박스 와 살짝 젖더라도 이건 불량이다 싶은 박스만 학습하였다. 이유는 살짝묻은 물에도 디텍션을 해버리면 모델자체가 의미가 없기 때문에 잘 생각하고 판단하여 annotation작업을 하였다.
라벨 : trackingnumber
1단계 : 송장전체를 학습 -> mAP 0.995
2단계 : 운송장번호가 있는 위치값을 학습 -> mAP 0.995
polygon 을 이용하여, 다양한 각도에서도 잘 디텍션 할수 있도록 annotation 작업을 해주었다.
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 |
640 x 640 -> 1280 x 1280 -> 2048 x 2048
--> yolov7 논문 참조시 데이터셋 640 x 640 학습 추후 데이터 핸들링을 통하여 resize 작업 진행
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)
- 적용 데이터 : 📁 Tracking number Detection Data!
1️⃣ Zero-Padding
직접 짠 zero-padding 코드를 이용하여, 이미지를 모델 input size 를 맞추기위해 전처리를 해준다.
2️⃣ GrayScale
원할한 Text Recognize 를 위한 GrayScale 를 진행해준다.
3️⃣ Binary
GrayScale이 된 Data를 Binary 화를 진행해준다.
4️⃣ Remove Noise
noise 제거를 통한 recognize 준비
- Flask 를 활용하여 local host 웹 서버 구축 (사용자 local에 영역을 받는다.
- Box Detect page, Tracking number page(OCR) 을 구분하여 두 페이지 영역 구성
- mySQL 을 이용하여 detection 검출된 내용 DB 저장
원할한 Process를 이루기 위해서 하드코딩 작업을 실행했다.
-
객체가 중간에 검출되어 사진을 저장하는 로직
-> img size 를 고려하여 , bbox 값의 max일때 사진을 저장한다. -
검출된 객체를 카운팅하여 DB를 저장하는 로직
-> bbox return 값을 classes 별로 counting 하는 작업 -
flag를 활용하여 1, 2번을 실행하는 로직
-> img x좌표를 기준으로 flag 영역을 만들어서 0, 1 로 조건문을 만들어 두 로직을 실행하는 작업 -
image process 전처리 로직 -> open Cv 를 통한 grayscale, binary, remove noise 함수화 하여 작업
-
OCR API 로직 -> NAVER, KAKAO API 를 가져와 OCR 처리를 해주는 작업
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 |
- YOLOv8 > YOLOv5
- 인퍼런스와 mAP 자체 test 결과 YOLOv8 이 적합하다 판단하여 YOLOv8로 기본 모델 선정
- YOLOv5 model의 reference를 보며 YOLOv8의 모델 서빙 진행
YOLOv8.pt 파일의 가중치 용량이다.
- 가중치 파일의 용량을 보면 웨이트수가 많은 모델이 역시 모델 크기가 큼
-> 평균 0.83 이상의 mAP 결과를 도출해주었기 때문에 n(nano) 모델로 선정. - test 셋을 구성해서, 크기별로 자체 테스트 도입해보았으나 인퍼런스타임 차이가 컸다.
-> 인퍼런스 타임이 빠른 n(nano) 모델로 웹 서빙 모델을 2개를 서빙
-
현실이나 현업에는 우리가 원하는 데이터셋이 없을 가능성이 높다! 그래서 우리가 직접데이터를 만들자 직접 데이터 제작, 수집, 가공 처리
😀 Hand Made Data Set 구성! -
모델안의 하이퍼 파라미터를 활용 (프로젝트를 진행하면서 데이터자체가 같은 구도에서만 촬영이되어, Small Detection을 학습이 필요)
-> perspective의 값을 주어, Train 에서 agumentation효과를 주어 성능개선이 가능했다. -
새로운모델, 다양한 관점에서 모델링 Task 변경 시도 (현재 순차적인 데이터, OCR 모델링 제작중)
-> 한가지 관점으로만 바라보지 말 것.
-> 기존 OCR 취약점의 개선하기 위해 자체 모델링 구상중이다.
-
Cv 분야에서 중요한 데이터에 대한 이해도와 Task 이해도 능력 향상
-> image classfication , Object Detection 에서 중요한 Annotation 의 패턴, 요소를 분석하여 작업 , Hyper Params 를 적극적으로 이해하고 활용하자. -
모델의 코드를 열어보며 리딩하며 코딩에 대한 이해도
-> detect, predict, train, valid 등 file 코드를 읽어보기. -
프로젝트에서 중요한건 팀원과의 소통 및 꺾이지 않는 마음
-> 결국은 팀프로젝트에서 중요한것은 소통과 화합이다.
❗️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