generated from github/welcome-to-github
-
Notifications
You must be signed in to change notification settings - Fork 0
/
feed.xml
399 lines (383 loc) · 56.5 KB
/
feed.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><generator uri="https://jekyllrb.com/" version="4.3.4">Jekyll</generator><link href="https://caodoanh2001.github.io/feed.xml" rel="self" type="application/atom+xml"/><link href="https://caodoanh2001.github.io/" rel="alternate" type="text/html" hreflang="en"/><updated>2024-12-17T04:18:59+00:00</updated><id>https://caodoanh2001.github.io/feed.xml</id><title type="html">blank</title><subtitle>A simple, whitespace theme for academics. Based on [*folio](https://github.com/bogoli/-folio) design. </subtitle><entry><title type="html">Thank you! Dr. Hung</title><link href="https://caodoanh2001.github.io/blog/2024/thank-you-dr-Hung/" rel="alternate" type="text/html" title="Thank you! Dr. Hung"/><published>2024-11-25T00:00:00+00:00</published><updated>2024-11-25T00:00:00+00:00</updated><id>https://caodoanh2001.github.io/blog/2024/thank-you-dr-Hung</id><content type="html" xml:base="https://caodoanh2001.github.io/blog/2024/thank-you-dr-Hung/"><![CDATA[<h1 id="thank-you-dr-hung">Thank you! Dr. Hung</h1> <p>Throughout my master’s journey, I would like to express my sincere gratitude to Dr. Hung, who is currently a postdoctoral researcher at Chonnam National University. Together, we have shared some of the most challenging and joyful moments in both research and life. Dr. Hung has also guided me significantly in taking my first steps toward studying abroad in Korea, and I deeply appreciate his support.</p> <p>Additionally, Dr. Hung and I collaborated on several manuscripts. For me, this experience was not just about conducting research; it was also an opportunity for us to understand each other better, which brought us much closer.</p> <p>Without a doubt, if I had not met Dr. Hung in Korea, my life would have been much more difficult. Once again, thank you so much, Dr. Hung, my big brother.</p> <p><img src="https://caodoanh2001.github.io/assets/img/hungdoanh.jpg" data-canonical-src="https://caodoanh2001.github.io/assets/img/hungdoanh.jpg" width="800" height="400"/></p>]]></content><author><name></name></author><category term="sample-posts"/><category term="formatting"/><category term="links"/><summary type="html"><![CDATA[Thank you! Dr. Hung]]></summary></entry><entry><title type="html">Hàn du thi tập</title><link href="https://caodoanh2001.github.io/blog/2023/han-du-thi-tap/" rel="alternate" type="text/html" title="Hàn du thi tập"/><published>2023-12-29T00:00:00+00:00</published><updated>2023-12-29T00:00:00+00:00</updated><id>https://caodoanh2001.github.io/blog/2023/han-du-thi-tap</id><content type="html" xml:base="https://caodoanh2001.github.io/blog/2023/han-du-thi-tap/"><![CDATA[<h1 id="hàn-du-thi-tập-tập-thơ-sáng-tác-ở-hàn">Hàn du thi tập (Tập thơ sáng tác ở Hàn)</h1> <h2 id="lời-nói-đầu">Lời nói đầu</h2> <p>Kính chào quý bằng hữu,</p> <p>Tại hạ là Doanh (Công Danh), xin phép được gửi đến quý bằng hữu, những người cùng sở thích thi ca một tập thơ mà tại hạ đã sáng tác trong quá trình làm việc và sinh sống tại Thủ Nhĩ, Đại Hàn.</p> <p>Trong tập thơ này, tại hạ giới thiệu một số bài thơ mà tại hạ viết ở thể 5 chữ, hoặc 7 chữ, hoặc thơ 6-8. Tại hạ đặc biệt thích thể loại thơ 7 chữ, theo luật Đại Đường (thất ngôn tứ tuyệt Đường luật).</p> <p>Các bài thơ tại hạ viết chủ yếu có chủ đề về <strong>nhân sinh</strong> và <strong>tình yêu</strong>, và hầu hết được sáng tác vào lúc 1-2 giờ sáng, lúc mà tâm trạng dâng trào nhất. Về chủ đề <strong>nhân sinh</strong>, tại hạ thường viết về góc nhìn của mình về cuộc đời với tâm trạng hơi u tối một chút, nhưng đâu đó vẫn có màu tươi sáng. Về <strong>tình yêu</strong>, tại hạ thường viết về chủ đề mối tình đã lỡ. Câu cú có phần một chút trách móc, nhưng tiếc thương một mối tình đã lỡ, và da diết tôn trọng.</p> <p>Các bài thơ sẽ có các lỗi trong cách gieo vần, dùng từ. Nếu đọc thơ khiến các bằng hữu không thoải mái, tại hạ rất xin lỗi, và luôn đó nhận những lời góp ý.</p> <p>Mời quý bằng hữu thưởng thơ.</p> <p>Kính bút,</p> <p>Công Danh</p> <h2 id="lập-thu-đại-hàn">Lập Thu Đại Hàn</h2> <p>Lập thu nơi xóm nhỏ</p> <p>Cho nỗi niềm chơi vơi</p> <p>Đôi điều còn bỏ ngõ</p> <p>Tìm đâu phía chân trời.</p> <p>Công Danh, 6.9.2023</p> <h2 id="cầu-vồng-tình-lỡ">Cầu vồng tình lỡ</h2> <p>Cầu vồng đẹp nhất sau mưa</p> <p>Ngày em đẹp nhất là vừa xa anh</p> <p>Buồn nào rồi cũng trôi nhanh</p> <p>Nhưng thành vết xẹo khó lành về sau</p> <p>Công Danh, 11.9.2023</p> <h2 id="miền-đất-khác">Miền đất khác</h2> <p>Một vệt nắng cuối trời</p> <p>Cho chiều buồn man mác</p> <p>Liệu một miền đất khác</p> <p>Có nỗi niềm chơi vơi?</p> <p>Công Danh, 12.9.2023</p> <h2 id="lửa-thủ-đô">Lửa thủ đô</h2> <p><em>Bài thơ tỏ lòng tiếc thương cho các nạn nhân của một vụ cháy kinh hoàng ở thủ đô Hà Nội</em></p> <p>Ở giữa lòng thủ đô</p> <p>Một màu buồn man mác</p> <p>Trời đêm mưa lác đác</p> <p>Lửa hóa kiếp hư vô…</p> <p>Công Danh, 14.9.2023</p> <h2 id="tình-tan">Tình tan</h2> <p>Đượm nắng lập thu cuối chiều ta</p> <p>Niệm về ngày cũ vốn phôi pha</p> <p>Hoàng hôn chớm tắt, hồn vô ngã</p> <p>Chôn giấu tình tan, em với ta.</p> <p>Ánh mắt ai đậm đà</p> <p>Tiếng cười ai giòn giã,</p> <p>Tâm tư ai la cà</p> <p>Không phải em, là lá…</p> <p>Công Danh và Minh Niên, 20.9.2023</p> <h2 id="hạnh-phúc-mới">Hạnh phúc mới</h2> <p><em>Bài thơ được sáng tác từ bài hát Hạnh phúc mới, nhưng đổi vai hai nhân vật nam và nữ.</em></p> <p>Ngày hôm nào em nói</p> <p>Mình chia tay thôi anh</p> <p>Nghe như lời trăn trối</p> <p>Gạt lệ buồn phai nhanh.</p> <p>Anh à, đừng buồn nữa</p> <p>Tình nào cũng thế thôi</p> <p>Hợp, yêu, tan, rồi mất</p> <p>Còn nỗi lòng đơn côi.</p> <p>Em đang ở đâu đó</p> <p>Để nỗi niềm chơi vơi</p> <p>Hồn em bay theo gió</p> <p>Tìm em cuối chân trời…</p> <p>Công Danh, 8.10.2023</p> <h2 id="sài-gòn-nhỏ">Sài Gòn nhỏ</h2> <p><em>Bài thơ được sáng tác rất lâu, nhưng đến ngày này mới hoàn chỉnh</em></p> <p>Có một Sài Gòn nhỏ</p> <p>Con phố đông người qua</p> <p>Có chuyến xe buýt nọ</p> <p>Từng chở cuộc tình ta.</p> <p>Ngày đôi mình chia xa,</p> <p>Hạ vẫn còn vương nắng</p> <p>Tình ngọt chợt thành đắng</p> <p>Chỉ còn dằm trong tim.</p> <p>Đôi mắt anh lim dim</p> <p>Mơ về ngày ngây dại</p> <p>Thấy em quay nhìn lại</p> <p>Như tình mình chưa phai.</p> <p>Công Danh, 12.10.2023</p> <h2 id="cầu-sông-hậu">Cầu sông Hậu</h2> <p>Nhớ về ngày cũ còn đâu,</p> <p>Bóng hình em gái hát câu gọi đò</p> <p>Ngân vang sông Hậu câu hò</p> <p>Giờ đây chẳng phải đi đò sang ngang</p> <p>Ai về Châu Đốc, An Giang,</p> <p>Qua cậu sông Hậu, gửi nàng yêu thương.</p> <p>Công Danh, 11.11.2023</p> <h2 id="một-kiếp-người">Một kiếp người</h2> <p><em>Bài thơ sáng tác để tiếc thương cho một người bà của một người bạn đã mất.</em></p> <p>Thoáng chốc là xong một kiếp người</p> <p>Hồng trần vướng bận cứ buông lơi</p> <p>Người đi về chốn hồn thanh thản</p> <p>Để lại ngàn năm nỗi đau đời.</p> <h2 id="các-bản-dịch-bài-thơ-nổi-tiếng-của-william-shakespeare">Các bản dịch bài thơ nổi tiếng của William Shakespeare</h2> <p>Ở phần này, tại hạ giới thiệu các bằng hữu bản dịch do tại hạ thực hiện cho một bài thơ nổi tiếng dưới phong cách của các nhà thơ lớn của thi văn Việt Nam.</p> <p>Bản gốc:</p> <blockquote> <p>You say that you love rain, but you open your umbrella when it rains.</p> <p>You say that you love the sun, but you find a shadow spot when the sun shines.</p> <p>You say that you love the wind, but you close your windows when wind blows.</p> <p>This is why I am afraid, you say that you love me too</p> </blockquote> <h3 id="bản-dịch-phong-cách-xuân-diệu">Bản dịch phong cách Xuân Diệu:</h3> <p>Em nói rất thích mưa</p> <p>Sao tìm dù mà tránh</p> <p>Em thích nhìn nắng hạ</p> <p>Sao đi tìm nơi râm.</p> <p>Em từng nói rằng em yêu gió lộng</p> <p>Vậy mà sao giờ chốt cửa cài then</p> <p>Chợt thổn thức, anh thẹn cười bẽn lẽn</p> <p>Thế thì còn… lời em nói yêu anh?</p> <h3 id="bản-dịch-phong-cách-hàn-mặc-tử">Bản dịch phong cách Hàn Mặc Tử:</h3> <p>Sao em không còn yêu mưa nhỉ?</p> <p>Mà kéo dù lên tránh ướt mi</p> <p>Rồi kêu thích nắng, yêu hương Hạ</p> <p>Thế núp nơi râm là nghĩa gì?</p> <p>Em nói rằng yêu, gió vừa qua</p> <p>Thế sao cửa đóng, rèm bung ra?</p> <p>Bỗng nhiên anh thấy thật không ổn</p> <p>Ai biết tình em có đậm đà…</p> <h3 id="bản-dịch-phong-cách-tố-hữu">Bản dịch phong cách Tố Hữu:</h3> <p>Từng nói yêu mưa, giờ khác lạ</p> <p>Rồi chợt mưa đến lấy ô ra</p> <p>Và em từng thì thầm yêu nắng</p> <p>Nắng rọi lên thì chẳng thiết tha.</p> <h3 id="bản-dịch-phong-cách-nguyễn-thị-hinh-bà-huyện-thanh-quan">Bản dịch phong cách Nguyễn Thị Hinh (Bà Huyện Thanh Quan):</h3> <p>Nhớ nói trời mưa thích thế mà</p> <p>Chẳng mưa to mấy lấy ô ra</p> <p>Sao em muốn ngắm trời hừng nắng</p> <p>Nắng rọi lên cao lại núp nhà</p> <p>Ngắm gió mây làm em thích thích</p> <p>Bây giờ chốt cửa tránh xa xa</p> <p>Chợt sao thấy lạ lời em nói</p> <p>Thật giả tình yêu, em với ta.</p>]]></content><author><name></name></author><category term="sample-posts"/><category term="formatting"/><category term="links"/><summary type="html"><![CDATA[Tập thơ sáng tác tại Hàn]]></summary></entry><entry><title type="html">Faster R-CNN - Phương pháp phát hiện đối tượng 02 giai đoạn và lịch sử</title><link href="https://caodoanh2001.github.io/blog/2023/faster-rcnn/" rel="alternate" type="text/html" title="Faster R-CNN - Phương pháp phát hiện đối tượng 02 giai đoạn và lịch sử"/><published>2023-07-08T13:50:00+00:00</published><updated>2023-07-08T13:50:00+00:00</updated><id>https://caodoanh2001.github.io/blog/2023/faster-rcnn</id><content type="html" xml:base="https://caodoanh2001.github.io/blog/2023/faster-rcnn/"><![CDATA[<h2 id="lời-dẫn">Lời dẫn</h2> <p>Phát hiện đối tượng là một trong các bài toán cơ sở của lĩnh vực Thị giác máy tính, và hiện vẫn được nghiên cứu rất sôi nổi. Mỗi năm, tại các hội nghị lớn như CVPR, ICCV, ECCV, ICLR đều xuất hiện các công bố liên quan đến bài toán này. Nhận thấy phát hiện đối tượng là bài toán quan trọng và là nền tảng giúp phát triển các bài toán khác trong thực tế, nhóm sinh viên lựa chọn và thực hiện tìm hiểu về bài toán này.</p> <h2 id="các-nghiên-cứu-trước-khi-có-faster-r-cnn">Các nghiên cứu trước khi có Faster R-CNN</h2> <p>Hiện nay, các phương pháp phát hiện đối tượng được phân thành 02 loại: 02 giai đoạn và 01 giai đoạn. Đối với 01 giai đoạn sẽ được chia thành 02 nhánh phương pháp khác: anchor-free và anchor-based. Tuy nhiên, trong nội dung tiểu luận này, nhóm sinh viên chỉ tìm hiểu về phương pháp Faster R-CNN, và phương pháp này thuộc nhóm phương pháp 02 giai đoạn. Trước khi Faster R-CNN ra đời, đã có sự xuất hiện của 02 phương pháp: R-CNN và Fast R-CNN, trong đó Fast R-CNN là một cải tiến vô cùng hiệu quả của R-CNN, và Faster R-CNN là một bước phát triển lớn từ Fast R-CNN. Để trình bày Faster R-CNN, nhóm sinh viên sẽ nói lại sơ qua về phương pháp R-CNN và Fast R-CNN.</p> <h3 id="r-cnn">R-CNN</h3> <p>Vào thời điểm trước khi nhóm phương pháp R-CNN ra đời, các phương pháp phát hiện đối tượng thường dựa vào đặc điểm của ảnh như màu sắc, và các thuật toán sử dụng mang hơi hướng phân cụm. R-CNN ra đời đánh dấu kỷ nguyên sử dụng kỹ thuật học sâu cho bài toán phát hiện đối tượng.</p> <p><img src="https://i.imgur.com/wxFZHHH.png" alt=""/> Hình 1. Minh họa phương pháp R-CNN [1].</p> <p>Phương pháp này có thể được mô tả đơn giản như sau: đầu tiên thuật toán <strong>selective search</strong> sẽ chọn ra khoảng $N$ vùng trên ảnh có khả năng cao chứa đối tượng. Thuật toán này chủ yếu dựa vào các đặc điểm bức ảnh như màu sắc. Trong bài báo gốc, các tác giả sử dụng \(N = 2000\), tức sẽ có \(2000\) vùng được đề xuất trên ảnh. Từ 2000 vùng này, ta sẽ tiến hành cắt ra từ ảnh gốc, và một mạng CNN sẽ được sử dụng để trích xuất đặc trưng của 2000 vùng ảnh này. Sau đó, từ lớp đặc trưng cuối cùng sẽ đi qua 1 lớp FC để tính toán một bộ offset \((\delta x, \delta y, \delta w, \delta h)\), trong đó \((\delta x, \delta y)\) là offset tọa độ tâm của đối tượng, \((\delta w, \delta h)\) là offset chiều rộng và chiều cao của đối tượng. Như vậy, mạng sẽ học cách bo sát đối tượng và phân lớp đối tượng từ N vùng truyền vào ban đầu. Đối tượng sẽ được phân lớp bằng thuật toán SVM (Support Vector Machine).</p> <blockquote> <p>Q: offset là gì?</p> </blockquote> <blockquote> <p>A: offset gọi là phần bù. Tức là ban đầu selective search chọn ra 2000 vùng. 2000 vùng này đều có tọa độ (x, y, w, h). Tuy nhiên nó chưa bo sát đối tượng, ta cần một nhánh FC học cách bo sát, nhưng ta không học ra tọa độ chính xác, mà từ tọa độ ở selective search ta căn chỉnh lại, đó gọi là offset.</p> </blockquote> <p>Vậy ở đây chúng ta thấy điều gì? R-CNN phải thực hiện trích xuất đặc trưng cho \(2000\) vùng ảnh, như thế rất tốn thời gian. Cuộc sống luôn phải vận động và phát triển, do đó Fast R-CNN ra đời để khắc phục điểm yếu chí mạng này của R-CNN.</p> <h3 id="fast-r-cnn">Fast R-CNN</h3> <p>Về cơ bản, Fast R-CNN vẫn giữ ý tưởng 02 giai đoạn của R-CNN. Selective Search vẫn được sử dụng để tìm 2000 vùng có khả năng chứa đối tượng, tuy nhiên điểm khác biệt ở đây là Fast R-CNN <strong>trích xuất đặc trưng ảnh trước</strong>, sau đó mới sử dụng selective search để tìm ra 2000 vùng đặc trưng. Do đó, ta chỉ cần đưa 2000 vùng đặc trưng này để tiếp tục xử lý mà không cần rút trích lại. Điều này là một bước ngoặt, vì nó đã tăng tốc độ xử lý lên rất nhiều (\(\times 18.3\)) cho huấn luyện và \(\times 146\) cho suy luận) nhưng vẫn giữ được độ chính xác.</p> <p><img src="https://i.imgur.com/ZBggmRI.png" alt=""/> Hình 2. Minh họa mô hình Fast R-CNN [2].</p> <p>Một điều cải tiến khác, Fast R-CNN không dùng SVM để phân lớp đối tượng nữa, mà tác giả gắn vào mạng một đầu FC để phân lớp. Tức là bây giờ chúng ta có 02 lớp FC, 1 lớp FC để phân lớp đối tượng, 1 lớp FC còn lại để tính toán bộ offset để căn chỉnh tọa độ đối tượng lại cho chính xác (giống như bên R-CNN).</p> <p>Cùng xem lại bảng kết quả so sánh giữa R-CNN và Fast R-CNN. Có thể thấy</p> <p><img src="https://i.imgur.com/IrW35vU.png" alt=""/></p> <p>Hình 3. Kết quả so sánh giữa Fast R-CNN và R-CNN [2].</p> <p>Hình 3 là hình chụp kết quả từ bài báo gốc của Fast R-CNN. Có thể thấy rằng Fast R-CNN có kết quả tương đương với R-CNN, nhưng tốc độ vượt trội hơn rất nhiều. Tuy nhiên ý tưởng sử dụng 1 lớp FC để phân lớp chỉ vượt trội ở việc phát hiện các đối tượng lớn (L), các loại đối tượng nhỏ (S), trung bình (M) có hiệu quả phát hiện tương đương như R-CNN. Tuy nhiên với tốc độ vượt trội thế này thì không có lý do gì phải dùng R-CNN nữa.</p> <p>Tuy nhiên, Fast R-CNN vẫn có điểm yếu chí mạng của nó. Đó là việc lựa chọn vùng đề xuất vẫn dựa vào thuật toán Selective Search. <em>Liệu có cách nào cải tiến chính xác hơn ở điểm này hay không? Một cách tiếp cận khác mà nó tự học để đề xuất luôn.</em></p> <p>Trên đây nhóm sinh viên cung cấp một cái nhìn tương đối đầy đủ về hoàn cảnh ra đời của Faster R-CNN. Phần dưới đây nhóm sinh viên sẽ trình bày kỹ hơn về Faster R-CNN.</p> <h2 id="faster-r-cnn">Faster R-CNN</h2> <p>Khắc phục điểm yếu chí mạng của Fast R-CNN, Faster R-CNN ra đời với hai điểm nổi bật duy nhất:</p> <ul> <li>Mạng đề xuất khu vực (Regional Proposal Network), gọi tắt là RPN. Mạng này được huấn luyện để phát hiện các vùng trên ảnh khả năng cao chứa đối tượng. Nói một cách đơn giản, RPN sẽ thay thế Selective Search.</li> <li>Cơ chế chia sẻ trọng số giữa RPN và Fast R-CNN.</li> </ul> <p>Đơn giản dễ hiểu, Faster R-CNN là sự kết hợp của RPN và mạng Fast R-CNN đã trình bày ở phía trên. Sau đó các tác giả đã thử các cơ chế chia sẻ trọng số khác nhau để kết hợp hoàn hảo hai thứ này. Dưới đây chúng ta sẽ tìm hiểu kỹ về mạng đề xuất khu vực. Đáng chú ý, Faster R-CNN được công bố tại hội nghị NeurlPS, là một hội nghị có những công bố mang tính bước ngoặt. Vì lẽ đó, Faster R-CNN được coi là một bước ngoặt. Faster R-CNN không còn là một phương pháp, Faster R-CNN đã là một hệ tư tưởng khi nhắc về nhóm phương pháp 02 giai đoạn. Dưới đây nhóm sinh viên sẽ trình bày kỹ về mạng đề xuất khu vực, và cơ chế chia sẻ trọng số - những thứ làm nên thành công của Faster R-CNN.</p> <h3 id="mạng-đề-xuất-khu-vực-regional-proposal-network">Mạng đề xuất khu vực (Regional Proposal Network)</h3> <p>Như đã nói, mạng đề xuất khu vực sẽ được dùng để đề xuất các vùng khả năng cao chứa đối tượng thay cho thuật toán Selective Search. Gọi nó là “mạng” vì nó có “học”. Thế làm sao để chúng ta huấn luyện được mạng này?</p> <p><img src="https://i.imgur.com/POeFrpv.png" alt=""/></p> <p>Hình 4. Minh họa cách chọn mẫu của Faster R-CNN [3].</p> <p>Để huấn luyện được mạng RPN, chúng ta cần tạo dữ liệu cho nó học, cơ chế này được gọi là chọn mẫu (sampling). Để giải thích về cơ chế này, dễ nhất các bạn đọc quan sát Hình 4. Từ đặc trưng của ảnh (conv feature map), sẽ có một cửa sổ trượt có kích thước \(N \times N\) (sliding window) trượt qua một cách lần lượt. Tại mỗi lần trượt, nó sẽ tạo ra \(k\) anchor box.</p> <blockquote> <p>Q: khoan khoan, dừng lại khoảng chừng là 2 giây. Anchor box là gì vậy? A: anchor box là một khái niệm chỉ các “hộp neo” được định nghĩa trước, làm tiền đề cho các bước phía sau. Tại sao gọi là “hộp neo”, vì nó sẽ tạm thời neo đậu, dựa vào các hộp neo đậu này mà bằng một cách nào đó chúng ta sẽ sử dụng nó để xác định đối tượng trên ảnh. Khái niệm này sẽ còn gặp lại ở các nhóm phương pháp 01 giai đoạn.</p> </blockquote> <p>\(k\) anchor box có \(k\) kích thước khác nhau, trong bài báo gốc, tác giả chọn \(k=9\). Mỗi anchor box sẽ được gán 2 thứ:</p> <ul> <li>Lớp nhị phân xác định nó có đối tượng hay không. Nếu anchor box đó được xác định là mẫu có chứa đối tượng, ta gán là \(1\), ngược lại là \(0\).</li> <li>Tọa độ của anchor box, bao gồm 04 phần tử \((x, y, w, h)\).</li> </ul> <p>Thế thì làm sao chúng ta xác định được liệu 1 anchor box có chứa đối tượng hay không? Câu trả lời đơn giản là ta đi so với mẫu dữ liệu thật. Mỗi 1 anchor box sẽ được đi tính toán độ đo IoU với các hộp dự đoán thật (ground-truth), sau đó ta sẽ lấy giá trị IoU cao nhất của anchor box đó so với các ground-truth. Anchor box đó sẽ được chọn là mẫu \(1\) khi \(IoU > 0.7\), và chọn là mẫu \(0\) khi \(IoU \leq 0.3\). Vậy còn một đoạn từ \((0.3, 0.7]\) ta sẽ không chọn.</p> <p>Như vậy, bây giờ ta đã có một tập dữ liệu bao gồm các anchor box có đối tượng và anchor box không đối tượng cho mạng RPN học.</p> <p>Để huấn luyện ta cần định nghĩa một hàm mất mát tối ưu hóa đa mục tiêu: 1) xác định có hoặc không chứa đối tượng (phân lớp nhị phân); 2) hồi quy tọa độ. Hàm mất mát để huấn luyện RPN được định nghĩa như sau:</p> \[L(\{p_i\}, \{t_i\}) = \frac{1}{N_{cls}} \sum_i L_{cls} (p_i, \hat p_i) + \lambda \frac{1}{N_{reg}} \sum_i \hat p_i L_{reg}(t_i, \hat t_i)\] <p>Trong đó, \(L_{cls}\) là hàm binary cross-entropy, còn \(L_{reg}\) là hàm mất mát hồi quy \(SmoothL1\); \(\hat p_i\) là phân phối xác suất dự đoán hộp đề xuất có đối tượng hay không, \(p_i\) là nhãn thật sự; \(\hat t_i\) là tọa độ dự đoán đã được tham số hóa; \(t_i\) là tọa độ thật đã được tham số hóa, \(t=\{t_x, t_y, t_w, t_h\}\) và \(\hat t=\{\hat t_x, \hat t_y, \hat t_w, \hat t_h\}\) được định nghĩa như sau:</p> <p>\(t_x = (x - x_a) / w_a; \hat t_x = (\hat x - x_a) / w_a\) \(t_y = (y - y_a) / h_a; \hat t_y = (\hat y - y_a) / h_a\) \(t_w = \log (w / w_a); \hat t_w = \log (\hat w / w_a)\) \(t_h = \log (h / h_a); \hat t_h = \log (\hat h / h_a)\)</p> <p>Trong đó, \(x\), \(\hat x\), \(x_a\) lần lượt là hoành độ tâm thật sự của hộp bao, hoành độ tâm dự đoán của hộp bao và hoành độ tâm anchor box. \(y\), \(\hat y\), \(y_a\) là tung độ tâm. Như thế ta có thể thấy, ở đây RPN không cố gắng để dự đoán các vị trí giống như hộp mỏ neo (vì nếu thế thì sử dụng hộp mỏ neo luôn cần gì học nữa), mà nó sẽ cố gắng dự đoán các vùng đề xuất lân cận các anchor box, mà tại đó có nhiều hộp bao ground-truth.</p> <p>Thực tế, RPN sinh ra rất nhiều hộp đề xuất, trong khi chúng ta chỉ cần \(N=2000\) hộp đề xuất. Có nhiều hộp đề xuất ban đầu bị chồng lấp lên nhau, lúc này tác giả sử dụng thuật toán non maximum suppression (NMS) với ngưỡng \(IoU=0.7\) để loại đi các hộp đề xuất chồng lấp, chỉ giữ lại \(2000\) hộp đề xuất để đưa vào Fast R-CNN huấn luyện. Tuy nhiên, khi huấn luyện thì \(N=2000\), trong khi đó lúc đánh giá (test) thì \(N\) là một con số khác (nhỏ hơn 2000).</p> <h3 id="cơ-chế-chia-sẻ-trọng-số-giữa-rpn-và-fast-r-cnn-sharing-convolutional-features">Cơ chế chia sẻ trọng số giữa RPN và Fast R-CNN (Sharing Convolutional Features)</h3> <p>Việc huấn luyện RPN và Fast R-CNN được thực hiện độc lập chứ không end-to-end. Lý do của việc này rất dễ hiểu: rất khó để huấn luyện hai thứ này cùng một lúc. Fast R-CNN cần có một cơ chế sinh mẫu cố định (sinh ra các hộp đề xuất) để học, và bản thân Fast R-CNN cũng có một hàm tối ưu hóa tương tự như RPN (tổng của hàm mất mát phân lớp đối tượng và hàm mất mát hồi quy, nhưng hàm mất mát ở Fast R-CNN dùng cho đa lớp). Do đó không biế rằng nếu cơ chế sinh mẫu liên tục thay đổi (liên tục cập nhật trọng số lại ở RPN) thì mạng hợp nhất này có hội tụ được hay không. Do đó, tác giả đã đề xuất một cơ chế huấn luyện chia sẻ trọng số gồm 4 bước sau đây:</p> <ul> <li>Bước 1: Huấn luyện RPN trước</li> <li>Bước 2: Đóng băng trọng số ở RPN, sử dụng mạng RPN vừa học được sinh ra các vùng đề xuất cho mạng Fast R-CNN.</li> <li>Bước 3: Dùng trọng số vừa học được ở mạng Fast R-CNN làm trọng số khởi tạo của mạng RPN ở các lớp tích chập (RPN và Fast R-CNN chia sẻ trọng số ở một số lớp tích chập), và chỉ fine-tune các lớp tích chập của riêng FPN và 2 lớp FC.</li> <li>Bước 4: Đóng băng trọng số ở mạng RPN vừa học để sinh các mẫu cho Fast R-CNN, và chỉ fine-tune Fast R-CNN ở 2 lớp FC.</li> </ul> <h3 id="kết-quả-so-với-fast-r-cnn">Kết quả so với Fast R-CNN</h3> <p><img src="https://i.imgur.com/cV1APRP.png" alt=""/></p> <p>Hình 5. Kết quả so sánh giữa việc sử dụng RPN và thuật toán Selective Search [3].</p> <p>Có thể thấy, việc sử dụng thuật toán Selective Search cho kết quả thấp hơn khi sử dụng RPN. Hơn nữa, tốc độ xử lý của Fast R-CNN sử dụng RPN (Faster R-CNN) cũng nhanh hơn sử dụng thuật toán Selective Search. Vừa tốt hơn vừa nhanh hơn, Faster R-CNN đã trở thành một “hệ tư tưởng”.</p> <h2 id="hướng-dẫn-huấn-luyện-thử-faster-r-cnn">Hướng dẫn huấn luyện thử Faster R-CNN</h2> <p>Faster R-CNN khá khó để có thể code from scratch. Do đó, trong nội dung bài viết này, nhóm sinh viên hướng dẫn bạn đọc cách huấn luyện thử một mô hình Faster R-CNN thông qua toolbox MMDetection [4].</p> <p>Lưu ý: source code được thực nghiệm trên Google Colab.</p> <p>Trong bài này, nhóm sinh viên sử dụng bộ dữ liệu UIT-VinaDeveS22 được cung cấp ở đây: https://github.com/nguyenvd-uit/uit-together-dataset/blob/main/UIT-VinaDeveS22.md</p> <p>UIT-VinaDeveS22 là bộ dữ liệu phát hiện phương tiện giao thông từ camera CCTV, các phương tiện trong bộ dữ liệu bao gồm: bicycle, motorcycle, car, van, truck, bus, fire truck.</p> <p><img src="https://i.imgur.com/xZDJryF.png" alt=""/> Hình 6. Hình ảnh bộ dữ liệu UIT-VinaDeveS22</p> <h3 id="1-cài-đặt-thư-viện">1. Cài đặt thư viện</h3> <p>Đầu tiên, chúng ta cần clone toolbox MMDetection từ Github về, sau đó cài đặt các thư viện cần thiết:</p> <ul> <li>Bước 1.1: git clone thư mục code <pre><code class="language-[python3]">!git clone https://github.com/open-mmlab/mmdetection
</code></pre> </li> <li>Bước 1.2: cài đặt thư viện <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># Cài đặt thư viện
%cd mmdetection
!pip install -r requirements.txt
!pip install -v -e .
!pip install mmcv-full==1.3.8 -f https://download.openmmlab.com/mmcv/dist/cu101/torch1.7.0/index.html
!pip install torch==1.7.1 torchvision==0.8.2 torchaudio==0.7.2
</code></pre></div> </div> </li> </ul> <h3 id="2-import-thư-viện">2. Import thư viện</h3> <ul> <li>Bước 2.1: ta import các thư viện liên quan cần dùng, ở đây chúng ta cần import <code class="language-plaintext highlighter-rouge">mmdet</code>, <code class="language-plaintext highlighter-rouge">mmcv</code>.</li> </ul> <pre><code class="language-[python3]"># Dùng để build config
import mmdet
from mmdet.apis import set_random_seed
from mmcv import Config
# Dùng để xây dựng dataset
from mmdet.datasets import build_dataset
from mmdet.models import build_detector
from mmdet.apis import train_detector
# Dùng để dự đoán
from mmdet.apis import init_detector, inference_detector, show_result_pyplot
import mmcv
</code></pre> <h3 id="3-chuẩn-bị-dữ-liệu">3. Chuẩn bị dữ liệu</h3> <p>Tải dữ liệu tại đây: https://drive.google.com/file/d/1NhsIWyPdqF2KDqPWU926eZwCLk0gtjnv/view?usp=sharing</p> <p>Ta có thể tải bằng lệnh sau:</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>!gdown --id 1NhsIWyPdqF2KDqPWU926eZwCLk0gtjnv
</code></pre></div></div> <p>Sau khi tải, chúng ta giải nén dữ liệu bằng lệnh <code class="language-plaintext highlighter-rouge">unzip</code></p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>!unzip UIT-VinaDeveS22.zip
</code></pre></div></div> <p>Bộ dữ liệu được tổ chức theo cấu trúc sau:</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>UIT-VinaDeveS22
|__ images
|____ *.jpg
|__ outputtrain.json
|__ outputvalid.json
|__ outputtest.json
</code></pre></div></div> <p>Thư mục <code class="language-plaintext highlighter-rouge">images</code> chứa toàn bộ ảnh của bộ dữ liệu. 3 file <code class="language-plaintext highlighter-rouge">ouputtrain.json</code>, <code class="language-plaintext highlighter-rouge">outputvalid.json</code> và <code class="language-plaintext highlighter-rouge">outputtest.json</code> là 3 file annotation đã được chuẩn bị theo định dạng MS-COCO ứng với 3 tập: train, valid, test.</p> <h3 id="4-chuẩn-bị-config">4. Chuẩn bị config</h3> <p>Bước này khá quan trọng. Hiện tại MMDetection đã hỗ trợ cho chúng ta rất nhiều config của nhiều phương pháp SOTA cho phát hiện đối tượng hiện tại, lên tới vài chục phương pháp. Tuy nhiên, chúng ta chỉ sử dụng config dành cho Faster R-CNN.</p> <ul> <li>Bước 4.1: Config trong MMDetection được thiết kế theo cơ chế kế thừa, tức là từ config chuẩn bị sẵn, chúng ta sẽ tinh chỉnh cho phù hợp với bộ dữ liệu của chúng ta. Đầu tiên ta cần xác định config cha mà chúng ta sẽ kế thừa</li> </ul> <pre><code class="language-[python3]">cfg = Config.fromfile('configs/faster_rcnn/faster_rcnn_r101_fpn_1x_coco.py')
</code></pre> <p><code class="language-plaintext highlighter-rouge">faster_rcnn_r101_fpn_1x_coco.py</code> là file config của phương pháp Faster R-CNN, sử dụng kiến trúc CNN ResNet-101 để trích xuất đặc trưng ảnh (là các lớp conv chung của mạng RPN và Fast R-CNN). Trong đó có sử dụng FPN (một cơ chế multi-scale feature map, tức là thay vì qua mạng CNN chỉ có 1 đầu ra thì nó sẽ có nhiều đầu ra với các resolution khác nhau).</p> <ul> <li>Bước 4.2: Ta cần định nghĩa lại dữ liệu. MMDetection hỗ trợ các bộ dữ liệu sẵn có như COCO, sử dụng bộ dữ liệu khác ta cần định nghĩa lại các lớp. Tuy nhiên do cấu trúc bộ dữ liệu cũng giống như COCO, ta chỉ kế thừa nó về chỉnh lại các lớp sao cho phù hợp:</li> </ul> <pre><code class="language-[python3]">from mmdet.datasets.builder import DATASETS
from mmdet.datasets import CocoDataset
@DATASETS.register_module()
class VinaDeveS22(CocoDataset):
CLASSES = ('bicycle', 'motorcycle', 'car', 'van', 'truck', 'bus', 'fire truck')
</code></pre> <ul> <li>Bước 4.3: ta đặt đường dẫn cho tập dữ liệu, bao gồm đường dẫn ảnh, annotation cho tập train, test, valid:</li> </ul> <pre><code class="language-[python3]"># Đường dẫn dữ liệu
import os
data_root_dir = '/content/drive/MyDrive/BDL_UIT/UIT-VinaDeveS22/'
# Chuẩn bị config
cfg = Config.fromfile('configs/faster_rcnn/faster_rcnn_r101_fpn_1x_coco.py')
# Modify dataset type and path
cfg.data_root = data_root_dir
cfg.data.test.type = 'VinaDeveS22'
cfg.data.test.ann_file = os.path.join(data_root_dir, 'outputtest.json')
cfg.data.test.img_prefix = os.path.join(data_root_dir, 'images')
cfg.data.train.type = 'VinaDeveS22'
cfg.data.train.ann_file = os.path.join(data_root_dir, 'outputtrain.json')
cfg.data.train.img_prefix = os.path.join(data_root_dir, 'images')
cfg.data.val.type = 'VinaDeveS22'
cfg.data.val.ann_file = os.path.join(data_root_dir, 'outputvalid.json')
cfg.data.val.img_prefix = os.path.join(data_root_dir, 'images')
</code></pre> <ul> <li>Bước 4.4: Một số cấu hình khác như số epoch để save checkpoint 1 lần, learning rate, đường dẫn lưu checkpoint, số lớp cần classify của mô hình, …</li> </ul> <pre><code class="language-[python3]"># Một số cấu hình khác
cfg.optimizer.lr = 0.02 / 8
cfg.lr_config.warmup = None
cfg.log_config.interval = 500
# We can set the evaluation interval to reduce the evaluation times
cfg.evaluation.interval = 1
# We can set the checkpoint saving interval to reduce the storage cost
cfg.checkpoint_config.interval = 3
# Set seed thus the results are more reproducible
cfg.seed = 0
set_random_seed(0, deterministic=False)
cfg.gpu_ids = range(1)
# Số class
cfg.model.roi_head.bbox_head.num_classes = 7
# Đường dẫn lưu checkpoints
cfg.work_dir = './checkpoints'
</code></pre> <h3 id="5-xây-dựng-model-và-huấn-luyện">5. Xây dựng model và huấn luyện</h3> <p>Ta tiến hành xây dựng mô hình dựa trên config đã chuẩn bị:</p> <pre><code class="language-[python3]"># Build dataset
datasets = [build_dataset(cfg.data.train)]
# Build the detector
model = build_detector(cfg.model, train_cfg=cfg.get('train_cfg'), test_cfg=cfg.get('test_cfg'))
# Add an attribute for visualization convenience
model.CLASSES = ('bicycle', 'motorcycle', 'car', 'van', 'truck', 'bus', 'fire truck')
</code></pre> <p>Tiến hành huấn luyện:</p> <pre><code class="language-[python3]">train_detector(model, datasets, cfg, distributed=False, validate=True)
</code></pre> <p>Log khi huấn luyện:</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>2022-06-20 02:41:11,989 - mmdet - INFO - Start running, host: root@1aa12ebaa861, work_dir: /content/drive/MyDrive/LvThs_OCR/mmdetection/checkpoints
2022-06-20 02:41:11,997 - mmdet - INFO - Hooks will be executed in the following order:
before_run:
(VERY_HIGH ) StepLrUpdaterHook
(NORMAL ) CheckpointHook
(NORMAL ) EvalHook
(VERY_LOW ) TextLoggerHook
--------------------
before_train_epoch:
(VERY_HIGH ) StepLrUpdaterHook
(NORMAL ) EvalHook
(NORMAL ) NumClassCheckHook
(LOW ) IterTimerHook
(VERY_LOW ) TextLoggerHook
--------------------
before_train_iter:
(VERY_HIGH ) StepLrUpdaterHook
(LOW ) IterTimerHook
--------------------
after_train_iter:
(ABOVE_NORMAL) OptimizerHook
(NORMAL ) CheckpointHook
(NORMAL ) EvalHook
(LOW ) IterTimerHook
(VERY_LOW ) TextLoggerHook
--------------------
after_train_epoch:
(NORMAL ) CheckpointHook
(NORMAL ) EvalHook
(VERY_LOW ) TextLoggerHook
--------------------
before_val_epoch:
(NORMAL ) NumClassCheckHook
(LOW ) IterTimerHook
(VERY_LOW ) TextLoggerHook
--------------------
before_val_iter:
(LOW ) IterTimerHook
--------------------
after_val_iter:
(LOW ) IterTimerHook
--------------------
after_val_epoch:
(VERY_LOW ) TextLoggerHook
--------------------
2022-06-20 02:41:11,999 - mmdet - INFO - workflow: [('train', 1)], max: 12 epochs
loading annotations into memory...
Done (t=0.01s)
creating index...
index created!
[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] 173/173, 8.1 task/s, elapsed: 21s, ETA: 0s2022-06-20 02:44:30,061 - mmdet - INFO - Evaluating bbox...
Loading and preparing results...
DONE (t=0.15s)
creating index...
index created!
Running per image evaluation...
Evaluate annotation type *bbox*
DONE (t=2.42s).
Accumulating evaluation results...
2022-06-20 02:44:33,060 - mmdet - INFO - Epoch(val) [1][327] bbox_mAP: 0.0060, bbox_mAP_50: 0.0200, bbox_mAP_75: 0.0010, bbox_mAP_s: 0.0090, bbox_mAP_m: 0.0060, bbox_mAP_l: 0.0000, bbox_mAP_copypaste: 0.006 0.020 0.001 0.009 0.006 0.000
DONE (t=0.36s).
Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.006
Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=1000 ] = 0.020
Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=1000 ] = 0.001
Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.009
Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.006
Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.000
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.029
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=300 ] = 0.029
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=1000 ] = 0.029
Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.050
Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.027
Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.000
[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] 173/173, 8.0 task/s, elapsed: 21s, ETA: 0s2022-06-20 02:47:51,860 - mmdet - INFO - Evaluating bbox...
Loading and preparing results...
DONE (t=0.15s)
creating index...
index created!
Running per image evaluation...
Evaluate annotation type *bbox*
DONE (t=2.47s).
Accumulating evaluation results...
2022-06-20 02:47:54,962 - mmdet - INFO - Epoch(val) [2][327] bbox_mAP: 0.0280, bbox_mAP_50: 0.0750, bbox_mAP_75: 0.0150, bbox_mAP_s: 0.0180, bbox_mAP_m: 0.0340, bbox_mAP_l: 0.0140, bbox_mAP_copypaste: 0.028 0.075 0.015 0.018 0.034 0.014
DONE (t=0.40s).
Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.028
Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=1000 ] = 0.075
Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=1000 ] = 0.015
Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.018
Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.034
Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.014
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.092
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=300 ] = 0.092
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=1000 ] = 0.092
Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.051
Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.071
Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.095
2022-06-20 02:50:51,428 - mmdet - INFO - Saving checkpoint at 3 epochs
[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] 173/173, 7.9 task/s, elapsed: 22s, ETA: 0s2022-06-20 02:51:15,654 - mmdet - INFO - Evaluating bbox...
Loading and preparing results...
DONE (t=0.02s)
creating index...
index created!
Running per image evaluation...
Evaluate annotation type *bbox*
DONE (t=2.22s).
Accumulating evaluation results...
2022-06-20 02:51:18,523 - mmdet - INFO - Epoch(val) [3][327] bbox_mAP: 0.0970, bbox_mAP_50: 0.2000, bbox_mAP_75: 0.0800, bbox_mAP_s: 0.0340, bbox_mAP_m: 0.0750, bbox_mAP_l: 0.0900, bbox_mAP_copypaste: 0.097 0.200 0.080 0.034 0.075 0.090
DONE (t=0.42s).
Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.097
Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=1000 ] = 0.200
Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=1000 ] = 0.080
Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.034
Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.075
Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.090
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.158
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=300 ] = 0.158
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=1000 ] = 0.158
Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.084
Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.117
Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.161
[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] 173/173, 8.1 task/s, elapsed: 21s, ETA: 0s2022-06-20 02:54:37,466 - mmdet - INFO - Evaluating bbox...
Loading and preparing results...
DONE (t=0.03s)
creating index...
index created!
Running per image evaluation...
Evaluate annotation type *bbox*
DONE (t=2.27s).
Accumulating evaluation results...
2022-06-20 02:54:40,383 - mmdet - INFO - Epoch(val) [4][327] bbox_mAP: 0.0960, bbox_mAP_50: 0.2050, bbox_mAP_75: 0.0710, bbox_mAP_s: 0.0400, bbox_mAP_m: 0.0910, bbox_mAP_l: 0.0930, bbox_mAP_copypaste: 0.096 0.205 0.071 0.040 0.091 0.093
DONE (t=0.41s).
Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.096
Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=1000 ] = 0.205
Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=1000 ] = 0.071
Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.040
Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.091
Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.093
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.166
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=300 ] = 0.166
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=1000 ] = 0.166
Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.092
Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.152
Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.162
[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] 173/173, 8.1 task/s, elapsed: 21s, ETA: 0s2022-06-20 02:57:58,671 - mmdet - INFO - Evaluating bbox...
Loading and preparing results...
DONE (t=0.14s)
creating index...
index created!
Running per image evaluation...
Evaluate annotation type *bbox*
DONE (t=1.36s).
Accumulating evaluation results...
2022-06-20 02:58:00,468 - mmdet - INFO - Epoch(val) [5][327] bbox_mAP: 0.1600, bbox_mAP_50: 0.3140, bbox_mAP_75: 0.1440, bbox_mAP_s: 0.0670, bbox_mAP_m: 0.1430, bbox_mAP_l: 0.1490, bbox_mAP_copypaste: 0.160 0.314 0.144 0.067 0.143 0.149
DONE (t=0.25s).
Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.160
Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=1000 ] = 0.314
Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=1000 ] = 0.144
Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.067
Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.143
Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.149
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.238
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=300 ] = 0.238
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=1000 ] = 0.238
Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.125
Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.218
Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.232
2022-06-20 03:00:58,010 - mmdet - INFO - Saving checkpoint at 6 epochs
[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] 173/173, 7.6 task/s, elapsed: 23s, ETA: 0s2022-06-20 03:01:22,836 - mmdet - INFO - Evaluating bbox...
Loading and preparing results...
DONE (t=0.15s)
creating index...
index created!
Running per image evaluation...
Evaluate annotation type *bbox*
DONE (t=1.80s).
Accumulating evaluation results...
2022-06-20 03:01:25,153 - mmdet - INFO - Epoch(val) [6][327] bbox_mAP: 0.2180, bbox_mAP_50: 0.4040, bbox_mAP_75: 0.2040, bbox_mAP_s: 0.1180, bbox_mAP_m: 0.2210, bbox_mAP_l: 0.1760, bbox_mAP_copypaste: 0.218 0.404 0.204 0.118 0.221 0.176
DONE (t=0.31s).
Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.218
Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=1000 ] = 0.404
Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=1000 ] = 0.204
Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.118
Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.221
Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.176
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.321
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=300 ] = 0.321
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=1000 ] = 0.321
Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.175
Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.347
Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.261
[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] 173/173, 8.1 task/s, elapsed: 21s, ETA: 0s2022-06-20 03:04:44,056 - mmdet - INFO - Evaluating bbox...
Loading and preparing results...
DONE (t=0.02s)
creating index...
index created!
Running per image evaluation...
Evaluate annotation type *bbox*
DONE (t=1.84s).
Accumulating evaluation results...
2022-06-20 03:04:46,289 - mmdet - INFO - Epoch(val) [7][327] bbox_mAP: 0.2310, bbox_mAP_50: 0.4290, bbox_mAP_75: 0.2300, bbox_mAP_s: 0.1720, bbox_mAP_m: 0.2770, bbox_mAP_l: 0.1790, bbox_mAP_copypaste: 0.231 0.429 0.230 0.172 0.277 0.179
DONE (t=0.31s).
Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.231
Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=1000 ] = 0.429
Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=1000 ] = 0.230
Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.172
Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.277
Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.179
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.369
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=300 ] = 0.369
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=1000 ] = 0.369
Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.256
Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.407
Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.306
[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] 173/173, 8.0 task/s, elapsed: 22s, ETA: 0s2022-06-20 03:08:05,146 - mmdet - INFO - Evaluating bbox...
Loading and preparing results...
DONE (t=0.01s)
creating index...
index created!
Running per image evaluation...
Evaluate annotation type *bbox*
DONE (t=1.78s).
Accumulating evaluation results...
2022-06-20 03:08:07,322 - mmdet - INFO - Epoch(val) [8][327] bbox_mAP: 0.2610, bbox_mAP_50: 0.4790, bbox_mAP_75: 0.2570, bbox_mAP_s: 0.1560, bbox_mAP_m: 0.2850, bbox_mAP_l: 0.2110, bbox_mAP_copypaste: 0.261 0.479 0.257 0.156 0.285 0.211
DONE (t=0.31s).
Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.261
Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=1000 ] = 0.479
Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=1000 ] = 0.257
Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.156
Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.285
Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.211
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.379
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=300 ] = 0.379
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=1000 ] = 0.379
Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.223
Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.392
Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.337
2022-06-20 03:11:04,360 - mmdet - INFO - Saving checkpoint at 9 epochs
[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] 173/173, 7.9 task/s, elapsed: 22s, ETA: 0s2022-06-20 03:11:28,443 - mmdet - INFO - Evaluating bbox...
Loading and preparing results...
DONE (t=0.01s)
creating index...
index created!
Running per image evaluation...
Evaluate annotation type *bbox*
DONE (t=1.56s).
Accumulating evaluation results...
2022-06-20 03:11:30,381 - mmdet - INFO - Epoch(val) [9][327] bbox_mAP: 0.3230, bbox_mAP_50: 0.5630, bbox_mAP_75: 0.3410, bbox_mAP_s: 0.2510, bbox_mAP_m: 0.3380, bbox_mAP_l: 0.2390, bbox_mAP_copypaste: 0.323 0.563 0.341 0.251 0.338 0.239
DONE (t=0.30s).
Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.323
Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=1000 ] = 0.563
Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=1000 ] = 0.341
Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.251
Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.338
Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.239
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.442
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=300 ] = 0.442
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=1000 ] = 0.442
Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.365
Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.465
Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.375
[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] 173/173, 8.0 task/s, elapsed: 22s, ETA: 0s2022-06-20 03:14:49,643 - mmdet - INFO - Evaluating bbox...
Loading and preparing results...
DONE (t=0.02s)
creating index...
index created!
Running per image evaluation...
Evaluate annotation type *bbox*
DONE (t=1.56s).
Accumulating evaluation results...
2022-06-20 03:14:51,582 - mmdet - INFO - Epoch(val) [10][327] bbox_mAP: 0.3260, bbox_mAP_50: 0.5650, bbox_mAP_75: 0.3490, bbox_mAP_s: 0.2750, bbox_mAP_m: 0.3510, bbox_mAP_l: 0.2430, bbox_mAP_copypaste: 0.326 0.565 0.349 0.275 0.351 0.243
DONE (t=0.29s).
Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.326
Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=1000 ] = 0.565
Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=1000 ] = 0.349
Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.275
Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.351
Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.243
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.454
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=300 ] = 0.454
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=1000 ] = 0.454
Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.380
Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.470
Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.394
[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] 173/173, 8.0 task/s, elapsed: 22s, ETA: 0s2022-06-20 03:18:11,238 - mmdet - INFO - Evaluating bbox...
Loading and preparing results...
DONE (t=0.14s)
creating index...
index created!
Running per image evaluation...
Evaluate annotation type *bbox*
DONE (t=1.43s).
Accumulating evaluation results...
2022-06-20 03:18:13,126 - mmdet - INFO - Epoch(val) [11][327] bbox_mAP: 0.3320, bbox_mAP_50: 0.5600, bbox_mAP_75: 0.3570, bbox_mAP_s: 0.3060, bbox_mAP_m: 0.3600, bbox_mAP_l: 0.2460, bbox_mAP_copypaste: 0.332 0.560 0.357 0.306 0.360 0.246
DONE (t=0.27s).
Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.332
Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=1000 ] = 0.560
Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=1000 ] = 0.357
Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.306
Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.360
Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.246
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.457
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=300 ] = 0.457
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=1000 ] = 0.457
Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.370
Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.477
Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.393
</code></pre></div></div> <h3 id="bước-6-dự-đoán-trên-ảnh-mới">Bước 6: Dự đoán trên ảnh mới</h3> <p>Sau khi huấn luyện xong, ta thử dự đoán trên 01 ảnh mới. Giả sử nhóm sinh viên chọn ảnh <code class="language-plaintext highlighter-rouge">000000100.jpg</code> trong tập dữ liệu:</p> <pre><code class="language-[python3]"># Show thử 1 vài ảnh
img = mmcv.imread('/content/drive/MyDrive/BDL_UIT/UIT-VinaDeveS22/images/000000100.jpg')
model.cfg = cfg
result = inference_detector(model, img)
show_result_pyplot(model, img, result)
</code></pre> <p>Hình ảnh đầu ra:</p> <p><img src="https://i.imgur.com/jmucRnG.png" alt=""/></p> <p>Một số hình ảnh khác:</p> <p><img src="https://i.imgur.com/F9GZ2xY.jpg" alt=""/></p> <p><img src="https://i.imgur.com/lbUrtUY.png" alt=""/></p> <p><img src="https://i.imgur.com/M18xAF7.png" alt=""/></p> <p><img src="https://i.imgur.com/DnELxPD.png" alt=""/></p> <p><img src="https://i.imgur.com/0MXxOwt.jpg" alt=""/></p> <h2 id="tài-liệu-tham-khảo">Tài liệu tham khảo</h2> <p>[1]. Girshick, R., Donahue, J., Darrell, T., & Malik, J. (2014). Rich feature hierarchies for accurate object detection and semantic segmentation. In Proceedings of the IEEE conference on computer vision and pattern recognition (pp. 580-587).</p> <p>[2]. Girshick, R. (2015). Fast r-cnn. In Proceedings of the IEEE international conference on computer vision (pp. 1440-1448).</p> <p>[3]. Ren, S., He, K., Girshick, R., & Sun, J. (2015). Faster r-cnn: Towards real-time object detection with region proposal networks. Advances in neural information processing systems, 28.</p> <p>[4]. Chen, K., Wang, J., Pang, J., Cao, Y., Xiong, Y., Li, X., … & Lin, D. (2019). MMDetection: Open mmlab detection toolbox and benchmark. arXiv preprint arXiv:1906.07155.</p>]]></content><author><name></name></author><category term="sample-posts"/><category term="formatting"/><category term="links"/><summary type="html"><![CDATA[Faster R-CNN - Phương pháp phát hiện đối tượng 02 giai đoạn và lịch sử]]></summary></entry></feed>