<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Focal Loss和它背后的男人RetinaNet

          共 9653字,需瀏覽 20分鐘

           ·

          2020-09-11 21:38


          AI編輯:我是小將

          說(shuō)起Focal Loss,相信做CV的都不會(huì)陌生,當(dāng)面臨正負(fù)樣本不平衡時(shí)可能第一個(gè)想到的就是用Focal Loss試試。但是怕是很多人會(huì)不知道這篇論文中所提出的one stage目標(biāo)檢測(cè)模型RetinaNet,這也難怪,就連論文里面也說(shuō)了RetinaNet模型層面沒(méi)有大的創(chuàng)新,模型效果主要靠Focal Loss。RetinaNet作為RCNN系中one stage檢測(cè)模型的代表,我覺(jué)得依然有學(xué)習(xí)研究的價(jià)值,這不僅會(huì)讓你加深對(duì)RCNN系模型的理解,而且有利于學(xué)習(xí)后面新的模型,畢竟后面很多模型都是借鑒了RetinaNet。這里將介紹Focal Loss和RetinaNet(比如FCOS和YOLACT),也會(huì)給出一些具體的代碼實(shí)現(xiàn)。

          Focal Loss

          類別不平衡(class imbalance)是目標(biāo)檢測(cè)模型訓(xùn)練的一大難點(diǎn)(推薦這篇綜述文章Imbalance Problems in Object Detection: A Review),其中最嚴(yán)重的是正負(fù)樣本不平衡,因?yàn)橐粡垐D像的物體一般較少,而目前大部分的目標(biāo)檢測(cè)模型在FCN上每個(gè)位置密集抽樣,無(wú)論是基于anchor的方法還是anchor free方法都如此。對(duì)于Faster R-CNN這種two stage模型,第一階段的RPN可以過(guò)濾掉很大一部分負(fù)樣本,最終第二階段的檢測(cè)模塊只需要處理少量的候選框,而且檢測(cè)模塊還采用正負(fù)樣本固定比例抽樣(比如1:3)或者OHEM方法(online hard example mining)來(lái)進(jìn)一步解決正負(fù)樣本不平衡問(wèn)題。對(duì)于one stage方法來(lái)說(shuō),detection部分要直接處理大量的候選位置,其中負(fù)樣本要占據(jù)絕大部分,SSD的策略是采用hard mining,從大量的負(fù)樣本中選出loss最大的topk的負(fù)樣本以保證正負(fù)樣本比例為1:3。其實(shí)RPN本質(zhì)上也是one stage檢測(cè)模型,RPN訓(xùn)練時(shí)所采取的策略也是抽樣,從一張圖像中抽取固定數(shù)量N(RPN采用的是256)的樣本,正負(fù)樣本分開(kāi)來(lái)隨機(jī)抽樣N/2,如果正樣本不足,那就用負(fù)樣本填充,實(shí)現(xiàn)代碼非常簡(jiǎn)單:

          def?subsample_labels(labels,?num_samples,?positive_fraction,?bg_label):
          ????"""
          ????Return?`num_samples`?(or?fewer,?if?not?enough?found)
          ????random?samples?from?`labels`?which?is?a?mixture?of?positives?&?negatives.
          ????It?will?try?to?return?as?many?positives?as?possible?without
          ????exceeding?`positive_fraction?*?num_samples`,?and?then?try?to
          ????fill?the?remaining?slots?with?negatives.
          ????Args:
          ????????labels?(Tensor):?(N,?)?label?vector?with?values:
          ????????????*?-1:?ignore
          ????????????*?bg_label:?background?("negative")?class
          ????????????*?otherwise:?one?or?more?foreground?("positive")?classes
          ????????num_samples?(int):?The?total?number?of?labels?with?value?>=?0?to?return.
          ????????????Values?that?are?not?sampled?will?be?filled?with?-1?(ignore).
          ????????positive_fraction?(float):?The?number?of?subsampled?labels?with?values?>?0
          ????????????is?`min(num_positives,?int(positive_fraction?*?num_samples))`.?The?number
          ????????????of?negatives?sampled?is?`min(num_negatives,?num_samples?-?num_positives_sampled)`.
          ????????????In?order?words,?if?there?are?not?enough?positives,?the?sample?is?filled?with
          ????????????negatives.?If?there?are?also?not?enough?negatives,?then?as?many?elements?are
          ????????????sampled?as?is?possible.
          ????????bg_label?(int):?label?index?of?background?("negative")?class.
          ????Returns:
          ????????pos_idx,?neg_idx?(Tensor):
          ????????????1D?vector?of?indices.?The?total?length?of?both?is?`num_samples`?or?fewer.
          ????"""

          ????positive?=?torch.nonzero((labels?!=?-1)?&?(labels?!=?bg_label),?as_tuple=True)[0]
          ????negative?=?torch.nonzero(labels?==?bg_label,?as_tuple=True)[0]

          ????num_pos?=?int(num_samples?*?positive_fraction)
          ????#?protect?against?not?enough?positive?examples
          ????num_pos?=?min(positive.numel(),?num_pos)
          ????num_neg?=?num_samples?-?num_pos
          ????#?protect?against?not?enough?negative?examples
          ????num_neg?=?min(negative.numel(),?num_neg)

          ????#?randomly?select?positive?and?negative?examples
          ????perm1?=?torch.randperm(positive.numel(),?device=positive.device)[:num_pos]
          ????perm2?=?torch.randperm(negative.numel(),?device=negative.device)[:num_neg]

          ????pos_idx?=?positive[perm1]
          ????neg_idx?=?negative[perm2]
          ????return?pos_idx,?neg_idx

          與抽樣方法不同,F(xiàn)ocal Loss從另外的視角來(lái)解決樣本不平衡問(wèn)題,那就是根據(jù)置信度動(dòng)態(tài)調(diào)整交叉熵loss,當(dāng)預(yù)測(cè)正確的置信度增加時(shí),loss的權(quán)重系數(shù)會(huì)逐漸衰減至0,這樣模型訓(xùn)練的loss更關(guān)注難例,而大量容易的例子其loss貢獻(xiàn)很低。這里以二分類來(lái)介紹Focal Loss(FL),對(duì)二分類最常用的是cross entropy (CE)loss,定義如下:

          其中為真實(shí)標(biāo)簽,1表示為正例,-1表示為負(fù)例;而為模型預(yù)測(cè)為正例的概率值。進(jìn)一步可以定義:

          這樣CE就可以簡(jiǎn)寫(xiě)為:

          一般情形下,還可以為正例設(shè)置權(quán)重系數(shù),負(fù)例權(quán)重系數(shù)為,此時(shí)的loss就變?yōu)椋?/p>

          如圖1所示,藍(lán)色的曲線表示CE,如果定義的樣本的容易例子,從曲線可以看到,這部分簡(jiǎn)單例子的loss值依然不低,而且這部分例子要占很大比例,加起來(lái)后將淹沒(méi)難例的loss。這就是CE loss用于目標(biāo)檢測(cè)模型訓(xùn)練所存在的問(wèn)題。

          圖1 FL和CE的對(duì)比

          為了解決CE的問(wèn)題,F(xiàn)L在CE基礎(chǔ)上增加一個(gè)調(diào)節(jié)因子,F(xiàn)L定義如下:

          圖1給出了時(shí)的FL曲線,可以看到當(dāng)很小時(shí),此時(shí)樣本被分類,調(diào)節(jié)因子值接近1,loss不受影響,而當(dāng)趨近于1時(shí),調(diào)節(jié)因子接近0,這樣已經(jīng)能正確分類的簡(jiǎn)單樣例loss大大降低。超參數(shù)為0時(shí),F(xiàn)L等價(jià)于CE,論文中發(fā)現(xiàn)取2時(shí)是最好的,此時(shí)若一個(gè)樣本的為0.9,其對(duì)應(yīng)的CE loss是FL的100倍,可見(jiàn)FL相比CE可以大大降低簡(jiǎn)單例子的loss,使模型訓(xùn)練更關(guān)注于難例。如果加上類別權(quán)重系數(shù),F(xiàn)L變?yōu)椋?/p>

          FL的實(shí)現(xiàn)也非常簡(jiǎn)單,這里給出Facebook的官方實(shí)現(xiàn):

          def?sigmoid_focal_loss(
          ????inputs:?torch.Tensor,
          ????targets:?torch.Tensor,
          ????alpha:?float?=?-1,
          ????gamma:?float?=?2,
          ????reduction:?str?=?"none",
          )
          ?->?torch.Tensor:

          ????"""
          ????Loss?used?in?RetinaNet?for?dense?detection:?https://arxiv.org/abs/1708.02002.
          ????Args:
          ????????inputs:?A?float?tensor?of?arbitrary?shape.
          ????????????????The?predictions?for?each?example.
          ????????targets:?A?float?tensor?with?the?same?shape?as?inputs.?Stores?the?binary
          ?????????????????classification?label?for?each?element?in?inputs
          ????????????????(0?for?the?negative?class?and?1?for?the?positive?class).
          ????????alpha:?(optional)?Weighting?factor?in?range?(0,1)?to?balance
          ????????????????positive?vs?negative?examples.?Default?=?-1?(no?weighting).
          ????????gamma:?Exponent?of?the?modulating?factor?(1?-?p_t)?to
          ???????????????balance?easy?vs?hard?examples.
          ????????reduction:?'none'?|?'mean'?|?'sum'
          ?????????????????'none':?No?reduction?will?be?applied?to?the?output.
          ?????????????????'mean':?The?output?will?be?averaged.
          ?????????????????'sum':?The?output?will?be?summed.
          ????Returns:
          ????????Loss?tensor?with?the?reduction?option?applied.
          ????"""

          ????p?=?torch.sigmoid(inputs)
          ????ce_loss?=?F.binary_cross_entropy_with_logits(inputs,?targets,?reduction="none")
          ????p_t?=?p?*?targets?+?(1?-?p)?*?(1?-?targets)
          ????loss?=?ce_loss?*?((1?-?p_t)?**?gamma)

          ????if?alpha?>=?0:
          ????????alpha_t?=?alpha?*?targets?+?(1?-?alpha)?*?(1?-?targets)
          ????????loss?=?alpha_t?*?loss

          ????if?reduction?==?"mean":
          ????????loss?=?loss.mean()
          ????elif?reduction?==?"sum":
          ????????loss?=?loss.sum()

          ????return?loss

          RetinaNet

          RetinaNet可以看成RPN的多分類升級(jí)版,和RPN一樣,RetinaNet的backbone也是采用FPN,anchor機(jī)制也是類似的,畢竟都屬于RCNN系列作品。RetinaNet的整體架構(gòu)如圖2所示,包括FPN backbone以及detection部分,detection部分包括分類分支和預(yù)測(cè)框分支。

          圖2 RetinaNet的整體架構(gòu)

          Backbone

          RetinaNet的backbone是基于ResNet的FPN,F(xiàn)PN在原始的CNN基礎(chǔ)上增加自上而下的路徑和橫向連接(lateral ?connections),如圖3d所示。圖3a這種是用圖像金字塔構(gòu)建特征金字塔,非常低效;圖3b是只取最后的特征;圖3c是取CNN的不同層次的特征,SSD是這樣的思路,但是FPN更進(jìn)一步,增加一個(gè)自上而下的邏輯,通過(guò)橫向連接融合不同層次特征。

          圖3 FPN與其他的類似結(jié)構(gòu)對(duì)比

          FPN的橫向連接如圖4所示,高層次特征進(jìn)行一個(gè)2x的上采樣(通過(guò)簡(jiǎn)單的最近鄰插值實(shí)現(xiàn)),然后低層次特征用一個(gè)1x1卷積層降維,這樣低層次特征和高層次特征維度一致(h, w, c均一致),直接相加。最后跟一個(gè)3x3卷積以消除上采樣帶來(lái)的不利影響。

          圖4 FPN中的橫向連接結(jié)構(gòu)

          原始的ResNet共有4個(gè)stage,其得到的特征分別記為,相較于輸入圖像,它們的stride分別為。FPN的構(gòu)建從開(kāi)始,首先采用一個(gè)1x1卷積得到channel為C(FPN中取256,F(xiàn)PN中所有l(wèi)evel的channel都是一樣的)的新特征,然后就可以自上而下生成不同level的新特征,分別記為,與ResNet的特征是一一對(duì)應(yīng)的,另外對(duì)直接采用一個(gè)stride=2的下采樣得到一個(gè)新特征(基于stride=2的1x1 maxpooling實(shí)現(xiàn)),這樣最后FPN實(shí)際上得到了5個(gè)不同level的特征,其stride分別為,特征維度均為C。Faster R-CNN是采用這樣的FPN結(jié)構(gòu),但是RetinaNet卻有稍許變動(dòng),第一點(diǎn)是只用ResNet的,這樣通過(guò)FPN得到的特征是,相當(dāng)于去掉了,的stride是4,特征很大,去掉它可以減少計(jì)算量,后面會(huì)講到RetinaNet的anchor量和detection head都是比RPN更heavy的,這很有必要。另外新增兩個(gè)特征,上加一個(gè)stride=2的3x3卷積得到,是在后面加ReLU和一個(gè)stride=2的3x3卷積得到。這樣RetinaNet的backbone得到特征也是5個(gè)level,分別為,其stride分別為。一點(diǎn)題外話就是FCOS的backbone也是取,也算是借鑒了RetinaNet。而YOLOV3的backbone是基于DarkNet-53的FPN,其特征共提取了3個(gè)層次,stride分別是。

          Anchor

          RetinaNet的anchor和RPN是類似的,RPN的輸入特征是,每個(gè)level的特征每個(gè)位置只放置一種scale的anchor,分別為,但是卻設(shè)置3中長(zhǎng)寬比。RetinaNet的輸入特征是,anchor的設(shè)置與RPN一樣,但是每個(gè)位置增加3個(gè)不同的anchor大小,這樣每個(gè)位置共有A=9個(gè)anchor,所有l(wèi)evel中anchor size的最小值是32,最大值是813。在訓(xùn)練過(guò)程中,RetinaNet與RPN采用同樣的anchor匹配策略,即一種基于IoU的雙閾值策略:計(jì)算anchor與所有GT的IoU,取IoU最大值,若大于,則認(rèn)為此anchor為正樣本,且負(fù)責(zé)預(yù)測(cè)IoU最大的那個(gè)GT;若低于,則認(rèn)為此anchor為負(fù)樣本;若IoU值在之間,則忽略不參與訓(xùn)練。這樣每個(gè)GT可能與多個(gè)anchor匹配,但可能某個(gè)GT與所有anchor的IoU最大值小于,盡管不滿足閾值條件,此時(shí)也應(yīng)該保證這個(gè)GT被IoU值最大的anchor匹配。RPN中設(shè)定的兩個(gè)閾值為,而RetinaNet設(shè)定的閾值為。實(shí)現(xiàn)代碼如下:

          #?compute?IoUs?between?GT?and?anchors?[M,?N]
          match_quality_matrix?=?pairwise_iou(targets_per_image.gt_boxes,?anchors_per_image)

          BELOW_LOW_THRESHOLD?=?-1
          BETWEEN_THRESHOLDS?=?-2
          low_threshold?=?0.4
          high_threshold?=?0.5

          #?match_quality_matrix?is?M?(gt)?x?N?(predicted)
          #?Max?over?gt?elements?(dim?0)?to?find?best?gt?candidate?for?each?prediction
          matched_vals,?matches?=?match_quality_matrix.max(dim=0)

          all_matches?=?matches.clone()?#?for?allow_low_quality_matches

          #?Assign?candidate?matches?with?low?quality?to?negative?(unassigned)?values
          below_low_threshold?=?matched_vals?between_thresholds?=?(matched_vals?>=?low_threshold)?&?(matched_vals?matches[below_low_threshold]?=?BELOW_LOW_THRESHOLD
          matches[between_thresholds]?=?BETWEEN_THRESHOLDS

          #?For?each?gt,?find?the?prediction?with?which?it?has?highest?quality
          highest_quality_foreach_gt,?_?=?match_quality_matrix.max(dim=1)
          #?Find?highest?quality?match?available,?even?if?it?is?low,?including?ties
          gt_pred_pairs_of_highest_quality?=?torch.nonzero(
          ????????????match_quality_matrix?==?highest_quality_foreach_gt[:,?None]
          ????????)

          pred_inds_to_update?=?gt_pred_pairs_of_highest_quality[:,?1]
          matches[pred_inds_to_update]?=?all_matches[pred_inds_to_update]

          匹配的結(jié)果就是得到N維度(anchor數(shù)量)matches,其值表示與每個(gè)anchor匹配的GT index,計(jì)算loss時(shí)就可以找到對(duì)應(yīng)的label和box,若值為-1,則是負(fù)樣本,若值為-2,則是需要忽略。

          另外,anchors和GT boxes之間的編解碼方案與Faster R-CNN完全一樣。

          detection模塊

          檢測(cè)模塊主要包括分類分支和box回歸分支,其中分類分支用來(lái)預(yù)測(cè)每個(gè)位置的各個(gè)anchor(數(shù)量為)的類別概率(類別數(shù)為),而box回歸分支用來(lái)預(yù)測(cè)每個(gè)位置各個(gè)anchor和GT之間的offset。分類分支包括4個(gè)3x3的卷積(ReLU激活函數(shù),channel是256),最后是一個(gè)3x3的卷積,輸出channel為,最后sigmoid激活就可以得到各個(gè)anchor預(yù)測(cè)每個(gè)類別的概率,對(duì)于RetinaNet來(lái)說(shuō),每個(gè)位置相當(dāng)于個(gè)二分類問(wèn)題。box回歸分支與分類分支類似,只不過(guò)最后輸出channel是,這也表明RetinaNet的box回歸是類別無(wú)關(guān)的。detection模塊在FPN各個(gè)level的特征是參數(shù)共享的,這點(diǎn)和RPN類似,但是RetinaNet的detection模塊是多分類的,而且更deeper。

          模型初始化

          對(duì)于backbone,當(dāng)然采用的是在ImageNet上預(yù)訓(xùn)練的ResNet,其它新增的卷積層就普通初始化。一個(gè)額外要注意的點(diǎn)是分類分支最后的卷積層的偏值初始化為:

          這個(gè)相當(dāng)于是為模型訓(xùn)練開(kāi)始時(shí)每個(gè)anchor預(yù)測(cè)為正例設(shè)置一個(gè)先驗(yàn)概率值,論文中采用的是0.01,只用這一條策略,基于ResNet50的RetinaNet在COCO上的AP值就能達(dá)到30.2。這是因?yàn)楹芏郺nchor是負(fù)例,設(shè)置先驗(yàn)值可以大大降低負(fù)樣本在開(kāi)始訓(xùn)練時(shí)的loss,這樣訓(xùn)練更容易,RetinaNet很容易loss出現(xiàn)nan。另外這個(gè)策略也在另外一篇論文Is Sampling Heuristics Necessary in Training Deep Object Detectors?中被詳細(xì)研究,經(jīng)過(guò)少許的改進(jìn)不需要sampling,也不需要focal loss也可以訓(xùn)練出較好的RetinaNet。

          模型訓(xùn)練與預(yù)測(cè)

          與Faster R-CNN一樣,RetinaNet的box回歸loss采用smooth L1,但是分類loss采用focal loss,論文中最優(yōu)參數(shù)是。分類loss是sum所有的focal loss,然后除以類別為正例的anchors總數(shù)。論文中FL也和OHEM或者SSD中的OHEM 1:3做了實(shí)驗(yàn)對(duì)比,發(fā)現(xiàn)采用FL的模型訓(xùn)練效果更好:

          在inference階段,對(duì)各個(gè)level的預(yù)測(cè)首先取top 1K的detections,然后用0.05的閾值過(guò)濾掉負(fù)類,此時(shí)得到的detections已經(jīng)大大降低,此時(shí)再對(duì)detections的box進(jìn)行解碼而不是對(duì)模型預(yù)測(cè)所有detections解碼可以提升推理速度。最后把level的detections結(jié)果concat在一起,通過(guò)IoU=0.5的NMS過(guò)濾重疊框就得到最終結(jié)果,代碼如下:

          ????????boxes_all?=?[]
          ????????scores_all?=?[]
          ????????class_idxs_all?=?[]

          ????????#?Iterate?over?every?feature?level
          ????????for?box_cls_i,?box_reg_i,?anchors_i?in?zip(box_cls,?box_delta,?anchors):
          ????????????#?(HxWxAxK,)
          ????????????box_cls_i?=?box_cls_i.flatten().sigmoid_()

          ????????????#?Keep?top?k?top?scoring?indices?only.
          ????????????num_topk?=?min(self.topk_candidates,?box_reg_i.size(0))
          ????????????#?torch.sort?is?actually?faster?than?.topk?(at?least?on?GPUs)
          ????????????predicted_prob,?topk_idxs?=?box_cls_i.sort(descending=True)
          ????????????predicted_prob?=?predicted_prob[:num_topk]
          ????????????topk_idxs?=?topk_idxs[:num_topk]

          ????????????#?filter?out?the?proposals?with?low?confidence?score
          ????????????keep_idxs?=?predicted_prob?>?self.score_threshold
          ????????????predicted_prob?=?predicted_prob[keep_idxs]
          ????????????topk_idxs?=?topk_idxs[keep_idxs]

          ????????????anchor_idxs?=?topk_idxs?//?self.num_classes
          ????????????classes_idxs?=?topk_idxs?%?self.num_classes

          ????????????box_reg_i?=?box_reg_i[anchor_idxs]
          ????????????anchors_i?=?anchors_i[anchor_idxs]
          ????????????#?predict?boxes
          ????????????predicted_boxes?=?self.box2box_transform.apply_deltas(box_reg_i,?anchors_i.tensor)

          ????????????boxes_all.append(predicted_boxes)
          ????????????scores_all.append(predicted_prob)
          ????????????class_idxs_all.append(classes_idxs)

          ????????boxes_all,?scores_all,?class_idxs_all?=?[
          ????????????cat(x)?for?x?in?[boxes_all,?scores_all,?class_idxs_all]
          ????????]
          ????????keep?=?batched_nms(boxes_all,?scores_all,?class_idxs_all,?self.nms_threshold)
          ????????keep?=?keep[:?self.max_detections_per_image]

          ????????result?=?Instances(image_size)
          ????????result.pred_boxes?=?Boxes(boxes_all[keep])
          ????????result.scores?=?scores_all[keep]
          ????????result.pred_classes?=?class_idxs_all[keep]

          這里要注意的是由于采用的個(gè)二分類,某個(gè)位置的某個(gè)anchor可能最后會(huì)輸出幾個(gè)類別不同但是box一樣的detections。

          與其他模型的對(duì)比

          相比SSD和YOLOV2,RetinaNet效果更優(yōu),效果對(duì)比如下圖所示:

          最后總結(jié)一下RetinaNet與其它同類模型的對(duì)比:

          • 相比RPN,前面已經(jīng)說(shuō)過(guò)RetinaNet可以看成RPN的多分類升級(jí)版,backbone和FPN設(shè)置基本一樣,只不過(guò)RPN采用簡(jiǎn)單的sampling方法訓(xùn)練,而RetinaNet采用FL;
          • 相比SSD,SSD也是利用多尺度特征,不過(guò)RetinaNet是FPN,SSD的anchor與Faster R-CNN類似,不過(guò)anchor的size和ratio有稍許差異,另外就是SSD是OHEM 1:3訓(xùn)練,而且采用softmax loss;
          • 相比YOLOV3,YOLOv3的backbone是基于DarkNet-53的類FPN結(jié)構(gòu),level只有3個(gè),不過(guò)整體與RetinaNet的backbone接近;YOLOV3的anchor是基于k-means生成,而且匹配策略是基于center和IoU的策略,訓(xùn)練loss是普通的sigmoid。

          對(duì)比之后,其實(shí)發(fā)現(xiàn)基于anchor的one stage檢測(cè)模型差異并沒(méi)有多大。

          參考

          1. Focal Loss for Dense Object Detection
          2. facebookresearch/detectron2
          3. Feature Pyramid Networks for Object Detection
          4. Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
          5. SSD: Single Shot MultiBox Detector
          6. Training Region-based Object Detectors with Online Hard Example Mining

          AI編輯:我是小將


          推薦閱讀

          堪比Focal Loss!解決目標(biāo)檢測(cè)中樣本不平衡的無(wú)采樣方法

          超越BN和GN!谷歌提出新的歸一化層:FRN

          深入理解注意力機(jī)制

          PyTorch重大更新:將支持自動(dòng)混合精度訓(xùn)練!

          另辟蹊徑!斯坦福大學(xué)提出邊界框回歸任務(wù)新Loss:GIoU

          人人必須要知道的語(yǔ)義分割模型:DeepLabv3+


          機(jī)器學(xué)習(xí)算法工程師


          ? ??? ? ? ? ? ? ? ? ? ? ? ??????????????????一個(gè)用心的公眾號(hào)


          ?


          瀏覽 37
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  能看的操逼视频 | 91天天爽| 中文字幕 欧美 日韩 | 国产精品一区二区性色AV | 欧美北条麻妃在线 |