Гэрлэн дохио эсвэл явган зорчигчийг алгасах нь сүйрэлд хүргэж болзошгүй юм. Гэхдээ динамик хотын орчинд объект илрүүлэх үү? Энэ Өөрөө жолоодлоготой машинууд алдаа гаргаж чадахгүй. хэцүү. Би Үр дүн? Atrous Spatial Pyramid Pooling (ASPP) болон Transfer Learning ашиглан бие даасан тээврийн хэрэгслийн объект илрүүлэхийг оновчтой болгох талаар ажилласан. Муу гэрэлтүүлэгтэй байсан ч олон хэмжүүрээр объектыг илрүүлж, бодит цаг хугацаанд үр дүнтэй ажилладаг загвар. Би үүнийг хэрхэн хийснийг энд харуулав. Асуудал: Зэрлэг байгальд объект илрүүлэх Өөрийгөө жолооддог машинууд объектуудыг илрүүлэхийн тулд дээр тулгуурладаг боловч бодит нөхцөл байдал нь Convolutional Neural Networks (CNN) дараах сорилтуудыг үүсгэдэг. - хол үед жижиг, ойрхон үед том. Гэрлэн дохио нь өөр өөр масштабаар харагдана . Эгнээний тэмдэглэгээ нь янз бүрийн өнцгөөс гаждаг - зогсоол дээр зогсож байсан машины ард явган зорчигч алга болж магадгүй. Бөглөрөх тохиолдол гардаг - сүүдэр, хурц гэрэл, эсвэл шөнийн жолоодлого. Гэрэлтүүлгийн нөхцөл өөр өөр байдаг Уламжлалт CNN нь тэмцэж, эхнээс нь сургах нь үүрд үргэлжлэх болно. Эндээс орж ирдэг. олон төрлийн объект илрүүлэхтэй ASPP болон Transfer Learning ASPP: Өөр өөр масштабтай объектуудыг барих CNN нь сайн ажилладаг боловч бодит ертөнцийн объектууд тулд ашиглан үүнийг шийддэг. тогтмол хэмжээтэй объектуудад хэмжээ, зайгаараа ялгаатай байдаг. Atrous Spatial Pyramid Pooling (ASPP) нь олон хэмжүүрээр онцлогуудыг авахын өргөссөн эргэлтийг ASPP хэрхэн ажилладаг ASPP нь янз бүрийн нягтрал, жижиг объект, том объект болон тэдгээрийн хоорондох бүх зүйлд онцлог шинж чанарыг задлахын тулд ашигладаг. өөр өөр тэлэлтийн хурдтай олон эргэлтийн шүүлтүүрийг Би ASPP-ийг PyTorch-д бүлгийн хэвийн байдал, нарийн төвөгтэй орчинд бат бөх гүйцэтгэлд анхаарлаа хандуулахыг агуулсан хэрхэн хэрэгжүүлсэн бэ: 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%-иар сайжирсан. , хэсэгчлэн нуугдсан объектуудыг илрүүлдэг. Битүүмжлэлийг илүү сайн зохицуулж Шилжүүлэх сургалт: Аварга хүмүүсийн мөрөн дээр зогсох Урьдчилан бэлтгэгдсэн загварууд байгаа үед объект илрүүлэх загварыг эхнээс нь сургах нь тийм ч их ашиг тусаа өгөхгүй. объектыг аль хэдийн ойлгосон загварыг боломжийг олгодог. Дамжуулах сургалт нь нарийн тохируулах Би Facebook 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) Үр дүн: Гарын авлагын шошгогүйгээр өгөгдлийн багцын хэмжээг 5 дахин нэмэгдүүлсэн. Сургалтанд хамрагдсан загварууд нь зах зээлд илүү бат бөх болсон. Өгөгдлийн багц дахь хазайлтыг бууруулсан (илүү олон төрлийн сургалтын дээж). Эцсийн үр дүн: Илүү ухаалаг, илүү хурдан объект илрүүлэх хослуулснаар би өөрөө жолооддог машинд илүү нарийвчлалтай, масштабтай объект илрүүлэх системийг бүтээсэн. Гол үр дүнгийн зарим нь: ASPP, Transfer Learning болон Synthetic Data-г : 110 мс/фрэйм Объект илрүүлэх хурд : +14% mAP Жижиг объект илрүүлэх (Гэрлэн дохио) : Илүү бат бөх илрүүлэлт Битүүмжлэлийг зохицуулах : 6 цаг хүртэл бууруулсан Сургалтын хугацаа : 50% синтетик (GANs) Шаардлагатай сургалтын өгөгдөл Дараагийн алхамууд: Үүнийг илүү сайн болгох Цаг хугацааны явцад илрүүлсэн объектыг дагахын тулд . бодит цагийн хяналтыг нэмж байна Тэг цохилт илрүүлэхийн тулд илүү дэвшилтэт трансформаторуудыг (OWL-ViT гэх мэт) ашиглах. Суулгасан техник хангамж дээр байрлуулахын тулд дүгнэлт гаргах хурдыг илүү оновчтой болгох. Дүгнэлт Бид ASPP, Transformers болон Synthetic Data-г бие даасан объект илрүүлэх гурвалсан аюул болгон нэгтгэж, нэг удаа удаашралтай, хар толботой загваруудыг нэг блокийн цаанаас гэрлэн дохио тусдаг хурдан, мэдрэгчтэй систем болгон хувиргасан. Өргөтгөсөн эргэлтийг олон хэмжээст нарийвчлалтайгаар, хурдан нарийн тааруулахын тулд сургалтыг шилжүүлж, цоорхой бүрийг нөхөх GAN-ээр үүсгэсэн өгөгдлийг ашигласнаар бид дүгнэлт хийх хугацааг бараг хоёр дахин багасгаж, сургалтын цагийг хэмнэсэн. Энэ бол дэлхийг бидэн шиг хурдан, илүү нарийвчлалтай хардаг машинууд руу чиглэсэн том үсрэлт бөгөөд бидний хамгийн эмх замбараагүй гудамжаар итгэлтэйгээр явж байна. Зарим аргын талаар цааш нь унших DETR: Төгсгөл хүртэлх объект илрүүлэх Семантик сегментчилэлд зориулсан Atrous Convolutions Синтетик өгөгдөлд зориулсан GANs