구글 원격에서 클립보드 설정하는 방법.

 

원격으로 작업하는 컴퓨터에서(원격을 하는말고 원격을 당하는? 컴퓨터)

작업관리자에서 RDP 클립보드 모니터라는 것이 켜져있는지 확인해야 한다.

 

RDP 클립보드 모니터가 켜져있는데도 안되면 RDP 클립보드 모니터를

다시 종료했다가 다시 실행해야 한다.

 

새 작업 실행을 누르고

 

 

이렇게 rdpclip 입력해주면 RDP 클립보드 모니터가 재실행된다.

그러면 원격에서 클립보드를 연동해줄 수 있다.

 

 

  👉 참고

  구글 원격으로 수행하는 경우,

  클립보드의 경우 글씨만 복사되고, 이미지는 복사되지 않는다.

  고용량의 텍스트의 경우도 복사가 되지 않는 것으로 보아,

  클립보드에 큰 값을 저장하여 이동시키는 기능을 넣지 않은 것으로 판단된다.

 

  

 

그리고 원격으로 진행하는 도중에 원격 컴퓨터에서 글자가 여러차례 입력되는 경우가 있는데,

이 경우에는 원격 컴퓨터의 원격 연결을 한번 새로고침하거나 원격 연결을 해제했다가 다시 연결하면 정상 동작한다.

해당 내용은 아래 링크에서 확인할 수 있다.

library.konkuk.ac.kr/#/service/thesis

 

건국대학교 상허기념도서관

 

library.konkuk.ac.kr

 

건국대 학위 논문 관련하여 작성 양식이나 다른 서류들은

따로 고지가 되어 메일이 와서 안내를 받거나, 찾기가 쉬운 편이지만,

저작권 동의서와 학위 책자 제출 관련해서는 그냥 도서관 링크로 연결되는 것을 확인하였다.

 

다른 분들이 해당 정보를 바로 얻기가 어렵다고 판단하여 여기 블로그에 적어두겠다.

 

 

피곤하지만, 졸업을 위해 마지막 스퍼트.

먼저 아래 사이트에 자세히 나와있다.

 

stackoverflow.com/questions/15345790/scipy-misc-module-has-no-attribute-imread

 

버전이 1.2.0이상인 경우, imread가 동작하지 않는다고 한다.

 

그래서 나는 그냥 이렇게 해주었다.

다른 방법들도 있는데, 나중에 문제 생기면 가상환경상에서 scipy 버전 업그레이드하면 되니까.

pip install scipy==1.1.0

 

참고로 해당 방법은 관리자권한으로 실행을 해야 가능하다.

 

+ 사실 이 방법은 귀찮아서 이렇게 한 것이고

scipy도 imageio인가 변경된 라이브러리를 새로 이용하는 것을 권장한다고 나온다.

 

h5py 라는 확장자를 사용하기 위해서 코드를 쓸 일이 있었는데,

다음과 같은 에러가 발생.

 

 

NameError: name 'h5py' is not defined


맨 위쪽에 import 부에서 해당 코드를 넣으면 된다.

 

import h5py
(필요 시에 추가할 코드: import numpy as np)

 

이렇게 하면 에러가 해결된다.

아래는 내가 해결한 코드로 수행한 결과이다.

 

나중에 내가 참고를 하기 위해, 해당 코드를 넣어두겠다.

 

from os import listdir
from os.path import splitext
import h5py
import numpy as np 

def convert_file(input_dir, filename, output_dir):
    filepath = input_dir + '/' + filename
    fin = open(filepath, 'rb')
    binary_data = fin.read()
    new_filepath = output_dir + '/' + filename[:-4] + '.hdf5'
    f = h5py.File(new_filepath)
    dt = h5py.special_dtype(vlen=np.dtype('uint8'))
    dset = f.create_dataset('binary_data', (100, ), dtype=dt)
    dset[0] = np.fromstring(binary_data, dtype='uint8')


for file in listdir('./data/'):
	filename, extension = splitext(file)
	convert_file('./data', file, './data2')

 

코드는 해당 사이트에서 참고하여 만들었다.

stackoverflow.com/questions/28170623/how-to-read-hdf5-files-in-python

1. 트레이닝된 결과들을 보았는데 이전 실험에 비해서 성능이 떨어졌다는 것을 육안으로도 확인할 수 있었다.

2. 원인파악을 해보았는데, 텐서를 normallize 하는 과정에서 텐서의 차원을 한 차원 낮게 설정하는 메서드를 이용한 것같다.

3. 메서드 상에서 확장하여 재트레이닝을 수행중인데, 확장차원이 맞다면 1번 실험과 다른 결과가 나올 것이다.

 

proposed2 방법이 망한 방법이고

proposed3 방법이 이번에 시도하는 방법이다. 

해결 방법을 찾는 동시에 글을 쓰는 이 상황.

졸업 논문을 아직도 서론까지밖에 못썼는데

일주일 안으로 이 컴퓨터를 고쳐서 논문과 함께 실험을 더 할 수 있을지 모르겠다.

 

뭐 여튼 시간을 아끼면 어떻게든 되겠지.

 nvidia smi로 확인해본 결과 GPU있는데

왜 자꾸 아무것도 못하는지 이해가 안감.

보니까 GPU로 아예 안돌아간다는 것을 확인.

 

아나콘다 문제일 수도 있어서(아나콘다를 깐 시점이 저번 GPU 때니까)

아나콘다를 삭제해보기로 함.

 

아나콘다 삭제했고 repo.anaconda.com/archive/Anaconda3-2020.02-Windows-x86_64.exe 이거 다시 깔음.

그리고 환경변수 cuda랑 아나콘다에 맞게 다시 셋팅해준다.

 

그러면 다시 재부팅하겠다.

아나콘다는 이제 인식이 잘 된다.

그럼 기존에 있던 가상환경 폴더를 들어가보겠다.

그냥 activate ntire라고 치면 되나보다.

 

그러면 이제 환경을 확인해보겠다.

cuda가 달라졌으니, 이거는 다르게 설정해주어야 할것같아서 다시 재설치.
가상환경도 다시 셋팅해주기 위해서

base 제외 기존 가상환경 모두 삭제.

 

가상환경 다시 만들기.

 

그리고 pytorch 랑 기타 설정사항 설치하기

conda install pytorch==1.0.1 torchvision==0.2.2 cudatoolkit=9.0 -c pytorch

나는 이거 입력해줌.

그리고 다른 부분들은 저자의 requirement 문서를 이용해서 다운로드 받음.

C가 cpu 의 C가 아니라 computing 의 C라는 것을 알았다.

이게 원래 이정도 드는 거라는걸 알게 되었다.

 

저번에 했던 에러 캡쳐화면이 없는데, 이게 돌아가고 있는거란다.

이게 RTX 3090의 위력인가..

아니 성능 개선을 어떻게 하면

내가 돌아가는지 안돌아가는지도 모르게 느껴짐,..

 

아 물론 지금 에포크가 하나도 출력되었다고 안뜨고 그냥 돌기만 해서..

그렇게 느껴진 것같기도하고...

여튼 뭔가 출력된다면 더 정리하겠다.

 

 

원인을 알았다.
CUDA 10에서는 해당 gpu가 작동하지 않는다.

그래서 CUDA 11로 바꾼 결과, 트레이닝이 돌아간다는 것을 확인하였고,

트레이닝 중간에 파워서플라이(750W)도 부족하여 컴퓨터가 꺼지는 것을 확인하였다.

그래서 트레이닝 돌아가도록 파워를 오늘내로 바꾸기로 하였다.

이거는 큰 글씨로 쓰고 싶으니까 큰 글씨로 쓰겠다.

나는 하드웨어 잘 모른다.

근데 오늘 고치면서 진짜 하드웨어 50퍼 알던 걸 70 퍼 정도 알게되었다.

(파워 서플라이 부분은 보드랑 GPU 한정 조립할 수 있게 됨)

 

오늘 상황 요약

1. GPU를 변경하려는데, 업체 분이 출장으로 와주셔서 교체하기로 함. 핀이 맞지 않는 상황에서 핀을 일부만이라도 꽂고 구동이 되냐고 여쭤보고 구동하려는 데 갑자기 컴퓨터가 펑하고 터짐. 전압이 맞지 않는 상황에서 강제로 기기를 구동하면 망한다는 사례를 눈앞의 폭죽으로 직접 느낌.

 

2. 파워가 고장난 것으로 판명. 컴퓨터를 고치려고 택시타고 업체가서 파워 변경, 다른 부품 이상 없는지 확인. 다행히 이상 없음. 파워 값만 받고 고쳐주심(솔직히 파워 터져버린 시점에서 나몰라라 하실까봐 너무 걱정되었는데 학교와 오래 일하셨는지 정말 친절하게도 커피도 사주시고 택시비도 내주심. 나중에 내 컴퓨터도 여기서 바꿀까 싶을 정도로 일일이 확인해주시고, 요금도 받지 않으시다니, 직접 들고 이동하는 것만 아니었다면 정말 완벽했을 정도로 서비스가 좋았다..)

 

3. 조립 완료하고 택시타고 다시 학교로 돌아와서 컴을 다시 연결

(무거운거 들어서 그런지 손이 지금도 덜덜 떨림. 하지만 나는 평소에 그정도 무게를 가방으로 들고다니는 강한 여자이기 때문에 그냥 헬스했다고 생각하기로 함)

 

4. 컴을 연결했는데 모니터가 안나와서 확인해보니 GPU 에 연결한 것이 아니라 ROM 쪽 보드에 연결해서 안나옴(바보)

 

5. 트레이닝을 하려는데 gpu 바꾸면 CUDA를 다시 설치해야 하는지 트레이닝이 안됨 그래서 CUDA 제어판 들어가서 다 지우고 C 드라이브에 가서 GPU TOOLKIT 라고 되어 있던거 삭제하고 다시 깔음

developer.nvidia.com/cuda-90-download-archive?target_os=Windows&target_arch=x86_64&target_version=10&target_type=exenetwork

여기 들어가서 이거 다시 깔음.

 

6. 그리고 cudnn 을 버전에 맞는 최신껄로 설치함

developer.nvidia.com/compute/machine-learning/cudnn/secure/7.6.5.32/Production/9.0_20191031/cudnn-9.0-windows10-x64-v7.6.5.32.zip 링크 여기

지금 컴퓨터 들고왔더니 캡쳐하고 글쓸 마음이 안들어서 일단 일대기 쓰고 정리만 하기로 함.

솔직히 말하면 썰 푸는거를 글로 쓰는거는 되게 심적으로 안정되는데

지금 이거 실험 다시 하는거 여기다 적을 생각하니까 조금 슬퍼져서 못쓰겠음.

 

7. 그리고 재부팅함. 그래도 GPU가 작동 안 함.

이 이후의 글은 에러로 판별하고, 에러 관련 글에 작성하도록 하겠다.

 

문제 상황

ntire 가상환경에서 test.py를 구동하려는 시도중이었다.

python test.py ./configs/test/test_ntire.json ./wgts/full-ntire/DUAL_8.ckpt

이렇게 테스트를 시도해보자.

 

학습된 weight 파일의 경로는 다음과 같다.

 

그런데 다음과 같은 에러가 발생했다.

RuntimeError: Error(s) in loading state_dict for DataParallel: 
Missing key(s) in state_dict: "module.trans.in_block.0.weight".....

 

해결을 위한 시도

DataParallel이란 내용은 GPU를 두 개 이상 이용할 경우에 사용하는 것이기 때문에, 하나만 사용하는 경우

DataParallel이라는 코드 부분을 지워주면 된다.

나의 경우, 

위와 같이 nn.DataParallel이라는 부분을 test.py 코드에서 지워주었더니 정상 동작하였다.

👇 여기서부터는 해결을 위해 삽질한 부분 👇

(필요하신 분들만 참고하세요. 아래 내용으로는 해결이 되지 않았습니다.)

 

파일을 불러올 때, 원하는 부분이 없는 파일이었기 때문에, 이런 에러가 발생한 것이라고 생각하여, 경로명을 다르게 설정해보기로 했다.

경로 상에 보니까 json file 이 같이 저장되는 것으로 보아, 해당 json 파일로 경로를 변경해주었을 때, 어떤 결과를 내는 지 확인해보기로 했다.

python test.py ./wgts/full-ntire/DUAL_8.json ./wgts/full-ntire/DUAL_8.ckpt

그랬더니 다음과 같은 에러가 발생했다.

  File "test.py", line 21, in <module>
    if not os.path.isdir(opt['results_path']):
KeyError: 'results_path'

기존 코드에서는 다음과 같은 에러는 없었기 때문에, 기존 json 파일의 양식과 다른 점이 있는지를 파악해보았다.

 

매우 다르다는 것을 확인했고, 처음에 작성했던 코드가 더 맞다는 것을 알았다.

is_train 이 1로 설정되어야 한다는 생각이 들었다.

 

하지만 파라미터를 1로 바꾸어도 같은 결과가 발생하였다.

아무래도 트레이닝이 다 되지 않은 상황에서 중단한 중간값을 결과로 받아들이려고 해서 이런 문제가 생기는 것 같아,

다시 파라미터를 학습해서 시도해보기로 했다.

 

그래서 다시 학습을 해서  파라미터를 입력했는데 같은 에러가 발생했다.

 

그래서 학습상의 문제는 아니라고 판단하고, 문제를 찾아보기 시작하였다.

 

nn.Parallel을 이용해서 학습한 모델이기 때문에 똑같이 test에도 Parallel을 이용해서 test를 했는데,

왜 이런 에러가 났는지 모르겠어서

사이트를 찾아보았는데, pytorch를 다운그레이드하면 구동이 된다는 사례가 있어서, 

conda install pytorch==0.4.1 cuda100 -c pytorch

를 입력해주었다.

 

 

 

그래서 이렇게 하고 다시 학습을 해주었다.

왜냐면 버전이 달라서, 학습 방법이 다르다는 의견이 있기 때문이다.

 

기존에 학습된 것들을 지우고 재학습 해보겠다.

 

참고한 사이트

github.com/DeepBaksuVision/You_Only_Look_Once/issues/63

 

데이터가 학습이 되지 않음

- 학습할 데이터의 차원을 모두 동일하게 셋팅

- 1600x1200x3으로 셋팅

- 셋팅하는 방법은 이전 게시물 참고할 것.

 

cuda 메모리 에러

- batch 수를 줄임 (하지만 batch 크기가 1이라서, 이를 해결하기 위해서는 gpu 교체가 필요함.)

- 학습할 이미지 개수/크기를 줄이는 것도 시도하였으나, 이건 메모리 에러에 큰 영향을 주지 않았음.

 

다음과 같이 학습이 된다.

ntire 경진대회를 참가하지 않았지만, 그 데이터를 이용하여 트레이닝을 해보기위해서는

제공되지 않는 transmission map과 atmospheric light를 만들어낼 필요가 있었다.

 

그래서 다른 코드를 가져와서 transmission map과 atmopheric light를 만들어 내기로 했다.

 

아래는 생성한 transmission map과 atmospheric light이다.

* atmospheric light의 경우, 2차원 bgr로 표현할 필요가 없었지만,

* 어차피 트레이닝에 들어가면서 다시 차원을 확장하는 부분이 있길래, 첨부터 이미지처럼 취급하기로 했다.

 

여기서 내가 기억해야 할 코드 부분만을 적어두도록 하겠다.

 

transmission map의 경우 단순 1600x1200인데, 그거를 3차원으로 복사하여 확장하였다.

(BGR에 대해서)

그리고 atmospheric light의 경우, 상수값을 1600x1200x3으로 확장하였다.

또한, 기존 값이 float이기 때문에 초기값을 float로 선언하여 int로 추후에 변경하는 코드를 사용하였다.

output_name_trans = './trans/'+file[:-9]+'_trans.png'
Transmap_np = np.dstack((Transmap, Transmap))
Transmap_np2 = np.dstack((Transmap_np, Transmap))
cv2.imwrite(output_name_trans, f2i(Transmap_np2))

output_name_atmos = './atmos/'+file[:-9]+'_atmos.png'
A_np = np.full((1200, 1600, 3), A[0], dtype = np.float32)
cv2.imwrite(output_name_atmos, f2i(A_np))

 

 

 

문제 상황

코드를 돌리려던 중 본 에러를 발견.

ModuleNotFoundError: No module named 'skimage'

 

해결을 위한 시도

다음 코드를 통해 skimage를 설치.

pip install scikit-image

본 코드를 통해 설치를 한 이후는 문제가 해결되었다.

 

참고한 사이트

stackoverflow.com/questions/38087558/import-error-no-module-named-skimage

requirements.txt가 존재한다고 가정.

 

문제는 requirements.txt가 온전하지 않은 경우인데, 그런 경우에는

pip install -r <설치하고 싶은 모듈 이름과 정보>

를 쓰면 된다.

 

그리고 pytorch의 경우, pip로 설치하는 것 보다는 공식 홈페이지에 가서 cuda에 맞는 걸 깔고,

없으면 wheel로 깔아야한다.

 

여러 시도 끝에 train 성공함.

 

 

해야 하는 것.

 

윈도우의 경우, 바로 setup.py를 돌리면 에러가 나기 때문에

python setup.py install

python setup.py build

를 해주어야 한다.

 

그리고 setup.py 셋팅을 다 해주면 json 에러가 나는데, 이거는 json의 경로를 위 사진처럼 써주면 된다.

python train.py <json 경로>

그냥 기억 안날까봐 정리해두는 내용.

가상환경 목록을 확인하기 위해서는 

conda info --envs

를 입력해서 확인하면 된다.

그리고 우분투에서는 conda activate 가상환경 이름으로 구동하는 것이 아니라

source activate 가상환경이름

이렇게 구동한다.

 

 

문제 상황

kitti 데이터를 가져오는데 문제 발생

FileNotFoundError: [Errno 2] No such file or directory: 'D:\\monodepth2-master\\kitti_data\\2011_10_03/2011_10_03_drive_0034_sync\\image_02/data\\0000001441.jpg'

본 문제는 아마 파일의 경로가 리눅스에서 윈도우로 바뀌면서 생기는 문제점이라고 파악됨.

보면 경로상에 슬래쉬가 반대로 되어있는 부분이 있어서, 이 부분을 통일해주어야 한다고 생각했다.

 

해결을 위한 시도

해당 코드를 이런식으로 처리해주었다.

/ ☞ \\

 

 

아까의 슬래쉬 반대로 된 것 중에 한 군데는 고쳐졌지만, 다른 한쪽은 고쳐지지 않았다는 것을 파악하였다.

'D:\\monodepth2-master\\kitti_data\\2011_09_30/2011_09_30_drive_0033_sync\\image_02\\data\\0000000393.jpg'

이 부분은 os.path.join함수로 인해서 변경되지 않는 부분이라고 생각되어, replace문을 통해 문자열 중 /를 \\로 치환하도록 하였다.

 

FileNotFoundError: [Errno 2] No such file or directory: 'D:\\monodepth2-master\\kitti_data\\2011_09_30\\2011_09_30_drive_0034_sync\\image_02\\data\\0000000552.jpg'

 

앗 그런데 이렇게 바보같을 수가 원래 파일이 없었다.

그래서 이거를 이용해서 파일을 받아주었다.

wget -i splits/kitti_archives_to_download.txt -P kitti_data/

받고 난 다음에 추가 작성하겠다.

참고한 사이트

 

ponyozzang.tistory.com/334

 

문제 상황

train 코드를 돌리기 위해 구동하는 중에, 해당 에러 발생.

ModuleNotFoundError: No module named 'IPython'

 

해결을 위한 시도

먼저 해당 모듈의 버전을 확인하였다.

ipython --version

7.13.0 버전이라고 한다.

하지만 버전은 잘 출력되었다.

그래도 pip를 이용하여 한번 더 설치를 해보겠다.

conda install -c anaconda ipython

설치를 다시 하니 버전이 7.16.1로 업그레이드되었다.

그렇게 하니까 에러가 해결되었다!

 

참고한 사이트

stackoverflow.com/questions/45179915/importerror-no-module-named-ipython