세팅
Docker Image Pull
- Docker는 이미 깔려있는 상태에서 시작합니다.
- pytorch Docker를 내려 받습니다. ( https://hub.docker.com/r/pytorch/pytorch )
docker pull pytorch/pytorch
- 해당 이미지에는 opt/conda 에 필요한 라이브러리들이 설치되어 있는것을 확인할 수 있었습니다.
제가 만들 file system도 opt 안에다가 만들어놓겠습니다.
docker run \
--rm \ # 컨테이너 종료시 지움
-it \ # 커멘드 띄움
--name u-net \ # 컨테이너 이름 지정
--gpus all \ # gpu 사용
-v /home/scone/deepdish/myfirstU-Net/:/opt/workspace \ # 파일시스템
pytorch/pytorch # docker image
데이터 가져오기
- isbi-2012
- 대회 링크는 서버가 다운되어서 다음의 깃헙 경로 ( https://github.com/alexklibisz/isbi-2012 ) 에서 데이터를 다운받았습니다.
train volume, train label, test volume 각각 512x512 짜리 이미지 30개로 구성되어있습니다.
Docker 환경 세팅
- Conda update
# base conda 활성화
conda activate
# 콘다 core uupdate
conda update -n base conda
- 라이브러리 몇가지 설치
* conda는 pip와 다르게 Docker Container를 위한 멋진 no-cached-dir 옵션이 없는것으로 확인됩니다.
( https://github.com/conda/conda/issues/7741 )
* Container를 베포하고자 할 때, 수동으로 cache를 제거하는 방법 밖에는 없겠습니다..
conda clean --all --force-pkgs-dirs
conda install matplotlib
Data Split
import os
import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
## load data
dir_data = 'workspace/data'
name_label = 'train-labels.tif'
name_input = 'train-volume.tif'
img_label = Image.open(os.path.join(dir_data, name_label))
img_input = Image.open(os.path.join(dir_data, name_input))
# 512, 512
ny, nx = img_label.size
# 30
nframe = img_label.n_frames
## data split
nframe_train = 24
nframe_val = 3
nframe_test = 3
# make folder
dir_save_train = os.path.join(dir_data, 'train')
dir_save_val = os.path.join(dir_data,'val')
dir_save_test = os.path.join(dir_data, 'test')
if not os.path.exists(dir_save_train):
os.makedirs(dir_save_train)
if not os.path.exists(dir_save_val):
os.makedirs(dir_save_val)
if not os.path.exists(dir_save_test):
os.makedirs(dir_save_test)
# shuffle idx
id_frame = np.arange(nframe)
np.random.shuffle(id_frame)
# save train
offset_nframe = 0
for i in range(nframe_train):
img_label.seek(id_frame[i + offset_nframe])
img_input.seek(id_frame[i + offset_nframe])
label_ = np.asarray(img_label)
input_ = np.asarray(img_input)
np.save(os.path.join(dir_save_train, 'label_%03d.npy' % i), label_)
np.save(os.path.join(dir_save_train, 'input_%03d.npy' % i), input_)
# save val
offset_nframe += nframe_train
for i in range(nframe_val):
img_label.seek(id_frame[i + offset_nframe])
img_input.seek(id_frame[i + offset_nframe])
label_ = np.asarray(img_label)
input_ = np.asarray(img_input)
np.save(os.path.join(dir_save_val, 'label_%03d.npy' % i), label_)
np.save(os.path.join(dir_save_val, 'input_%03d.npy' % i), input_)
# save_test
offset_nframe += nframe_val
for i in range(nframe_test):
img_label.seek(id_frame[i + offset_nframe])
img_input.seek(id_frame[i + offset_nframe])
label_ = np.asarray(img_label)
input_ = np.asarray(img_input)
np.save(os.path.join(dir_save_test, 'label_%03d.npy' % i), label_)
np.save(os.path.join(dir_save_test, 'input_%03d.npy' % i), input_)
## show data
plt.subplot(121)
plt.imshow(label_, cmap='gray')
plt.title('label')
plt.subplot(122)
plt.imshow(input_, cmap='gray')
plt.title('input')
plt.show()
추가) Docker 안에서 GUI 사용 설정
https://medium.com/analytics-vidhya/docker-tensorflow-gui-matplotlib-6cdd327d4a0f
- 외부 호스트에서 GUI를 열 수 있도록 설정
xhost +
- display setting을 하여 docker run
docker run \
--rm \
-it \
--name u-net \
--gpus all \
-v /home/scone/deepdish/myfirstU-Net/:/opt/workspace \
--net=host \
--env="DISPLAY" \
--volume="$HOME/.Xauthority:/root/.Xauthority:rw" \
kimjungtaek/u-net
- --net=host :
host와 동일한 네트워크 환경을 사용 ( default는 bridge ) - --volume="$HOME/.Xauthority:/root/.Xauthority:rw" :
호스트의 $HOME/.Xauthority 파일을 컨테이너의 /root/.Xauthority 파일에 마운트합니다.
이를 통해 컨테이너가 호스트의 X 서버에 접근할 수 있습니다.
- Docker 내부에서 ipython 설치
pip3 install ipython
물론 Conda 가상환경 내부에서 설치를 진행하였습니다.
matplotlib 를 통해 show 한 결과 입니다.
출처 :
https://89douner.tistory.com/298
https://www.youtube.com/watch?v=fWmRYmjF-Xw
'DL' 카테고리의 다른 글
U-Net 실습3 - 모델 학습 및 Tensorboard (0) | 2023.07.06 |
---|---|
U-Net 실습2 - 네트워크 구조, Dataloader, Transform 구현 (0) | 2023.07.06 |
[History] 2018, ImageNet을 기반으로 하는 이미지 분류 알고리즘 리뷰 (0) | 2023.07.02 |
[YOLO; You Only Look Once] Unified, Real-Time Object Detection (0) | 2023.06.29 |
순환 신경망 실습 (0) | 2023.06.25 |