일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 설정
- 15649
- 1002
- 4948
- 파이싼
- 밑바닥부터 시작하는 딥러닝
- 실버
- BOJ
- 개발환경
- 경사하강법
- 1101
- 백준
- 백트래킹
- pyenv
- 기계학습
- end to end
- Mac
- 그리디 알고리즘
- 파이썬
- 손실함수
- 가상환경
- streamlit
- 9020
- 재귀
- Python
- n과 m
- 신경망 학습
- N-Queen
- Today
- Total
파이톨치
[BoostCamp AI Tech] 이미지 데이터 전처리 본문
# 이미지 데이터
이미지 데이터를 통해 데이터 분석 및 모델링에서 중요함.
Domain은 의료, 교통, 패션, 만화 등이 있다.
의료 분야가 시장에 가장 크다고 생각된다. (그럼 뭐 의학까지 배워야 하나?)
예시로 캐글에서 현재 진행 중인 척추 문제 분류가 있다.
https://www.kaggle.com/competitions/rsna-2024-lumbar-spine-degenerative-classification
# EDA
0번 과정: 문제 정의와 도메인에 대한 지식을 습득 한다.
저 문제를 풀기 위해서는 문제에 대해 이해를 하고 척추에 문제가 생기면 어떻게 되는지 domain 지식을 쌓아야 한다.
나는 그런 지식이 없으니 chatgpt에게 정리해달라고 하면 다음과 같이 나온다.
세계보건기구에 따르면, 요통은 전 세계에서 장애를 유발하는 주요 원인으로 2020년에는 6억 1,900만 명이 영향을 받았습니다. 이 대회에서는 MRI 이미지를 활용하여 척추 퇴행성 질환을 자동으로 탐지하고 분류하는 AI 모델을 개발하는 것이 목표입니다. 주요 분류 대상은 좌우 신경공 협착, 좌우 관절하부 협착, 척추관 협착의 다섯 가지 질환이며, 각각의 중증도를 평가합니다. 이 대회에서 우승한 팀은 RSNA 2024 연례 회의에서 인정받을 예정입니다.
1번 과정: Target 중심 분석
이는 정형 데이터를 해석하는 과정이다. 분포 위주의 초기 비교를 진행한다.
예를 들어, 위의 예시에서 5개로 분류하는 문제인데, 제일 먼제 보아야 하는 것은 클래스에 대한 불균형일 것이다.
범주나 분포가 균등하지 않고 편향된 경우에 이를 해주는 것이다.
2번 과정: Input 중심 분석
이미지 데이터를 개별적으로 비교한다. 이 때, 도메인 지식이 필요하다.
이미지를 보고 이 데이터는 이런 문제가 있구나 하는 것을 알아야 하는 건데, 인간의 지식과 직관이 필요할 것이다.
3번 과정: Process 중심 분석
모델의 이미지를 전처리하고 모델을 만들고 결과를 뽑고 해석한다.
# 이미지 데이터 수집
제한된 환경에서 분석하는 학생 입장에서 이미지 데이터를 수집하는 것은 쉽지 않겠지만,
현업에서는 상당히 중요하다고 한다.
1. 수집 경로 2. 데이터의 한계 3. 데이터 학습 비용을 고려해야 한다고 한다. (솔직히 와닿진 않는다.)
# 이미지 데이터 전처리
색상 공간, 노이즈, 사이즈 조정, 아핀? 변환, 특성 추출 등을 할 수 있다.
이는 말로 들어서는 이해가 잘 안 될 것이다.
그러니 코드로 보자!
기본적으로 이미지를 그리는 코드는 다음과 같다.
image_url = 'https://images.pexels.com/photos/1056251/pexels-photo-1056251.jpeg'
# URL로부터 이미지 데이터를 가져옴
response = requests.get(image_url)
test_image = Image.open(BytesIO(response.content))
test_image_np = np.array(test_image)
print(test_image_np.shape)
plt.imshow(test_image)
plt.show()
url로부터 이미지를 가져오고, 이미지를 open 한다. numpy 배열로 바꾸고 이를 plt를 통해서 보여준다. 결국 이미지도 행렬이다.
## 색상 조정
from torchvision import transforms
fig, ax = plt.subplots(2, 2, figsize=(9, 9))
transform1 = transforms.ColorJitter(brightness=3) #밝기조정
transform2 = transforms.ColorJitter(contrast=3) #대비도조정
transform3 = transforms.ColorJitter(saturation=3) #채도조정
transform4 = transforms.ColorJitter(hue=0.5) #색상조정
aug_img1 = transform1(test_image)
aug_img2 = transform2(test_image)
aug_img3 = transform3(test_image)
aug_img4 = transform4(test_image)
ax[0][0].imshow(aug_img1)
ax[0][1].imshow(aug_img2)
ax[1][0].imshow(aug_img3)
ax[1][1].imshow(aug_img4)
plt.show()
외울 필요 없다. 필요하다고 생각되면 검색해서 알면 된다.
내가 알아야 하는 것은 어떤 전처리가 있고, 유용한가이다.
멘토링 시간에는, ImageNet Aug, Augmix, RandomAug, AutoAug 등의 전처리를 많이 쓴다고 했다.
자동으로 Augmentation을 해주는듯 하다.
## Albumentations
강사님은 캐글에서 활동하신 분이라 얘기 해주시길, 캐글에서는 이 라이브러리를 많이 사용한다고 한다.
def transform(transform_method):
fig, ax = plt.subplots(1, 2, figsize=(12, 9))
ax[0].imshow(test_image)
ax[1].imshow(transform_method(image=test_image_np)['image'])
ax[0].axis('off')
ax[1].axis('off')
plt.show()
transform1 = albumentations.HorizontalFlip(p=1) #입려 이미지의 좌우 반전
transform(transform1)
이렇게 해주면 이미지를 반전 시킬 수 있다.
나머지 기능으로는 다음과 같은 것들이 있다.
- HorizontalFlip: 이미지를 수평으로 뒤집음
- Normalize: 이미지 픽셀 값을 정규화
- Resize: 이미지 크기 조정
- Rotate: 이미지를 특정 각도로 회전
- BrightnessContrast: 이미지 밝기와 대비 조절
- ColorJitter: 이미지의 색상, 채도, 밝기 등을 무작위로 변경
'AI&ML > BoostCamp AI Tech' 카테고리의 다른 글
[BoostCamp AI Tech] Computer Vison Overview (4) | 2024.08.27 |
---|---|
[BoostCamp AI Tech] 데이터 시각화 (0) | 2024.08.22 |
[BoostCamp AI Tech] 데이터 분석 (0) | 2024.08.20 |
[BoostCamp AI Tech] Transformer (0) | 2024.08.16 |
[BoostCamp AI Tech] RNN & LSTM & Attention (0) | 2024.08.14 |