; q6 l; X5 Z3 h) z* U4 r3 u# o, x4 ?, f1 y
# getting the areas of the boxes 1 c& B% K4 T Q! }) C) O area = (boxes[:, 3] - boxes[:, 1]) * (boxes[:, 2] - boxes[:, 0])& K/ e' }8 x- R
) E! d f1 S" f8 P3 e/ j 0 m% v: t: f+ @: m6 s' j( v# \& | # suppose all instances are not crowd5 O- f7 s& Q |. L9 k3 N2 W7 H
iscrowd = torch.zeros((boxes.shape[0],), dtype=torch.int64) % @% H6 c1 L2 @! \) J( G/ ]1 x 4 x+ t- O3 J6 Q# H/ K. T! |, a6 J' O! K5 `) F$ v
labels = torch.as_tensor(labels, dtype=torch.int64)& p! G t! |' D1 b; X
- U( }7 }7 J1 _9 }3 M . o' \3 ^8 U# {9 t2 b1 a target = {} # L: y/ t+ S K* D1 |# i" b A target["boxes"] = boxes: Z9 L y% D# B: K0 q( [$ j2 _( n
target["labels"] = labels& _* M) t0 z! Z% X3 |" b6 @
target["area"] = area 2 K2 l6 {, f+ e2 ^7 G target["iscrowd"] = iscrowd* P$ f: V1 z( }) {4 n
# image_id3 J& J8 G# r' b7 i' n9 ^9 Y9 F) ]3 y" C; G
image_id = torch.tensor([idx]) # B+ N! }, U$ F: ?* g: f target["image_id"] = image_id+ S+ P( d. J7 @: Y( J: W4 j
7 J% A+ f3 H; ~9 ]2 m% N
7 T6 t \& b) w if self.transforms:% x# g% e: i( g0 F( D
sample = self.transforms(image=img_res,9 x/ m4 M% }1 r) d
bboxes=target['boxes'], / S; g* X) B: f. C8 l3 I labels=labels) ' l# I5 f, e ?& F/ o+ O* f* h3 D! B$ l$ U0 e
$ l- k+ R. n/ P, T- @& E
img_res = sample['image'] 6 H4 D. e9 M0 \ target['boxes'] = torch.Tensor(sample['bboxes'])1 F5 J# u% g1 k H/ u+ N, [4 k3 f
3 C+ @3 g# x, G- m/ R% C+ J
2 l6 }: ^5 X: w# D return img_res, target 7 K! ?1 u! p1 W! v, A( U3 i$ H: G+ M/ D
( H5 s$ ~* R/ R! z! L9 Q" R
def __len__(self): $ i: k3 Y1 e- N' P; N return len(self.imgs)1 j, T( ~; ?/ |" [& w
0 ?0 `% q# s8 u + h0 R) C5 L! v; s# function to convert a torchtensor back to PIL image 9 W8 V5 A" r8 Z1 qdef torch_to_pil(img):6 |( F: c0 R) |! l$ [
return torchtrans.ToPILImage()(img).convert('RGB') . C2 c4 M7 [3 }) @' f1 M; S+ ?' T/ {1 m
0 r) ^. J* {0 `; X O0 b
8 q6 `$ t# _ W5 J( Z+ B2 k/ R
# M& \; ~, S$ m' i
def plot_img_bbox(img, target):& [6 Z* s7 G0 T- @
# plot the image and bboxes9 |3 ~: v. s1 s- ]* l, E
fig, a = plt.subplots(1, 1) ' ?0 i" d$ S' ~3 B- I d# R fig.set_size_inches(5, 5)- h4 [6 }: w& S9 Q0 x* s
a.imshow(img) ' i" L: L v4 w1 Y+ s for box in (target['boxes']):. \2 _2 ?5 f% W
x, y, width, height = box[0], box[1], box[2] - box[0], box[3] - box[1]4 ?+ |" ~( h' ]
rect = patches.Rectangle((x, y),: O% w; [9 L7 L
width, height,' p/ k/ y! o7 O" R- E" ?0 X
linewidth=2, * u0 I5 K( u; g7 L, l edgecolor='r',. S- s# z5 o2 ^3 x+ J
facecolor='none') 3 ^0 O, A3 u7 `! Y6 z! t+ \3 m- |1 n' O3 ?* c$ L3 U3 C: n9 W
/ r) l* H' s2 j' S6 X
# Draw the bounding box on top of the image( o- g6 r4 Z( n8 Q
a.add_patch(rect) i, K/ t n/ O: f
plt.show() + J+ B( C9 o: f) B! J5 e4 N0 Q+ } ) m4 H0 ^ s! U2 k. [( m1 v8 Y 0 X3 v' y# B9 l: Y( `! q 5 ]! n& [4 A. Q1 J, b7 I* i7 N5 O- X" }0 g0 r
def get_transform(train):* h1 R) e$ k# a" Y/ `& B
if train:& v- E: ~9 T, Q% i2 \
return A.Compose([ 8 W% Z4 T' j. c: h( e A.HorizontalFlip(0.5),' Z7 Z' Z( v& v* ~% D1 \
# ToTensorV2 converts image to pytorch tensor without div by 2554 _& e! i' R% k" z7 b
ToTensorV2(p=1.0) ( d: O0 _7 z7 r `7 V& n ], bbox_params={'format': 'pascal_voc', 'label_fields': ['labels']}) $ P) y' g# D' F/ g4 [' m else:/ R. J3 D3 W p; N5 x% |+ k
return A.Compose([ + L N8 ~; ]1 ?6 V% y* r ToTensorV2(p=1.0)- k! }+ j' A0 m" |2 b- A" h6 I
], bbox_params={'format': 'pascal_voc', 'label_fields': ['labels']}) " l& w N$ [4 S% D: d, t% L% ~2 L* w1 q3 z) y, i0 D8 r
. S$ `/ F# j0 M9 b% O0 q' B( m- F Y4 X3 D1 T2 U) P3 J W1 o, N
, B% {4 ?9 g8 k( v; `! S6 X' I ~# ^& z. N6 ^0 m. ?& n
. V# s1 @- A# [8 W9 B) k
dataset = FruitImagesDataset(train_image_dir,train_xml_dir, 480, 480, transforms= get_transform(train=True))3 r& E+ K* k0 C; R; T
6 K$ c/ @" i6 N
! b/ L' {! K' Y; J9 K7 g* }print(len(dataset))9 [- y$ F- y2 L
# getting the image and target for a test index. Feel free to change the index.7 F" w( f Q/ P' n5 i
img, target = dataset[29] # H7 Y0 u t, a! ~& N4 {print(img.shape, '\n', target)7 I6 V U9 l3 P- @
plot_img_bbox(torch_to_pil(img), target) + r4 q# q* ~4 S' W$ a0 L0 \1$ M. q( I# Z2 v+ }+ ]
2 # ~* b# e. @6 V1 |9 p) b3 6 ]3 Q8 ?7 @$ y: P. a, @# _- c49 k' D; _1 ]5 s8 G& |: b7 N
5 1 U% f0 C0 l3 E6 0 m, i' ^. _" x, e7 ~4 M g7 F3 |* ]6 C, c4 B; D8 7 c" E3 }5 ]5 L/ D, j+ |9 % V5 D# Q6 G4 |. k& s: B8 L! ^' R" X10 6 K& U) \! ]2 U" ]! d( r11 9 K! Y+ ?* e6 B6 ?12 4 w! u6 i; [' a. B. T/ u) U13+ m% h* m6 z- H
14, P9 L* h$ ^( N0 n- H! q* Y9 `
15 ) n4 Y& }. ^0 P u16 ; @& E9 k- i6 } B( J17 # e% s2 Q) k+ F' j, R0 N18+ K1 T# V/ B9 H2 D* S. X l" v
19- p/ _2 G) g! i' L( u$ c0 v
20 3 j. v6 C: X8 Y0 w1 e) r21 8 I+ r0 v2 S4 g- V' Y- C; P22 * P8 J9 U, x+ b& X- w4 w0 `23( l) b { l5 B3 z: L+ u3 a3 h
241 O! I9 R7 f5 p( b, p2 M8 q
25* F* o+ m1 t( m
26. A% C" G2 j$ l* Q( A
27/ j) t) C0 i; G7 C# [9 t/ n2 \
28 ' k, F! E- z x9 E6 Y29% n9 _ c7 O0 E7 T
30& _% r1 a9 w4 `: W$ z* X+ V2 B
31 # j; b V" e) b2 F32 / F# H' x+ C6 t8 B( g# c33 : D8 B; ^8 l! d34 " F- }. ^2 [9 H- X35 6 k, [6 ~0 R/ U; p36- ]4 F* M/ H% p) j1 q8 T2 P
371 }; K/ Q0 X) O
38 6 e7 E6 X7 J( \" V% V: S39+ j" e2 l$ `& a
40; G( t, I6 c( Z9 k
41 ' f9 w8 f) A. U: a42 , r% E: W0 V; S: d4 h+ w43 4 k& a1 r+ Y* X4 I9 p440 @/ O2 D; V' x
452 k; V% M5 U. ]" p
46, ?- m+ l' n' {) s0 a; j6 j
47: T* a# X' W A% q0 a
48( K3 T8 e9 j. A2 P6 [
49 ' z B- G5 T( a' o5 p) l9 o$ W$ U50. c/ c( c2 }. F& [5 ~
51 ' v7 F+ N7 Z+ X. `$ } n2 i; B0 o523 A7 f# C- G: v. s
53 % |3 |% [7 Y1 J% K/ j/ V0 g54 , p% @& B7 F2 @1 v4 M558 u8 s& D7 X1 C0 v4 B
56 $ Q9 `4 {0 h! c) o( I7 D57 8 F& z/ m$ v n3 W58/ D# `' Q5 A7 A/ J3 F* _
59 4 g4 `" S6 `0 d4 s606 ~* r! q( G; r7 p
61! g- K# |+ @: g
62* g" i( e8 z# i' W. B4 p! Z* n
63! j, D7 f) N0 W$ h
64 ! c9 ^/ ]- x0 n/ s+ ~7 }0 L65 : p* ~, w( f7 x K66 " u3 _5 f4 T l67 0 d+ h5 J0 v" J: d" a& E3 E685 I6 R$ E3 K# ]9 \9 o% g- G+ f
699 n a7 t6 L5 @6 N8 W' M+ y1 J: t
70 0 q* J/ V( z5 O! ?8 B: Y- D6 U/ [# v71- J) n3 |% g8 Y% U' k
72% _$ ~; f3 b. g, {% U! l
73. r- A+ P, }! G* N8 v$ n/ f
74; }" l' Y+ g3 R# S+ W
75 4 q+ k k- j: D2 X) P$ r& b0 H7 H76 % P# K& n0 S1 d* ^8 S$ L1 R$ h. [77 ?+ f5 w2 X6 w* a- P% Y78+ H- r6 G6 D7 `8 F$ o+ o( ?; l
79 , X2 v0 F; T! V3 @5 c1 k80# A9 I4 U: v& r/ y" w
81; P: P+ q5 U: q; b8 {: B
826 ^; H$ t, a2 ~2 M; L6 q
831 W- x4 i; [* M; m$ t( m! e
84 & Y2 g: Q3 I& T; R85 * H( ~9 Z' e$ G0 W7 L! U86 0 A3 I! P' c' \! O87, i! y+ j) f$ p' r. Z
88$ b$ Z( V) G: D* D
89 , w: r/ W q% w3 H4 L4 ~90' L6 k: ` R. }- t
91 ) L* _+ C5 z+ ?92 / w' T8 H, p$ L& n8 q: _93: g( x1 j" c$ [
94 ' a0 D* i2 J7 s3 ]; C95 % F L9 K7 P, f1 |8 `; T96, o o! ^# T# k# C
97 . Z/ c6 w: u2 ^/ |988 r& n* \, o) X p: S
994 j' `# i: Y; |& t) K
100$ f- e* S. O( z% u. v* l
1019 P* ?: G9 v0 f. W3 S
102! w* o* n- s' w4 G0 a' E# P0 B; W0 q7 M
103 : k0 C; X. c9 o104 6 Y- x/ E* \1 ^1050 G0 L+ i: {) H" `0 j! R" N
106 ! O! u3 U: P6 {) a1 y' T O+ C& m107 - P- o0 J1 E. @7 t- v& i$ m108+ ^& Y5 H) Y4 z
109% |; L( U4 u' A& m! R7 j" S: t
110 ' G7 \/ }4 n7 M: j* ~111 # k2 j5 m$ s* n; B9 l# l112 $ ^% g _0 K* Y Y* L9 B+ K/ B: ~' a1137 U1 F7 N- f# _$ [1 M! q- {
114. ~+ t0 Q- T+ w
115) G& M# _2 g, I* E9 u+ |+ ~. q4 [
116 1 x5 _- s; h& M1177 {5 z6 L. }) H" ~# B7 N7 [
118' D/ j9 U! G" P. {. t6 Y2 @
119/ m% S! h8 o: [5 {. @2 C5 q
120 ' A+ \: r4 t; H- O0 `$ A* V3 x/ J121 . w6 i. l7 F5 a. L; d& H& K6 {/ S122 L2 P5 U t4 j1235 Y- Z2 V: J/ h; `8 h. D4 A1 R
124" O/ Q! N6 F# t% |" \3 H/ e
1256 ?8 k! i% |! g: R, U
126 , }5 Z4 P/ b N' K% G: l& d127 3 w Q* t- O( Y/ {# o* F2 N1 {( J128 5 f" C) v# c' _! N/ S+ L* _( I9 K% u129# p( {& P! w9 R/ a5 }
130 & q- q+ P8 z. K0 q' V9 T( ~131 9 }: G5 a; _3 u' W132 ; g) ^/ e8 Z8 j( p1330 x X, n. y, b$ J$ ]
134 * d/ l( A3 P+ x( p135+ w7 y. e6 z# Z+ S1 @3 l; m* F/ L- G
136 ) C* D" `& A: y$ w2 ]137- R: E q1 i, L3 w5 X, O5 L' L( m
1380 V6 K" D+ f7 t' m& M g
139- f3 ?- C' u0 d
140 9 }6 @1 r* z D: j+ ~5 ~& s141" x) H, e+ r7 \& [' O# `; G7 A# x
1420 |/ K; N% i5 u% v
143 . N9 [ n; p7 x9 p# o144 $ `! v9 b/ z. B8 ]( y0 K145 3 Y) X! r& C/ D5 m146 1 J: l+ @" R* r" }7 T147 & w( ?! |5 Q4 [0 k148 & Q9 {- h: D0 X+ _7 {149 0 G3 L& J$ ?) C3 |) P$ @150 % `, [" f1 e9 o+ g( o151& u3 s9 j) c; Y
152% y0 O& L! r" g, A! ?$ m3 Q1 a9 O
153 ) ]9 n+ B3 h4 u154 ( {* g9 N) Y6 y! M3 A8 E1558 q3 ]5 j$ ^" F
156: G9 c7 V9 y9 n- t2 h$ L
输出如下: ; k7 E" @" A @, G ?% w3 U+ B- y; Z% J9 m; E1 l! J! c+ l J; H% O& B& v5 Z
torch.Size([3, 480, 480]) : E* s) Y8 M ~3 J8 ~, i {'boxes': tensor([[130.8000, 97.8000, 327.6000, 292.2000],$ P+ Y: q" s) s( t/ e+ I% O
[159.0000, 268.8000, 349.8000, 427.8000],7 o+ ?1 E s" N4 n- }
[ 0.0000, 282.0000, 118.2000, 429.6000], 4 R" K3 W: h' O6 A* z [ 43.8000, 107.4000, 199.2000, 280.2000],6 ^' T+ z4 w# }, P! k1 a* l
[295.2000, 37.8000, 479.4000, 248.4000]]), 'labels': tensor([0, 0, 0, 0, 0]), 'area': tensor([38257.9258, 30337.2012, 17446.3223, 26853.1270, 38792.5195]), 'iscrowd': tensor([0, 0, 0, 0, 0]), 'image_id': tensor([29])} / V2 O1 ~, c% K- {0 S$ B. [3 c1 u7 h7 ^# c3 ~) [5 I2 # L: n. j) P3 W7 @5 {1 H3: d! p. N4 W2 s$ z% _( X& z
4 : M! U) M# L$ h% B( A5 - K7 L0 E4 b; c* q* A6" `# _/ L: O& o6 p% n4 p$ `
3 ], N/ K, a; F. i+ B
4 {/ _& ^# D% Z* s
/ O% G% n! K+ H5 W/ j
2 ^! Q3 k" @, C( T下载地址 # D. L( y y, f0 T9 u& J链接:https://pan.baidu.com/s/1QZDgeYTHyAlD2xhtJqZ-Yw 0 @/ y! P6 J; w! `3 Y. T# }提取码:srjn - G' M7 x* l1 n0 {" N————————————————$ p, Z( V* b( R! N. s
版权声明:本文为CSDN博主「刘润森!」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 ! g+ y$ z$ f p+ c1 x% t( b$ \5 |原文链接:https://blog.csdn.net/weixin_44510615/article/details/118496273# I& ?1 `; H$ D4 G) q" b
7 K0 t" E& q1 K5 C2 W) z
, r4 x* x- e6 l% `* a# c