For Beginners

aod-net 사용하는 방법 정리해두기 본문

2021 이전 자료들/AI

aod-net 사용하는 방법 정리해두기

.log 2019. 3. 27. 19:43
728x90

일단 git에 들어가서 clone을 한다.

https://github.com/weber0522bb/AODnet-by-pytorch

 

weber0522bb/AODnet-by-pytorch

Image Dehaze, Pytorch, An All-in-One Network for Dehazing, AOD-Net - weber0522bb/AODnet-by-pytorch

github.com

사이트는 여기다.

 

그리고 

내기준/ 코드다.

1. 먼저 아나콘다 설정한 곳에 아래의 코드를 넣는다.

python create_train.py --nyu C:\Users\Yejin\Desktop\testing\AODnet-by-pytorch --dataset C:\Users\Yejin\Desktop\testing\AODnet-by-pytorch\datasets\trainset

 

 

근데 위 코드를 넣으면 에러가 난다.

그러면 에러가 나는 줄의 require를 required라고 고치면 된다.

 parser.add_argument('--dataset', type=str, require=True, help='path to  synthesized hazy images dataset store')

요 내용을 

 parser.add_argument('--dataset', type=str, required=True, help='path to  synthesized hazy images dataset store')

이렇게 고치면 된다.

 

일단 이 코드를 실행하고 나면 training을 위한 데이터 셋을 이미지 형태로 다 변환해놓는다.

 

 

아래 요거는 안해도 된다 랜덤 셀렉이 안된다.

python random_select.py --trainroot C:\Users\Yejin\Desktop\testing\AODnet-by-pytorch\datasets\trainset --valroot C:\Users\Yejin\Desktop\testing\AODnet-by-pytorch\datasets\valset

 

실행하게 되면

Traceback (most recent call last):
  File "random_select.py", line 18, in 
    a = random.choice(os.listdir(train))
  File "C:\ProgramData\Anaconda3\lib\random.py", line 260, in choice
    raise IndexError('Cannot choose from an empty sequence') from None
IndexError: Cannot choose from an empty sequence

 

이런 에러와 함께 기존에 training된 자료들은 날라가고 valset으로 옮겨지므로 매우 귀찮은 작업이 되니까 굳이 안하는 것을 권함

 

그 다음에 경로를 train.py 있는 곳으로 바꾸어준다.

cd ..

python train.py --dataroot C:\Users\Yejin\Desktop\testing\AODnet-by-pytorch\datasets\trainset --valDataroot C:\Users\Yejin\Desktop\testing\AODnet-by-pytorch\datasets\valset --cuda

 

그렇게 되면 이런 식으로 된다.

Random Seed:  7520
Traceback (most recent call last):
  File "train.py", line 77, in 
    seed=args.manualSeed)
  File "train.py", line 67, in getLoader
    num_workers=int(workers))
  File "C:\ProgramData\Anaconda3\lib\site-packages\torch\utils\data\dataloader.py", line 802, in __init__
    sampler = RandomSampler(dataset)
  File "C:\ProgramData\Anaconda3\lib\site-packages\torch\utils\data\sampler.py", line 64, in __init__
    "value, but got num_samples={}".format(self.num_samples))
ValueError: num_samples should be a positive integeral value, but got num_samples=0

 

일단 로딩은 잘 된다. 

근데 코드 상의 샘플 넘버링이 잘 안된 것인가 일단은 num_sample에 대한 디버깅을 해보아야 할 것 같다.

일단은 내 생각인데, 기존에 valset validation 에러가 났기 때문에 잘 되지 않는 것 같다.

 

그래서 코드를 한번 들여다보려한다.

import argparse
import os
import random
import shutil

parser = argparse.ArgumentParser()
parser.add_argument('--trainroot', type=str, required=True, help='path to train directory')
parser.add_argument('--valroot', type=str, required=True, help='path to validation directory')
args = parser.parse_args()
print(args)

train = args.trainroot
val = args.valroot

if not os.path.exists(val):
    os.makedirs(val)
for i in range(3169):
    a = random.choice(os.listdir(train))
    shutil.move((train+'/'+a), (val+'/'+a))

일단은 기존 random_select 코드의 경우는 다음과 같았다.

근데 문제는 random.choice 이 부분이 잘 먹지 않는다는 것이다.

그래서 코드를 뜯어봤다.

근데 보니까 애초에 training set자체의 값이 3169를 넘지 않는데 그거를 넘는다고 생각을 해서 그런 것 같다.

그래서 일단은 trainset을 만드는 과정을 여러번 해보면서 왜 개수가 적게 나오는지를 확인하는 것이 급선무인 것 같다.

 

홈 아무래도 드라이브상의 메모리 문제인듯하다. 그래서 이따가 d드라이브에서 다시 돌려보려구 한다.

 

 

 

Comments