[YOLO Series] Cách train Yolo trên Google Colab

Chào các bạn, hôm nay chúng ta sẽ cùng tìm hiểu cách train YOLO trên Colab nhé. Tính đến thời điểm này chúng ta đã có 02 bài trong series về Yolo, đó là:

Sau bài số 2 thì một số bạn có máy tính khủng, có GPU đã train thành công các model để nhận dạng, phát hiện vật thể thành công với YOLO. Tuy nhiên, một số bạn học sinh, sinh viên không có máy tính HPC, chỉ có PC thường với 4-8Gb RAM, không có GPU (như mình nè 🙁 ) thì không thể train nổi model, có bạn train 10 ngày chưa xong.

Vì vậy, để giúp các bạn học sinh nghèo vượt khó, hôm nay mình sẽ hướng dẫn các bạn cách train Yolo trên Google Colab. Trong bài này, mình sẽ giới thiệu các kỹ thuật làm việc với Google Colab và Google Drive để các bạn có thể áp dụng train Yolo nói riêng và áp dụng cho tất cả các bài toán sau này của các bạn nói chung nhé! Nói thật là nghèo nên mới phải tìm tòi, chứ giàu thì làm cái HPC toàn GPU khủng, RAM 12Gb, chip Xeon cho nó lành.

Rồi, trình bày hoàn cảnh đã xong, bây giờ bắt đầu làm nào. Đầu tiên, các bạn nên đọc lại 02 bài post mình để link bên trên để hiểu Yolo là gì, cách train cơ bản ra sao để tiện theo dõi bài này.

Cấu trúc bài viết này sẽ gồm:

  • Phần 1. Chúng ta sẽ tìm hiểu sơ qua về Google Colab và cấu trúc thư mục, tài nguyên của Colab.
  • Phần 2. Kết nối Colab với Google Drive
  • Phần 3. Chỉnh sửa cấu hình Yolo/darknet cho phù hợp với Colab
  • Phần 4. Tạo thư mục chứa source và backup weights trên Drive
  • Phần 5. Train model trên Colab
  • Phần 6. Tải weights về và tận hưởng thành quả.

Phần 1. Tìm hiểu qua về Colab

Vì là blog Mì AI – Học AI theo cách mì ăn liền nên mình không đi chuyên sâu về giải thích Colab là gì (mình cũng không biết vì mình cũng ăn mì, haha). Tóm lại, do PC chúng ta yếu, ko có GPU nên chúng ta phải sử dụng Google Colab của Google cung cấp miễn phí để ta train model và chạy các model trên cloud.

Ưu điểm của Colab:

  • Cấu hình chip khủng, chạy nhanh vãi linh hồn
  • RAM nhiều: tận 12GB nhá, máy mình PC mình có 4GB
  • GPU khủng, cũng tận 12-16Gb VRAM nhé, hỗ trợ CUDA luôn.

Nhược điểm của Colab:

  • Đây là môi trường Google cung cấp để chúng ta thực hành (Lab = Laboratory) chứ không phải để chúng ta làm các bài toán lớn, thực tế nên Colab giới hạn sau 10 tiếng sẽ kill toàn bộ session, xóa toàn bộ dữ liệu. Nếu chúng ta train model lớn, tốn quá 10 tiếng thì toàn bộ công sức sẽ đi tong nhé. Nhưng yên tâm, mình sẽ chỉ các bạn cách khắc phục và train thoải mái, haha. (Google có đọc thì thông cảm nhé, sinh viên VN còn nghèo).

Các bạn truy cập Colab, tạo user, tạo tài khoản Gmail nếu chưa có nhé. Địa chỉ truy cập là https://colab.research.google.com. Tạo xong các bạn New Python3 Notebook là sẽ bắt đầu code được rồi.

Train YOLO trên Colab

Sau khi tạo xong Notebook, các bạn vào menu Runtime > Change runtime type và chọn Hardware là GPU nhé.

Phần 2. Kết nối Colab với Google Drive

Đến đây bạn đang thắc mắc là tại sao đang nói đến Colab lại nhắc đến Google Drive làm quái gì. Lý do là như mình nói ở trên, nếu chúng ta lưu dữ liệu trên Colab thì sau 10 tiếng, nó sẽ xóa trắng, mất toi công sức. Vì vậy chúng ta phải sử dụng Google Drive để lưu trữ dữ liệu gồm: mã nguồn, file cấu hình và file backup weights (đoạn này nếu chưa hiểu các bạn đọc lại bài #2 nhé).

Để kết nối với Google Drive, các bạn tạo 1 CODE BLOCK và gõ:

from google.colab import drive
drive.mount('/content/drive')Code language: JavaScript (javascript)

Sau đó nhấn nút mũi tên để chạy code, Colab sẽ hiện ra 1 link URL, các bạn bấm vào đó, chọn tài khoản Google Drive, copy mã code hiển thị trên màn hình và paste vào ô Enter your authorization code. Colab báo mounted là okie nhé.

Train YOLO trên Colab

Bây giờ các bạn đã có thể lưu dữ liệu của bạn vào thư mục /drive/My Drive/ thoải mái nhé. Nó sẽ tự đồng bộ sang Google Drive.

Phần 3. Chỉnh sửa cấu hình Yolo/darknet

Đến đây, tôi coi như bạn đã tải được Darknet về máy PC của bạn, đã chỉnh sửa cấu hình, đã tạo file train.txt, val.txt và tất cả các hạng mục cần thiết để có thể train Yolo trên PC nhé. Nếu các bạn chưa biết làm như nào, hãy đọc lại bài số 2 tại đây: [Yolo Series] #2 – Cách train Yolo để detect các object đặc thù

Bây giờ các bạn mở lại file Makefile trong thư mục /darknet (ở máy tính của các bạn nhé) sửa GPU=1 nhé (để tận dụng sức mạnh GPU của Colab).

Đã xong, bây giờ zip toàn bộ thư mục darknet trên PC lại, zip làm sao để khi mở file zip ra nhìn thấy có thư mục darknet. Tạm đặt tên là darknet.zip nhé.

Phần 4. Tạo thư mục chứa source và backup weights trên Drive

Bây giờ bạn truy cập vào Google Drive (dùng tài khoản Drive mà bạn đã kết nối ở bước 2 nhé). Ra thư mục gốc của Drive, thực hiện các bước sau:

  • Tạo thư mục ML, upload file darknet.zip vào thư mục ML đó.
  • Tạo thư mục backup nằm trong thư mục ML

Thế là xong, chờ upload xong thì sang phần 5 nhé.

Phần 5. Train model trên Colab

Mọi thứ đã sẵn sàng giờ chúng ta sẽ train model trên colab. Đoạn này hơi lằng nhằng tý, các bạn chú ý kỹ nhé.

Bước 1. Các bạn cần lấy mã nguồn đã upload trên Drive sang Colab, để chạy cho nhanh. Tạo một CODE BLOCK và gõ:

%cd /content
!unzip /content/drive/'My Drive'/ML/darknet.zip
%cd /content/darknetCode language: JavaScript (javascript)

Sau khi gõ xong, bấm nút mũi tên để chạy, Colab sẽ copy source sang rất nhanh, bạn đợi chút khi nào Colab dừng chạy là được. Các bạn cũng có thể vào phần Files để kiểm tra cho chắc.

Train YOLO trên Colab

Sau khi giải nén xong thì với các bạn sử dụng Window cần chạy thêm một số lệnh sau để tránh lỗi trong quá trình train (các bạn dùng MacOS , Linux cũng cứ chạy cho chắc cũng được). Các bạn tạo 1 code block mới và gõ vào:

%cd /content/darknet
!sudo apt install dos2unix
!dos2unix cfg/yolov3.cfg train.txt val.txt yolo.names yolo.data

Bước 2. Bây giờ chúng ta cần biên dịch mã nguồn darknet trên Colab. Tạo một CODE BLOCK và gõ mỗi lệnh:

# Edit make file
makefiletemp = open('Makefile','r+') 
list_of_lines = makefiletemp.readlines()
list_of_lines[6] = "ARCH= -gencode arch=compute_35,code=sm_35 \\\n"

makefiletemp = open('Makefile','w')
makefiletemp.writelines(list_of_lines)
makefiletemp.close()

%cd /content/darknet
!make clean
!make
!chmod +x ./darknetCode language: PHP (php)

Sau đó chạy CODE BLOCK đó để biên dịch và chuyển mode sang Execute cho darknet.

Bước 3. Bước này đặc biệt quan trọng, các bạn chú ý. Bình thường như hướng dẫn tại bài #2, thì weights tạo ra sẽ nằm trong thư mục backup, nhưng lần này thư mục Backup của chúng ta lại nằm trên Colab nên sẽ bị xóa, thế thì tèo. Nên chung ta sẽ tạo 1 CODE BLOCK và gõ đoạn này và chạy:

!rm /content/darknet/backup -r
!ln -s /content/drive/'My Drive'/ML/backup /content/darknetCode language: JavaScript (javascript)

Rồi, bây giờ thay vì chỉ lưu trên folder backup của Colab, nó sẽ lưu sang cái thư mục Backup trên Drive mà bạn tạo ở Phần 4 đấy. Colab xóa thoải mái con gà mái nhé.

Bước 4. Thôi train model nào. Phần này thì giống hệt như ở bài #2. Tạo 1 CODE BLOCK mới và gõ:

%cd /content/darknet
!./darknet detector train yolo.data cfg/yolov3.cfg darknet53.conv.74

Rồi ta lại đợi train thôi và theo dõi folder backup trên Drive, các file weights sẽ bay vào đó ầm ầm luôn.

Chú ý: Vì cách viết đường dẫn trong Windows và Linux khác nhau nên nếu bạn nào dùng máy Windows để đường dẫn trong file train là dấu \ thì đổi thành dấu / để không bị lỗi nhé.

Đến đây các bạn sẽ nhận thấy:

  • Tốc độ Train YOLO trên Colab cực nhanh, nhanh rất nhiều so với PC
  • RAM thoải mái, GPU thoải mái nên không còn hiện tượng bị crash do thiếu RAM
  • Sướng vãi của lúa 😀

Update:

  • Các bạn chú ý, sau 10 tiếng thì Colab sẽ kill, chúng ta sẽ phỉa làm lại như trên để train tiếp. Chú ý khi train tiếp, tại bước train phía trên, các bạn có thể thay darknet53.conv.74 bằng các file weights đã lưu ở bước trước để có thể train tiếp, thay vì train lại từ đầu nhé. Ví dụ
!./darknet detector train yolo.data cfg/yolov3.cfg backup/yolov3_2000.weights
  • Ngoài ra, 1 số bạn dùng Window thì khi Train YOLO trên Colab sẽ bị các lỗi như: Couldn’t open train.txt (dù đã có file train.txt rõ ràng), Couldn’t open 1 file ảnh nào đó trong file train (dù đã có file đó rõ ràng trong thư mục images) thì làm như sau:
    • Tải file dos2unix tại đây: https://sourceforge.net/projects/dos2unix/files/dos2unix/
    • Chạy lệnh dos2unix train.txt để convert về dạng tương thích với Colab.
    • Sau khi chạy xong, zip và up lên drive, sau đó xóa sạch thư mục /content/darknet và thực hiện lại Phần 5 nhé

Phần 6. Tải weights về và tận hướng

Phần này thì y hệt như bài số #2, chỉ khác là ở bài 2 các bạn có sẵn file weights trong thư mục backup ở máy tính PC thì giờ các bạn phải tải file weights từ Drive về và copy vào thư mục backup ở PC của bạn nhé.

Ngoài ra các bạn cũng có thể code luôn trên colab để dùng luôn weights trong Drive để detect mà ko cần tải về nhé. Các bạn tùy chọn!

Tổng kết

Rồi, như vậy mình đã hương dẫn các bạn train YOLO bằng Colab cho nhanh và tiện với các bạn chưa có điều kiện trang bị HPC. Còn bạn nào có HPC thì chả cần quan tâm vụ này làm gì cho mệt.

Mình xin nhắc lại, các kỹ thuật dùng trong bài Train YOLO trên Colab này như connect drive, zip file, unzip… các bạn có thể áp dụng với bất kì bài toán nào khác nhé. Chúc các bạn thành công!

Fanpage: http://facebook.com/miaiblog
Group trao đổi, chia sẻ: https://www.facebook.com/groups/miaigroup
Website: https://miai.vn
Youtube: http://bit.ly/miaiyoutube

Related Post

47 Replies to “[YOLO Series] Cách train Yolo trên Google Colab”

      1. Dạ anh ^^ a ra mấy bài hay quá, mong anh ra thêm để những người mới như bọn e học hỏi được nhiều hơn

  1. anh ơi em làm tương tự. nó chạy tới 2500 tấm ảnh rồi mà em vẫn không thấy file backup nó nằm ở đâu cả :((

  2. “First section must be [net] or [network]: No such file or directory”
    Mình làm theo guide này. Training với bộ súng đã gán nhãn bằng yolo thì nó dính cái lỗi này. Mắc dù đã dùng notepad++ để correct EOL và làm theo một số suggestion khác mà vẫn chưa được.

    1. em cũng mắc phải lỗi như vậy, kb anh khắc phục được chưa ạ @nhu khac

    1. Em cài phần mềm AutoClick trên máy tính. Nó định kỳ 5 phút nhấn chuột vào đúng nút clear ấy.

      #MiAI
      Fanpage: http://facebook.com/miaiblog
      Group trao đổi, chia sẻ: https://www.facebook.com/groups/miaigroup
      Website: https://miai.vn
      Youtube: http://bit.ly/miaiyoutube

  3. Bạn ơi cho mình hỏi chút, thư viện trả về bounding box, tên class cùng với confidence score của nó, nhưng mà bây giờ mình muốn lấy confidence score của tất cả class thì làm cách nào thế bạn ? VD: thư viện trả về: dog: 0.9, nhưng mà mình muốn nó trả về kiểu như {dog: 0.9, cat: 0.05, bird: 0.05}. Tks bạn

  4. em làm đến phần 5 bước 1 thì nó báo lỗi thế này, sửa thế nào vậy anh
    No such file or directory: ‘/content/darknet’

  5. anh ơi . cho em hỏi . làm sao để dùng dos2unix v anh . em bị lỗi Couldn’t open file: train.txt . mặc dù đã có file train txt . em dùng win 10

  6. Anh cho em hỏi.
    Sau 10 tiếng train, file mode đã được lưu trong drive.Nhưng mode nó vẫn chưa dc train hết, thì có cách nào để train tiếp theo được nữa không ạ.

  7. anh ơi cho em hỏi là em thực hiện train thì nó báo lỗi sau:
    First section must be [net] or [network]: No such file or directory
    darknet: ./src/utils.c:256: error: Assertion `0′ failed.
    File utils.c dòng 256 có lỗi gì vậy anh và sửa như nào anh giúp em với. Em cảm ơn.

  8. Em chào anh, em đã làm theo hướng dẫn của anh nhưng bị lỗi lúc train ( Can not load images …. ). anh có thể hướng dẫn giúp em phần dos2unix được không ạ ?

  9. Em chào anh, em đã làm theo hướng dẫn của anh nhưng bị lỗi lúc train ( Can not load images …. ). anh có thể hướng dẫn giúp em phần dos2unix được không ạ ? Em cảm ơn anh

  10. Em chào anh, cảm ơn hướng dẫn của anh ạ
    Anh cho em hỏi 2 tham số loss và avg loss mình có thể quan sát ở đâu ạ?

  11. vì sao colab luôn cần mở tab browser khi trainning nhĩ ? suy nghĩ hoài nếu bật train r tắt máy đi ngủ phải tiện hơn k, s gg k làm v nhĩ

  12. a ơi bên e chạy thấy nó lâu và ra lên đến 3 file weights không giống như bên a nên e phải ngắt đi ạ, cho e hỏi đây có phải lỗi không ạ

  13. Chào anh, anh cho em hỏi train bằng cách này thì làm như thế nào để hiện acc và loss ạ Và sau khi train có file weight thì đánh giá như thế nào ạ?

  14. Em train 2 lần: 1 lần đến được file weights (600) 1 lần đến được file weights (800) là bị ngắt kết nối. Các bác cho em hướng xử lý với ạ

  15. em đến bước 4:
    %cd /content/darknet
    !./darknet detector train yolo.data cfg/yolov3.cfg darknet53.conv.74
    thì chạy hết yolo giống anh,
    “Loading weights from darknet53.conv.74…Done!
    Learning Rate: 0.001, Momentum: 0.9, Decay: 0.0005
    Resizing”
    nó xuất hiện lỗi:
    Cannot load image “data/images\mon_lop (45).jpg”
    STB Reason: can’t fopen
    của tất cả các ảnh luốn anh ạ. anh giúp em trả lời câu hỏi với ạ

Leave a Reply

Your email address will not be published. Required fields are marked *