iT邦幫忙

3

如何在YOLO模型增加可以識別的類別

  • 分享至 

  • xImage

各位大神好,小弟目前正在實作如何增加影像辨識模型的識別類別,以YOLOv7為主要模型,
主要的目的是希望讓模型持續地,透過不同的資料集認識更多類別的物件,
但目前執行結果不如預期因此發文請教,以下是我執行的步驟。

1.下載YOLOv7官方github模型與權重(COCO資料集訓練)
2.下載KITTI資料集
3.修改YOLOv7訓練資料設定:
把KITTI資料集中的八個類別扣除重複的三類別,
把其餘的五個增加到 .yaml的names list後面並修改nc為85,
新增的類別是「Van」、「Person_sitting」、「Cyclist」、「Tram」和「Misc」,共五個。

4.修改KITTI標籤檔案:原始KITTI從0到7編號,現在增加到COCO資料集後,需要更改編號,
修改的規則如下(跟COCO重複的改為相同編號,不同的則往後新增)

KITTI Category Original ID New Category ID
Car 0 2
Van 1 81
Truck 2 7
Pedestrian 3 0
Person_sitting 4 82
Cyclist 5 83
Tram 6 84
Misc 7 85

預備好了資料,則開始訓練。

5.修改凍結層訓練參數:
parser.add_argument('--freeze', nargs='+', type=int, default=[0], help='Freeze layers: backbone of yolov7=50, first3=0 1 2')
在這裡嘗試凍結0、50、101層進行訓練(ex: default=[101])。

希望透過上述步驟,讓模型既可以保有辨識原來的80個類別,並且增加認得KITTI提供的新類別
例如COCO中包含了'traffic light'的類別,希望可以在訓練後保有認得交通燈號,又可以增加認識Van...等交通項目。

執行結果:
1.原始COCO資料集辨識結果
https://ithelp.ithome.com.tw/upload/images/20240102/20146607rUgTxBGYPZ.png

2.加入KITTI且設定凍結101層結果(凍結0與50層結果相似)
變得只能辨識KITTI的資料集出現過的類別,原始的'traffic light'與其他類別都辨識不出來。
https://ithelp.ithome.com.tw/upload/images/20240102/20146607UqUxobQvQK.png

有此發想是因為LLM模型似乎也是不斷的增加訓練資料,讓模型越來越強大,
因此想實作在影像資料集上,看能有否有一樣的效果。
非常建議大家的各種建議,謝謝大家。

安森尼 iT邦新手 5 級 ‧ 2024-01-03 22:36:14 檢舉
不知道大家有沒有類似的經驗,或是知道這個方法可不可行!
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

1
I code so I am
iT邦高手 1 級 ‧ 2024-01-03 23:47:32

YOLO 要使用自訂的資料集訓練專屬的模型,通常要重新訓練,如果要模仿transfer learning作法,凍結top n layers,也是要準備所有的資料,不能只準備額外的類別資料,目前沒有看過incremental training案例,如果額外的類別與既有的類別近似,也許可以使用few-shot training,以上只是個人淺見,也許其他專家有更好的解法。

安森尼 iT邦新手 5 級 ‧ 2024-01-04 13:41:16 檢舉

非常感謝您的回答,看過您許多的文章因此發出回答邀請,
這樣我知道了,雖然這次的實驗沒有成果,但也收集到一次寶貴的經驗。
也許未來我會繼續試試看Vision Transformer的模型,
看看是否能達到目標,再次感謝您。

加油,有進展記得一定要通知我。

安森尼 iT邦新手 5 級 ‧ 2024-01-06 00:26:38 檢舉

好的,我會持續嘗試

我要發表回答

立即登入回答