From 9b28d668c5e1e931d2542e888aa357aeae52ab3f Mon Sep 17 00:00:00 2001 From: Ahmed Al-Hindawi Date: Tue, 6 Nov 2018 11:48:10 +0000 Subject: [PATCH] Removed Hopenet files as no longer required --- rt_gene/CMakeLists.txt | 9 -- rt_gene/src/rt_gene/Hopenet.py | 174 --------------------------------- 2 files changed, 183 deletions(-) delete mode 100644 rt_gene/src/rt_gene/Hopenet.py diff --git a/rt_gene/CMakeLists.txt b/rt_gene/CMakeLists.txt index 020577d..2e9ec5f 100644 --- a/rt_gene/CMakeLists.txt +++ b/rt_gene/CMakeLists.txt @@ -29,15 +29,6 @@ catkin_download( REQUIRED ) -catkin_download( - hopenet_robust_alpha1.pkl - https://drive.google.com/uc?export=download&id=1m25PrSE7g9D2q2XJVMR6IA7RaCvWSzCR - DESTINATION ${CMAKE_CURRENT_SOURCE_DIR}/model_nets - FILENAME hopenet_robust_alpha1.pkl - MD5 54371760879af494fb18065be6021673 - REQUIRED -) - add_custom_target(download ALL DEPENDS download_extra_data) ################################################ diff --git a/rt_gene/src/rt_gene/Hopenet.py b/rt_gene/src/rt_gene/Hopenet.py deleted file mode 100644 index cfc06ba..0000000 --- a/rt_gene/src/rt_gene/Hopenet.py +++ /dev/null @@ -1,174 +0,0 @@ -# code originally from https://github.com/natanielruiz/deep-head-pose -# code licensed under Apache License 2.0 - -import torch -import torch.nn as nn -from torch.autograd import Variable -import math -import torch.nn.functional as F - -class Hopenet(nn.Module): - # Hopenet with 3 output layers for yaw, pitch and roll - # Predicts Euler angles by binning and regression with the expected value - def __init__(self, block, layers, num_bins): - self.inplanes = 64 - super(Hopenet, self).__init__() - self.conv1 = nn.Conv2d(3, 64, kernel_size=7, stride=2, padding=3, - bias=False) - self.bn1 = nn.BatchNorm2d(64) - self.relu = nn.ReLU(inplace=True) - self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1) - self.layer1 = self._make_layer(block, 64, layers[0]) - self.layer2 = self._make_layer(block, 128, layers[1], stride=2) - self.layer3 = self._make_layer(block, 256, layers[2], stride=2) - self.layer4 = self._make_layer(block, 512, layers[3], stride=2) - self.avgpool = nn.AvgPool2d(7) - self.fc_yaw = nn.Linear(512 * block.expansion, num_bins) - self.fc_pitch = nn.Linear(512 * block.expansion, num_bins) - self.fc_roll = nn.Linear(512 * block.expansion, num_bins) - - # Vestigial layer from previous experiments - self.fc_finetune = nn.Linear(512 * block.expansion + 3, 3) - - for m in self.modules(): - if isinstance(m, nn.Conv2d): - n = m.kernel_size[0] * m.kernel_size[1] * m.out_channels - m.weight.data.normal_(0, math.sqrt(2. / n)) - elif isinstance(m, nn.BatchNorm2d): - m.weight.data.fill_(1) - m.bias.data.zero_() - - def _make_layer(self, block, planes, blocks, stride=1): - downsample = None - if stride != 1 or self.inplanes != planes * block.expansion: - downsample = nn.Sequential( - nn.Conv2d(self.inplanes, planes * block.expansion, - kernel_size=1, stride=stride, bias=False), - nn.BatchNorm2d(planes * block.expansion), - ) - - layers = [] - layers.append(block(self.inplanes, planes, stride, downsample)) - self.inplanes = planes * block.expansion - for i in range(1, blocks): - layers.append(block(self.inplanes, planes)) - - return nn.Sequential(*layers) - - def forward(self, x): - x = self.conv1(x) - x = self.bn1(x) - x = self.relu(x) - x = self.maxpool(x) - - x = self.layer1(x) - x = self.layer2(x) - x = self.layer3(x) - x = self.layer4(x) - - x = self.avgpool(x) - x = x.view(x.size(0), -1) - pre_yaw = self.fc_yaw(x) - pre_pitch = self.fc_pitch(x) - pre_roll = self.fc_roll(x) - - return pre_yaw, pre_pitch, pre_roll - -class ResNet(nn.Module): - # ResNet for regression of 3 Euler angles. - def __init__(self, block, layers, num_classes=1000): - self.inplanes = 64 - super(ResNet, self).__init__() - self.conv1 = nn.Conv2d(3, 64, kernel_size=7, stride=2, padding=3, - bias=False) - self.bn1 = nn.BatchNorm2d(64) - self.relu = nn.ReLU(inplace=True) - self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1) - self.layer1 = self._make_layer(block, 64, layers[0]) - self.layer2 = self._make_layer(block, 128, layers[1], stride=2) - self.layer3 = self._make_layer(block, 256, layers[2], stride=2) - self.layer4 = self._make_layer(block, 512, layers[3], stride=2) - self.avgpool = nn.AvgPool2d(7) - self.fc_angles = nn.Linear(512 * block.expansion, num_classes) - - for m in self.modules(): - if isinstance(m, nn.Conv2d): - n = m.kernel_size[0] * m.kernel_size[1] * m.out_channels - m.weight.data.normal_(0, math.sqrt(2. / n)) - elif isinstance(m, nn.BatchNorm2d): - m.weight.data.fill_(1) - m.bias.data.zero_() - - def _make_layer(self, block, planes, blocks, stride=1): - downsample = None - if stride != 1 or self.inplanes != planes * block.expansion: - downsample = nn.Sequential( - nn.Conv2d(self.inplanes, planes * block.expansion, - kernel_size=1, stride=stride, bias=False), - nn.BatchNorm2d(planes * block.expansion), - ) - - layers = [] - layers.append(block(self.inplanes, planes, stride, downsample)) - self.inplanes = planes * block.expansion - for i in range(1, blocks): - layers.append(block(self.inplanes, planes)) - - return nn.Sequential(*layers) - - def forward(self, x): - x = self.conv1(x) - x = self.bn1(x) - x = self.relu(x) - x = self.maxpool(x) - - x = self.layer1(x) - x = self.layer2(x) - x = self.layer3(x) - x = self.layer4(x) - - x = self.avgpool(x) - x = x.view(x.size(0), -1) - x = self.fc_angles(x) - return x - -class AlexNet(nn.Module): - # AlexNet laid out as a Hopenet - classify Euler angles in bins and - # regress the expected value. - def __init__(self, num_bins): - super(AlexNet, self).__init__() - self.features = nn.Sequential( - nn.Conv2d(3, 64, kernel_size=11, stride=4, padding=2), - nn.ReLU(inplace=True), - nn.MaxPool2d(kernel_size=3, stride=2), - nn.Conv2d(64, 192, kernel_size=5, padding=2), - nn.ReLU(inplace=True), - nn.MaxPool2d(kernel_size=3, stride=2), - nn.Conv2d(192, 384, kernel_size=3, padding=1), - nn.ReLU(inplace=True), - nn.Conv2d(384, 256, kernel_size=3, padding=1), - nn.ReLU(inplace=True), - nn.Conv2d(256, 256, kernel_size=3, padding=1), - nn.ReLU(inplace=True), - nn.MaxPool2d(kernel_size=3, stride=2), - ) - self.classifier = nn.Sequential( - nn.Dropout(), - nn.Linear(256 * 6 * 6, 4096), - nn.ReLU(inplace=True), - nn.Dropout(), - nn.Linear(4096, 4096), - nn.ReLU(inplace=True), - ) - self.fc_yaw = nn.Linear(4096, num_bins) - self.fc_pitch = nn.Linear(4096, num_bins) - self.fc_roll = nn.Linear(4096, num_bins) - - def forward(self, x): - x = self.features(x) - x = x.view(x.size(0), 256 * 6 * 6) - x = self.classifier(x) - yaw = self.fc_yaw(x) - pitch = self.fc_pitch(x) - roll = self.fc_roll(x) - return yaw, pitch, roll