목록전체 글 (291)
개발자로 후회없는 삶 살기
서론학과 홈페이지의 서버 부하의 80%는 복잡한 DB 연관관계 설계로 인해 조회 시 전송 데이터와 발생 쿼리량이 높기 때문입니다. 이를 JPA 쿼리 튜닝으로 해결하기 위한 고민과 테이블 재 설계 과정을 기록합니다. [Issue][Pull Request] 본론- 졸업 프로세스저희 학교는 졸업 프로세스에 따라 졸업 신청을 4번 하게 되며 따라서 졸업자 목록 테이블과 4개의 졸업 신청 테이블의 연관 관계로 설계되어 있었습니다. 🚨 이처럼 설계한 이유여러 명의 학생이 졸업을 하고 한 학생이 여러번의 졸업 신청을 하기에 다대다 매핑 관계로 설계하고 신청을 할 때마다 student_id가 apply 테이블에 등록했습니다. 졸업을 신청 > apply 테이블에 신청한 학생 id 등록(새 apply id + 동일 st..
🚨 서론 (문제 상황)웹 어플리케이션 서버는 클라우드에서 JAR 파일 실행 혹은 Docker로 프로세스화하여 운영하게 됩니다. 만약, 웹 어플리케이션 외에 다른 추가적인 서버를 배포하고 이를 분산 환경에서 운영해야 한다면 어떻게 해야 할지 고민이 됩니다. 1) 서버 간 통신은 어떻게 유지할까2) 네트워크 통신에서 시스템 에러로 인한 문제 관리법3) 추론 서버는 단일 스레드인데, 다수의 동시 요청 처리법위와 같은 고민 외에도 다양한 문제가 발생할 수 있을 거라고 예상됩니다. 특히 3번이 핵심 문제입니다. 스프링 서버는 개발자가 단일 스레드 상황을 고려하고 코드를 작성해도 WAS가 멀티 스레드로 동작하게 해주지만, AI 모델은 그렇지 않습니다. 1) 사용자 요청이 누락되는 문제2) 무한정 대기로 사용자 이..
🚨 서론 (문제 상황) 저희 서비스는 영상 (mp4), 이미지 (png, jpg, jpeg, heic) 업로드로 사용자 요청을 최초로 받습니다. 보통 서비스에서 CRUD 중 R의 빈도가 가장 높은데 저희는 그만큼 업로드의 비중이 상당히 높았습니다. 1) 최소 4GB의 데이터를 업로드 하는 과정에서 디스크 IO, 메모리 IO, 네트워크 IO가 빈번하게 발생2) 대용량 데이터를 업로드 시간이 최대 4분까지 소요그 이유는 위와 같으며, 이를 해결한 방법을 작성합니다. -> 전체 코드https://github.com/bcatcv5/zzimkong-backend/pull/9 feat: file upload 기능 구현 by SangBeom-Hahn · Pull Request #9 · bcatcv5/zzimkong..
서론9, 10주차에는 UXR에 사용할 모델 리서치를 마무리하고 적용하는 시간을 가지기로 하였습니다. 본론- 가구 모델 리서치1. openLRM배경이 없는 이미지만 가능하여, 입력 데이터 전처리를 해주어야 하며 그러기에 인퍼런스 과정에서 Segmentation 과정이 필요합니다. 단일 이미지 1장으로 결과를 내며 CPU 사용 시 10초 내로 가능합니다. 하지만 출력 결과가 다소 거친 경향이 있습니다. 2. One-2-3-45 / One-2-3-45++Segmentation 과정을 포함하고 있기에 배경을 지워줄 필요가 없으며, 발전 가능성을 보입니다. 하지만 대부분 약간 뭉뚱그리한 결과가 나옵니다. => 결론가구 이미지 입력 데이터 전처리를 위해 화질 개선이 필요할 수 있습니다. 사용자들이 대부분 핸드폰으로..
서론 OCR 프로젝트를 마무리하며, 프로젝트에서 가장 고민이었던 부분을 기록합니다. 본론 - 버전 이슈로 인한 학습 속도 차이 OCR 모델을 학습하기 위한 데이터 로딩 과정에서 geometry map과 score map을 구하는 시간이 굉장히 오래 걸려서 총 100장의 데이터인데 1에폭당 10분이 걸렸습니다. 실제로 학습되는 시간을 10초 내외였는데 로딩 과정에서만 시간이 오래 걸리는 문제가 있었습니다. -> 버전 차이 🚨 numpy나 opencv는 이미지 처리 및 수치 계산에 사용되는 라이브러리라서 최적화 개선에 따른 속도 차이 有 라이브러리들 간에 호환성 문제로 인한 성능 저하 그러던 중 캠퍼 한 분께서 버전을 낮추면 3배 가까운 속도 향상이 있다는 정보를 공유해 주셨고, 라이브러리 버전 차이로 인해..
서론8주차 지속적인 모델 세미나를 하고 평가 지표를 설계합니다. 본론- 모델 리서치이제 도면 모델과 실사화 모델 관련하여 도면, 실사화, 가구 팀을 나누고 모델 리서치를 진행합니다. 1. 도면 모델링 plan2scene저희가 원하는 도면 모델링은 도면을 입력으로 넣으면 3D reconstruction과 텍스쳐 입히기를 모두 해주는 모델입니다. 3D로 재구성 이후 텍스쳐 입히기라면 이 모델은 2번째 단계인 텍스쳐 입히기 모델이었습니다. 3D 재구성은 임의로 해주어야 하며, 3D 메시가 주어질 때 자연스러운 텍스쳐를 보장한다고 합니다. 물론 3D 재구성이 선행되어야 하지만, 자연스러운 텍스쳐 단계에서 사용할 수도 있겠다고 생각하였습니다. 2. 공간 모델링 MVSFormerMVS 기반 모델은 속도는 Nerf ..
서론대회로 수행하고 있는 EAST 모델은 데이터를 로드하는 과정에서 geometry map, scoremap을 만들기 때문에 적은 데이터임에도 불구하고 1에폭당 10분이 넘게 걸렸습니다. 이를 해결하는 과정을 기록합니다. 본론- 데이터 로딩 과정EAST 모델 데이터 셋의 __getitem__은 위처럼 전처리된 데이터를 반환하기에 로딩 시간이 굉장히 오래 걸렸습니다. - 최적화로 시간 줄이기1. 기본 소요 시간제공받은 베이스라인 코드는 1 에폭에 13분이 소요됩니다. 2. AMP 적용with torch.cuda.amp.autocast(): loss, extra_info = model.train_step(img, gt_score_map, gt_geo_map, roi_mask)optimizer.zero..
서론부스트캠프 대회에서 모델과 학습 파라미터는 고정한 채, 데이터 조작으로만 성능을 향상시켜야 하는 조건이 이었습니다. 현업에서도 데이터의 중요성이 강조되는 가운데 어떠한 데이터 처리로 성능을 향상시킬 수 있었는 지 단계별로 나열해 보겠습니다. 본론- 초기 조건학습 데이터 : 100장에폭 : 30모델 : base East 모델 - 모델 성능비교군으로 사용할 베이스 라인 모델을 잡기 위해 초기 조건으로 학습시킨 결과는 다음과 같습니다. 변인 통제를 정확히 하고 고정 베이스라인 모델에 다양한 데이터 처리를 하여 좋은 결과만 앙상블 조합 후보로 둘 것입니다. - 1차 데이터 클렌징1. 모든 기호와 단어는 뗀다.2. 스탬프는 지운다. 직인 말고도 단어가 적힌 스탬프도 지운다.3. ignore되는 것들은 지운다...