전체 글 205

YOLOv5 custom dataset으로 학습시키기 A to Z | 🍚 한식 분류기 만들기

CareSpoon: 한식 분류기 만들기 A to Z YOLOv5 custom dataset으로 학습시키기 현재 졸업 프로젝트에서 음식 이미지에서 음식을 인식해서 섭취한 영양 성분을 분석하고 영양 상태를 관리해주는 를 개발하고 있다. 나는 음식 이미지에서 음식 메뉴를 추론하는 AI 모델링과 AI 모델 서버 파트를 맡았다. 아래 사진과 같이 우리 팀 노션 페이지에서 모든 태스크 및 일정을 관리하면서 개발중이다. 지금은 FastAPI로 AI 모델 api까지 개발 완료했고, EC2로 배포중이다. 직접 데이터를 구축하고, GPU를 사용하기 위해 개발환경을 세팅하고, 리눅스 환경에서 모델을 학습시킨 것이 처음이라 CUDA, cuDNN 등 개발환경 셋업부터 쉽지 않았다. 그래서 프로젝트 과정을 최대한 자세하게, 처음..

[백준/파이썬] 2579 계단 오르기 - 다이나믹 프로그래밍

➰ 2579번 계단 오르기 💡 구현 아이디어 이 문제는 다이나믹 프로그래밍으로 풀이했는데, 먼저 다이나믹 프로그래밍에 대해 알아보겠다. 1. 다이나믹 프로그래밍이란 다이나믹 프로그래밍은 메모리를 잘 사용하여 수행 시간 효율성을 비약적으로 향상시키는 방법이다. 이미 계산된 결과(작은 문제)는 별도의 메모리 영역에 저장하여 다시 계산하지 않도록 한다. 2. 다이나믹 프로그래밍 구현 방법 다이나믹 프로그래밍 구현 방법은 크게 두 가지가 있다. 1) Top-Down, 하향식 방식 큰 문제를 해결하기 위해 작은 문제를 호출하는 방법으로 재귀 함수를 이용하여 코드를 작성한다. 한 번 계산한 결과를 메모리 공간에 메모하는 기법이다. 메모이제이션(Memoization) 방식이라고도 하며 재귀함수를 이용한다. 정확히 말..

Algorithm 2023.01.25

[Image Inpainting] LaMa-Inpainting 실습하기

LaMa-Inpainting 실습하기 이번 학기부터 졸업 프로젝트를 진행하고 있는데, 우리 팀은 AI 기반 가상착용이 가능한 안드로이드 앱을 만들고 있다. 나는 이번 졸업 프로젝트에서 AI 모델 개발을 맡고 있다. 프로젝트 및 앱 이름은 SeeFit 이다. SeeFit 은 쓰고 있는 안경을 벗지 않고도 다른 안경을 가상 착용할 수 있는 아이웨어 쇼핑 플랫폼이다. 이 프로젝트에서 내가 구현해야 하는 부분은 기존의 안경을 지워주는 일이다. 내가 생각한 구현 방법은 다음 두 가지이다. Video Object Segmentation + 픽셀 값 보정 Video Object Segmentation + Video Inpainting 첫 번째는 Video Object Segmentation을 이용하는 방법이다. 우리..

Deep Learning 2022.11.25

[백준/파이썬] 10799 쇠막대기 (자료 구조) - 스택 사용하기

➰ 10799번 쇠막대기 💡 구현 아이디어 이 문제의 포인트는 닫는 괄호가 레이저인지 쇠막대기의 끝인지를 구분하는 것이다. ( ) 이렇게 나오면 레이저이고, ) ) 이처럼 닫는 괄호가 연속해서 나올 때 이때 두 번째 괄호는 쇠막대기의 끝이 된다. 조각은 1) 레이저에 의해 생기는 경우와 2) 쇠막대기의 끝이어서 생기는 경우 두 가지 경우로 생긴다. 1) 레이저에 의해 조각이 생기는 경우 앞에서 나온 (레이저가 아닌) 여는 괄호 '('의 수 만큼 더해준다. 이때 레이저가 아닌 여는 괄호들은 stack에 하나씩 추가해준다. 따라서 레이저가 나오면 스택의 길이(len(stack))만큼 더해준다. 2) 쇠막대기의 끝이어서 조각이 생기는 경우 닫는 괄호가 쇠막대기의 끝이라면, +1만 해주면 된다. 이때 stack..

Algorithm 2022.10.08

[백준/파이썬] 4889 안정적인 문자열 (자료 구조) - 스택, 덱 사용하기

➰ 4889번 안정적인 문자열 ▪ 문제 여는 괄호와 닫는 괄호만으로 이루어진 문자열이 주어진다. 여기서 안정적인 문자열을 만들기 위한 최소 연산의 수를 구하려고 한다. 안정적인 문자열의 정의란 다음과 같다. 빈 문자열은 안정적이다. S가 안정적이라면, {S}도 안정적인 문자열이다. S와 T가 안정적이라면, ST(두 문자열의 연결)도 안정적이다. {}, {}{}, {{}{}}는 안정적인 문자열이지만, }{, {{}{, {}{는 안정적인 문자열이 아니다. 문자열에 행할 수 있는 연산은 여는 괄호를 닫는 괄호로 바꾸거나, 닫는 괄호를 여는 괄호로 바꾸는 것 2가지이다. ▪ 입력 입력은 여러 개의 데이터 세트로 이루어져 있다. 각 데이터 세트는 한 줄로 이루어져 있다. 줄에는 여는 괄호와 닫는 괄호만으로 이루어..

Algorithm 2022.10.07

💻[Python] 파이썬에서 자료구조 덱(deque) 사용하기

파이썬 공식문서에서 자료구조 덱(deque) 사용법과 관련 함수들을 확인할 수 있다. class collections.deque([iterable]) 1. 덱(deque)이란? Double Ended Queue이다. stack과 queue를 합쳐 놓은 자료구조이다. 자료의 양 끝에서 삽입/삭제 연산이 이루어진다. 덱의 모든 연산의 시간 복잡도는 O(1)이다. 2. 파이썬에서 덱 사용하기 파이썬에서 list를 사용하는 것과 비슷한데, deque이 시간 복잡도 측면에서 훨씬 유리하다. list의 크기가 작을 때는 상관 없겠지만, 리스트의 크기가 아주 커진다면 리스트의 삽입과 삭제 연산은 아주 복잡해진다. list의 삭제 연산의 시간 복잡도는 O(n)이고, deque의 삭제 연산의 시간 복잡도는 O(1)이다...

Algorithm 2022.10.07

[백준/파이썬] 9375 패션왕 신해빈 (자료 구조) - 딕셔너리

➰ 9375번 패션왕 신해빈 ▪ 문제 해빈이는 패션에 매우 민감해서 한번 입었던 옷들의 조합을 절대 다시 입지 않는다. 예를 들어 오늘 해빈이가 안경, 코트, 상의, 신발을 입었다면, 다음날은 바지를 추가로 입거나 안경대신 렌즈를 착용하거나 해야한다. 해빈이가 가진 의상들이 주어졌을때 과연 해빈이는 알몸이 아닌 상태로 며칠동안 밖에 돌아다닐 수 있을까? ▪ 입력 첫째 줄에 테스트 케이스가 주어진다. 테스트 케이스는 최대 100이다. 각 테스트 케이스의 첫째 줄에는 해빈이가 가진 의상의 수 n(0 ≤ n ≤ 30)이 주어진다. 다음 n개에는 해빈이가 가진 의상의 이름과 의상의 종류가 공백으로 구분되어 주어진다. 같은 종류의 의상은 하나만 입을 수 있다. 모든 문자열은 1이상 20이하의 알파벳 소문자로 이루..

Algorithm 2022.09.28

[백준/파이썬] 10816 숫자 카드 2 (자료 구조) - Counter 라이브러리

➰ 10816번 숫자 카드 2 ▪ 문제 숫자 카드는 정수 하나가 적혀져 있는 카드이다. 상근이는 숫자 카드 N개를 가지고 있다. 정수 M개가 주어졌을 때, 이 수가 적혀있는 숫자 카드를 상근이가 몇 개 가지고 있는지 구하는 프로그램을 작성하시오. ▪ 입력 첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10,000,000보다 작거나 같다. 셋째 줄에는 M(1 ≤ M ≤ 500,000)이 주어진다. 넷째 줄에는 상근이가 몇 개 가지고 있는 숫자 카드인지 구해야 할 M개의 정수가 주어지며, 이 수는 공백으로 구분되어져 있다. 이 수도 -10,0..

Algorithm 2022.09.28

[백준/파이썬] 2108 통계학 - 수학, 구현, 정렬

➰ 2108번 통계학 ▪ 문제 수를 처리하는 것은 통계학에서 상당히 중요한 일이다. 통계학에서 N개의 수를 대표하는 기본 통계값에는 다음과 같은 것들이 있다. 단, N은 홀수라고 가정하자. 산술평균 : N개의 수들의 합을 N으로 나눈 값 중앙값 : N개의 수들을 증가하는 순서로 나열했을 경우 그 중앙에 위치하는 값 최빈값 : N개의 수들 중 가장 많이 나타나는 값 범위 : N개의 수들 중 최댓값과 최솟값의 차이 N개의 수가 주어졌을 때, 네 가지 기본 통계값을 구하는 프로그램을 작성하시오. ▪ 입력 첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 단, N은 홀수이다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을 넘지 않는다. ▪ 출력 첫째 줄에는 산..

Algorithm 2022.09.25

[백준/파이썬] 2751 수 정렬하기2 - 합병 정렬 구현하기

➰ 2751번 수 정렬하기2 ▪ 문제 N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오. ▪ 입력 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다. ▪ 출력 첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다. 💡 구현 아이디어 이 문제는 당연히 sort() 함수를 사용하여 해결하는 것이 가장 간단하고, 그게 맞는 방법이다. 이 풀이는 그저 합병 정렬 알고리즘을 연습하기 위함이다. 🔸 합병 정렬 (Merge sort) 합병 정렬은 분할 정복(divide and conquer) 방식으로 설계되었다. 한 번에 ..

Algorithm 2022.09.25
반응형