본문 바로가기

회고록(TIL&WIL)

TIL 2022.05.25 머신러닝 팀프로젝트(object detection) - 7 (KPT회고)

KPT 회고

1. 프로젝트 기간

2022.05.18 (수) ~ 2022.05.24 (화)

 

2. 팀 구성

김선민, 김민기, 박재현, 황신혜 

 

3. 프로젝트 주제

공사장 안전 사고 예방을 위한 안전모 착용 여부 탐지(Object Detection) Web 솔루션(SafetyManager) 개발

 

4. 프로젝트 진행 방식

  • 화면 기획 (Figma) : 링크 
  • API 설계 (Notion) : 링크 
  • 일정 관리 (Git Project, Notion) : 링크
  • 기능 구현 관리 (Git Issue) : 링크

 

5. 프로젝트 진행

5.1 화면 와이어프레임 및 기능 정의

화면 화면 이름 기능 담당자
로그인
회원가입
회원가입, 로그인, 로그아웃
JWT 토큰 활용 쿠키 저장
황신혜
- - Object Detection 모델 학습
(Yolo v5)
모두
메인
페이지
이미지/동영상 파일 업로드
이미지/동영상 Detect
Detect 결과 출력 (Detect 이미지, 라벨값, Score 등)
김선민, 김민기, 박재현
Ranking
페이지
기업별 월별 Score Ranking 구현
View 페이지네이션 기능
박재현
MyPage 기업의 모든 User에 대한 결과 View
View 페이지네이션 기능
김민기,
박재현
· · · · · · · · ·  

 

5.2 DB 설계도 작성 (MongoDB)

  • User : 사용자 정보
    - 회사명(company) 속성을 통해 mypage에서 기업의 관리자가 사내 정보를 한 눈에 볼 수 있게 함 
  • Result : 서빙 모델 이용 기록
    - Detecting 결과 필드들(head, helmet, score, isPass)을 이용해 안전 여부를 판단 하고자 함
    - date : 작업 시간을 기록하여 월 별 통계(랭킹) 등을 집계 할 수 있게 함

 

User, Result Collection

 

5.3 모델 학습

 

5.4 Safety Manager 개발 

(중요} 기능 분담 및 소스코드 분리 작성 => 개발 생산성 최대화, 코드 충돌 최소화 지향

 

1) BE에서 Detector 추론 모듈/ Web 모듈 분리
   - Detector 모듈 : Detection 결과 (Img, Video, 결과값을 이용한 Score 등) 리턴
   - Web Module : DB 연동, FE 요청에 따른 Detection 모듈 호출 및 응답

2) Blueprints를 이용한 API Endpoint 분리

3) Jinja의 include 문법을 이용한 nav.html 분리 및 Nav Bar 중복 구현 방지

 

5.5 소스코드 Folder Structure

### Structure
```
├── detector          // Yolov5 Detector Module
│   ├── models/       // BackBone
│   ├── utils/        // box 라벨값 Draw
│   ├── detect.py     // detect 관련 소스코드
│   └── ...
│
├── routers           // API Endpoint (Blueprints)
│   ├── main.py       // Upload 및 기본 기능 API
│   ├── detect.py     // Detection 요청 API
│   ├── profile.py    // Mypage 정보 조회 API
│   ├── ranking.py    // Ranking 정보 조회 API
│   └── user.py       // user 회원가입/로그인 API
│
├── static 
│   ├── css/          // css
│   ├── js/           // JS
│   ├── predict_data/ // Detect 결과 
│   ├── upload_data/  // 업로드 이미지
│   └── test_data/    // 테스트용 이미지
│
├── templates 
│   ├── nav.html      // nav Page
│   ├── index.html    // Main Page
│   ├── profile.html  // MyPage 
│   ├── ranking.html  // Ranking Page
│   ├── login.html    // Login Page
│   └── join.html     // Join Page
│
├── training 
│   └── training code // colab용 학습코드 
│
└── app.py // 메인
```

 

6. 프로젝트 결과 및 시연 영상

 

GitHub - SeonminKim1/SafetyManager: Safe Manager Solution by Object Detection

Safe Manager Solution by Object Detection. Contribute to SeonminKim1/SafetyManager development by creating an account on GitHub.

github.com

Keep

  • 기획(Mock Up), 와이어 프레임, 웹 개발 순서의 진행을 적절하게 진행함
  • Branch 관리 : Merge(PR) 후 Branch 지우기
  • 파일을 적극 분리하여 (Blueprints, Jinja include) 개발 생산성, Conflict 방지 한 점
  • 물리적으로 프로젝트 최종 점검 시간을 확보해서 진행한 점
  • 프로젝트 범위(목표한 범위)에서 최종 프로젝트 구현 범위 벗어나지 않은 것
  • 정기적인 상호 피드백 및 논의 시간을 가진 점 (오전 9시, 오후 2시, 저녁 6시)
  • 서로 질문하고, 격려하고, 적극적으로 피드백 하려고 한 것
  • 오류 발생 시 꾸준한 디버깅으로 문제 해결

Problem

  • (문서) Notion API 문서 작성 간 불편 사항 => Notion 템플릿, 외부 Tool 서칭
  • (문서) 일정 관리 Notion 타임라인 의 불편 사항 => 템플릿, Tool 서칭 (엑셀)
  • (문서) 발표 문서, 정리 문서에 대한 아쉬움 => 학습 진행상황 (+PT용 ) Notion
  • (FE) FE Develop 아쉬움 => 일정 앞(기획), 뒤(CSS구현)로 물리적인 시간 확보
  • (BE) CRUD 중 UD를 누락함 => 기능에 반드시 생각

Try

  • (FE) FE 종 Develop 하기
  • Semantic tag 필수 포함
  • CSS Convention 정하기 : Container > wrapper > box > item
  • 반응형 웹 구현하기
  • (Git) 컨벤션 맞추기
  • Commit 컨벤션 : Commit <동사> <#number> - <content - 자유롭게>
  • Commit 범위 : Issue 체크박스 기준, https://beomseok95.tistory.com/328
  • Issue 작성 : 이슈 (1. 기간 / 2. 이슈내용-UX 관점) / 3. 기능구현-체크박스)
  • PR Templates : 이슈 (Title - 이슈와 같게 / 내용은 Commit 정리)
  • (BE) AWS S3 Storage 사용 하기
  • (BE) JQuery => Async Function Vanila 대체해보기 (기술 Searching 먼저)
  • (BE) Test Code 작성하기
  • (DB) DB 고유값 Key 적극 이용 (MongoDB - ObjectID 활용 / MYSQL - 기본 KEY)

Feel (느낀점)

김선민

- 지난 프로젝트를 진행하고 회고를 하면서 서로에 대한 이해를 높이고 프로젝트에 임하다 보니, 협업을 하는 과정에서 훨씬 더 효율적이였던 것 같습니다. 프로젝트가 성공적으로 진행되게 하기 위해 팀장으로서 팀원들의 진행상황과 문제점을 지속적으로 체크 하고, 일정을 컨트롤 하는 것이 쉽진 않았던 것 같습니다. 그러나 재현님이 중간에서도 조율을 많이 해주셨고, 신혜님과 민기님도 맡은 바를 꾸준하게 완성해내시고 다음 단계를 같이 바라봐주셔서, 프로젝트를 잘 완성 할 수 있었던 것 같습니다. 다음에는 팀이 낼 수 있는 퍼포먼스와 개인(자신)이 낼 수 있는 퍼포먼스를 이번 회고를 통해 보완하여, 다음 프로젝트에는 둘 다 잘 완성하여 더 성장해볼 생각입니다. 

 

김민기

- 기획부터 일정관리까지 군더더기 없는 프로젝트였다고 생각합니다. 다만, 스스로 실력부족으로 인해 적절한 개발이슈를 가져가지 못해 협업에 많은 도움을 주지 못한 것 같아 아쉬웠습니다.

 

박재현

- 기획 부터 협업, 업무분담, 일정관리, 마지막에 최종점검까지 하면서 진짜 제대로된 프로젝트를 하나 마무리했다라는 느낌을 받았습니다. 필수구현 사항을 구현하고 추가 세세한 내용들에 대한 아이디어들은 있었는데 다 구현하지 못한 것도 아쉽지만 새로 구현해보는 것에 대해 시간이 많이 드는 것은 어쩔 수 없다고 생각이 들고 앞으로의 프로젝트에선 한번 해봤던 것들은 보다 빠르게 구현하고 새로운 것에 도전할 시간이 더 많지 않을까 하는 생각이 듭니다.

 

황신혜

- 지난 프로젝트에서 아쉬웠던 "효율적인 스케줄 관리의 중요성, 짧은 단위로 시간을 설정해두고 의견 및 스케줄을 수정해야 향후 문제 발생이 적다는 것"을 해결해서 상쾌한 프로젝트를 경험할 수 있었다. 비슷한 스펙의 기술을 구현한 경우 프론트엔드 구현에 따라 다른 기술이 더 돋보일 수 있었다는 아쉬움이 있다.