aod-net 사용하는 방법 정리해두기
일단 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드라이브에서 다시 돌려보려구 한다.