Skip to content

Commit 8e29a64

Browse files
committed
Initial commit.
Initial commit.
0 parents  commit 8e29a64

32 files changed

+56310
-0
lines changed

BRDFNet/BRDFNetTraining.py

Lines changed: 1014 additions & 0 deletions
Large diffs are not rendered by default.

BRDFNet/BRDF_Net_Config.ini

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
[device]
2+
randomSeed = 23333
3+
4+
[solver]
5+
SolverType = Adam
6+
7+
;learning rate
8+
lr = 0.001
9+
momentum = 0.9
10+
lrDecay = 0.0001
11+
batchSize = 64
12+
weightDecay = 0
13+
14+
[stopping]
15+
;enter -1 to disable certain stopping critiria
16+
nMaxEpoch = -1
17+
nMaxIter = 250000
18+
19+
[loop]
20+
;self-augment on/off
21+
renderLoop = 1
22+
23+
;automatic compute ratio between labeled data/unlabeled data usage
24+
autoLoopRatio = 0
25+
26+
;or manually set the ratio
27+
normalBatchLength = 1
28+
loopBatchLength = 3
29+
30+
;how many iter/epoch before self-augment
31+
loopStartEpoch = -1
32+
loopStartIteration = 20000
33+
34+
[network]
35+
NetworkType = Ratio
36+
Channal = Full
37+
BN = 1
38+
color = 0
39+
40+
[dataset]
41+
NormalizeInput = 0
42+
dataset = /media/v-xil/New Volume/BRDF_envlight_CUDA/train_envlight/train_full.txt
43+
unlabelDataset = /media/v-xil/New Volume/BRDF_envlight_CUDA/train_envlight/train_full.txt
44+
testDataset = /media/v-xil/New Volume/BRDF_envlight_CUDA/test_envlight/test_full.txt
45+
46+
;use of labeled data - defualt are corner data only
47+
;rest are left as unlabeled data
48+
albedoRange = 0,9
49+
specRange = 0,9
50+
roughnessRange = 0,14
51+
52+
unlabellightfile = lvlist_1.txt
53+
unlabellightcondition = 0
54+
55+
;test data, deafult is test on full test set
56+
testalbedoRange = 0,1,2,3,4,5,6,7,8
57+
testspecRange = 0,1,2,3,4,5,6,7,8
58+
testroughnessRange = 0,1,2,3,4,5,6,7,8,9,10,11,12,13
59+
60+
;deprecated
61+
thetaRange = 0,1,2,3,4,5,6,7,8,9,10
62+
phiRange = 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14
63+
envLighting = 1
64+
65+
[display]
66+
displayStep = 1000
67+
loopdisplayStep = 500
68+
checkpointStepIteration = 20000
69+
checkpointStepEpoch = -1

BRDFNet/RenderBRDFNetData.py

Lines changed: 170 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,170 @@
1+
import sys, os
2+
working_path = os.path.dirname(os.path.realpath(__file__))
3+
root_path = os.path.dirname(working_path)
4+
sys.path.append(root_path + r'/Render')
5+
sys.path.append(root_path + r'/Utils')
6+
import numpy as np
7+
import math
8+
from utils import load_pfm, save_pfm, pfmFromBuffer, pfmToBuffer, make_dir, toLDR
9+
from operator import itemgetter
10+
import caffe
11+
12+
from FastRendererCUDA import FastRenderEngine
13+
14+
params = {}
15+
os.chdir(working_path)
16+
17+
#dense sampled dataset, single channal
18+
albedoCnt = 10
19+
specCnt = 10
20+
roughnessCnt = 15
21+
thetaCnt = 15
22+
phiCnt = 15
23+
24+
RenderOutput = r''
25+
26+
with open('folderPath.txt', 'r') as f:
27+
params['geometryPath'] = r'../Render/sphere.obj'
28+
params['scriptRoot'] = r'../Utils'
29+
params['outFolder'] = f.readline().strip()
30+
params['envMapFolder'] = f.readline().strip()
31+
32+
def idToBRDFid(id, aCnt, sCnt, rCnt):
33+
aCnt = 10
34+
sCnt = 10
35+
rCnt = 15
36+
37+
aid = id / (sCnt * rCnt)
38+
sid = (id % (sCnt * rCnt)) / rCnt
39+
rid = id - aid * (sCnt * rCnt) - sid * rCnt
40+
41+
return aid, sid, rid
42+
43+
def sampleCube(aid_list, sid_list, rid_list, full_list, dataset_name):
44+
out_list = []
45+
for a in aid_list:
46+
for s in sid_list:
47+
for r in rid_list:
48+
for tid in range(0, thetaCnt):
49+
for pid in range(0, phiCnt):
50+
out_list.append('{}_{}_{}_{}_{}'.format(a, s, r, tid, pid))
51+
unlabel_list = list(set(full_list) - set(out_list))
52+
with open(RenderOutput + r'/train/train_{}.txt'.format(dataset_name), 'w') as f:
53+
for x in out_list:
54+
f.write(x)
55+
f.write('\n')
56+
57+
with open(RenderOutput + r'/train/train_unlabel_{}.txt'.format(dataset_name), 'w') as f:
58+
for x in unlabel_list:
59+
f.write(x)
60+
f.write('\n')
61+
62+
def getLightTransList(numX, numY):
63+
lightList = []
64+
angleXList = []
65+
angleYList = []
66+
# np.random.seed(23333)
67+
for i in range(0, numX):
68+
for j in range(0, numY):
69+
angleY = np.random.uniform(0.0, 360.0)
70+
angleX = np.random.uniform(-30.0, 10.0)
71+
lightList.append('r,0,1,0,{}/r,1,0,0,{}/end'.format(angleY, angleX))
72+
angleXList.append(angleX)
73+
angleYList.append(angleY)
74+
return lightList, angleXList, angleYList
75+
76+
77+
if __name__ == '__main__':
78+
gpuid = int(sys.argv[1])
79+
out_root = sys.argv[2]
80+
81+
make_dir(out_root + r'/train_envlight')
82+
make_dir(out_root + r'/test_envlight')
83+
84+
trainAlbedo = np.linspace(0.05, 1.0, albedoCnt)
85+
trainSpec = np.linspace(0.05, 1.0, specCnt)
86+
trainRoughness = np.exp(np.linspace(math.log(0.02), math.log(1.0), roughnessCnt))
87+
88+
testAlbedo = np.linspace(0.1, 0.95, albedoCnt - 1)
89+
testSpec = np.linspace(0.1, 0.95, specCnt - 1)
90+
testRoughness = np.exp(np.linspace(math.log(0.03), math.log(0.87), roughnessCnt - 1))
91+
92+
imageCnt = albedoCnt*specCnt*roughnessCnt*thetaCnt*phiCnt
93+
94+
envMapFolder = params['envMapFolder']
95+
with open(envMapFolder + '/light.txt', 'r') as f:
96+
lightID = map(int, f.read().strip().split('\n'))
97+
lightID = list(np.array(lightID) - 1)
98+
99+
np.random.seed(gpuid)
100+
OnlineRender = FastRenderEngine(gpuid)
101+
OnlineRender.SetGeometry('Sphere')
102+
OnlineRender.PreLoadAllLight(r'{}/light.txt'.format(envMapFolder))
103+
104+
fovRadian = 60.0 / 180.0 * math.pi
105+
cameraDist = 1.5 / (math.tan(fovRadian / 2.0))
106+
OnlineRender.SetCamera(0, 0, cameraDist, 0, 0, 0, 0, 1, 0, fovRadian, 0.01, 100, 128, 128)
107+
OnlineRender.SetSampleCount(128, 1024)
108+
OnlineRender.SetRenderMode(0)
109+
110+
albedoCnt = len(trainAlbedo)
111+
specCnt = len(trainSpec)
112+
roughnessCnt = len(trainRoughness)
113+
trainCube = np.zeros((albedoCnt, specCnt, roughnessCnt, 3))
114+
testCube = np.zeros((albedoCnt-1, specCnt-1, roughnessCnt-1, 3))
115+
116+
print('Rendering Training data...\n')
117+
ftrain = open(out_root + r'/train_envlight/train_full.txt', 'w')
118+
for aid, a in enumerate(trainAlbedo):
119+
for sid, s in enumerate(trainSpec):
120+
for rid, r in enumerate(trainRoughness):
121+
lightMatrix = np.zeros((len(lightID), 9, 2))
122+
print('...{}_{}_{}\n'.format(aid, sid, rid))
123+
124+
trainCube[aid,sid,rid] = [a,s,r]
125+
brdfFolder = out_root + r'/train_envlight/{}_{}_{}'.format(aid, sid, rid)
126+
make_dir(brdfFolder)
127+
128+
OnlineRender.SetAlbedoValue([a, a, a])
129+
OnlineRender.SetSpecValue([s, s, s])
130+
OnlineRender.SetRoughnessValue(r)
131+
132+
for lid, l in enumerate(lightID):
133+
OnlineRender.SetEnvLightByID(l+1)
134+
lightView, lightX, lightY = getLightTransList(3, 3)
135+
for vid, v in enumerate(lightView):
136+
OnlineRender.SetLightXform(lightX[vid], lightY[vid])
137+
img = OnlineRender.Render()
138+
save_pfm(brdfFolder + r'/{}_{}.pfm'.format(lid, vid), img)
139+
ftrain.write('{}_{}_{}_{}_{}\n'.format(aid, sid, rid, lid, vid))
140+
lightMatrix[lid, vid, 0] = lightX[vid]
141+
lightMatrix[lid, vid, 1] = lightY[vid]
142+
143+
np.savetxt(out_root + r'/train_envlight/lightMatrix_{}_{}_{}.txt'.format(aid, sid, rid), lightMatrix.flatten())
144+
145+
ftrain.close()
146+
np.savetxt(out_root + r'/train_envlight/brdfcube.txt', trainCube.flatten())
147+
print('Done.\n')
148+
149+
print('Rendering Test data...\n')
150+
ftest = open(out_root + r'/test_envlight/test_full.txt', 'w')
151+
for aid, a in enumerate(testAlbedo):
152+
for sid, s in enumerate(testSpec):
153+
for rid, r in enumerate(testRoughness):
154+
print('...{}_{}_{}\n'.format(aid, sid, rid))
155+
testCube[aid, sid, rid] = [a, s, r]
156+
brdfFolder = out_root + r'/test_envlight/{}_{}_{}'.format(aid, sid, rid)#+ offSetAlbedo[gpuid], sid + offSetSpec[gpuid], rid)
157+
make_dir(brdfFolder)
158+
159+
OnlineRender.SetAlbedoValue([a, a, a])
160+
OnlineRender.SetSpecValue([s, s, s])
161+
OnlineRender.SetRoughnessValue(r)
162+
163+
for lid, l in enumerate(lightID):
164+
OnlineRender.SetEnvLightByID(l+1)#(envMapFolder + r'\{:04d}.pfm'.format(l+1), '')
165+
img = OnlineRender.Render()
166+
save_pfm(brdfFolder + r'/{}_{}.pfm'.format(lid, 0), img)
167+
ftest.write('{}_{}_{}_{}_{}\n'.format(aid, sid, rid, lid, 0))
168+
169+
ftest.close()
170+
np.savetxt(out_root + r'/test_envlight/brdfcube.txt', testCube.flatten())

0 commit comments

Comments
 (0)