Skip to content

Commit a253d54

Browse files
committed
updated docs
1 parent cde88df commit a253d54

File tree

7 files changed

+115
-25
lines changed

7 files changed

+115
-25
lines changed

ChangeLog.txt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,6 @@ Oct 14, 2022
22
1. generate_patches has a new parameter for output directory
33
2. default output directory now has a meaningful structure with patch sizes and step sizes
44
3. Refactored ImageGroupReader
5-
4. generate_patches normalizes the reader data once.
5+
4. generate_patches normalizes the reader data once.
6+
5. window_size -> patch_size
7+
6. step_size -> stride

README.md

Lines changed: 67 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,72 @@ Generate and load dataset of road network maps.
1313
pip install mapdatasetgenerator
1414
```
1515

16-
# Usage
16+
# Creating patches
1717
```
18-
import mapdataset
18+
# Run this script to generate data in /output directory.
19+
import logging
20+
import sys
21+
22+
root = logging.getLogger()
23+
root.setLevel(logging.INFO)
24+
25+
handler = logging.StreamHandler(sys.stdout)
26+
handler.setLevel(logging.INFO)
27+
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
28+
handler.setFormatter(formatter)
29+
root.addHandler(handler)
30+
31+
from mapdataset import ImageGroupReader, single_layer_converter, MapsDataset, MapReader
32+
33+
34+
sfMap = MapReader('./data/input/sf_layered.txt', "SF_Layered")
35+
mapsDataset = MapsDataset(
36+
patch_size=(32, 32),
37+
stride=10,
38+
sample_group_size=1280,
39+
converter=single_layer_converter,
40+
outputDir="./data/output"
41+
)
42+
43+
mapsDataset.generate_patches(sfMap) #This will generate dill files which contain the saved sample lists.
44+
45+
```
46+
47+
# Reading patches
48+
1949
```
50+
# Script to read dill data objects as numpy arrays.
51+
from PIL import Image
52+
import os
53+
import sys
54+
import logging
55+
56+
root = logging.getLogger()
57+
root.setLevel(logging.INFO)
58+
59+
handler = logging.StreamHandler(sys.stdout)
60+
handler.setLevel(logging.INFO)
61+
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
62+
handler.setFormatter(formatter)
63+
root.addHandler(handler)
64+
65+
from mapdataset import ImageGroupReader, single_layer_converter, MapsDataset, MapReader
66+
67+
68+
69+
dillFolder = "./data/output/SF_Layered/32x32/stride-10"
70+
nGroups = 0
71+
# Iterate directory
72+
for path in os.listdir(dillFolder):
73+
# check if current path is a file
74+
if os.path.isfile(os.path.join(dillFolder, path)) and path.endswith(".dill"):
75+
nGroups += 1
76+
77+
for i in range(nGroups):
78+
reader = ImageGroupReader(dillFolder)
79+
data = reader.load_group(groupNo=i)
80+
patchImgArray = reader.asImg(data[0])
81+
im = Image.fromarray(patchImgArray)
82+
path = os.path.join(dillFolder, f"{i}-0.png")
83+
im.save(path)
84+
```

src/mapdataset/lib/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1-
from .ImageGroupReader import ImageGroupReader
1+
from .ImageGroupReader import ImageGroupReader
2+
from .maps import *

src/mapdataset/maps.py renamed to src/mapdataset/lib/maps.py

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -53,15 +53,15 @@ def get_char(self, layer):
5353
# Modifications - Ishaan, Muktadir
5454

5555
class MapsDataset(Dataset):
56-
def __init__(self, window_size, step_size, sample_group_size, converter, outputDir="../data/output"):
56+
def __init__(self, patch_size, stride, sample_group_size, converter, outputDir="../data/output"):
5757
self.outputDir = outputDir
5858
self.char_size = converter.char_size
5959
self.converter = converter
60-
self.window_size = window_size
61-
self.step_size = step_size
60+
self.patch_size = patch_size
61+
self.stride = stride
6262
self.sample_group_size = sample_group_size
6363
self.samples = []
64-
self.block_size = self.window_size[0] * self.window_size[1] - 1
64+
self.block_size = self.patch_size[0] * self.patch_size[1] - 1
6565

6666
os.makedirs(self.outputDir, exist_ok=True)
6767

@@ -79,12 +79,12 @@ def __getitem__(self, idx):
7979
#return flat
8080

8181
def add(self, mapReader):
82-
for i in range(0, mapReader.size[0] - self.window_size[0] + 1, self.step_size):
83-
for j in range(0, mapReader.size[1] - self.window_size[1] + 1, self.step_size):
82+
for i in range(0, mapReader.size[0] - self.patch_size[0] + 1, self.stride):
83+
for j in range(0, mapReader.size[1] - self.patch_size[1] + 1, self.stride):
8484
self.samples.append([[
8585
(self.converter.get_char(mapReader.data[i + x][j + y]) / (len(self.converter.char_groups) - 1)) * -2 + 1
86-
for y in range(self.window_size[1])]
87-
for x in range(self.window_size[0])])
86+
for y in range(self.patch_size[1])]
87+
for x in range(self.patch_size[0])])
8888

8989
#Generate image patches and write to data/output directory
9090
def generate_patches(self, mapReader, image_groups=3, outDirectory=None):
@@ -98,12 +98,12 @@ def generate_patches(self, mapReader, image_groups=3, outDirectory=None):
9898
mapReader.standardize(converter=self.converter)
9999

100100
if outDirectory is None:
101-
outDirectory = os.path.join(self.outputDir, mapReader.mapName, f"{self.window_size[0]}x{self.window_size[1]}", f"stride-{self.step_size}")
101+
outDirectory = os.path.join(self.outputDir, mapReader.mapName, f"{self.patch_size[0]}x{self.patch_size[1]}", f"stride-{self.stride}")
102102
os.makedirs(outDirectory, exist_ok=True)
103103

104104
img_group_number = 0
105-
for i in range(0, mapReader.size[0] - self.window_size[0] + 1, self.step_size):
106-
for j in range(0, mapReader.size[1] - self.window_size[1] + 1, self.step_size):
105+
for i in range(0, mapReader.size[0] - self.patch_size[0] + 1, self.stride):
106+
for j in range(0, mapReader.size[1] - self.patch_size[1] + 1, self.stride):
107107

108108
sample = self.extractSample(mapReader, topLeft=(i, j))
109109

@@ -125,16 +125,16 @@ def extractSample(self, mapReader, topLeft):
125125
# sample = [
126126
# [
127127
# (self.converter.get_char(mapReader.data[i + x][j + y]) / (len(self.converter.char_groups) - 1)) * -2 + 1 # TODO this conversion should be done once in the original data instead of patches.
128-
# for y in range(self.window_size[1])
128+
# for y in range(self.patch_size[1])
129129
# ]
130-
# for x in range(self.window_size[0])
130+
# for x in range(self.patch_size[0])
131131
# ]
132132
sample = [
133133
[
134134
mapReader.data[i + x][j + y]
135-
for y in range(self.window_size[1])
135+
for y in range(self.patch_size[1])
136136
]
137-
for x in range(self.window_size[0])
137+
for x in range(self.patch_size[0])
138138
]
139139
return np.asarray(sample)
140140

@@ -143,8 +143,8 @@ def shuffle(self):
143143
random.shuffle(self.samples)
144144

145145
def get_train_test(self, train_ratio):
146-
train_dataset = MapsDataset(self.window_size, self.step_size, self.converter)
147-
test_dataset = MapsDataset(self.window_size, self.step_size, self.converter)
146+
train_dataset = MapsDataset(self.patch_size, self.stride, self.converter)
147+
test_dataset = MapsDataset(self.patch_size, self.stride, self.converter)
148148
train_size = int(len(self.samples) * train_ratio)
149149
train_dataset.samples = self.samples[:train_size]
150150
test_dataset.samples = self.samples[train_size:]
File renamed without changes.

src/mapdataset/run.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
handler.setFormatter(formatter)
1212
root.addHandler(handler)
1313

14-
import maps
14+
from lib import maps
1515

1616
sfMap = maps.MapReader('../data/input/sf_layered.txt', "SF_Layered")
1717
mapsDataset = maps.MapsDataset((32, 32), 10, 1280, maps.single_layer_converter) #Third parameter is the group size

test.py

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,32 @@
11
# Script to read dill data objects as numpy arrays.
2-
import dill
3-
import numpy as np
42
from PIL import Image
53
import os
4+
import sys
5+
import logging
66

7-
from mapdataset import ImageGroupReader
7+
root = logging.getLogger()
8+
root.setLevel(logging.INFO)
9+
10+
handler = logging.StreamHandler(sys.stdout)
11+
handler.setLevel(logging.INFO)
12+
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
13+
handler.setFormatter(formatter)
14+
root.addHandler(handler)
15+
16+
from mapdataset import ImageGroupReader, single_layer_converter, MapsDataset, MapReader
17+
18+
19+
20+
sfMap = MapReader('./data/input/sf_layered.txt', "SF_Layered")
21+
mapsDataset = MapsDataset(
22+
patch_size=(32, 32),
23+
stride=10,
24+
sample_group_size=1280,
25+
converter=single_layer_converter,
26+
outputDir="./data/output"
27+
)
28+
29+
mapsDataset.generate_patches(sfMap) #This will generate dill files which contain the saved sample lists.
830

931

1032
dillFolder = "./data/output/SF_Layered/32x32/stride-10"

0 commit comments

Comments
 (0)