የትራፊክ መብራት ወይም እግረኛ ማጣት አደጋ ሊያስከትል ይችላል። ነገር ግን በተለዋዋጭ የከተማ አካባቢዎች ውስጥ የነገር መለየት? ያ በራሳቸው የሚነዱ መኪኖች ስህተቶችን መግዛት አይችሉም። ከባድ ነው። ውጤቱስ? የአትሮስ ስፓሻል ፒራሚድ ገንዳ (ASPP) እና የዝውውር ትምህርትን በመጠቀም ራሳቸውን ችለው ለሚንቀሳቀሱ ተሽከርካሪዎች የነገር ፈልጎን በማመቻቸት ላይ ሠርቻለሁ። በመጥፎ ብርሃን ውስጥ እንኳን ነገሮችን በበርካታ ሚዛኖች የሚያውቅ እና በእውነተኛ ጊዜ በብቃት የሚሰራ ሞዴል። እንዴት እንዳደረግኩት እነሆ። ችግሩ፡ በዱር ውስጥ የነገር ማወቂያ እራስን የሚነዱ መኪኖች ነገሮችን ለመለየት በ ይተማመናሉ፣ ነገር ግን የገሃዱ ዓለም ሁኔታዎች Convolutional Neural Networks (CNNs) ፈተናዎችን ያስተዋውቃሉ፡- - ትንሽ ሲርቅ፣ ሲጠጋ ትልቅ። የትራፊክ መብራቶች በተለያየ ሚዛን ይታያሉ ። የሌይን ምልክቶች በተለያዩ ማዕዘኖች ይዛባሉ - ከቆመ መኪና ጀርባ ያለ እግረኛ ሊያመልጥ ይችላል። መዘጋቶች ይከሰታሉ - ጥላዎች፣ ነጸብራቅ ወይም የማታ መንዳት። የመብራት ሁኔታዎች ይለያያሉ ባህላዊ ሲ ኤን ኤን ጋር መታገል እና ከባዶ ስልጠና ለዘላለም ይወስዳል። የሚገቡት እዚያ ነው። ከብዙ-ልኬት ነገር ፈልጎ ማግኘት ASPP እና የዝውውር ትምህርት ASPP፡ ዕቃዎችን በተለያየ ሚዛን መያዝ ሲ.ኤን.ኤን.ዎች ጥሩ ይሰራሉ ነገር ግን የገሃዱ ዓለም ነገሮች ይህን የሚፈታው በመጠቀም ቋሚ መጠን ላላቸው ነገሮች በመጠን እና በርቀት ይለያያሉ። አስትሮስ ስፓሻል ፒራሚድ ፑልንግ (ኤኤስፒፒ) የተዘረጉ ውዝግቦችን በበርካታ ሚዛኖች ያሉ ባህሪያትን ለመያዝ ነው። ASPP እንዴት እንደሚሰራ ASPP በተለያዩ ጥራቶች፣ ትናንሽ ነገሮች፣ ትላልቅ ነገሮች እና በመካከላቸው ያለውን ነገር ሁሉ ለማውጣት የተለያዩ ይተገበራል። የዝውውር ማጣሪያዎችን በተለያዩ የማስፋፊያ መጠኖች የቡድን መደበኛነትን እና ውስብስብ አካባቢዎችን ለጠንካራ አፈጻጸም ትኩረትን በማካተት ASPPን በፒቶርች እንዴት እንደተገበርኩ እነሆ፡- import torch import torch.nn as nn import torch.nn.functional as F class ASPP(nn.Module): """ A more advanced ASPP with optional attention and group normalization. """ def __init__(self, in_channels, out_channels, dilation_rates=(6,12,18), groups=8): super(ASPP, self).__init__() self.aspp_branches = nn.ModuleList() #1x1 Conv branch self.aspp_branches.append( nn.Sequential( nn.Conv2d(in_channels, out_channels, kernel_size=1, stride=1, padding=0, bias=False), nn.GroupNorm(groups, out_channels), nn.ReLU(inplace=True) ) ) for rate in dilation_rates: self.aspp_branches.append( nn.Sequential( nn.Conv2d(in_channels, out_channels, kernel_size=3, stride=1, padding=rate, dilation=rate, bias=False), nn.GroupNorm(groups, out_channels), nn.ReLU(inplace=True) ) ) #Global average pooling branch self.global_pool = nn.AdaptiveAvgPool2d((1, 1)) self.global_conv = nn.Sequential( nn.Conv2d(in_channels, out_channels, kernel_size=1, stride=1, bias=False), nn.GroupNorm(groups, out_channels), nn.ReLU(inplace=True) ) #Attention mechanism to refine the concatenated features self.attention = nn.Sequential( nn.Conv2d(out_channels*(len(dilation_rates)+2), out_channels, kernel_size =1, bias=False), nn.Sigmoid() ) self.project = nn.Sequential( nn.Conv2d(out_channels*(len(dilation_rates)+2), out_channels, kernel_size=1, bias=False), nn.GroupNorm(groups, out_channels), nn.ReLU(inplace=True) ) def forward(self, x): cat_feats = [] for branch in self.aspp_branches: cat_feats.append(branch(x)) g_feat = self.global_pool(x) g_feat = self.global_conv(g_feat) g_feat = F.interpolate(g_feat, size=x.shape[2:], mode='bilinear', align_corners=False) cat_feats.append(g_feat) #Concatenate along channels x_cat = torch.cat(cat_feats, dim=1) #channel-wise attention att_map = self.attention(x_cat) x_cat = x_cat * att_map out = self.project(x_cat) return out ለምን እንደሚሰራ የተለያዩ መቀበያ መስኮች ሞዴሉ ትናንሽ ነገሮችን (እንደ ሩቅ የትራፊክ መብራት) እና ትላልቅ እቃዎችን (እንደ አውቶቡስ) በአንድ ማለፊያ ውስጥ እንዲወስድ ያስችለዋል። ከዓለም አቀፉ አማካይ የመዋኛ ቅርንጫፍ የመጣ ዓለም አቀፋዊ አውድ ዕቃዎችን ግልጽ ለማድረግ ይረዳል። ቀላል ክብደት ያለው ትኩረት በተዘበራረቁ ትዕይንቶች ውስጥ የማወቅ ትክክለኛነትን በመጨመር በጣም መረጃ ሰጭ ሰርጦችን ያጎላል። ውጤቶች፡- (ከእንግዲህ በኋላ ትናንሽ የትራፊክ መብራቶች አይጠፉም)። በተለያዩ ሚዛኖች ላይ የተገኙ ነገሮች የተሻሻለ አማካይ ትክክለኛነት (mAP) በ14 በመቶ ከፊል የተደበቁ ነገሮችን በመለየት ። መዘጋቶችን በተሻለ ሁኔታ ይይዛሉ ትምህርትን አስተላልፍ፡ በጀግኖች ትከሻ ላይ መቆም አስቀድሞ የሰለጠኑ ሞዴሎች ሲኖሩ የነገሮችን ፈልጎ ማግኛ ሞዴል ከባዶ ማሰልጠን ብዙ ጥቅም አይሰጥም። ቀደም ሲል ነገሮችን የሚረዳውን ሞዴል ያስችለናል። ትምህርት ማስተላለፍ በጥሩ ሁኔታ እንድናስተካክል ከፌስቡክ AI። አውድ ይማራል - ስለዚህ የማቆሚያ ምልክትን ብቻ እንዲያገኝ ሳይሆን የመንገድ ትዕይንት አካል እንደሆነ ይረዳል። DETR (Detection Transformer) ተጠቀምኩኝ፣ በትራንስፎርመር ላይ የተመሰረተ የነገር ማወቂያ ሞዴል በራስ የመንዳት የውሂብ ስብስቦች ላይ DETRን እንዴት እንዳስተካከልኩት እነሆ፡- import torch import torch.nn as nn from transformers import DetrConfig, DetrForObjectDetection class CustomBackbone(nn.Module): def __init__(self, in_channels=3, hidden_dim=256): super(CustomBackbone, self).__init__() # Example: basic conv layers + ASPP self.initial_conv = nn.Sequential( nn.Conv2d(in_channels, 64, kernel_size=7, stride=2, padding=3, bias=False), nn.BatchNorm2d(64), nn.ReLU(inplace=True), nn.MaxPool2d(kernel_size=3, stride=2, padding=1) ) self.aspp = ASPP(in_channels=64, out_channels=hidden_dim) def forward(self, x): x = self.initial_conv(x) x = self.aspp(x) return x class DETRWithASPP(nn.Module): def __init__(self, num_classes=91): super(DETRWithASPP, self).__init__() self.backbone = CustomBackbone() config = DetrConfig.from_pretrained("facebook/detr-resnet-50") config.num_labels = num_classes self.detr = DetrForObjectDetection.from_pretrained("facebook/detr-resnet-50", config=config) self.detr.model.backbone.body = nn.Identity() def forward(self, images, pixel_masks=None): features = self.backbone(images) feature_dict = { "0": features } outputs = self.detr.model(inputs_embeds=None, pixel_values=None, pixel_mask=pixel_masks, features=feature_dict, output_attentions=False) return outputs model = DETRWithASPP(num_classes=10) images = torch.randn(2, 3, 512, 512) outputs = model(images) ውጤቶች፡- የስልጠና ጊዜ በ 80% ቀንሷል. በምሽት ጊዜ እና ጭጋጋማ ሁኔታዎች ውስጥ የተሻሻለ የእውነተኛ ዓለም አፈፃፀም። ለሥልጠና ያነሰ ምልክት የተደረገበት መረጃ ያስፈልጋል። ከተዋሃዱ ምስሎች ጋር ውሂብን ማሳደግ ራሳቸውን ችለው የሚንቀሳቀሱ ተሽከርካሪዎች ግዙፍ የውሂብ ስብስቦች ያስፈልጋቸዋል፣ ነገር ግን በገሃዱ ዓለም የተሰየመ መረጃ በጣም አናሳ ነው። ማስተካከያው? GANs (Generative Adversarial Networks) በመጠቀም ሰው ሰራሽ ውሂብ ይፍጠሩ። ለመፍጠር GAN ተጠቀምኩ። የመረጃ ቋቱን ለማስፋት የሐሰት ግን እውነተኛ የሌይን ምልክቶችን እና የትራፊክ ትዕይንቶችን ለመንገድ ምልክት ማመንጨት ቀላል GAN ይኸውና፡ import torch import torch.nn as nn import torch.nn.functional as F class LaneMarkingGenerator(nn.Module): """ A DCGAN-style generator designed for producing synthetic lane or road-like images. Input is a latent vector (noise), and the output is a (1 x 64 x 64) grayscale image. You can adjust channels, resolution, and layers to match your target data. """ def __init__(self, z_dim=100, feature_maps=64): super(LaneMarkingGenerator, self).__init__() self.net = nn.Sequential( #Z latent vector of shape (z_dim, 1, 1) nn.utils.spectral_norm(nn.ConvTranspose2d(z_dim, feature_maps * 8, 4, 1, 0, bias=False)), nn.BatchNorm2d(feature_maps * 8), nn.ReLU(True), #(feature_maps * 8) x 4 x 4 nn.utils.spectral_norm(nn.ConvTranspose2d(feature_maps * 8, feature_maps * 4, 4, 2, 1, bias=False)), nn.BatchNorm2d(feature_maps * 4), nn.ReLU(True), #(feature_maps * 4) x 8 x 8 nn.utils.spectral_norm(nn.ConvTranspose2d(feature_maps * 4, feature_maps * 2, 4, 2, 1, bias=False)), nn.BatchNorm2d(feature_maps * 2), nn.ReLU(True), #(feature_maps * 2) x 16 x 16 nn.utils.spectral_norm(nn.ConvTranspose2d(feature_maps * 2, feature_maps, 4, 2, 1, bias=False)), nn.BatchNorm2d(feature_maps), nn.ReLU(True), #(feature_maps) x 32 x 32 nn.utils.spectral_norm(nn.ConvTranspose2d(feature_maps, 1, 4, 2, 1, bias=False)), nn.Tanh() ) def forward(self, z): return self.net(z) class LaneMarkingDiscriminator(nn.Module): """ A DCGAN-style discriminator. It takes a (1 x 64 x 64) image and attempts to classify whether it's real or generated (fake). """ def __init__(self, feature_maps=64): super(LaneMarkingDiscriminator, self).__init__() self.net = nn.Sequential( #1x 64 x 64 nn.utils.spectral_norm(nn.Conv2d(1, feature_maps, 4, 2, 1, bias=False)), nn.LeakyReLU(0.2, inplace=True), #(feature_maps) x 32 x 32 nn.utils.spectral_norm(nn.Conv2d(feature_maps, feature_maps * 2, 4, 2, 1, bias=False)), nn.BatchNorm2d(feature_maps * 2), nn.LeakyReLU(0.2, inplace=True), #(feature_maps * 2) x 16 x 16 nn.utils.spectral_norm(nn.Conv2d(feature_maps * 2, feature_maps * 4, 4, 2, 1, bias=False)), nn.BatchNorm2d(feature_maps * 4), nn.LeakyReLU(0.2, inplace=True), #(feature_maps * 4) x 8 x 8 nn.utils.spectral_norm(nn.Conv2d(feature_maps * 4, feature_maps * 8, 4, 2, 1, bias=False)), nn.BatchNorm2d(feature_maps * 8), nn.LeakyReLU(0.2, inplace=True), #(feature_maps * 8) x 4 x 4 nn.utils.spectral_norm(nn.Conv2d(feature_maps * 8, 1, 4, 1, 0, bias=False)), ) def forward(self, x): return self.net(x).view(-1) ውጤቶች፡- በእጅ ሳይሰየም የውሂብ ስብስብ መጠን በ5x ጨምሯል። የሰለጠኑ ሞዴሎች ከዳር እስከ ዳር የበለጠ ጠንካራ ሆኑ። በመረጃ ስብስቦች ውስጥ አድልዎ ቀንሷል (የበለጠ የተለያዩ የሥልጠና ናሙናዎች)። የመጨረሻ ውጤቶች፡ ይበልጥ ብልህ፣ ፈጣን የነገር ፍለጋ በማጣመር ለራስ ለሚነዱ መኪኖች ይበልጥ ትክክለኛ የሆነ ሊሰፋ የሚችል የነገር መፈለጊያ ስርዓት ገነባሁ። አንዳንድ ቁልፍ ውጤቶች የሚከተሉት ናቸው፡- ASPPን፣ የዝውውር ትምህርትን እና ሰው ሰራሽ ውሂብን : 110 ms/ፍሬም የነገር ማወቂያ ፍጥነት : + 14% mAP አነስተኛ-ነገር ማወቂያ (የትራፊክ መብራቶች) ፡ የበለጠ ጠንካራ ማወቂያ የመዘጋት አያያዝ : ወደ 6 ሰአታት ቀንሷል የስልጠና ጊዜ ፡ 50% ሠራሽ (GANs) የሚያስፈልግ የሥልጠና መረጃ ቀጣይ እርምጃዎች፡ የበለጠ የተሻለ ማድረግ በጊዜ ሂደት የተገኙ ነገሮችን ለመከተል ። ቅጽበታዊ ክትትልን ማከል ዜሮ-ሾት ለማግኘት የበለጠ የላቁ ትራንስፎርመሮችን (እንደ OWL-ViT) መጠቀም። በተከተተ ሃርድዌር ላይ ለመሰማራት ተጨማሪ የማጣቀሻ ፍጥነትን ማመቻቸት። ማጠቃለያ ASPPን፣ Transformers እና Synthetic Dataን ወደ ሶስት እጥፍ ስጋት አዋህደናል ራስን ችሎ ነገርን ለማወቅ - አንድ ጊዜ ቀርፋፋ እና ዓይነ ስውር የሆኑ ሞዴሎችን ወደ ፈጣን እና አስተዋይ ስርዓቶች ከቦታ ቦታ የትራፊክ መብራትን ያያሉ። ለባለብዙ ደረጃ ዝርዝሮች የተዘረጉ ውዝግቦችን በመቀበል፣ ትምህርትን ለፈጣን ማስተካከያ እና በGAN የተገኘ መረጃን እያንዳንዱን ክፍተት ለመሙላት የግምገማ ጊዜዎችን በግማሽ ያህል ቆርጠን የሰዓታት ስልጠና እንቆጥባለን። እኛ በፍጥነት፣ በትክክል እና በጣም የተመሰቃቀለውን መንገዶቻችንን በልበ ሙሉነት ለማሰስ በሚያደርጉት መንገድ አለምን በበለጠ ወደሚመለከቱት መኪናዎች ትልቅ ዝላይ ነው። ስለ አንዳንድ ቴክኒኮች ተጨማሪ ንባብ DETR፡ ከጫፍ እስከ ጫፍ የነገር ፍለጋ ለትርጓሜ ክፍልፋዮች አስትሮስት ውዝግቦች GANs ለሰው ሠራሽ ውሂብ