def
multiboxprior
(feature_map,sizes=
[0.75
,0.5
,0.25
], ratios=[1
,2,0.5])
: pairs =
for r in ratios:
[sizes[0]
, math.sqrt(r)])
for s in sizes[1:
]:[s, math.sqrt(ratios[0]
)]) pairs = np.array(pairs)
# 生成相對於座標中心點的框(x,y,x,y)
ss1 = pairs[:,
0]* pairs[:,
1] ss2 = pairs[:,
0]/ pairs[:,
1] base_anchors = np.stack(
[-ss1,
-ss2, ss1, ss2]
, axis=1)
/2#將座標點和anchor組合起來生成hw(n+m-1)個框輸出
h, w = feature_map.shape[-2
:]shifts_x = np.arange(
0, w)
/ w shifts_y = np.arange(
0, h)
/ h shift_x, shift_y = np.meshgrid(shifts_x, shifts_y)
shift_x = shift_x.reshape(-1
) shift_y = shift_y.reshape(-1
) shifts = np.stack(
(shift_x, shift_y, shift_x, shift_y)
, axis=1)
anchors = shifts.reshape((-
1,1,
4))+ base_anchors.reshape((1
,-1,
4))return torch.tensor(anchors, dtype=torch.float32)
.view(1,
-1,4
)# 顯示
defshow_bboxes
(axes, bboxes, labels=
none
, colors=
none):
def_make_list
(obj, default_values=
none):
if obj is
none
: obj = default_values
elif
notisinstance
(obj,
(list
,tuple))
: obj =
[obj]
return obj
labels = _make_list(labels)
colors = _make_list(colors,
['b'
,'g'
,'r'
,'m'
,'c'])
for i, bbox in
enumerate
(bboxes)
: color = colors[i %
len(colors)
] rect = d2l.bbox_to_rect(bbox.detach(
).cpu(
).numpy(
), color)
axes.add_patch(rect)
if labels and
len(labels)
> i:
text_color =
'k'if color ==
'w'else
'w' axes.text(rect.xy[0]
, rect.xy[1]
, labels[i]
, va=
'center'
, ha=
'center'
, fontsize=
6, color=text_color,
bbox=
dict
(facecolor=color, lw=0)
)
def
compute_intersection
(set_1, set_2)
: lower_bounds = torch.
max(set_1[:,
:2].unsqueeze(1)
, set_2[:,
:2].unsqueeze(0)
)# (n1, n2, 2)
upper_bounds = torch.
min(set_1[:,
2:].unsqueeze(1)
, set_2[:,
2:].unsqueeze(0)
)# (n1, n2, 2)
intersection_dims = torch.clamp(upper_bounds - lower_bounds,
min=0)
# (n1, n2, 2)
return intersection_dims[:,
:,0]
* intersection_dims[:,
:,1]
# (n1, n2)
defcompute_jaccard
(set_1, set_2)
: intersection = compute_intersection(set_1, set_2)
areas_set_1 =
(set_1[:,
2]- set_1[:,
0])*
(set_1[:,
3]- set_1[:,
1])# (n1)
areas_set_2 =
(set_2[:,
2]- set_2[:,
0])*
(set_2[:,
3]- set_2[:,
1])# (n2)
union = areas_set_1.unsqueeze(1)
+ areas_set_2.unsqueeze(0)
- intersection
return intersection / union
樣式遷移:將某影象中的樣式應用在另一影象上。輸入影象分為內容影象和樣式影象。
一般情況下,靠近輸入層的輸出更容易抽取細節,反之更容易抽取全域性資訊,所以將靠近輸出的層用作內容層,其他選擇不同層輸出作為樣式層。
樣式遷移的損失函式由內容損失、樣式損失和總變差損失組成,是這三者的加權和。
機器學習可以進行區別性任務(discriminative learning),也可以進行生成式建模(generative modeling)。深度神經網路為識別學習開闢了新的可能性,如遞迴神經網路訓練後可以作為生成模型
2023年,一篇**介紹了乙個新模型:生成式對抗網路(gans),它利用識別模型來獲得效果良好的生成模型。其核心思想是:如果我們不能分辨出真實資料和生成的資料,那麼這個生成模型就是好的。
gan 結構如圖所示,首先由乙個生成器網路生成一些類似於真實資料的資料(或是影象、語音等)。再經過乙個判別器網路對真實資料和生成資料進行區分,此時,判別器在檢視辨別真偽,生成器在檢視欺騙,兩者相互競爭。
2023年提出了gan的公升級版本:dcgan,深層卷積生成對抗網路。它將借用卷積網路的結構,將gan更深層的運用在一些問題上。尤其是在計算機視覺識別問題上,dcgan非常成功。
深度學習CV中常用的資料集
資料集中為單通道,大小為28x28畫素 訓練集train images.idx3 ubyte,檔案大小47040016b,47040016 60000x28x28 16,測試集t10k images.idx3 ubyte,檔案大小7840016b,7840016 10000x28x28 16,其中資...
深度學習7日入門cv疫情特輯學習心得
直播內容包含兩個部分,理論和實踐,課後需要完成每次的作業和一次比賽。整個課程的內容還是比較豐富的,參加課程前還是需要掌握基本的python和深度學習基礎知識。其中幾次作業雖然標題不一樣,資料不一樣,本質上都是分類任務。day2對於不同的手勢進行分類,day3是對於切割後的車牌字元 省份簡稱和字母 數...
cv基礎組隊學習
影象彩色空間互轉在影象處理中應用非常廣泛,而且很多演算法只對灰度圖有效 另外,相比rgb,其他顏色空間 比如hsv hsi 更具可分離性和可操作性,所以很多影象演算法需要將影象從rgb轉為其他顏色空間,所以影象彩色互轉是十分重要和關鍵的 1.相關顏色空間的原理介紹 2.顏色空間互轉理論的介紹 3.o...