Skip to content

Commit cf1535d

Browse files
authored
Update README.md
1 parent e814227 commit cf1535d

1 file changed

Lines changed: 180 additions & 36 deletions

File tree

README.md

Lines changed: 180 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,180 @@
1-
## 작업 규칙
2-
- 각 브랜치 파서 작업 후 main 브랜치로 PR 생성
3-
4-
### 1. 브랜치 파기
5-
- `git checkout -b 브랜치명`
6-
> 브랜치명은 `fe/login`, `be/login` `ai/trainig` 등 역할과 기능을 명시한다
7-
8-
### 2. 작업 후 커밋
9-
- 커밋과 PR 단위는 짧게 가져간다 (빠른 피드백을 위함)
10-
- `git commit -m "<커밋메시지>"`
11-
- 커밋 메시지 컨벤션은 다음과 같다.
12-
13-
| **Type** | **설명** |
14-
| --- | --- |
15-
| Feat: | 새로운 기능 추가 |
16-
| Fix: | 버그 수정 |
17-
| Refactor: | 리팩토링 |
18-
| Design: | CSS 등 사용자 UI 디자인 변경 |
19-
| Comment: | 필요한 주석 추가 및 변경 |
20-
| Style: | 코드 포맷팅, 세미콜론 누락, 코드 변경이 없는 경우 |
21-
| Test: | 테스트(테스트 코드 추가, 수정, 삭제, 비즈니스 로직에 변경이 없는 경우) |
22-
| Chore: | 위에 걸리지 않는 기타 변경사항(빌드 스크립트 수정, assets image, 패키지 매니저 등) |
23-
| Init: | 프로젝트 초기 생성 |
24-
| Rename: | 파일 혹은 폴더명 수정하거나 옮기는 경우 |
25-
| Remove: | 파일을 삭제하는 작업만 수행하는 경우 |
26-
27-
### 3. 작업한 내용들 push
28-
- `git push` 먼저하고 안되면 `git push --set-upstream origin <브랜치명>`
29-
30-
### 4. github 사이트에서 PR 생성하기
31-
- PR 템플릿에 맞게 내용을 적고 PR 올리기 (기타 전달사항도 전달하기)
32-
- label 세팅하여 올리고, 제목에는 [Feature/BE] 등의 태그를 적어서 구분하기 쉽도록 한다
33-
- PR 생성 시 업로드하는 브랜치 설정을 dev 로 설정한다.
34-
35-
### 5. 카톡으로 PR 생성 링크 보내기
36-
- 이는 클라이언트, AI 서버와 소통해야하는 BE 만 해당됨
1+
<h1 align="center">
2+
<img src="https://raw.githubusercontent.com/Tarikul-Islam-Anik/Animated-Fluent-Emojis/master/Emojis/Smilies/Grinning%20Cat%20with%20Smiling%20Eyes.png" alt="Grinning Cat with Smiling Eyes" width="25" height="25" /> PETKIN <img src="https://raw.githubusercontent.com/Tarikul-Islam-Anik/Animated-Fluent-Emojis/master/Emojis/Smilies/Grinning%20Cat%20with%20Smiling%20Eyes.png" alt="Grinning Cat with Smiling Eyes" width="25" height="25" />
3+
</h1>
4+
5+
---
6+
7+
### <p align="center">AI 기반 반려동물 피부질환 예측 서비스</p>
8+
9+
![12월 17일 최종발표 (최신 ai 특강)](https://github.com/user-attachments/assets/73524d63-9bc9-4f3f-b03e-383151554b6a)
10+
11+
> ’Petkin’은 반려동물 보호자를 위한 **AI 피부질환 예측 서비스**입니다. 사용자는 반려동물의 피부 사진을 업로드하여 **딥러닝 모델을 활용한 피부질환 분석 결과**를 확인할 수 있습니다. 이 서비스는 **병원 방문 전 기본적인 피부 건강 진단**을 가능하게 하며, 보호자가 반려동물의 피부 상태를 기록하고 모니터링할 수 있도록 지원합니다.
12+
>
13+
14+
15+
## 소개
16+
17+
### 🔎 Background
18+
![12월 17일 최종발표 (최신 ai 특강) (3)](https://github.com/user-attachments/assets/1f695ba8-d0a7-4571-a0bf-d1c1835b8de9)
19+
20+
21+
### 🎯 배경
22+
23+
- 반려동물 보호자들의 반려동물 건강에 대한 관심도 증가
24+
- 동물병원 방문 전 **기본적인 피부 상태를 확인**할 수 있는 AI 기반 서비스 필요
25+
- 시간과 비용 문제로 인해 **반려동물의 피부 상태를 자가 진단**할 수 있는 도구 제공
26+
27+
<br>
28+
29+
## 핵심 기능
30+
31+
**반려동물 피부 상태 분석**
32+
33+
사용자가 반려동물 피부 사진을 업로드하면 AI가 분석하여 **피부 질환 여부 및 유형을 예측**합니다.
34+
- ![image](https://github.com/user-attachments/assets/59cf0689-0f54-4041-b4cd-603a28012a15)
35+
36+
37+
**반려동물 건강 정보 기록**
38+
39+
반려동물의 건강과 관련된 상태를 **하루 단위로 기록**할 수 있습니다.
40+
41+
<br>
42+
43+
## 📊 AI 모델 및 학습 방법
44+
45+
### 🔬 데이터셋 및 전처리
46+
47+
- AI Hub 제공 **반려동물 피부질환 데이터셋** 활용🔗 [데이터셋 링크](https://www.aihub.or.kr/aihubdata/data/view.do?currMenu=115&topMenu=100&dataSetSn=561)
48+
49+
- **데이터 구조**:
50+
- **A1:** 구진, 플라크
51+
- **A2:** 비듬, 각질
52+
- **A3:** 태선화, 과다색소침착
53+
- **A4:** 농포, 여드름
54+
- **A5:** 미란, 궤양
55+
- **A6:** 결절, 종괴
56+
- **A7:** 무증상
57+
58+
- **데이터 분포**:
59+
- ![image](https://github.com/user-attachments/assets/a9db2188-0163-4569-bb70-c24ac63e0d13)
60+
61+
- **데이터 전처리**:
62+
- 이미지 데이터에 대해 Transform 적용 -> **이미지 데이터 특징 다양화**
63+
- 학습에 사용한 Features
64+
65+
| age | breed | gender | label 인 lessons |
66+
| --- | --- | --- | --- |
67+
| 수치형 데이터이므로, MinMaxScaling 적용 | 범주형 데이터 이므로, One-hot encoding 적용 | 범주형 데이터이므로, One-hot encoding 적용 | 범주형 데이터이므로, One-hot encoding 적용 |
68+
69+
<br>
70+
71+
### 🔍 모델 구조 및 학습 방식
72+
73+
- **EfficientNet-b1** 기반 **Multi Modal Model** 활용 (이미지 데이터 학습이 주 목적이지만, 다른 features 을 통한 학습 성능 향상 기대)
74+
- **Adam, AdamW** 옵티마이저 사용
75+
- **CosineAnnealingLR** 스케줄러 적용
76+
- **CrossEntropy Loss** 적용
77+
- **Hyper Parameter 조정**을 통한 최적화 실험 진행
78+
79+
<br>
80+
81+
### 📈 실험 결과
82+
- **실험 1)** 데이터 불균형 해결을 위한 **Undersampling 적용**
83+
- | No resample | Resample |
84+
| --- | --- |
85+
| ![image](https://github.com/user-attachments/assets/419fe554-3ff5-4310-9258-9424c344bf5f)| ![image](https://github.com/user-attachments/assets/15d951a4-2008-42c5-84b7-61e344f72c84) |
86+
- > Loss 와 Accuracy 를 보면 Resampling 을 적용하지 않은 모델이 더 좋은 성능을 보이는 것처럼 보이지만, 평가 데이터가 불균형하기 때문에(A7이 많음) 그렇게 나타나며, **평가 데이터가 균형할때는 성능이 향상됨**을 확인할 수 있다.
87+
- | 불균형 평가데이터에 대한 혼동 행렬 비교 | 균형 평가 데이터에 대한 혼동행렬 비교 |
88+
| --- | --- |
89+
| ![image](https://github.com/user-attachments/assets/1dd0814b-6f6f-4558-b977-f9c98786bca2)| ![image](https://github.com/user-attachments/assets/591102af-20ab-4de2-90d7-45ca8396d135)|
90+
91+
<br>
92+
93+
- **실험 2)** Multi Modal Model 적용 시 성능 변화 분석
94+
- 이미지만 사용하였을 때와 멀티 모달로 다른 features 도 학습 시켰을 때를 비교하면, 극적인 차이는 없지만 Multi Modal Model 적용 시 성능이 약간 떨어진다.
95+
- ![image](https://github.com/user-attachments/assets/81ebc9ed-1d9b-4c20-856f-029aa30eb116)
96+
97+
<br>
98+
99+
- **실험 3)** Batch Size 및 Learning Rate 변경 실험
100+
- batch size 를 크게 할수록 모델 성능이 향상될 것이라 예측했지만, 아주 미미한 차이만 있을 뿐 Batch size 에 따른 성능 변화는 거의 없다.
101+
- ![image](https://github.com/user-attachments/assets/fb5c4d79-4142-4990-88f2-96dc8f648df4)
102+
103+
<br>
104+
105+
## 🛠 개발 내용
106+
### 🔧 서비스 아키텍처 구조도
107+
![Frame 7](https://github.com/user-attachments/assets/e881f647-68ed-44e7-944b-fce3ac0ac6c2)
108+
109+
<br>
110+
111+
### 🔧 기술 스택
112+
113+
| Frontend | Backend | AI Model | Deployment |
114+
| --- | --- | --- | --- |
115+
| <img src="https://img.shields.io/badge/Flutter-02569B?style=for-the-badge&logo=Flutter&logoColor=white"> | <img src="https://img.shields.io/badge/FastAPI-009688?style=for-the-badge&logo=FastAPI&logoColor=white"> | <img src="https://img.shields.io/badge/PyTorch-EE4C2C?style=for-the-badge&logo=PyTorch&logoColor=white"> | <img src="https://img.shields.io/badge/Docker-2496ED?style=for-the-badge&logo=Docker&logoColor=white"> |
116+
117+
<br>
118+
119+
### 🎬 시연 영상
120+
121+
📺 [시연 영상 보기](https://www.youtube.com/watch?v=Xs13ZMWp7xc)
122+
123+
<br>
124+
125+
### 개발 세부 내용
126+
127+
1. **ERD 설계서**
128+
![erd petkin](https://github.com/user-attachments/assets/c7cc051c-a9b5-4419-8dec-5447aad2ac9a)
129+
130+
131+
132+
2. **API 문서**
133+
1. 🏠 **회원 API (Customer Controller)**
134+
| **회원 API (Customer Controller)** | 설명 | 엔드포인트 | 메서드 |
135+
| --- | --- | --- | --- |
136+
| 카카오 토큰 갱신 | 리프레시 토큰을 이용해 새로운 액세스 토큰을 발급 | `/api/customers/token/refresh` | `POST` |
137+
| 카카오 로그인 | Oauth 제공자(KAKAO) 로그인 후, 액세스 및 리프레시 토큰 반환 | `/api/customers/oauth/login/{oauthProvider}` | `POST` |
138+
| 내 정보 조회 | 로그인한 회원의 닉네임 반환 | `/api/customers/me` | `GET` |
139+
2. 🧑‍⚕️ **질병 예측 API (Prediction Controller)**
140+
| 기능 | 엔드포인트 | 메서드 | 상태 | 설명 |
141+
| --- | --- | --- | --- | --- |
142+
| 질병 분석 (Client → Server) | `/predict/disease` | `POST` | ✅ 완료 | 서버에서 AI 서버로 질병 분석 요청 |
143+
3. 📖 **건강 기록 API (Health Record Controller)**
144+
| 기능 | 엔드포인트 | 메서드 | 상태 | 설명 |
145+
| --- | --- | --- | --- | --- |
146+
| 특정 반려동물 건강 기록 조회 | `/api/pets/{pet_id}/health-records/` | `GET` | ✅ 완료 | 특정 반려동물의 모든 건강 기록 조회 |
147+
| 건강 기록 생성 | `/api/health-records` | `POST` | ✅ 완료 | 로그인된 사용자가 건강 기록 생성 |
148+
| 건강 기록 조회 | `/api/health-records/{record_id}` | `GET` | ✅ 완료 | 특정 건강 기록 세부 정보 조회 |
149+
| 건강 기록 수정 | `/api/health-records/{record_id}` | `PUT` | ✅ 완료 | 특정 건강 기록 내용 수정 |
150+
| 건강 기록 삭제 | `/api/health-records/{record_id}` | `DELETE` | ✅ 완료 | 특정 건강 기록 삭제 |
151+
| 특정 날짜 건강 기록 조회 | `/api/pets/{pet_id}/health-records?date={date}` | `GET` | ✅ 완료 | 특정 날짜의 건강 기록 조회 |
152+
| 특정 달 건강 기록 조회 | `/api/pets/{pet_id}/health-records?month={month}` | `GET` | ✅ 완료 | 특정 달의 건강 기록 조회 |
153+
154+
📌 **사전 정의된 건강 기록 아이템**
155+
| ItemType | Item Name |
156+
| --- | --- |
157+
| 1 | 📷 Photo (사진 기록) |
158+
| 2 | 🛁 Bath (목욕) |
159+
| 3 | 🚶 Walk (산책) |
160+
| 4 | 🍖 Snack (간식) |
161+
| 5 | 💊 Medicine (약) |
162+
| 6 | 💉 Vaccination (예방 접종) |
163+
| 7 | 🏥 Hospital (병원 방문) |
164+
| 8 | 📝 Memo (메모) |
165+
4. 🐶 **반려동물 API (Pet Controller)**
166+
| 기능 | 엔드포인트 | 메서드 | 상태 | 설명 |
167+
| --- | --- | --- | --- | --- |
168+
| 반려동물 등록 | `/api/pets` | `POST` | ✅ 완료 | 새로운 반려동물을 등록하고 고유 ID 반환 |
169+
| 반려동물 정보 조회 | `/api/pets/{pet_id}` | `GET` | ✅ 완료 | 등록된 반려동물 조회 |
170+
| 반려동물 정보 수정 | `/api/pets/{pet_id}` | `PUT` | ✅ 완료 | 등록된 반려동물 정보 수정 |
171+
| 반려동물 삭제 | `/api/pets/{pet_id}` | `DELETE` | ✅ 완료 | 등록된 반려동물 삭제 |
172+
| 회원 반려동물 목록 조회 | `/api/pets/mine` | `GET` | ✅ 완료 | 로그인된 회원의 반려동물 목록 조회 |
173+
174+
175+
<br>
176+
177+
## 팀원
178+
|<img src="https://avatars.githubusercontent.com/u/102356873?v=4" width="150" height="150"/>|<img src="https://avatars.githubusercontent.com/u/82194112?v=4" width="150" height="150"/>|<img src="https://avatars.githubusercontent.com/u/105425800?v=4" width="150" height="150"/>|
179+
|:-:|:-:|:-:|
180+
|aengzu<br/>[@aengzu](https://github.com/aengzu)|[@choisieun](https://github.com/choisieun)|Heewon Choi<br/>[@o4e3](https://github.com/o4e3)|

0 commit comments

Comments
 (0)