- Notifications
You must be signed in to change notification settings - Fork47
huangkuns/wireframe
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Folder/file | Description |
---|---|
junc | For training junction detector. |
linepx | For training straight line pixel detector. |
wireframe.py | Generate line segments/wireframe from predicted junctions and line pixels. |
evaluation | Evaluation of junctions and wireframes. |
- python3
- pytorch==0.3.1
- opencv==3.3.1
- scipy, numpy, progress, protobuf
- joblib (for parallel processing data.)
- tqdm
- [optional] dominate
The code is written and tested inpython3
, please install all requirements in python3.
Download the training data.
put training data indata/ and test annotation in put it inevaluation/wireframe/,
unzip v1.1.zip unzip pointlines.zip unzip linemat.zip
Data Structure
Each .pkl file contains the annotated wireframe of an image, and it consists of the following variables:*.pkl|-- imagename: the name of the image|-- img: the image data|-- points: theset of pointsin the wireframe, each point is represented by its (x,y)-coordinatesin the image|-- lines: theset of linesin the wireframe, each line is represented by the indices of its two end-points|-- pointlines: theset of associated lines of each point|-- pointlines_index: line indexes of linesin'pointlines'|-- junction: the junction locations, derived from the'points' and'lines'|-- theta: the angle values of branches of each junction
visualizing the wireframe.
After loading the .pkl file, you can run something like the following in Python to visualize the wireframe:foridx, (i,j)inenumerate(lines,start=0):x1,y1=points[i]x2,y2=points[j]cv2.line(im, (int(x1),int(y1)), (int(x2),int(y2)), (0,255,0),2,cv2.LINE_8)
Preprocess data.
cd juncpython3 main.py --create_dataset --exp 1 --jsoncd linepxpython3 main.py --genLine
Note:--json
means you put the hype-parameters injunc/hypes/1.json.
train junction detector.
cd juncpython3 main.py --exp 1 --json --gpu 0 --balance
train line pixel detecor.
cd linepxpython3 main.py --netType stackedHGB --GPUs 0 --LR 0.001 --batchSize 4
- Test junction detector.
cd juncpython3 main.py --exp 1 --json --test --checkepoch 16 --gpu 0 --balance
- Test line pixel detector.
cd linepxpython3 main.py --netType stackedHGB --GPUs 0 --LR 0.001 --testOnly t
- Combine junction and line pixel prediction.
python wireframe.py
The code for evaluation is put inevaluation/junc andevaluation/wireframe.Expected junction and wireframe precision/recall curve is like
For visualizing the result, we recommend generating an html file usingdominate tovisualize the result of different methods in columns.
@InProceedings{wireframe_cvpr18,author = {Kun Huang and Yifan Wang and Zihan Zhou and Tianjiao Ding and Shenghua Gao and Yi Ma},title = {Learning to Parse Wireframes in Images of Man-Made Environments},booktitle = {CVPR},month = {June},year = {2018}}
You can use this code/dataset for your research and other usages, following MIT License.