Skip to content

Commit

Permalink
update
Browse files Browse the repository at this point in the history
  • Loading branch information
9B8DY6 committed Sep 1, 2020
1 parent 4a89bf4 commit 5a438a0
Show file tree
Hide file tree
Showing 10 changed files with 179 additions and 1 deletion.
113 changes: 113 additions & 0 deletions 200824.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
# 20.08.21

### csvfile을 만들기 위해 디렉토리와 엑셀을 연결하는 작업을 시행함.
### csvfilemaking . ipynb
</br>

1. 디렉토리의 경로 설정 이후 그 디렉토리의 파일 목록을 꺼내온다.

2. 그 디렉토리와 파일목록을 연결시켜 새로운 경로를 생성한다.

3. f_name이라는 column이름과 함께 dataframe에 넣어주면 일단 파일경로들의 dataframe완성

4. csv파일이 아닌 excel파일을 읽고 excel파일에 있는 IXI_ID를 꺼내 리스트로 만든 후 그 리스트에서 IXI만 있는 파일을 꺼내도록 if문을 설정해 IXI옆에 있는 숫자들을 꺼내온다.

5. 이 숫자들은 type이 str이므로 IXI_ID와 비교할 수 있도록 int형태로 바꿔야 한다. 그런데 atoi함수가 python에서 사라졌다! 그래서 int(뭐시기) 이렇게 해줬더니 float형태로 바꾸는 쓸데없는 수고를 해주어서 torch.tensor().int()로 다시 바꿔주었다.

6. np.array나 torch tensor형태에서는 index를 알아보거나 value를 제외하거나 등의 추가적인 기능을 할 수 없으므로 그럴 땐 .tolist()를 해줘야 한다. 그리고 torch tensor는 바로 .tolist()가 안되므로 np.array로 바꿔주었다가 list로 다시 바꿔줘야 한다.</br>

7. IXIDB에는 있지만 IXI엑셀에는 없는 수들을 리스트로 모으고 IXIDB의 숫자들의 목록들에서 제거해준다.

8. 그러면, 최종적으로 IXIDB와 IXI엑셀 모두에 있는 숫자들만 남게 될 것이고 IXIDB의 숫자들을 for문으로 돌리고 IXI_ID와 일치할 때의 sex, age를 np.array로 만든다.

9. 그리고 그 sex, age를 dataframe에 붙이고 그것을 csv파일로 변환한다.

결과이미지![](2020-08-20-22-10-00.png)

- path = 디렉토리 경로</br>
os.listdir(path) : 디렉토리 내 파일목록을 주루룩 넣어줌

- str='IXI0988'</br>
str.startwith('IXI') = True (전방일치)

<pre>
<code>
not_in_list = [] # IXIDB에 있는데 IXI엑셀에는 없는 수들의 모음
for i in num:
if i in IXI_ID:
pass
else:
not_in_list.append(i)

# 특수한 if문인데 외우면 좋다. list에 없는 경우에 어떻게 할 것인가?
</code>
</pre>

---
https://bskyvision.com/762 [디렉토리내 파일 목록 읽기]

https://ponyozzang.tistory.com/532 [문자열 부분일치 완전일치 전방일치 후방일치]

https://musclebear.tistory.com/38 [문자열내 숫자만 추출] =>또 필요한 것은 그 string숫자를 integer로 변환

https://ldgeao99.tistory.com/8 [dataframe column추가]

https://wikidocs.net/14 [리스트 자료형에 대한 기능들]

# 20.08.24


- 교수님이 발표준비하라고 주신 Med3D논문을 읽다가 domain, multi-domain이라는 단어가 나왔다. 일반적으로는 영역이라는 뜻이지만 deep learning에서는 좀 더 다른 뜻이 있을까하고 찾아보았다.

- ![](2020-08-24-13-02-13.png)
여러 종류의 task를 수행하기 위한 환경의 조건은 크게 multi-task 또는 multi-domain 두 종류로 분류할 수 있습니다.</br>
Multi-task learning의 경우 학습하려는 여러 종류의 task가 동일한 domain에 존재할 경우를 칭합니다. 얼굴 데이터로부터 얼굴 인식, 표정 인식, 성별 분류, 포즈 분류 등의 task를 모두 하나의 모델로 처리하고자 하는 경우를 예로 들 수 있습니다. </br>
반면 Multi-domain learning의 경우 학습하려는 여러 종류의 task가 각각 다른 domain에 존재할 경우를 칭합니다. 예를 들어 의료 이미지에서의 병변 검출, 일상 이미지에서의 카테고리 검출, 문자가 포함된 이미지에서의 문자열 검출 등의 task를 모두 하나의 모델로 처리하고자 할 경우입니다. 어플리케이션을 구축할 때 여러 종류 domain의 다른 task들을 수행해야 하는 경우가 종종 발생하게 됩니다.

- multi-domain learning의 장점
1. 여러 domain 또는 task에서 동시에 잘 작동할 수 있는 shared feature를 학습할 수 있다면, 각각 독립적으로 모델을 구축했을 때 대비 굉장히 많은 양의 파라미터를 줄일 수 있습니다.

2. 만약 각 domain 간에 서로 시너지를 줄 수 있는 feature가 존재하고 이를 공유할 수 있다면, 하나의 task만 수행했을 때 보다 더 나은 성능을 기대할 수 있습니다.

- 즉, 논문에서 언급한 domain은 8개 각각의 segmentation dataset을 의미하는 뜻이었다.

- reakyRelu라는 활성화 함수가 relu의 0 이하의 값 처리에 있어 나타나는 단점을 보완하는데 regression에 있어서는 더욱 중요한 것 같다.

- IXIDB2.csv로 age regression을 하고 있는데 파일을 croporpad를 할 때, 32 * 32 * 28까지 줄여야 돌아갈 수라도 있다. 원본 사이즈는 256 * 256 * z이어서(z값이 최대 120 최소 112이었다.) 256 * 256 * 112로 하니 cuda out of memory가 떠서 32 * 32 * 28까지 낮추었는데도 시간이 정말 오래걸릴 것 같다.

- epoch 하나 당, 거의 30분이상 걸리고 지금 epoch=3까지 해보았으나 결과값이 nan이 나옴.

- loss nan 나오는 이유
1. 입력데이터 정규화를 하지 않아서
2. learning rate가 너무 커서
3. batch_size가 너무 작아서
4. crossentropy시 log(0)
5. relu -> leakyrelu
6. 3D_TOF_reg_PD_seg.nii 데이터가 보이는 부분이 너무 작아서...?

-

---
https://blog.lunit.io/2018/12/21/multi-domain-learning-in-deep-learning/ [multi-domain in deep learning]

seg- 혈관만 나타냄
bin - intesity 무시...> 0,1로만 표시
다운샘플링....
nifti_2p0부터 시작...
혈관만 있는 의료이미지 영상도 무조건 loss는 의미있는 값이 나와야 한다.

vi test.py

뭐시기 뭐시기 만들기

python test.py를 누르면

실행스크립트 if __name
__ = '__main__'

1. 유학
2. 국내타대학원
3. 학석사연계 1년 단축
4. 취업

알바할수있다!
45 changes: 45 additions & 0 deletions 200831.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
# 20.08.28

- 3D_TOF_reg_PD_bin.nii.gz, 뇌혈관 의료영상으로 딥러닝을 하니 그나마 bin 처리를 하기 전보다는 결과가 나오기는 했다.

- T1과 TOF의 비교를 위해 모델 훈련을 하고 있는데 조건이 valid set은 표본의 수가 50개이고 연령의 분포가 균일분포여야 하며, 최종 valid loss값이 6~7이하여야 한다.

- 균일분포로 뽑히도록 하기 위해 코딩을 생각해봤는데 train_test_split에서 random_state를 조절해 그나마 균일분포에 가까운 것을 찾는게 나을 것 같다고 생각해 그렇게 진행하였다.

- ![](2020-08-28-14-14-26.png)이 그래프처럼 data augmentation에 의해 valid_loss가 train_loss보다 낮을 수도 있음!!

- transform중 randombiasfield를 추가하니 시간은 더 늘어났는데 어째 loss가 13,14에서 머물러있는 느낌이다...ㅠㅠ일단 epoch=50까지의 결과를 지켜보고 그래도 안 나오면 시간이 오래 걸리는 transform를 제외하고 모델 architecture를 바꿔봐야 할 것 같다.

- model에서 conv3d를 추가해보고 dropout를 빼보고 추가해보고 했다. dropout를 빼니 overfitting(train_loss가 더 낮게 나옴)은 일어나는데 valid_loss가 20이상이다. 10이하라도 7이상이면 돌아버리겠는데 20이상이라니^^

# 20.08.31

- 학교에 와서 리눅스로 jupyter notebook을 시행하고자 하니 pytorch 설치도 해주어야 했고 네트워크 드라이브 연결하는 것도 헤매다가 다시 올바르게 연결해주었다. 그리고 생각보다 ram이 빠르지 않은 듯 하다.

- loss가 너무 안 줄어서 pretrained highresnet 3d를 가져온 후 마지막에 fc를 추가해 regression을 해볼까 했다.

- ![](2020-08-29-18-53-18.png)
highresnet을 가져오고 그 뒤에 adaptive average pooling과 linear을 가져와서 붙여주었다.
그러나, 모델 자체 complexity가 너무 높아 cuda out of memory가 떴다.

- ixi_tiny에 맞춘 모델이라 잘 안 돌아가는 것 같아 일부러 layer들을 더 제거해보았다. 결과는 더 안 좋았다.

- parameter initialization을 없애니 모델을 다시 돌릴 때마다 초기화가 되지 않아 저번때 나온 weight들에서 약간의 수정을 거치기에 학습이 더 원활해지는 것 같다.

- batch normalization은 batchsize가 너무 커도 error가 높을 수 있지만 너무 작아도(64미만) 안된다. 그러나 batchsize가 작아도 deep model이라면 covariate shift를 어느정도 방지 할 수 있어 model complexity가 크다면 batchnorm을 사용해주는 것이 좋다.

- covariate shift는 원본 데이터의 분포와 레이어를 거친 후의 데이터의 분포 모양의 차이가 나타나는 것을 의미한다.

- to avoid exploding or vanishing gradients while learning, param initialization is needed. but you should know that Xavier is working well with tanh activation func and He is working well with ReLU func.

- ![](2020-08-31-16-27-23.png)
preprocessing의 상태를 보는 코드...반성하자...ㅎ

- train_test_split에서의 나의 문제점을 발견했다. ![](2020-09-01-22-36-45.png)
fn 왼쪽의 값들이 index인데 이것을 리스트로 만들어서 for문을 돌려 이 인덱스에 해당하는 fn을 training set으로 넣어줘야 하는데 df의 0~409까지의 index를 training set에 나머지를 valid set에 넣었다. 실수 조심해라 제발


---
https://discuss.pytorch.org/t/add-layers-on-pretrained-model/88760/3 [pretrained model에 원하는 layer adding]

https://www.deeplearning.ai/ai-notes/initialization/ [parameter initialization이 왜 필요한가?]
Binary file added 2020-08-20-22-10-00.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added 2020-08-24-13-02-13.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added 2020-08-28-14-14-26.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added 2020-08-29-18-53-18.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added 2020-08-31-16-27-23.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added 2020-09-01-22-36-45.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
22 changes: 21 additions & 1 deletion rsnote/200817.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,4 +41,24 @@
![](2020-08-16-23-04-13.png)![](2020-08-16-23-04-47.png)

---
[Dataloader의 num_workers blog](https://jybaek.tistory.com/799)
[Dataloader의 num_workers blog](https://jybaek.tistory.com/799)

# 20.08.19

## LAB MEETING

- sex classification에 대해서 비율 굉장히 중요!

- 모델 훈련할 때와 validation set에서도 남녀비율이 맞아야 한다. 확인이 필요하다!

- GAP(global adaptive pooling) : 각 채널별로 pixel의 average를 구해서 하나의 value로 저장함.(마치 신호및시스템의 한 주기의 신호들을 E로 정리하는 것처럼)

- inception, resnet 등 transformation같은 역할 -> squeeze -> excitation -> scale

- neural network에서 각 클래스별 활성화되는 channel이 다르도록 hyperparameter tuning? = 뇌가 청각, 시각, 등등을 발달시킬 때 활성화시키는 부분이 각각 다르기 때문

- 실제 병원 데이터셋으로 모델돌려보기 시이작!

- parameter를 시각화시켜보기 = 불필요한 parameter 제거하기 위함, class activation map =CAM 실행!!!

- SE block = 네트워크 어느 곳이라도 바로 붙일 수 있음. 파라미터 증가량에 비해 모델 향상도 높아짐, 구조 간단함.
Binary file added rsnote/2020-08-10-22-00-40.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 5a438a0

Please sign in to comment.