Бағдаршамды немесе жаяу жүргіншіні жоғалту апатты білдіруі мүмкін. Бірақ динамикалық қалалық ортада нысанды анықтау? Бұл Өздігінен жүретін көліктер қателіктер жібере алмайды. қиын. Мен Нәтиже? Atrous Spatial Pyramid Pooling (ASPP) және Transfer Learning көмегімен автономды көліктер үшін нысанды анықтауды оңтайландыру бойынша жұмыс жасадым. Нысандарды бірнеше масштабта, тіпті нашар жарықта да анықтайтын және нақты уақытта тиімді жұмыс істейтін модель. Міне, мен мұны қалай жасадым. Мәселе: жабайы табиғатта нысанды анықтау Өзін-өзі басқаратын көліктер объектілерді анықтау үшін сүйенеді, бірақ нақты дүние жағдайлары конволюционды нейрондық желілерге (CNN) қиындықтар туғызады: - алыс кезінде кішкентай, жақын кезде үлкен. Бағдаршамдар әртүрлі масштабта пайда болады . Жол белгілері әртүрлі бұрыштарда бұрмаланады - тұрақтағы көліктің артындағы жаяу жүргінші жіберіп алуы мүмкін. Тоқтаулар орын алады - көлеңкелер, жарқырау немесе түнгі көлік жүргізу. Жарықтандыру жағдайлары әртүрлі Дәстүрлі CNN күреседі және нөлден бастап оқыту мәңгілікке созылады. Міне, . көп масштабты объектілерді анықтаумен ASPP және Transfer Learning ASPP: әртүрлі масштабтағы нысандарды түсіру CNN үшін жақсы жұмыс істейді, бірақ нақты әлемдегі нысандар мұны үшін пайдалану арқылы шешеді. тұрақты өлшемді нысандар өлшемі мен қашықтығы бойынша әр түрлі болады. Atrous Spatial Pyramid Pooling (ASPP) бірнеше масштабтағы мүмкіндіктерді түсіру кеңейтілген конвульсияларды ASPP қалай жұмыс істейді ASPP әртүрлі ажыратымдылықтағы мүмкіндіктерді, кішігірім нысандарды, үлкен нысандарды және олардың арасындағы барлық нәрсені алу үшін қолданады. әртүрлі кеңейту жылдамдығымен бірнеше конвульсия сүзгілерін Күрделі орталарда сенімді өнімділік үшін топтық қалыпқа келтіруді және назар аударуды қамтитын PyTorch жүйесінде 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%-ға жақсарды. Ішінара жасырылған нысандарды анықтай отырып, . окклюзияларды жақсы өңдейді Трансферттік оқыту: Алыптардың иығында тұру Нөлден бастап нысанды анықтау үлгісін үйрету алдын ала дайындалған үлгілер болған кезде көп пайда бермейді. нысандарды түсінетін үлгіні мүмкіндік береді. Трансферттік оқыту дәл реттеуге Мен Facebook AI жүйесінен қолдандым. Ол контекстті үйренеді, сондықтан ол жай ғана тоқтау белгісін тауып қоймайды, ол жол көрінісінің бір бөлігі екенін түсінеді. трансформаторға негізделген нысанды анықтау үлгісін DETR (Анықтау трансформаторы) Міне, мен 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%-ға қысқарды. Түнгі және тұманды жағдайларда нақты жұмыс өнімділігі жақсарды. Жаттығу үшін таңбаланған деректер азырақ қажет. Деректерді синтетикалық кескіндер арқылы арттыру Автономды көліктер үлкен деректер жиынтығын қажет етеді, бірақ нақты әлемде белгіленген деректер аз. Түзету? GAN (General 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, Трансформаторлар және синтетикалық деректерді автономды объектілерді анықтауға арналған үш қауіпке біріктірдік - бір рет баяу, соқыр нүктелерге бейім модельдерді бір блоктан бағдаршамды анықтайтын жылдам, қабылдаушы жүйелерге айналдырдық. Көп масштабты бөлшектер үшін кеңейтілген конвульсияларды, жылдам дәл келтіру үшін оқытуды тасымалдауды және әрбір олқылықты толтыру үшін GAN арқылы жасалған деректерді қолдану арқылы біз қорытынды жасау уақытын екі есеге қысқарттық және жаттығу сағаттарын үнемдедік. Бұл әлемді біз сияқты жылдамырақ, дәлірек айтқанда және біздің ең хаотикалық көшелерімізбен сенімді түрде шарлау жолында көретін көліктерге үлкен секіріс. Кейбір техникалар бойынша қосымша оқу DETR: объектіні түпкілікті анықтау Семантикалық сегментацияға арналған бұрмалаулар Синтетикалық деректерге арналған GAN