8 p7 M1 c) c \+ _9 I 1 f3 z8 @% V) y( L Q$ y使用notepad++打开源文件夹中的data/predefined_classes.txt,修改默认分类,如person、car、motorcycle这三个分类。0 y/ l0 e) q; `* Q
2 i. i, J8 L1 x
* o. U! B" c. i; n* g% G
“打开目录”打开图片文件夹,选择第一张图片开始标注,用“创建矩形框”或“Ctrl+N”启动框,点击结束框,双击选择类别。完成一张图片点击“保存”保存后,XML文件已经保存到本地了。单击“下一张图片”转到下一张图片。$ D4 E/ g( x, A. E, `: V; W, X' U7 K
# ` k& [& F, S
9 b: P1 N/ a) R def __len__(self): 0 u x; [) P& K' g4 a7 R return len(self.imgs) % L0 w9 s# p* N$ F# Y5 ~# ~7 v6 a% g* \6 X
4 u; W: k" o1 D. ^5 ~
# function to convert a torchtensor back to PIL image3 a5 l0 x, l! H4 ?# R
def torch_to_pil(img):: w0 ~3 F% w7 g( Y; G$ i1 h
return torchtrans.ToPILImage()(img).convert('RGB') 6 x: I1 t5 Y- {: \9 K6 s2 U9 D* \2 M. [; y1 j
% H. c: h3 s4 N! l) e' o
' U6 }' R; q4 k3 T$ ?6 I" p- v; n' W! w) d( \: F
def plot_img_bbox(img, target):& C1 {: S6 G2 l. t* o- \
# plot the image and bboxes G: Q; B4 k! K6 g
fig, a = plt.subplots(1, 1) - ]. e# M7 @' W, w7 @' Q. e# l fig.set_size_inches(5, 5) & z+ ]. q* ?4 u, M" e a.imshow(img)) C0 c. L& o5 Z8 B
for box in (target['boxes']): - c1 ^: ], x0 {- T% P x, y, width, height = box[0], box[1], box[2] - box[0], box[3] - box[1]# X, v. w: L; }1 i3 ^
rect = patches.Rectangle((x, y), & Y `: U* N: b: h6 Y' y9 t width, height, ( V( B' y' i6 a* z% O% s* ] linewidth=2,# h" z1 h1 I w- P6 k/ w
edgecolor='r', 8 _ f0 Y2 I e0 H9 p facecolor='none')$ ]2 Z* W% ?0 O) S- ]" C
1 W- b$ P$ l+ Q$ z# o- V- U$ K" ~3 z4 C5 B$ [0 ?; O. \
# Draw the bounding box on top of the image( B2 t( p! E- m; l5 p
a.add_patch(rect) - O- Q/ o2 P# y8 S% j/ E plt.show() $ u' U& o& P" B3 @# g 5 f) ]: A. y4 r/ \2 v) Q* d% h( @# t) D* ^6 w( m ]1 A
+ z4 X& N0 K/ z, B+ A1 L
' h% k$ J8 f4 n+ k4 d$ R7 Zdef get_transform(train): : w- Q. o8 I \8 D( K6 s if train:- |7 N) h" n. T( ?
return A.Compose([ + a4 B/ q4 h; f$ _+ C. U, X% r, |/ W A.HorizontalFlip(0.5),% Q- {- p) t4 K+ [ c9 J& T
# ToTensorV2 converts image to pytorch tensor without div by 255# l. D6 v" w2 k) b0 W* P
ToTensorV2(p=1.0) 8 B# R8 ^+ f O# ~( C) ^( K/ ~ ], bbox_params={'format': 'pascal_voc', 'label_fields': ['labels']}) ]; |2 t7 c* N/ o! D( s% k
else:# r! L' W; ?# [/ W }
return A.Compose([ ) v6 A% w v3 |& ]7 w+ d ToTensorV2(p=1.0)2 e/ K$ N* e2 B+ B4 ~
], bbox_params={'format': 'pascal_voc', 'label_fields': ['labels']})3 o% \ n# ^1 N8 s. M* x1 j
" w8 K! l/ G4 ^5 C( X
4 j6 I$ O( z5 A: N
! l. x+ P3 ]2 m7 ]5 V' ^) E: F8 Z 3 s B+ Z x [# c 6 u3 Y" U W0 S% a6 a) N$ c) h. K) C8 s
dataset = FruitImagesDataset(train_image_dir,train_xml_dir, 480, 480, transforms= get_transform(train=True))# T* y) o# Y( \4 n1 _2 q
* k- e( Z8 }. L6 r4 c3 o# F* W8 w& O/ L# n; x" c
print(len(dataset)) / R: h# C, d3 x# getting the image and target for a test index. Feel free to change the index. ) Y2 c4 V5 r- W5 H) W$ l7 G, Limg, target = dataset[29]* n& n9 P, e! U
print(img.shape, '\n', target) 0 z$ z! d/ w; Z$ X' V0 P$ Wplot_img_bbox(torch_to_pil(img), target)& `0 U8 w; P( Y# D% I8 D [8 u y
1 , C; l/ I! ? f2 6 R. L! p: \+ J5 e7 y' Q' s8 V3, c0 d9 e' c9 }4 r
4' j( f' J& s& t9 H* L
51 e* _2 H; m7 {$ O5 I( M8 X
6 + B# d3 Y: u6 W1 f" z5 I! y7 + `6 v$ h& U2 n- ~" `8 ! C* l* }$ K, ~7 T9& k s+ i4 @7 N# k( R
10 , Y2 [7 I: x. b11 + V7 {, w0 O5 ` Y; r12 ; C' q* [: S! U/ c13 ) \' n# `) _5 F" B$ _# } G6 v6 V148 q8 L9 L, `8 A# o' U3 v
15, I& O! [8 ~- }! z( {& s
168 c% _2 ?0 _! F5 T- u
17; i7 x: i; b% d' Z/ M7 u+ n
18. w+ v8 Q0 |8 g | C
19 ; X% G& r; ^* z; o/ \# ^: w20 M- D4 I8 r6 x+ D21( Z7 a" [4 P( ?1 ^2 m- S- s' w
22 / v- j6 S ~2 E' [/ }235 ^$ D( }& B6 b3 }, C& j
24 % U3 V3 |7 W' @9 m6 t: D. s25$ a0 _! E: h% S
26' f( M2 u$ [4 N. C# h) K- n6 j
27 $ w% V6 k. W7 S( J7 I5 Z" U28" ?6 G. W! s1 n# W4 B
29! J9 N- ]3 J9 s' i& K% M- l6 e% [' s
306 {9 ?& b" R/ P
31 / b; ?8 }- K9 j$ Q; ~32 * x8 I: a1 x4 G5 Z8 a33. m% G% B3 b: w
34 " d% e5 J3 H. f; k" ^* s. K+ @350 x5 u; l$ s7 U" e0 {; Y
36 0 f" m& W" b, U3 M4 J3 U37 9 J) T* |9 ^6 g1 a5 n5 p38 ! Y4 f, i) Q3 Q39 8 L2 K* p! }7 H( z40+ H* t+ |7 a( |5 s, E
41) J4 F6 H4 l9 _' _: V
42 * O; F- d( C( E! n" m' d. v43$ X7 A6 `0 }; v6 Q$ c' y
44- l1 d: _) k! o9 p& v
45 : F, ]" ?4 W: C' o H! _460 z+ d8 ?6 q# o
47% L1 P0 Y. g& y0 P! x8 f( Q
481 x# u/ l' D+ Z0 s2 s2 G
49* Z! ?' S- a0 E$ }) r: p- ^
50+ ?/ q4 F# x1 q% G$ c
515 R% F0 i+ l1 ]$ q. V0 @* f
52 ! e; u( h7 _7 J( x53% x. N* i& ?6 k9 v* K
54 1 M7 X9 T) [5 B( O; c550 y$ _& e; X$ B4 d
56# o0 F: S2 j8 V- o; J, A' K$ |* B
57 8 |. z9 q: R; b2 o2 o2 C5 ^58 ' a1 T/ n3 y3 R8 x59/ O. ?) H2 _( H
60% ~4 w& Q, M" u v* b4 j
61 & p. n/ g& a" @62! j- c3 I1 n1 i1 o3 I6 N9 ^4 h
63 # y ^, C g6 N64 ) h4 t5 S9 h: ^0 l4 }* |65 1 ?2 Z+ \7 P/ x: n m66 ! R6 H( ?- a C- @. z674 j" p/ t2 a0 h8 M& o/ J9 _
68 7 T4 ?% j) [9 D( F69) k- p3 I U% {9 E( r3 d, y
70 6 @" W/ `3 B2 y: L716 k. Y3 w4 h2 F: C* T$ t0 C
72 9 W7 d( ]* s9 E) S1 U% B P/ h73) e! k2 H9 o: l- l% W' a/ w
74 ( L" [; p8 V2 X" ^. `753 O6 ?3 a2 C4 l, A( _
76 , n$ l6 D( B5 y" d: W3 |77 6 h0 H! A1 a! n" E+ K& p78$ J5 {/ }; z9 Y* `. r0 A! T
79 - s* h+ m4 }+ j5 C/ S80 & N8 S2 ~2 B( s( @0 G# k3 i" P5 l' i81; N" ]* L+ V& l
82 2 Q; p! m3 y) W4 E" b837 a# P. F* _" R6 ]. K& z
843 g$ i& T+ u% Y* W* M3 N$ t6 @# r
85- Z$ X3 }7 [; W" a0 _
86& Q% d- _' \" N# e9 T' r! g2 }9 L
87# y2 t# y" g; N- R% H U0 `/ t) Z$ k# h
88. h; B u$ N9 q3 k; n" a" x0 _
89 ) U& O5 A$ s5 r: }900 ~1 k1 k/ _$ z3 F
91 : V+ d2 k! {8 r& e2 F- U! m7 [6 O& Q92- x. k. v$ ^+ j. x6 r4 o
936 n* u+ t. @9 c+ Z
94 ' R3 j9 J4 }! ]95 ; o, Z4 l; l. g8 b( e( q& r% j96# p- H4 D( P: m8 b8 _# P; I
97/ E1 e$ w% x: K( b5 ?1 A1 z
980 ]. d. P+ o2 d" k- g
99 + u K' u6 k6 ^( o5 q/ ?100 * W- X3 W: F+ u101 ' c- U2 {+ l. s# m' E102) K! t4 S6 C5 N, \. {" l
103 3 p' n( ]( h8 \+ q1 `104; X3 n& r; w9 W! F
105 # L- Q1 ]: v# ^+ S$ U0 R n& b2 ^106 9 w( C' y6 t3 ~' d* R3 ^" Q0 g107 . S( H# d; ?, z9 @# {, K ]' n108 & T/ c4 P m2 J6 c6 L5 |9 l- g109 k; p, ~3 v. q/ R. _! o# y
110* B# W$ h5 f+ N# `# }
111' Q( i4 F3 _! y7 W* ?0 O# r& r+ F
112 & H1 i8 e. H. s& _0 N0 l9 }* `113 # Q! n: k( E. W# j3 b114( o- K' {3 I8 W4 `
115( e g. @; A6 R3 }0 y' {% ?
116 : A9 O: z q. p* j117* A6 q- r& ]- b, q2 b7 R9 K, T5 C/ K
118 3 P+ }1 V7 A$ F" V6 h- u4 \119, @; T* k* u. W7 f! p
1203 L3 X2 R4 ]; E Q6 _' h
121 7 G4 u! t4 Y4 y( W& E, X5 G$ R5 Y! c" w122 + K0 H" q, r/ q! p2 H9 y; R123 3 u* M# w* X( S124/ a3 ?5 j( ?8 {5 s
125! G; T* R) ~6 g# G
126: q- t7 \" M- z' S% B @
127 ( j- E2 D: \- q" Z128$ s6 ~$ G2 S% Z! p, F2 ^1 ~
129 5 ?2 s: `6 z* e( T: ~3 J1309 x$ l3 u8 n3 `
131. p2 _% S0 a" R6 i5 |# T
132! |" U. z8 P* w# U. o& v4 T: Y
133 7 l2 Q: e! i L+ F134 3 U# X( @1 o3 O% _135. h( `& O5 S4 N+ v& C/ c- i
1365 Q4 X9 V/ V% x4 V- I! E8 y
137" ]- Q: j) v& @; t; H
138 ) V# ~1 K0 @1 J# x' l) t v1395 t- x1 Z( H/ y, `1 t% ]) V2 V
140 4 K" [* \8 _& Q9 m141 ! j: b% A" k8 j142 ! Q2 [' Y0 \9 V$ R3 U9 _143+ r, h. H9 {. L6 p
144 ` ]# s3 V) W+ I* D6 s2 C145 6 Y2 [: Q+ f& k. Y" ~1 r+ G1461 d. `+ M0 _. K5 q
147 2 }3 u% B- ~0 I7 P% ^148 * S% ~1 p. E/ y& |6 d0 }, Y7 G4 \149+ j& ?/ o2 G# _: e
150* B/ g2 ?9 |& p' D( p
151 1 a! s. c- E3 {( M152, |) j5 L4 K4 n- G( Z
153" {9 c0 J0 L- _. j! b# r' Y
1549 o' @$ _# F$ ~, u3 c0 L" p
155, _6 v* V% |9 o+ U
156" w, B% }% x( F7 J2 [
输出如下: 2 u+ a/ i0 o4 W$ }2 {6 X+ Q - `, g, E. z1 }3 Z! H' u. Z 3 m& ]& d. s* ^: J1 b6 storch.Size([3, 480, 480]) * i- X' p7 v* E* P {'boxes': tensor([[130.8000, 97.8000, 327.6000, 292.2000], $ N8 c% P5 X9 b/ C, [ [159.0000, 268.8000, 349.8000, 427.8000],4 t4 H8 s4 o6 Q9 d" f7 h0 J9 M& ]
[ 0.0000, 282.0000, 118.2000, 429.6000], ! Z* e1 e6 s* b [ 43.8000, 107.4000, 199.2000, 280.2000], & w% Z4 O: X/ h$ X, ~4 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])}0 b/ o8 Q2 [5 N# F" l( u( j
1 ' E3 V; h( i+ ~2 8 z: t" G2 ^( x% J4 b3 . V5 y- z# h) \4 j2 w) N7 H$ y4) N) I4 }# [: T3 |2 z( h+ L
5 ! o# y4 e! V. x9 l, n! ?, S- v6 0 U; ~5 @5 v9 S3 C7 u / e: `% n/ ~. w6 E+ x8 m 9 Q9 f4 E0 B! X' J5 f( l ) p9 O4 `* S, D5 O: p* ~6 ^1 D. k8 w
下载地址 4 F% N5 R& x& R6 o, T: w链接:https://pan.baidu.com/s/1QZDgeYTHyAlD2xhtJqZ-Yw , P ?! N% m5 {, B2 Q0 h& i8 g提取码:srjn5 }) v' w+ }: a" v: I2 x
———————————————— 4 c% H* V' d6 x6 |8 p版权声明:本文为CSDN博主「刘润森!」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。- V, \- K: i; n/ l5 O( y$ w7 D6 c
原文链接:https://blog.csdn.net/weixin_44510615/article/details/118496273# c8 r! f. f2 \* C8 p
' ~8 C! K. K5 I/ S2 e 2 ~' D: K2 f! r. [* i8 W; U* |