主流人工智能开发框架
框架 | 编程语言 | 应用领域 | 特点与优势 |
---|---|---|---|
TensorFlow | Python, C++ | 深度学习、计算机视觉、NLP | 强大的社区支持、灵活性、高度优化的计算图、跨平台支持、适用于大规模生产环境。 |
PyTorch | Python | 深度学习、计算机视觉、NLP | 动态计算图、直观易用、强大的GPU加速支持、广泛的研究和社区支持。 |
Keras | Python | 深度学习、计算机视觉、NLP | 简洁的API、高度封装,适合快速开发和原型设计,现已整合进TensorFlow。 |
Apache MXNet | Python, C++ | 深度学习、大数据、分布式训练 | 高效的多语言支持,出色的分布式训练能力,支持GPU加速。 |
Caffe | C++, Python | 计算机视觉、图像处理 | 高效、快速,特别适用于图像分类和语义分割等计算机视觉任务,支持GPU计算。 |
Theano | Python | 数学运算、深度学习 | 高效的数学运算优化,支持GPU加速,适用于定制化深度学习算法。 |
CNTK | C++, Python | 深度学习、大规模训练、并行计算 | 强大的分布式训练能力,适用于大规模数据和神经网络训练,优化了计算性能。 |
DL4J | Java, Scala | 深度学习、分布式计算 | 支持大数据和分布式计算,与Hadoop、Spark兼容,适合Java开发者使用。 |
Scikit-learn | Python | 传统机器学习(分类、回归、聚类) | 易于使用,丰富的算法支持(如决策树、SVM、KNN等),与NumPy、SciPy等兼容性好。 |
Fastai | Python | 深度学习、计算机视觉、NLP | 基于PyTorch,简化深度学习的使用,快速原型开发,适合快速实验与部署。 |
Hugging Face Transformers | Python | 自然语言处理(NLP) | 提供预训练的Transformer模型,支持BERT、GPT等,简化NLP模型的使用和部署。 |
OpenCV | C++, Python | 计算机视觉、图像处理、视频分析 | 提供丰富的图像、视频处理功能,支持多平台,广泛应用于计算机视觉任务。 |
PyTorch VS TensorFlow
对比项 | PyTorch | TensorFlow |
---|---|---|
开发者 | Facebook AI Research (FAIR) | Google Brain |
发布时间 | 2016 年 | 2015 年 |
计算图 | 动态计算图(Eager Execution) | 静态计算图(TF 1.x)+ 动态计算图(TF 2.0) |
易用性 | 代码简洁,类似 Python 代码风格,学习曲线较低 | 早期 API 复杂,TF 2.0 后简化但仍相对复杂 |
调试 | 直接使用 Python 调试工具,如 pdb |
需要 TensorBoard 或 tf.print |
性能 | 适用于小规模模型,动态图调试方便,训练速度略慢 | 适用于大规模分布式训练,优化更成熟 |
部署 | 支持 TorchServe,适用于小型部署 | TensorFlow Serving / TensorFlow Lite,工业级部署更完善 |
移动端支持 | PyTorch Mobile,支持 iOS 和 Android | TensorFlow Lite,优化更成熟 |
社区支持 | 研究界更流行,论文实现多使用 PyTorch | 工业界更流行,企业级支持更丰富 |
分布式训练 | torch.distributed ,易用性较好 |
TensorFlow 提供更强大的分布式训练支持 |
生产环境 | 逐步完善,TorchScript 可优化推理 | 更成熟,适用于企业级生产环境 |
流行度 | 研究领域占优 | 企业应用更广泛 |
国产深度学习框架
框架名称 | 开发单位 | 编程语言 | 应用领域 | 特点与优势 |
---|---|---|---|---|
PaddlePaddle | 百度 | Python, C++ | 计算机视觉、NLP、推荐系统 | 产业级应用广泛,支持大规模分布式训练,自研芯片兼容性强 |
MindSpore | 华为 | Python, C++ | 计算机视觉、NLP、AI for Science | 适配昇腾芯片,支持端、边、云协同,自动并行优化 |
OneFlow | OneFlow.ai | Python, C++ | 计算机视觉、大规模分布式训练 | 高效计算图优化,支持 GPU/TPU 训练,分布式性能强 |
MegEngine | 旷视(Megvii) | Python, C++ | 计算机视觉、AI 工业应用 | 轻量级、高效计算优化,适用于边缘端部署 |
Tengine | OPEN AI LAB | C, C++ | 移动端、嵌入式 AI | 低功耗 AI 计算,适用于 IoT 和移动设备 |
MNN | 阿里巴巴 | C++, Python | 端侧 AI(移动端、IoT) | 轻量级,适配多种端侧设备,低功耗 |
TensorLayer | 清华大学 & 智源研究院 | Python | 学术研究、工业应用 | 高层封装 TensorFlow,易用性强 |
PyTorch 需要的知识储备
类别 | 具体知识点 |
---|---|
数学 | 线性代数、概率论、微积分 |
Python | Numpy、Matplotlib、Pandas |
PyTorch | Tensor、Autograd、优化器 |
深度学习 | 神经网络、CNN、RNN、Transformer |
数据处理 | 归一化、特征工程、数据增强 |
实战项目 | 图像分类、NLP、GAN、强化学习 |
PyTorch Android
public class MainActivity extends AppCompatActivity implements Runnable {
private Module mModule = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
try {
// 模型加载 默认CPU
mModule = LiteModuleLoader.load(MainActivity.assetFilePath(getApplicationContext(), "yolov5s.torchscript.ptl"));
BufferedReader br = new BufferedReader(new InputStreamReader(getAssets().open("classes.txt")));
String line;
List<String> classes = new ArrayList<>();
while ((line = br.readLine()) != null) {
classes.add(line);
}
PrePostProcessor.mClasses = new String[classes.size()];
classes.toArray(PrePostProcessor.mClasses);
} catch (IOException e) {
Log.e("Object Detection", "Error reading assets", e);
finish();
}
}
@Override
public void run() {
Bitmap resizedBitmap = Bitmap.createScaledBitmap(mBitmap, PrePostProcessor.mInputWidth, PrePostProcessor.mInputHeight, true);
final Tensor inputTensor = TensorImageUtils.bitmapToFloat32Tensor(resizedBitmap, PrePostProcessor.NO_MEAN_RGB, PrePostProcessor.NO_STD_RGB);
IValue[] outputTuple = mModule.forward(IValue.from(inputTensor)).toTuple();
final Tensor outputTensor = outputTuple[0].toTensor();
final float[] outputs = outputTensor.getDataAsFloatArray();
final ArrayList<Result> results = PrePostProcessor.outputsToNMSPredictions(outputs, mImgScaleX, mImgScaleY, mIvScaleX, mIvScaleY, mStartX, mStartY);
runOnUiThread(() -> {
mButtonDetect.setEnabled(true);
mButtonDetect.setText(getString(R.string.detect));
mProgressBar.setVisibility(ProgressBar.INVISIBLE);
mResultView.setResults(results);
mResultView.invalidate();
mResultView.setVisibility(View.VISIBLE);
});
}
}
PyTorch 安装
选择CPU
sudo apt install python3-pip
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu
RK3588 面单识别开发流程
步骤 | 说明 |
---|---|
1. 数据准备 | 收集并标注快递面单数据集,准备好训练用的图像和标签。 |
2. 模型设计 | 使用 PyTorch 设计并实现面单识别的深度学习模型。常见的做法是使用卷积神经网络(CNN)。 |
3. 模型训练 | 在 Ubuntu 上使用 PyTorch 进行训练。根据需要使用 GPU 加速。 |
4. 模型优化 | 对模型进行优化,如剪枝、量化等,使其适应在安卓设备上运行的要求。 |
5. 导出模型 | 使用 PyTorch 的 torchscript 或 ONNX 导出训练好的模型,以便能够在安卓设备上加载。 |
6. 安卓环境配置 | 配置安卓设备的开发环境,确保安卓设备上有支持 PyTorch 或其他深度学习库(如 TensorFlow Lite)的运行时。 |
7. 安卓端应用开发 | 在安卓设备上开发应用,使用相机捕捉面单图像,调用深度学习模型进行推理。可以使用 PyTorch Android API 或 TensorFlow Lite SDK。 |
8. 模型部署与测试 | 将导出的模型加载到安卓应用中,进行推理测试,确保模型准确识别快递面单。 |
9. 性能优化 | 在安卓设备上进行性能调优,减少推理延迟并优化内存使用。 |
10. 部署与发布 | 完成所有功能开发和测试后,将应用发布到安卓设备上,或者上传到 Google Play 等平台。 |