# machine_hand_detection **Repository Path**: chuhan_zhang/machine_hand_detection ## Basic Information - **Project Name**: machine_hand_detection - **Description**: 用于检测机械手的手势识别 - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 3 - **Created**: 2022-08-17 - **Last Updated**: 2022-08-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 机械手势识别 本项目一共提供了两套手势识别数据集,一套是基于网上的偏卡通的手势数据集,另外一套是自己采集的机械手手势数据。第一套数据集存放在`./Hand/hand1`文件夹下,第二套数据集存放在`./Hand/hand2`文件夹下。 ## 数据处理 数据处理包含数据集主要包含数据集划分和自定义数据加载`Dataset`类。 第一套数据集划分使用`./Hand/data/data_split.py`代码,第二套数据集划分采用`./Hand/data/data_split_hand2.py`代码。执行这个两个代码中的一个,将会在同级目录下生成`train.txt`和`test.txt`两个文本文件。 数据加载类分别写在`./Hand/model_hand_1/dataset.py`和`./Hand/model_hand_2/dataset.py`可以按照自己的需求来更改数据加载方式。 当前的图像训练都是将图像放缩到`100 x 100`的大小,可以自定义调整,调整方式比较简单。 ## 模型构建 目前两套数据集共用一个模型,也就是`./Hand/model_hand_1/model.py`和`./Hand/model_hand_2/model.py`是一样的。为了方便更高分辨率图像的训练和预测,在`./Hand/model_hand_2/model.py`中提供了**ResNet50**的模型,可以便于使用更加深层模型。如果将图像放缩到`224 x 224`大小的话,可以使用该程序下面的预训练模型权重进行训练,能更快加速模型的收敛速度。 预训练模型调用加载如下所示: ```python resModel = ResModel(classes=6) new_state = {} weight_state = torch.load('./pretrained/resnet50-19c8e357.pth') for key, value in weight_state.items(): if 'fc' not in key: new_state['model.' + key] = value else: new_state['model.' + key] = resModel.state_dict()['model.' + key] resModel.load_state_dict(new_state) ``` ## 模型训练 模型训练的话可以直接执行`./Hand/model_hand_1/train.py`或`./Hand/model_hand_2/train.py`文件,这两个训练文件分别是训练第一套数据集或第二套数据集,但一定要注意的是`./Hand/data/train.txt`和`./Hand/data/train.txt`是否和数据集对应上,如果没对应上则可能出现数据集无法正确加载错误。 两个`train.py`文件主要需要修改的超参数包含如下: ```python train_transform = transforms.Compose([ transforms.RandomRotation((-30, 30)), transforms.Resize((100, 100)), transforms.RandomHorizontalFlip(), transforms.CenterCrop((100, 100)), transforms.ToTensor() ]) test_transformer = transforms.Compose([ transforms.Resize((100, 100)), transforms.CenterCrop((100, 100)), transforms.ToTensor() ]) batch_size = 8 learning_rate = 1e-3 epochs = 100 ``` 数据增强的旋转方式、图像放缩的尺度变化、图像剪裁的尺度、`batch_size`超参数的调整、`learning_rate`超参数的调整、`epochs`超参数的调整。 ## 软件使用 在这个项目中,我们也制作了一个可视化的软件,便于项目成果的演示,主要包含这几个文件,具体如下下图1所示: 