RadioUnet
Related Links
Architecture
RadioUnet exhibits two U-shaped structures, as shown below
Scroll wheel to zoom / Left-click to drag
Main Convolutional Blocks
The model uses several different convolutional blocks; three representative blocks are given as examples here.
We assume the input channels are 2 (build + transmitter).
Maintain Resolution, Increase Channels
Representative layer: layer00, layer10, layer20, Wlayer00, Wlayer10, Wlayer20
Scroll wheel to zoom / Left-click to drag
Maintain Resolution, Decrease Channels
Representative layer: conv_up000, conv_up00, conv_up10, conv_up20, Wconv_up000, Wconv_up00, Wconv_up10, Wconv_up20
Scroll wheel to zoom / Left-click to drag
Decrease Resolution / Downsampling, Increase Channels
Representative layer: layer0, layer1, layer2, layer3, layer4, layer5, Wlayer0, Wlayer1, Wlayer2, Wlayer3, Wlayer4, Wlayer5
Scroll wheel to zoom / Left-click to drag
Increase Resolution / Upsampling, Decrease Channels
Representative layer: conv_up0, conv_up1, conv_up2, conv_up3, conv_up4, conv_up5, Wconv_up0, Wconv_up1, Wconv_up2, Wconv_up3, Wconv_up4, Wconv_up5
Scroll wheel to zoom / Left-click to drag
Functions Related to Convolution
- convrelu: Conv2d (Increase Channels) + ReLU + MaxPool2d (Decrease Resolution)
- convreluT: ConvTranspose2d (Increase Resolution) + ReLU
We can find this two function in file lib/modules.py
Parameter Calculation Tool
When decreasing resolution/downsampling, the resolution is halved using MaxPool, while the convolutional layer maintains its resolution. The following tool can quickly calculate the kernel and padding values of the convolutional layer to ensure that the resolution remains unchanged.
| Kernel (k) | Padding (p) |
|---|---|
When Increasing resolution/upsampling, the resolution is halved using ConvolutinalTranspose. The following tool can quickly calculate the kernel and padding values of the convolutional layer to ensure that the resolution doubles.
| Kernel (k) | Padding (p) |
|---|---|
Reproduction Tips
- The
s.environ["CUDA_VISIBLE_DEVICES"]="0"label must match the label of the graphics card in the current environment. In a Linux environment, we can use "nvidia-smi" to check the NVIDIA graphics card. - Recommend to change
torch.set_default_tensor_type('torch.cuda.FloatTensor')totorch.set_default_tensor_type('torch.FloatTensor')to avoid device incompatibility issues. - Recommend to use dataset link in original paper instead of github repository.
Ideas
- Can the optimal solutions for parameters like channels, pooling, and padding be obtained through training?
RadioMapSeer
- Include 56,000 simulated radio maps in different city locations and different Tx locations with a number of versions.
- Include 1,400 high accuracy simulations, with and without cars (IRT4). They are sparse.
Directory Structure:
RadioMapSeer
├── antenna
├── gain
│ ├── DPM
│ ├── IRT2
│ ├── IRT4
│ ├── carsDPM
│ ├── carsIRT2
│ └── carsIRT4
├── png
│ ├── antennas
│ ├── buildings_complete
│ ├── buildings_missing1
│ ├── buildings_missing2
│ ├── buildings_missing3
│ ├── buildings_missing4
│ ├── buildings_removed1
│ ├── buildings_removed2
│ ├── buildings_removed3
│ ├── buildings_removed4
│ ├── cars
│ └── roads
└── polygon
├── buildings_and_cars
├── buildings_complete
├── buildings_difference1
├── buildings_difference2
├── buildings_difference3
├── buildings_difference4
├── buildings_removed1
├── buildings_removed2
├── buildings_removed3
├── buildings_removed4
└── roads
Important Directories: gain, png, this two directories have the images we need. png has the model inputs and gain has the model targets.
png/antennas: transmitter mappng/buildings_complete: complete building mappng/buildings_missing[number]: building map with [number] missing buildings, which can be used to simulate real-world measurement errors.png/buildings_removed[number]: building map containing only the removed buildings, and the files are matched with the files in the difference directory based on their names. (Not used in the original repository)png/cars: car mapgain/[cars][method]: radio map, calculated using [method], [with/without] cars, is used as targets/actually measured data/ground truth.antennaandpolygon: store the coordinates of the corresponding antenna/building/... in JSON format.buildings_difference[number]corresponds tobuildings_missing[number]
DataLoader
Related Fuctions are in 'lib/loaders.py'
Tips
- A building map may correspond to multiple transmitters, and each transmitter has its own independent target map/gain map/ground truth radio map. In IRT4, only a maximum of 2 transmitters are supported, while other types support up to 80 receivers.
- We can randomly sample the ground-truth values of a few points as input to aid training. The relevant dataloader functions are 'RadioUNet_s' and 'RadioUNet_s_sprseIRT4'.
- We can only calculate the loss at a few points to simulate a real-world scenario where we only know the ground-truth values of partial points. The relevant dataloader are "RadioUNet_c_sprseIRT4" and "RadioUNet_s_sprseIRT4".